From b3570f719485783736cfcdf9d5471d55809f7af7 Mon Sep 17 00:00:00 2001 From: Robert Latta <robert.latta@geant.org> Date: Mon, 7 Feb 2022 10:40:44 +0000 Subject: [PATCH] added base transormation of SID info with tests --- inventory_provider/db/ims_data.py | 2 + inventory_provider/tasks/worker.py | 27 ++++++++- test/test_ims_data.py | 6 ++ test/test_worker.py | 94 +++++++++++++++++++++++++++++- 4 files changed, 124 insertions(+), 5 deletions(-) diff --git a/inventory_provider/db/ims_data.py b/inventory_provider/db/ims_data.py index 271faaf0..7d6aa5c1 100644 --- a/inventory_provider/db/ims_data.py +++ b/inventory_provider/db/ims_data.py @@ -203,6 +203,7 @@ def get_port_id_services(ds: IMS): 'circuit_type': circuit['circuit_type'], 'service_type': products[circuit['productid']], 'project': customers[circuit['customerid']], + 'customer': customers[circuit['customerid']], 'customerid': circuit['customerid'] } ports = [] @@ -248,6 +249,7 @@ def get_port_id_services(ds: IMS): 'circuit_type': _get_circuit_type(circuit), 'service_type': products[circuit['productid']], 'project': customers[circuit['customerid']], + 'customer': customers[circuit['customerid']], 'customerid': circuit['customerid'], 'port_a_id': portrelate.get( 'portid', diff --git a/inventory_provider/tasks/worker.py b/inventory_provider/tasks/worker.py index f841b942..7f5b4094 100644 --- a/inventory_provider/tasks/worker.py +++ b/inventory_provider/tasks/worker.py @@ -827,6 +827,9 @@ def transform_ims_data(data): hierarchy = data['hierarchy'] port_id_details = data['port_id_details'] port_id_services = data['port_id_services'] + circuit_ids_and_sids = data['circuit_ids_sids'] + + sid_circuits = defaultdict(list) def _get_circuit_contacts(c): customer_ids = {c['customerid']} @@ -982,20 +985,40 @@ def transform_ims_data(data): _format_service(circ) type_services = services_by_type.setdefault( - ims_sorted_service_type_key(circ['service_type']), dict()) + ims_sorted_service_type_key(circ['service_type']), dict()) # comment type_services[circ['id']] = circ if circ['other_end_equipment']: node_pair_services[ f"{circ['equipment']}/{circ['other_end_equipment']}" ][circ['id']] = circ + if circ['id'] in circuit_ids_and_sids: + sid = circuit_ids_and_sids[circ['id']] + if circ['circuit_type'] == 'circuit': + logger.info(f'SID ({sid}) Circuit ({circ["id"]})' + f' not a service. IMS') + else: + sid_circuits[sid].append( + { + 'circuit_id': circ['id'], + 'sid': sid, + 'name': circ['name'], + 'speed': circ['calculated-speed'], + 'service_type': circ['service_type'], + 'project': circ['project'], + 'customer': circ['customer'], + 'equipment': circ['equipment'], + 'port': circ['port'] + }) + interface_services[k].extend(circuits) return { 'hierarchy': hierarchy, 'interface_services': interface_services, 'services_by_type': services_by_type, - 'node_pair_services': node_pair_services + 'node_pair_services': node_pair_services, + 'sid_circuits': sid_circuits } diff --git a/test/test_ims_data.py b/test/test_ims_data.py index eb0adb43..ae2a2e8c 100644 --- a/test/test_ims_data.py +++ b/test/test_ims_data.py @@ -162,6 +162,7 @@ def test_get_port_id_services(mocker): 'circuit_type': 'service', 'service_type': 'GEANT IP', 'project': 'ORG A', + 'customer': 'ORG A', 'port_a_id': 224507, 'customerid': 57658 }, @@ -172,6 +173,7 @@ def test_get_port_id_services(mocker): 'circuit_type': 'service', 'service_type': 'GEANT PEERING', 'project': 'ORG B', + 'customer': 'ORG B', 'port_a_id': 224464, 'customerid': 57664 }, @@ -182,6 +184,7 @@ def test_get_port_id_services(mocker): 'circuit_type': 'circuit', 'service_type': 'ETHERNET', 'project': 'ETH', + 'customer': 'ETH', 'port_a_id': 6423107, 'port_b_id': 6419340, 'customerid': 57744 @@ -193,6 +196,7 @@ def test_get_port_id_services(mocker): 'circuit_type': 'circuit', 'service_type': 'ETHERNET', 'project': 'ETH', + 'customer': 'ETH', 'port_a_id': 6419340, 'port_b_id': 6423107, 'customerid': 57744 @@ -204,6 +208,7 @@ def test_get_port_id_services(mocker): 'circuit_type': 'circuit', 'service_type': 'ETHERNET', 'project': 'ETH', + 'customer': 'ETH', 'port_a_id': 6423111, 'customerid': 57744 }, @@ -214,6 +219,7 @@ def test_get_port_id_services(mocker): 'circuit_type': 'service', 'service_type': 'PRODUCT A', 'project': 'ORG C', + 'customer': 'ORG C', 'port_a_id': 6419453, 'customerid': 57640 } diff --git a/test/test_worker.py b/test/test_worker.py index 2dbce473..7774c3f2 100644 --- a/test/test_worker.py +++ b/test/test_worker.py @@ -137,6 +137,16 @@ def test_transform_ims_data(): "equipment_name": "eq_b", "interface_name": "if_b", "port_id": "port_id_2" + }], + "port_id_3": [{ + "equipment_name": "eq_a", + "interface_name": "if_c", + "port_id": "port_id_3" + }], + "port_id_4": [{ + "equipment_name": "eq_b", + "interface_name": "if_c", + "port_id": "port_id_4" }] } @@ -144,7 +154,10 @@ def test_transform_ims_data(): "port_id_1": [ { "id": "circ_id_1", + "name": "circ_name_1", "customerid": "cu_1", + "customer": "customer_1", + "project": "customer_1", "circuit_type": "circuit", "service_type": "ETHERNET", "status": "operational", @@ -156,7 +169,10 @@ def test_transform_ims_data(): "port_id_2": [ { "id": "circ_id_1", + "name": "circ_name_1", "customerid": "cu_1", + "customer": "customer_1", + "project": "customer_1", "circuit_type": "circuit", "service_type": "ETHERNET", "status": "operational", @@ -164,6 +180,34 @@ def test_transform_ims_data(): "port_b_id": "port_id_1", } + ], + "port_id_3": [ + { + "id": "sub_circuit_2", + "name": "sub_circuit_2", + "customerid": "cu_1", + "customer": "customer_1", + "project": "customer_1", + "circuit_type": "service", + "service_type": "PEERING R & E", + "status": "operational", + "port_a_id": "port_id_3", + "port_b_id": "port_id_4", + } + ], + "port_id_4": [ + { + "id": "sub_circuit_2", + "name": "sub_circuit_2", + "customerid": "cu_1", + "customer": "customer_1", + "project": "customer_1", + "circuit_type": "service", + "service_type": "PEERING R & E", + "status": "operational", + "port_a_id": "port_id_4", + "port_b_id": "port_id_3", + }, ] } @@ -173,8 +217,10 @@ def test_transform_ims_data(): "name": "circ_name_1", "status": "operational", "circuit-type": "circuit", + "service_type": "ETHERNET", "product": "ethernet", "speed": "not fibre_route", + "project": "customer_1", "carrier-circuits": ["carrier_id_1"], "sub-circuits": ["sub_circuit_1"], "customerid": "cu_1", @@ -186,6 +232,7 @@ def test_transform_ims_data(): "circuit-type": "circuit", "product": "ethernet", "speed": "10G", + "project": "customer_1", "carrier-circuits": ["carrier_id_2"], "sub-circuits": ["circ_id_1"], "customerid": "cu_1", @@ -197,6 +244,7 @@ def test_transform_ims_data(): "circuit-type": "circuit", "product": "ethernet", "speed": "not fibre_route", + "project": "customer_1", "carrier-circuits": ["carrier_id_3"], "sub-circuits": ["carrier_id_1"], "customerid": "cu_1", @@ -208,6 +256,7 @@ def test_transform_ims_data(): "circuit-type": "circuit", "product": "OCG4", "speed": "fibre_route", + "project": "customer_1", "carrier-circuits": [], "sub-circuits": ["carrier_id_2"], "customerid": "cu_1", @@ -219,6 +268,7 @@ def test_transform_ims_data(): "circuit-type": "circuit", "product": "ethernet", "speed": "not fibre_route", + "project": "customer_1", "carrier-circuits": ["circ_id_1"], "sub-circuits": ["sub_circuit_2"], "customerid": "cu_1", @@ -230,12 +280,18 @@ def test_transform_ims_data(): "circuit-type": "service", "product": "PEERING R & E", "speed": "not fiber route", - "project": "Project A", + "project": "customer_1", "carrier-circuits": ["sub_circuit_1"], "sub-circuits": [], "customerid": "cu_1", } } + + circuit_ids_and_sids = { + "sub_circuit_2": 'SID-01', + "circ_id_2": 'SID-02', + "circ_id_3": 'SID-03' + } data = { "locations": locations, "customer_contacts": customer_contacts, @@ -243,11 +299,13 @@ def test_transform_ims_data(): "additional_circuit_customer_ids": additional_circuit_customer_ids, "hierarchy": hierarchy, "port_id_details": port_id_details, - "port_id_services": port_id_services + "port_id_services": port_id_services, + "circuit_ids_sids": circuit_ids_and_sids } res = transform_ims_data(data) ifs = res["interface_services"] - assert list(ifs.keys()) == ["eq_a:if_a", "eq_b:if_b"] + assert list(ifs.keys()) == [ + "eq_a:if_a", "eq_b:if_b", "eq_a:if_c", "eq_b:if_c"] for v in ifs.values(): assert len(v) == 1 assert len(v[0]["related-services"]) == 1 @@ -267,6 +325,36 @@ def test_transform_ims_data(): assert len(v[0]["fibre-routes"]) == 1 assert v[0]["fibre-routes"][0]["id"] == "carrier_id_3" + assert len(res["sid_circuits"]['SID-01']) == 2 + + for x in [ + { + 'circuit_id': "sub_circuit_2", + 'sid': "SID-01", + 'name': "sub_circuit_2", + 'speed': 10 << 30, + 'service_type': "PEERING R & E", + 'project': "customer_1", + 'customer': "customer_1", + 'equipment': "eq_a", + 'port': "if_c" + }, + { + 'circuit_id': "sub_circuit_2", + 'sid': "SID-01", + 'name': "sub_circuit_2", + 'speed': 10 << 30, + 'service_type': "PEERING R & E", + 'project': "customer_1", + 'customer': "customer_1", + 'equipment': "eq_b", + 'port': "if_c" + } + ]: + assert json.dumps(x, sort_keys=True) in [ + json.dumps( + y, sort_keys=True) for y in res["sid_circuits"]['SID-01']] + def test_persist_ims_data(mocker, data_config, mocked_redis): -- GitLab