VPN/tests/test_config.py
2025-09-27 23:06:32 +07:00

137 lines
4.6 KiB
Python

"""
Unit tests for configuration management.
"""
import unittest
import os
import sys
from unittest.mock import patch
# Add the access module to the Python path
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'access'))
class TestConfiguration(unittest.TestCase):
"""Test configuration management."""
def setUp(self):
"""Set up test environment."""
# Clear any existing environment variables
self.env_backup = {}
config_vars = [
'DB_HOST', 'DB_PORT', 'DB_NAME', 'DB_USER', 'DB_PASSWORD',
'LOG_LEVEL', 'DEFAULT_SESSION_LIMIT', 'MAX_SESSION_LIMIT'
]
for var in config_vars:
if var in os.environ:
self.env_backup[var] = os.environ[var]
del os.environ[var]
def tearDown(self):
"""Clean up test environment."""
# Restore backed up environment variables
for var, value in self.env_backup.items():
os.environ[var] = value
@patch.dict(os.environ, {}, clear=True)
def test_default_configuration(self):
"""Test default configuration values."""
# Import here to ensure fresh config with clean environment
from config import Config
config = Config()
# Test database defaults
self.assertEqual(config.database.host, 'localhost')
self.assertEqual(config.database.port, 3306)
self.assertEqual(config.database.database, 'vpn_access')
self.assertEqual(config.database.username, 'vpn_user')
self.assertEqual(config.database.password, '')
# Test server defaults
self.assertEqual(config.server.log_level, 'INFO')
self.assertEqual(config.server.default_session_limit, 28800)
self.assertEqual(config.server.max_session_limit, 86400)
@patch.dict(os.environ, {
'DB_HOST': 'testhost',
'DB_PORT': '3307',
'DB_NAME': 'test_db',
'DB_USER': 'test_user',
'DB_PASSWORD': 'test_pass',
'LOG_LEVEL': 'DEBUG',
'DEFAULT_SESSION_LIMIT': '14400',
'MAX_SESSION_LIMIT': '43200'
})
def test_environment_configuration(self):
"""Test configuration from environment variables."""
# Import here to ensure fresh config with test environment
from config import Config
config = Config()
# Test database configuration from environment
self.assertEqual(config.database.host, 'testhost')
self.assertEqual(config.database.port, 3307)
self.assertEqual(config.database.database, 'test_db')
self.assertEqual(config.database.username, 'test_user')
self.assertEqual(config.database.password, 'test_pass')
# Test server configuration from environment
self.assertEqual(config.server.log_level, 'DEBUG')
self.assertEqual(config.server.default_session_limit, 14400)
self.assertEqual(config.server.max_session_limit, 43200)
@patch.dict(os.environ, {'DB_PASSWORD': 'valid_password'})
def test_valid_configuration(self):
"""Test configuration validation with valid values."""
from config import Config
config = Config()
self.assertTrue(config.validate())
@patch.dict(os.environ, {}, clear=True)
def test_invalid_configuration_missing_password(self):
"""Test configuration validation with missing password."""
from config import Config
config = Config()
self.assertFalse(config.validate())
@patch.dict(os.environ, {
'DB_PASSWORD': 'valid_password',
'DB_PORT': '99999' # Invalid port
})
def test_invalid_configuration_bad_port(self):
"""Test configuration validation with invalid port."""
from config import Config
config = Config()
self.assertFalse(config.validate())
@patch.dict(os.environ, {
'DB_PASSWORD': 'valid_password',
'LOG_LEVEL': 'INVALID_LEVEL'
})
def test_invalid_configuration_bad_log_level(self):
"""Test configuration validation with invalid log level."""
from config import Config
config = Config()
self.assertFalse(config.validate())
@patch.dict(os.environ, {
'DB_PASSWORD': 'valid_password',
'DEFAULT_SESSION_LIMIT': '86400',
'MAX_SESSION_LIMIT': '28800' # Default > Max (invalid)
})
def test_invalid_configuration_session_limits(self):
"""Test configuration validation with invalid session limits."""
from config import Config
config = Config()
self.assertFalse(config.validate())
if __name__ == '__main__':
unittest.main()