import unittest
from unittest.mock import Mock, patch
from olc.collector.collector_manager import OlcCollectorManager
from olc.collector.collector import AbsCollector
from olc.collector.collector import Measurable
class MockMeasurable(Measurable):
@classmethod
def get_properties(cls) -> list:
return ["value", "count"]
class MockCollector(AbsCollector):
def __init__(self):
super().__init__(measurable_type=MockMeasurable)
def collect(self) -> list:
return []
def get_name(self) -> str:
return "test-collector"
def get_storage(self) -> list:
return []
class TestOlcCollectorManager(unittest.TestCase):
def setUp(self):
OlcCollectorManager._instance = None
self.manager = OlcCollectorManager.get_instance()
def test_get_instance(self):
instance1 = OlcCollectorManager.get_instance()
instance2 = OlcCollectorManager.get_instance()
self.assertIs(instance1, instance2)
def test_add_collector(self):
self.manager.add_collector("test", MockCollector)
self.assertIn("test", self.manager._collector_map)
def test_get_collector(self):
collector = self.manager.get_collector("non-existent")
self.assertIsNone(collector)
def test_init(self):
with patch('olc.collector.collector_manager.OlcConfigManager') as mock_config:
mock_instance = Mock()
mock_sdk_config = Mock()
mock_sdk_config.collector_active = "test-collector"
mock_instance.get_sdk_config.return_value = mock_sdk_config
mock_config.get_instance.return_value = mock_instance
self.manager.add_collector("test-collector", MockCollector)
self.manager.init()
collector = self.manager.get_collector("test-collector")
self.assertIsInstance(collector, MockCollector)
def test_valid(self):
with patch('olc.collector.collector_manager.OlcConfigManager') as mock_config:
mock_instance = Mock()
mock_sdk_config = Mock()
mock_sdk_config.collector_active = "test-collector"
mock_instance.get_sdk_config.return_value = mock_sdk_config
mock_config.get_instance.return_value = mock_instance
self.manager.add_collector("test-collector", MockCollector)
self.manager.init()
self.assertTrue(self.manager.valid("test-collector.value"))
self.assertFalse(self.manager.valid("invalid"))
self.assertFalse(self.manager.valid("non-existent.value"))
self.assertFalse(self.manager.valid("test-collector.invalid"))
self.assertFalse(self.manager.valid(""))
if __name__ == '__main__':
unittest.main()