SIENTIAPDE-988
Refactor OpcManager initialization and unsubscribe method; enhance logging - Removed the `initialize_from_config` method from `OpcManager` class and adjusted the constructor to handle configuration directly. - Improved the `unsubscribe` method to include detailed logging for non-existent subscriptions. - Updated tests in `test_opc_manager.py` to reflect changes in the `OpcManager` class. - Commented out Docker-related fixtures in `conftest.py` for potential future use. - Enhanced test coverage in `test_single_node.py` and `test_data_manager.py` with additional scenarios and assertions. - Introduced new methods in `Ingestor` and `IngestorManager` classes to manage server subscriptions and leases more effectively. - Added new tests for `Ingestor` class to validate initialization and slot management logic. - Implemented logging improvements across various classes to ensure better traceability of actions and errors.
This commit is contained in:
@@ -15,7 +15,6 @@ def ingestor_manager(data_manager_mock, resource_manager_mock):
|
||||
lease_ttl=60,
|
||||
heartbeat_ttl=60,
|
||||
pod_id="test_pod",
|
||||
number_of_ingestors=3,
|
||||
poll_interval=5,
|
||||
logger=MagicMock()
|
||||
)
|
||||
@@ -33,7 +32,6 @@ def test___init__(resource_manager_mock, data_manager_mock, opc_manager_mock):
|
||||
lease_ttl=60,
|
||||
heartbeat_ttl=60,
|
||||
pod_id="test_pod",
|
||||
number_of_ingestors=3,
|
||||
poll_interval=5,
|
||||
logger=MagicMock()
|
||||
)
|
||||
@@ -44,7 +42,6 @@ def test___init__(resource_manager_mock, data_manager_mock, opc_manager_mock):
|
||||
resource_manager_mock.assert_called_once_with(
|
||||
"localhost", 6379, 60, 60, "test_pod")
|
||||
|
||||
assert ingestor.number_of_ingestors == 3
|
||||
assert ingestor.poll_interval == 5
|
||||
assert ingestor.managed_tags == {}
|
||||
assert ingestor.opc_servers == {}
|
||||
@@ -186,12 +183,29 @@ def test_get_active_ingestors_empty(ingestor_manager):
|
||||
ingestor_manager.resource_manager.get_all_ingestors.assert_called_once()
|
||||
|
||||
|
||||
def test_get_number_of_slots_success(ingestor_manager):
|
||||
ingestor_manager.resource_manager.get_all_slots = MagicMock(
|
||||
return_value=["slot1", "slot2"])
|
||||
result = ingestor_manager.get_number_of_slots()
|
||||
assert result == 2
|
||||
ingestor_manager.resource_manager.get_all_slots.assert_called_once()
|
||||
|
||||
|
||||
def test_get_number_of_slots_empty(ingestor_manager):
|
||||
ingestor_manager.resource_manager.get_all_slots = MagicMock(
|
||||
return_value=None)
|
||||
result = ingestor_manager.get_number_of_slots()
|
||||
assert result == 0
|
||||
ingestor_manager.resource_manager.get_all_slots.assert_called_once()
|
||||
|
||||
|
||||
def test_get_slot_leases_1_success(ingestor_manager):
|
||||
ingestor_manager.resource_manager.lease_tag = MagicMock(
|
||||
return_value=True)
|
||||
ingestor_manager.resource_manager.get_tag_slot = MagicMock(
|
||||
return_value={"tags": ["tag1"]})
|
||||
|
||||
ingestor_manager.number_of_slots = 1
|
||||
result = ingestor_manager.get_slot_leases()
|
||||
|
||||
assert result == {
|
||||
@@ -205,6 +219,7 @@ def test_get_slot_leases_2_success(ingestor_manager):
|
||||
ingestor_manager.resource_manager.get_tag_slot = MagicMock(
|
||||
side_effect=[{"tags": ["tag1"]}, {"tags": ["tag2"]}])
|
||||
|
||||
ingestor_manager.number_of_slots = 2
|
||||
result = ingestor_manager.get_slot_leases(max_slots=2)
|
||||
|
||||
assert result == {
|
||||
@@ -213,6 +228,18 @@ def test_get_slot_leases_2_success(ingestor_manager):
|
||||
}
|
||||
|
||||
|
||||
def test_get_slot_leases_2_1_none(ingestor_manager):
|
||||
ingestor_manager.resource_manager.lease_tag = MagicMock(
|
||||
side_effect=[True, True])
|
||||
ingestor_manager.resource_manager.get_tag_slot = MagicMock(
|
||||
side_effect=[None, {"tags": ["tag1"]}])
|
||||
|
||||
ingestor_manager.number_of_slots = 1
|
||||
result = ingestor_manager.get_slot_leases(max_slots=1)
|
||||
|
||||
assert result == {}
|
||||
|
||||
|
||||
def test_get_slot_leases_1_failure(ingestor_manager):
|
||||
ingestor_manager.resource_manager.lease_tag = MagicMock(
|
||||
return_value=False)
|
||||
@@ -277,9 +304,9 @@ def test_update_slot_config(ingestor_manager):
|
||||
"config": "new_config"}
|
||||
assert "slot3" not in ingestor_manager.managed_tags
|
||||
|
||||
ingestor_manager.update_opc_servers.assert_called_once()
|
||||
assert ingestor_manager.update_opc_servers.call_count == 2
|
||||
ingestor_manager.subscribe_to_tags.assert_called_once_with(
|
||||
{"config": "updated_config"}
|
||||
{'slot1': {"config": "updated_config"}}
|
||||
)
|
||||
ingestor_manager.unsubscribe_slot.assert_any_call("slot3")
|
||||
ingestor_manager.unsubscribe_slot.assert_any_call("slot1")
|
||||
@@ -299,7 +326,111 @@ def test_drop_slot_leases(ingestor_manager):
|
||||
ingestor_manager.resource_manager.drop_tag_lease.assert_any_call("2")
|
||||
|
||||
|
||||
def test_manage_server_no_server(ingestor_manager):
|
||||
ingestor_manager.opc_managers = {
|
||||
"server1": MagicMock(),
|
||||
"server2": MagicMock()
|
||||
}
|
||||
server_config = {
|
||||
'tags': 'config1'
|
||||
}
|
||||
|
||||
result = ingestor_manager.manage_server(
|
||||
'slot1', 'server3', server_config, server_config)
|
||||
|
||||
assert result == 1
|
||||
ingestor_manager.opc_managers["server1"].create_subscription.assert_not_called(
|
||||
)
|
||||
ingestor_manager.opc_managers["server1"].subscribe.assert_not_called()
|
||||
|
||||
|
||||
def test_manage_server_create_subscription_failure(ingestor_manager):
|
||||
ingestor_manager.opc_managers = {
|
||||
"server1": MagicMock(),
|
||||
"server2": MagicMock()
|
||||
}
|
||||
ingestor_manager.subscriptions = {
|
||||
"server1": MagicMock()
|
||||
}
|
||||
server_config = {
|
||||
'tags': 'config1'
|
||||
}
|
||||
|
||||
ingestor_manager.opc_managers["server1"].create_subscription.side_effect = Exception(
|
||||
"Subscription error")
|
||||
|
||||
result = ingestor_manager.manage_server(
|
||||
'slot1', 'server1', server_config, server_config)
|
||||
|
||||
assert result == 2
|
||||
ingestor_manager.opc_managers["server1"].create_subscription.assert_called_once_with(
|
||||
'slot1')
|
||||
ingestor_manager.opc_managers["server1"].subscribe.assert_not_called()
|
||||
|
||||
|
||||
def test_manage_server(ingestor_manager):
|
||||
ingestor_manager.opc_managers = {
|
||||
"server1": MagicMock(),
|
||||
"server2": MagicMock()
|
||||
}
|
||||
ingestor_manager.subscriptions = {
|
||||
"server1": MagicMock()
|
||||
}
|
||||
server_config = {
|
||||
'tags': 'config1'
|
||||
}
|
||||
|
||||
result = ingestor_manager.manage_server(
|
||||
'slot1', 'server1', server_config, server_config)
|
||||
|
||||
assert result == 0
|
||||
ingestor_manager.opc_managers["server1"].create_subscription.assert_called_once_with(
|
||||
'slot1')
|
||||
ingestor_manager.opc_managers["server1"].subscribe.assert_called_once_with(
|
||||
'slot1', 'config1', ingestor_manager.poll_interval)
|
||||
|
||||
|
||||
def test_manage_server_subscribe_failure(ingestor_manager):
|
||||
ingestor_manager.opc_managers = {
|
||||
"server1": MagicMock(),
|
||||
"server2": MagicMock()
|
||||
}
|
||||
ingestor_manager.subscriptions = {
|
||||
"server1": MagicMock()
|
||||
}
|
||||
server_config = {
|
||||
'tags': 'config1'
|
||||
}
|
||||
|
||||
ingestor_manager.opc_managers["server1"].subscribe.side_effect = Exception(
|
||||
"Subscription error")
|
||||
|
||||
result = ingestor_manager.manage_server(
|
||||
'slot1', 'server1', server_config, server_config)
|
||||
|
||||
assert result == 2
|
||||
ingestor_manager.opc_managers["server1"].create_subscription.assert_called_once_with(
|
||||
'slot1')
|
||||
ingestor_manager.opc_managers["server1"].subscribe.assert_called_once_with(
|
||||
'slot1', 'config1', ingestor_manager.poll_interval)
|
||||
ingestor_manager.opc_managers["server1"].unsubscribe.assert_called_once_with(
|
||||
'slot1')
|
||||
ingestor_manager.logger.error.assert_any_call(
|
||||
"Failed to subscribe to tags from slot1:server1\n{'tags': 'config1'}: Subscription error"
|
||||
)
|
||||
ingestor_manager.logger.warning.assert_any_call(
|
||||
"Removing subscription from server server1 for slot slot1"
|
||||
)
|
||||
|
||||
|
||||
def test_subscribe_to_tags(ingestor_manager):
|
||||
ingestor_manager.manage_server = MagicMock(
|
||||
side_effect=[0, 1, 2])
|
||||
ingestor_manager.managed_tags = {
|
||||
"slot1": MagicMock(),
|
||||
"slot2": MagicMock()
|
||||
}
|
||||
|
||||
ingestor_manager.opc_managers = {
|
||||
"server1": MagicMock(),
|
||||
"server2": MagicMock()
|
||||
@@ -317,11 +448,14 @@ def test_subscribe_to_tags(ingestor_manager):
|
||||
|
||||
ingestor_manager.subscribe_to_tags(tags)
|
||||
|
||||
ingestor_manager.opc_managers["server1"].create_subscription.assert_called_once_with(
|
||||
'slot1')
|
||||
ingestor_manager.manage_server.assert_any_call(
|
||||
'slot1', 'server1', {"tags": "config1"}, tags)
|
||||
ingestor_manager.manage_server.assert_any_call(
|
||||
'slot1', 'server2', {"tags": "config2"}, tags)
|
||||
ingestor_manager.manage_server.assert_any_call(
|
||||
'slot1', 'server3', {"tags": "config3"}, tags)
|
||||
|
||||
ingestor_manager.opc_managers["server1"].subscribe.assert_called_once_with(
|
||||
'slot1', 'config1', ingestor_manager.poll_interval)
|
||||
ingestor_manager.opc_managers["server2"].subscribe.assert_called_once_with(
|
||||
'slot1', 'config2', ingestor_manager.poll_interval)
|
||||
ingestor_manager.opc_managers.get("server3") is None
|
||||
assert ingestor_manager.manage_server.call_count == 3
|
||||
|
||||
ingestor_manager.managed_tags['slot1'].pop.assert_called_once_with(
|
||||
'server3', None)
|
||||
|
||||
Reference in New Issue
Block a user