From d9374552cb2584cb4fdc2da407ba44e141b8436c Mon Sep 17 00:00:00 2001 From: Lou Berger Date: Wed, 19 Oct 2022 20:26:13 +0000 Subject: [PATCH] topotest: ospfapi - test opaque all type add/withdrawals, with and wo zero length Signed-off-by: Lou Berger (cherry picked from commit c4fff21b8bd96ab0fbf659da3e6d151b341eb963) --- .../topotests/ospfapi/test_ospf_clientapi.py | 372 ++++++++++++++---- 1 file changed, 286 insertions(+), 86 deletions(-) diff --git a/tests/topotests/ospfapi/test_ospf_clientapi.py b/tests/topotests/ospfapi/test_ospf_clientapi.py index f6928d7cd0..94c8c5c732 100644 --- a/tests/topotests/ospfapi/test_ospf_clientapi.py +++ b/tests/topotests/ospfapi/test_ospf_clientapi.py @@ -472,52 +472,70 @@ def _test_opaque_add_del(tgen, apibin): [ apibin, "-v", + "add,9,10.0.1.1,230,1", "add,9,10.0.1.1,230,2,00000202", - "add,10,1.2.3.4,231,1,00010101", "wait,1", - "add,10,1.2.3.4,231,2", - "add,11,232,3,ebadf00d", + "add,10,1.2.3.4,231,1", + "add,10,1.2.3.4,231,2,0102030405060708", + "wait,1", + "add,11,232,1", + "add,11,232,2,ebadf00d", "wait,20", - "del,10,1.2.3.4,231,1", - "del,10,1.2.3.4,231,2", + "del,9,10.0.1.1,230,2,0", + "del,10,1.2.3.4,231,2,1", + "del,11,232,1,1", ] ) - add_input_dict = { "areas": { "1.2.3.4": { "linkLocalOpaqueLsa": [ + { + "lsId": "230.0.0.1", + "advertisedRouter": "192.168.0.1", + "sequenceNumber": "80000001", + "checksum": "6d5f", + }, { "lsId": "230.0.0.2", "advertisedRouter": "192.168.0.1", "sequenceNumber": "80000001", "checksum": "8142", - } + }, ], + "linkLocalOpaqueLsaCount": 2, "areaLocalOpaqueLsa": [ { "lsId": "231.0.0.1", "advertisedRouter": "192.168.0.1", "sequenceNumber": "80000001", - "checksum": "695a", + "checksum": "5278", }, { "lsId": "231.0.0.2", "advertisedRouter": "192.168.0.1", "sequenceNumber": "80000001", - "checksum": "4881", + "checksum": "6d30", }, ], - } + "areaLocalOpaqueLsaCount": 2, + }, }, "asExternalOpaqueLsa": [ { - "lsId": "232.0.0.3", + "lsId": "232.0.0.1", "advertisedRouter": "192.168.0.1", "sequenceNumber": "80000001", - "checksum": "c666", - } + "checksum": "5575", + }, + { + "lsId": "232.0.0.2", + "advertisedRouter": "192.168.0.1", + "sequenceNumber": "80000001", + "checksum": "d05d", + }, ], + "asExternalOpaqueLsaCount": 2, } step("reachable: check for add LSAs") @@ -536,6 +554,14 @@ def _test_opaque_add_del(tgen, apibin): "linkLocalOpaqueLsa": { "areas": { "1.2.3.4": [ + { + "linkStateId": "230.0.0.1", + "advertisingRouter": "192.168.0.1", + "lsaSeqNumber": "80000001", + "checksum": "6d5f", + "length": 20, + "opaqueDataLength": 0, + }, { "linkStateId": "230.0.0.2", "advertisingRouter": "192.168.0.1", @@ -544,7 +570,7 @@ def _test_opaque_add_del(tgen, apibin): "length": 24, "opaqueId": 2, "opaqueDataLength": 4, - } + }, ] } } @@ -557,33 +583,41 @@ def _test_opaque_add_del(tgen, apibin): "linkStateId": "231.0.0.1", "advertisingRouter": "192.168.0.1", "lsaSeqNumber": "80000001", - "checksum": "695a", - "length": 24, - "opaqueDataLength": 4, + "checksum": "5278", + "length": 20, + "opaqueDataLength": 0, }, { "linkStateId": "231.0.0.2", "advertisingRouter": "192.168.0.1", "lsaSeqNumber": "80000001", - "checksum": "4881", - "length": 20, - "opaqueDataLength": 0, + "checksum": "6d30", + "length": 28, + "opaqueDataLength": 8, }, - ] - } - } + ], + }, + }, }, { "asExternalOpaqueLsa": [ { - "linkStateId": "232.0.0.3", + "linkStateId": "232.0.0.1", + "advertisingRouter": "192.168.0.1", + "lsaSeqNumber": "80000001", + "checksum": "5575", + "length": 20, + "opaqueDataLength": 0, + }, + { + "linkStateId": "232.0.0.2", "advertisingRouter": "192.168.0.1", "lsaSeqNumber": "80000001", - "checksum": "c666", + "checksum": "d05d", "length": 24, "opaqueDataLength": 4, - } - ] + }, + ], }, ] i = 0 @@ -602,9 +636,16 @@ def _test_opaque_add_del(tgen, apibin): # Wait for add notification # RECV: LSA update msg for LSA 232.0.0.3 in area 0.0.0.0 seq 0x80000001 len 24 age 9 - step("reachable: check for API add notifications") - ls_ids = ["230.0.0.2", "231.0.0.1", "231.0.0.2", "232.0.0.3"] + ls_ids = [ + "230.0.0.1", + "230.0.0.2", + "231.0.0.1", + "231.0.0.2", + "232.0.0.1", + "232.0.0.2", + ] for ls_id in ls_ids: + step("reachable: check for API add notification: %s" % ls_id) waitfor = "RECV:.*update msg.*LSA {}.*age ([0-9]+)".format(ls_id) _ = _wait_output(pread, waitfor) @@ -612,39 +653,55 @@ def _test_opaque_add_del(tgen, apibin): "areas": { "1.2.3.4": { "linkLocalOpaqueLsa": [ + { + "lsId": "230.0.0.1", + "advertisedRouter": "192.168.0.1", + "sequenceNumber": "80000001", + "checksum": "6d5f", + }, { "lsId": "230.0.0.2", "advertisedRouter": "192.168.0.1", + "lsaAge": 3600, "sequenceNumber": "80000001", "checksum": "8142", - } + }, ], + "linkLocalOpaqueLsaCount": 2, "areaLocalOpaqueLsa": [ { - "lsaAge": 3600, "lsId": "231.0.0.1", "advertisedRouter": "192.168.0.1", "sequenceNumber": "80000001", - "checksum": "695a", + "checksum": "5278", }, { - "lsaAge": 3600, "lsId": "231.0.0.2", "advertisedRouter": "192.168.0.1", - "sequenceNumber": "80000001", - "checksum": "4881", + "lsaAge": 3600, + "sequenceNumber": "80000002", + "checksum": "4682", }, ], - } + "areaLocalOpaqueLsaCount": 2, + }, }, "asExternalOpaqueLsa": [ { - "lsId": "232.0.0.3", + "lsId": "232.0.0.1", "advertisedRouter": "192.168.0.1", + "lsaAge": 3600, "sequenceNumber": "80000001", - "checksum": "c666", - } + "checksum": "5575", + }, + { + "lsId": "232.0.0.2", + "advertisedRouter": "192.168.0.1", + "sequenceNumber": "80000001", + "checksum": "d05d", + }, ], + "asExternalOpaqueLsaCount": 2, } step("reachable: check for explicit withdrawal LSAs") @@ -652,64 +709,207 @@ def _test_opaque_add_del(tgen, apibin): assert verify_ospf_database(tgen, r1, del_input_dict, json_cmd) is None assert verify_ospf_database(tgen, r2, del_input_dict, json_cmd) is None + del_detail_input_dict = [ + { + "linkLocalOpaqueLsa": { + "areas": { + "1.2.3.4": [ + { + "linkStateId": "230.0.0.1", + "advertisingRouter": "192.168.0.1", + "lsaSeqNumber": "80000001", + "checksum": "6d5f", + "length": 20, + "opaqueDataLength": 0, + }, + { + "linkStateId": "230.0.0.2", + "advertisingRouter": "192.168.0.1", + "lsaAge": 3600, + "lsaSeqNumber": "80000001", + "checksum": "8142", + "length": 24, + "opaqueId": 2, + "opaqueDataLength": 4, + }, + ] + } + } + }, + { + "areaLocalOpaqueLsa": { + "areas": { + "1.2.3.4": [ + { + "linkStateId": "231.0.0.1", + "advertisingRouter": "192.168.0.1", + "lsaSeqNumber": "80000001", + "checksum": "5278", + "length": 20, + "opaqueDataLength": 0, + }, + { + "lsaAge": 3600, + "linkStateId": "231.0.0.2", + "advertisingRouter": "192.168.0.1", + "lsaSeqNumber": "80000002", + "checksum": "4682", + # data removed + "length": 20, + "opaqueDataLength": 0, + }, + ], + }, + }, + }, + { + "asExternalOpaqueLsa": [ + { + "linkStateId": "232.0.0.1", + "advertisingRouter": "192.168.0.1", + "lsaAge": 3600, + "lsaSeqNumber": "80000001", + "checksum": "5575", + "length": 20, + "opaqueDataLength": 0, + }, + { + "linkStateId": "232.0.0.2", + "advertisingRouter": "192.168.0.1", + "lsaSeqNumber": "80000001", + "checksum": "d05d", + "length": 24, + "opaqueDataLength": 4, + }, + ], + }, + ] + i = 0 + while i < numcs: + step("reachable: check for delete LSA details: %s" % json_cmds[i]) + assert ( + verify_ospf_database(tgen, r1, del_detail_input_dict[i], json_cmds[i]) + is None + ) + assert ( + verify_ospf_database(tgen, r2, del_detail_input_dict[i], json_cmds[i]) + is None + ) + i += 1 + p.terminate() if p.wait(): comm_error(p) - del_input_dict = { - "areas": { - "1.2.3.4": { - "linkLocalOpaqueLsa": [ - { - "lsaAge": 3600, - "lsId": "230.0.0.2", - "advertisedRouter": "192.168.0.1", - "sequenceNumber": "80000001", - "checksum": "8142", - } - ], - "areaLocalOpaqueLsa": [ - { - "lsaAge": 3600, - "lsId": "231.0.0.1", - "advertisedRouter": "192.168.0.1", - "sequenceNumber": "80000001", - "checksum": "695a", - }, - { - "lsaAge": 3600, - "lsId": "231.0.0.2", - "advertisedRouter": "192.168.0.1", - "sequenceNumber": "80000001", - "checksum": "4881", - }, - ], + + del_detail_input_dict = [ + { + "linkLocalOpaqueLsa": { + "areas": { + "1.2.3.4": [ + { + "linkStateId": "230.0.0.1", + "advertisingRouter": "192.168.0.1", + "lsaAge": 3600, + "lsaSeqNumber": "80000001", + "checksum": "6d5f", + "length": 20, + "opaqueDataLength": 0, + }, + { + "linkStateId": "230.0.0.2", + "advertisingRouter": "192.168.0.1", + "lsaAge": 3600, + "lsaSeqNumber": "80000001", + "checksum": "8142", + "length": 24, + "opaqueId": 2, + "opaqueDataLength": 4, + }, + ] + } } }, - "asExternalOpaqueLsa": [ - { - "lsaAge": 3600, - "lsId": "232.0.0.3", - "advertisedRouter": "192.168.0.1", - "sequenceNumber": "80000001", - "checksum": "c666", - } - ], - } - - step("reachable: check for implicit withdrawal LSAs") - json_cmd = "show ip ospf da json" - assert verify_ospf_database(tgen, r1, del_input_dict, json_cmd) is None - assert verify_ospf_database(tgen, r2, del_input_dict, json_cmd) is None + { + "areaLocalOpaqueLsa": { + "areas": { + "1.2.3.4": [ + { + "lsaAge": 3600, + "linkStateId": "231.0.0.1", + "advertisingRouter": "192.168.0.1", + "lsaSeqNumber": "80000001", + "checksum": "5278", + "length": 20, + "opaqueDataLength": 0, + }, + { + "lsaAge": 3600, + "linkStateId": "231.0.0.2", + "advertisingRouter": "192.168.0.1", + "lsaSeqNumber": "80000002", + "checksum": "4682", + # data removed + "length": 20, + "opaqueDataLength": 0, + }, + ], + }, + }, + }, + { + "asExternalOpaqueLsa": [ + { + "linkStateId": "232.0.0.1", + "advertisingRouter": "192.168.0.1", + "lsaAge": 3600, + "lsaSeqNumber": "80000001", + "checksum": "5575", + "length": 20, + "opaqueDataLength": 0, + }, + { + "linkStateId": "232.0.0.2", + "advertisingRouter": "192.168.0.1", + "lsaAge": 3600, + "lsaSeqNumber": "80000001", + "checksum": "d05d", + "length": 24, + "opaqueDataLength": 4, + }, + ], + }, + ] + i = 0 + while i < numcs: + step( + "reachable: check for post API shutdown delete LSA details: %s" + % json_cmds[i] + ) + assert ( + verify_ospf_database(tgen, r1, del_detail_input_dict[i], json_cmds[i]) + is None + ) + assert ( + verify_ospf_database(tgen, r2, del_detail_input_dict[i], json_cmds[i]) + is None + ) + i += 1 # step("reachable: check for flush/age out") # # Wait for max age notification # waitfor = "RECV:.*update msg.*LSA {}.*age 3600".format(ls_id) # _wait_output(pread, waitfor) - - step("reachable: check for API delete notifications") - ls_ids = ["231.0.0.1", "231.0.0.2", "230.0.0.2", "232.0.0.3"] + ls_ids = [ + "230.0.0.2", + "231.0.0.2", + "232.0.0.1", + "230.0.0.1", + "231.0.0.1", + "232.0.0.2", + ] for ls_id in ls_ids: - waitfor = "RECV:.*delete msg.*LSA {}.*".format(ls_id) + step("reachable: check for API delete notification: %s" % ls_id) + waitfor = "RECV:.*delete msg.*LSA {}.*age".format(ls_id) _ = _wait_output(pread, waitfor) except Exception: if p: -- 2.39.5