import _bootstrap # noqa: F401 import unittest from datetime import datetime, timezone from unittest.mock import patch from fault_log_analyzer.integrations import ( ElasticsearchSink, KafkaMessageBus, MySQLFaultLogRepository, MySQLFaultTypeRepository, MySQLFilterRuleRepository, MySQLResultEventRepository, MySQLRootCauseRepository, RedisDedupCache, ) class TestElasticsearchSinkIndexName(unittest.TestCase): def test_index_name_monthly_rollover(self): sink = object.__new__(ElasticsearchSink) sink._index_pattern = "hms-fault-log-{yyyy.MM}" self.assertEqual( sink._index_name(datetime(2025, 1, 15, tzinfo=timezone.utc)), "hms-fault-log-2025.01", ) self.assertEqual( sink._index_name(datetime(2025, 12, 1, tzinfo=timezone.utc)), "hms-fault-log-2025.12", ) def test_index_name_custom_pattern(self): sink = object.__new__(ElasticsearchSink) sink._index_pattern = "my-index-{yyyy.MM}" self.assertEqual( sink._index_name(datetime(2025, 6, 30, tzinfo=timezone.utc)), "my-index-2025.06", ) class TestLazyImportBackends(unittest.TestCase): def _assert_missing_dependency_raises_runtime_error(self, factory): with patch("builtins.__import__", side_effect=ImportError("no optional dependency")): with self.assertRaises(RuntimeError): factory() def test_kafka_message_bus(self): self._assert_missing_dependency_raises_runtime_error( lambda: KafkaMessageBus("localhost:9092", "fault-log-analyzer") ) def test_elasticsearch_sink(self): self._assert_missing_dependency_raises_runtime_error( lambda: ElasticsearchSink(["http://localhost:9200"]) ) def test_mysql_fault_log_repository(self): self._assert_missing_dependency_raises_runtime_error( lambda: MySQLFaultLogRepository("h", 3306, "u", "p", "hms") ) def test_mysql_root_cause_repository(self): self._assert_missing_dependency_raises_runtime_error( lambda: MySQLRootCauseRepository("h", 3306, "u", "p", "hms") ) def test_mysql_fault_type_repository(self): self._assert_missing_dependency_raises_runtime_error( lambda: MySQLFaultTypeRepository("h", 3306, "u", "p", "hms") ) def test_mysql_filter_rule_repository(self): self._assert_missing_dependency_raises_runtime_error( lambda: MySQLFilterRuleRepository("h", 3306, "u", "p", "hms") ) def test_mysql_result_event_repository(self): self._assert_missing_dependency_raises_runtime_error( lambda: MySQLResultEventRepository("h", 3306, "u", "p", "hms") ) def test_redis_dedup_cache(self): self._assert_missing_dependency_raises_runtime_error( lambda: RedisDedupCache("redis://localhost:6379/0") ) if __name__ == "__main__": unittest.main()