Back to Repositories

Testing OpenAI API Key Pattern Validation in gpt_academic

This test suite validates OpenAI API key pattern matching functionality in the gpt_academic project, ensuring proper key format validation across different key types and patterns.

Test Coverage Overview

The test suite provides comprehensive coverage of OpenAI API key validation patterns:
  • Standard ‘sk-‘ prefixed keys
  • Session-based ‘sess-‘ keys
  • Project-specific ‘sk-proj-‘ keys
  • Various key length and format variations
  • Invalid key patterns and edge cases

Implementation Analysis

The testing approach uses unittest framework’s assertion methods to verify key pattern matching:
  • Systematic validation of different key formats
  • Multiple test cases for each key pattern type
  • Explicit true/false assertions for valid/invalid patterns
  • Path validation setup for proper test execution

Technical Details

Testing infrastructure includes:
  • Python unittest framework
  • Custom path validation utility
  • Systematic test organization in TestKeyPatternManager class
  • Integration with shared_utils module

Best Practices Demonstrated

The test suite exemplifies several testing best practices:
  • Comprehensive edge case coverage
  • Clear test method naming conventions
  • Isolated test cases for different scenarios
  • Proper test setup and environment management
  • Structured test organization within a dedicated test class

binary-husky/gpt_academic

tests/test_key_pattern_manager.py

            
import unittest

def validate_path():
    import os, sys

    os.path.dirname(__file__)
    root_dir_assume = os.path.abspath(os.path.dirname(__file__) + "/..")
    os.chdir(root_dir_assume)
    sys.path.append(root_dir_assume)


validate_path()  # validate path so you can run from base directory

from shared_utils.key_pattern_manager import is_openai_api_key

class TestKeyPatternManager(unittest.TestCase):
    def test_is_openai_api_key_with_valid_key(self):
        key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        self.assertTrue(is_openai_api_key(key))

        key = "sx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        self.assertFalse(is_openai_api_key(key))

        key = "sess-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        self.assertTrue(is_openai_api_key(key))

        key = "sess-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
        self.assertFalse(is_openai_api_key(key))

        key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxxxxxxx"
        self.assertTrue(is_openai_api_key(key))
        key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxxxx_xxxxxxxxxxxx_xxxxx-xxxxxxxxxxxxxxxxxxxx"
        self.assertTrue(is_openai_api_key(key))
        key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxx-xxxxxxxxxxxxxxx_xxxxxxxxxxxx_xxxxx-xxxxxx-xxxxxxxxxxxxx"
        self.assertTrue(is_openai_api_key(key))
        key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxx-xxxxxxxxxxxxxxx_xxxxxxxxxxxx_xxxxx-xxxxxxxxxxxxxxxxxx"
        self.assertFalse(is_openai_api_key(key))
        key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-xxx-xxxxxxxxxxxxxxx_xxxxxxxxxxxx_xxxxx-xxxxxxxxxxxxxxxxxxxxx"
        self.assertFalse(is_openai_api_key(key))

        key = "sk-proj-xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx-xxxxxxxx"
        self.assertTrue(is_openai_api_key(key))
        key = "sk-proj-xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx-xxxxxxxx"
        self.assertTrue(is_openai_api_key(key))
        key = "sk-proj-xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxx_xxxxxxxxxxxxxxxxxx-xxxxxxxx"
        self.assertFalse(is_openai_api_key(key))
        key = "sk-proj-xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxx_xxxxxxxxxxxxxxxxxx-xxxxxxxxxxxxx"
        self.assertFalse(is_openai_api_key(key))
        key = "sk-proj-xx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxx_xxxxxxxxxxxxxxxxxx-xxx啊xxxxxxx"
        self.assertFalse(is_openai_api_key(key))


    def test_is_openai_api_key_with_invalid_key(self):
        key = "invalid_key"
        self.assertFalse(is_openai_api_key(key))

    def test_is_openai_api_key_with_custom_pattern(self):
        # Assuming you have set a custom pattern in your configuration
        key = "custom-pattern-key"
        self.assertFalse(is_openai_api_key(key))

if __name__ == '__main__':
    unittest.main()