""" 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()