137 lines
4.6 KiB
Python
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() |