import os import unittest from unittest.mock import patch from app.config import Config class ConfigTests(unittest.TestCase): def test_rule_update_interval_defaults_to_24_hours(self): with patch.dict(os.environ, {}, clear=True): self.assertEqual(Config.from_env().rule_update_interval_hours, 24) def test_rule_update_interval_can_be_changed_or_disabled(self): with patch.dict(os.environ, {"RULE_UPDATE_INTERVAL_HOURS": "6"}, clear=True): self.assertEqual(Config.from_env().rule_update_interval_hours, 6) with patch.dict(os.environ, {"RULE_UPDATE_INTERVAL_HOURS": "0"}, clear=True): self.assertEqual(Config.from_env().rule_update_interval_hours, 0) with patch.dict(os.environ, {"RULE_UPDATE_INTERVAL_HOURS": "-5"}, clear=True): self.assertEqual(Config.from_env().rule_update_interval_hours, 0) def test_metrics_acl_defaults_to_loopback_ip_only(self): with patch.dict(os.environ, {}, clear=True): cfg = Config.from_env() self.assertEqual(cfg.metrics_allowed_ips, "127.0.0.1/32,::1/128") self.assertEqual(cfg.metrics_basic_auth_username, "") self.assertEqual(cfg.metrics_basic_auth_password, "") def test_metrics_acl_reads_ip_and_basic_auth_from_env(self): env = { "METRICS_ALLOWED_IPS": "10.0.0.5/32,10.0.1.0/24", "METRICS_BASIC_AUTH_USERNAME": "prometheus", "METRICS_BASIC_AUTH_PASSWORD": "secret", } with patch.dict(os.environ, env, clear=True): cfg = Config.from_env() self.assertEqual(cfg.metrics_allowed_ips, env["METRICS_ALLOWED_IPS"]) self.assertEqual(cfg.metrics_basic_auth_username, "prometheus") self.assertEqual(cfg.metrics_basic_auth_password, "secret") def test_redis_buffer_defaults_are_bounded_and_archive_is_fast(self): with patch.dict(os.environ, {}, clear=True): cfg = Config.from_env() self.assertEqual(cfg.redis_maxmemory_mb, 128) self.assertEqual(cfg.redis_snapshot_seconds, 0) self.assertFalse(cfg.redis_aof) self.assertEqual(cfg.traffic_archive_interval_seconds, 5) self.assertEqual(cfg.traffic_archive_lag_seconds, 10) self.assertEqual(cfg.traffic_archive_batch_size, 1000) if __name__ == "__main__": unittest.main()