from unittest.mock import MagicMock, patch from pytest import fixture from ingestor.managers.resource_manager import ResourceManager @fixture @patch('ingestor.managers.resource_manager.Redis') def resource_manager(redis): return ResourceManager( 'localhost', 6379, 10, 10, 'pod_id' ) def test_get_success(resource_manager): resource_manager.redis.get.return_value = '{"key": "value"}' result = resource_manager.get('key') assert result == {"key": "value"} resource_manager.redis.get.assert_called_once_with('key') def test_get_failure(resource_manager): resource_manager.redis.get.return_value = None result = resource_manager.get('key') assert result is None resource_manager.redis.get.assert_called_once_with('key') def test_get_tag_slot(resource_manager): resource_manager.get = MagicMock(return_value={"tag": "slot"}) result = resource_manager.get_tag_slot('id') assert result == {"tag": "slot"} resource_manager.get.assert_called_once_with('slot:opc_tags:id') def test_ingestor_heartbeat(resource_manager): resource_manager.redis.set.return_value = True resource_manager.ingestor_heartbeat() resource_manager.redis.set.assert_called_once_with( 'heartbeat:ingestor:pod_id', 1, ex=10 ) def test_lease_tag(resource_manager): resource_manager.redis.set.return_value = True output = resource_manager.lease_tag('tag_id') assert output is True resource_manager.redis.set.assert_called_once_with( 'lease:opc_tags:tag_id', 'pod_id', nx=True, ex=10 ) def test_renew_tag_lease_success(resource_manager): resource_manager.redis.get.return_value = 'pod_id' resource_manager.redis.expire.return_value = True result = resource_manager.renew_tag_lease('tag_id') assert result is True resource_manager.redis.get.assert_called_once_with( 'lease:opc_tags:tag_id' ) resource_manager.redis.expire.assert_called_once_with( 'lease:opc_tags:tag_id', 10 ) def test_renew_tag_lease_failure(resource_manager): resource_manager.redis.get.return_value = 'other_pod_id' resource_manager.redis.expire.return_value = False result = resource_manager.renew_tag_lease('tag_id') assert result is False resource_manager.redis.get.assert_called_once_with( 'lease:opc_tags:tag_id' ) resource_manager.redis.expire.assert_not_called() def test_drop_tag_lease(resource_manager): resource_manager.redis.delete.return_value = True resource_manager.drop_tag_lease('tag_id') resource_manager.redis.delete.assert_called_once_with( 'lease:opc_tags:tag_id' ) def test_get_all_ingestors(resource_manager): resource_manager.redis.keys.return_value = ['ingestor1', 'ingestor2'] result = resource_manager.get_all_ingestors() assert result == ['ingestor1', 'ingestor2'] resource_manager.redis.keys.assert_called_once_with( 'heartbeat:ingestor:*' ) def test_get_all_slots(resource_manager): resource_manager.redis.keys.return_value = ['slot1', 'slot2'] result = resource_manager.get_all_slots() assert result == ['slot1', 'slot2'] resource_manager.redis.keys.assert_called_once_with( 'slot:opc_tags:*' ) def test_get_all_leases(resource_manager): resource_manager.redis.keys.return_value = ['lease1', 'lease2'] result = resource_manager.get_all_leases() assert result == ['lease1', 'lease2'] resource_manager.redis.keys.assert_called_once_with( 'lease:opc_tags:*' )