from os import environ from unittest.mock import patch from model_manager.utils.connectors_config import ( build_minio_config, build_mlflow_config, build_mongodb_config, build_plugin_store_config, build_postgres_config, ) def test_build_mlflow_config_with_env_vars(): # Arrange environ['MLFLOW_URL'] = 'http://test-host:8080' environ['MLFLOW_USERNAME'] = 'test-user' environ['MLFLOW_PASSWORD'] = 'test-pass' # Act config = build_mlflow_config() # Assert assert config['url'] == 'http://test-host:8080' assert config['username'] == 'test-user' assert config['password'] == 'test-pass' def test_build_mlflow_config_with_defaults(): # Arrange # Clear any existing env vars environ.pop('MLFLOW_URL', None) environ.pop('MLFLOW_USERNAME', None) environ.pop('MLFLOW_PASSWORD', None) # Act config = build_mlflow_config() # Assert assert config['url'] == 'http://localhost:5080' assert config['username'] == 'aignosi' assert config['password'] == 'aignosi' def test_build_postgres_config_with_env_vars(): # Arrange environ['POSTGRES_HOST'] = 'test-host' environ['POSTGRES_PORT'] = '5433' environ['POSTGRES_USER'] = 'test-user' environ['POSTGRES_PASSWORD'] = 'test-pass' environ['POSTGRES_DBNAME'] = 'test-db' environ['POSTGRES_MIN_CONNECTIONS'] = '10' environ['POSTGRES_MAX_CONNECTIONS'] = '30' # Act config = build_postgres_config() # Assert assert config['host'] == 'test-host' assert config['port'] == 5433 assert config['user'] == 'test-user' assert config['password'] == 'test-pass' assert config['dbname'] == 'test-db' assert config['min_connections'] == 10 assert config['max_connections'] == 30 def test_build_postgres_config_with_defaults(): # Arrange environ.pop('POSTGRES_HOST', None) environ.pop('POSTGRES_PORT', None) environ.pop('POSTGRES_USER', None) environ.pop('POSTGRES_PASSWORD', None) environ.pop('POSTGRES_DBNAME', None) environ.pop('POSTGRES_MIN_CONNECTIONS', None) environ.pop('POSTGRES_MAX_CONNECTIONS', None) # Act config = build_postgres_config() # Assert assert config['host'] == 'localhost' assert config['port'] == 5432 assert config['user'] == 'sientia' assert config['password'] == 'sientia' assert config['dbname'] == 'sientia' assert config['min_connections'] == 5 assert config['max_connections'] == 20 def test_build_mongo_db_config_with_env_vars(): environ['MONGODB_USERNAME'] = 'sientia1' environ['MONGODB_PASSWORD'] = 'sientia1' environ['MONGODB_URL'] = 'localhost:27018' environ['MONGODB_DATABASE_NAME'] = 'test_db' environ['MONGODB_TTL_INDEX_HOURS'] = '1' assert build_mongodb_config() == { 'connection_string': 'mongodb://sientia1:sientia1@localhost:27018', 'database_name': 'test_db', 'ttl_index_seconds': 3600, 'uri': 'localhost:27018', } def test_build_mongo_db_config_with_defaults(): environ.pop('MONGODB_USERNAME', None) environ.pop('MONGODB_PASSWORD', None) environ.pop('MONGODB_DATABASE_NAME', None) environ.pop('MONGODB_URL', None) environ.pop('MONGODB_TTL_INDEX_HOURS', None) assert build_mongodb_config() == { 'connection_string': 'mongodb://root:wKZDbMNU1c@localhost:27018', 'database_name': 'sientia', 'ttl_index_seconds': 3600, 'uri': 'localhost:27018', } def test_build_minio_config_with_env_vars(): # Arrange environ['MINIO_ENDPOINT_URL'] = 'http://test-minio:9000' environ['MINIO_ACCESS_KEY'] = 'test-access-key' environ['MINIO_SECRET_KEY'] = 'test-secret-key' environ['MINIO_REGION'] = 'eu-west-1' environ['MINIO_USE_SSL'] = 'true' environ['MINIO_MAX_RETRY_ATTEMPTS'] = '5' environ['MINIO_RETRY_MODE'] = 'standard' environ['MINIO_CONNECT_TIMEOUT'] = '20' environ['MINIO_READ_TIMEOUT'] = '120' environ['MINIO_DEFAULT_BUCKET'] = 'my-bucket' # Act config = build_minio_config() # Assert assert config['endpoint_url'] == 'http://test-minio:9000' assert config['access_key'] == 'test-access-key' assert config['secret_key'] == 'test-secret-key' assert config['region'] == 'eu-west-1' assert config['use_ssl'] is True assert config['max_retry_attempts'] == 5 assert config['retry_mode'] == 'standard' assert config['connect_timeout'] == 20 assert config['read_timeout'] == 120 assert config['default_bucket'] == 'my-bucket' def test_build_plugin_store_config_cache_ttl_seconds(): """STORE_CACHE_TTL_SECONDS is parsed to int when set.""" with patch.dict(environ, {'STORE_CACHE_TTL_SECONDS': '7200'}, clear=False): cfg = build_plugin_store_config() assert cfg['cache_ttl_seconds'] == 7200 def test_build_minio_config_with_defaults(): # Arrange # Clear any existing env vars environ.pop('MINIO_ENDPOINT_URL', None) environ.pop('MINIO_ACCESS_KEY', None) environ.pop('MINIO_SECRET_KEY', None) environ.pop('MINIO_REGION', None) environ.pop('MINIO_USE_SSL', None) environ.pop('MINIO_MAX_RETRY_ATTEMPTS', None) environ.pop('MINIO_RETRY_MODE', None) environ.pop('MINIO_CONNECT_TIMEOUT', None) environ.pop('MINIO_READ_TIMEOUT', None) environ.pop('MINIO_DEFAULT_BUCKET', None) # Act config = build_minio_config() # Assert assert config['endpoint_url'] == 'http://localhost:9000' assert config['access_key'] == 'minioadmin' assert config['secret_key'] == 'minioadmin' assert config['region'] == 'us-east-1' assert config['use_ssl'] is False assert config['max_retry_attempts'] == 3 assert config['retry_mode'] == 'adaptive' assert config['connect_timeout'] == 10 assert config['read_timeout'] == 60 assert config['default_bucket'] == 'streamlit-connectors'