Skip to content

Commit a4e05a7

Browse files
[vstest] System lag test timing issue fix (#1692)
Changes to fix system lag test failure issue reported by issues sonic-net/sonic-swss#1687. Fixed time sleep after creating and deleting system lag is replaced by DVS's wait_for_n_keys() functions Signed-off-by: vedganes <vedavinayagam.ganesan@nokia.com>
1 parent ca8ba6d commit a4e05a7

File tree

1 file changed

+31
-32
lines changed

1 file changed

+31
-32
lines changed

tests/test_virtual_chassis.py

+31-32
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from swsscommon import swsscommon
33
from dvslib.dvs_database import DVSDatabase
44
import ast
5-
import time
65

76
class TestVirtualChassis(object):
87

@@ -321,26 +320,22 @@ def test_chassis_system_lag(self, vct):
321320
fvs = swsscommon.FieldValuePairs([("admin", "up"), ("mtu", "9100")])
322321
psTbl_lag.set(f"{test_lag1_name}", fvs)
323322

324-
time.sleep(1)
325-
326-
# Add port channel member
327-
fvs = swsscommon.FieldValuePairs([("status", "enabled")])
328-
psTbl_lagMember.set(f"{test_lag1_name}:{test_lag1_member}", fvs)
329-
330-
time.sleep(1)
331-
332323
# Verify creation of the PorChannel with voq system port aggregator id in asic db
333324
asic_db = dvs.get_asic_db()
334-
lagkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG")
325+
lagkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG", 1)
335326
assert len(lagkeys) == 1, "The LAG entry for configured PortChannel is not available in asic db"
336327

337328
# Check for the presence of voq system port aggregate id attribute
338329
lag_entry = asic_db.get_entry("ASIC_STATE:SAI_OBJECT_TYPE_LAG", lagkeys[0])
339330
spa_id = lag_entry.get("SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID")
340331
assert spa_id != "", "VOQ System port aggregate id not present for the LAG"
341332

333+
# Add port channel member
334+
fvs = swsscommon.FieldValuePairs([("status", "enabled")])
335+
psTbl_lagMember.set(f"{test_lag1_name}:{test_lag1_member}", fvs)
336+
342337
# Check for presence of lag member added
343-
lagmemberkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG_MEMBER")
338+
lagmemberkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG_MEMBER", 1)
344339
assert len(lagmemberkeys) == 1, "The LAG member for configured PortChannel is not available in asic db"
345340

346341
break
@@ -350,7 +345,7 @@ def test_chassis_system_lag(self, vct):
350345
if name.startswith("supervisor"):
351346
dvs = dvss[name]
352347
chassis_app_db = DVSDatabase(swsscommon.CHASSIS_APP_DB, dvs.redis_chassis_sock)
353-
syslagkeys = chassis_app_db.get_keys("SYSTEM_LAG_TABLE")
348+
syslagkeys = chassis_app_db.wait_for_n_keys("SYSTEM_LAG_TABLE", 1)
354349
assert len(syslagkeys) == 1, "System lag entry is not available in chassis app db"
355350

356351
# system lag alias (key) should be unique across chassis. To ensure such uniqueness,
@@ -365,7 +360,7 @@ def test_chassis_system_lag(self, vct):
365360
# This id must be same as the id allocated in owner linecard.
366361
assert remote_lag_id == spa_id, "System lag id in chassis app db is not same as allocated lag id"
367362

368-
syslagmemberkeys = chassis_app_db.get_keys("SYSTEM_LAG_MEMBER_TABLE")
363+
syslagmemberkeys = chassis_app_db.wait_for_n_keys("SYSTEM_LAG_MEMBER_TABLE", 1)
369364
assert len(syslagmemberkeys) == 1, "No system lag member entries in chassis app db"
370365

371366
break
@@ -387,7 +382,7 @@ def test_chassis_system_lag(self, vct):
387382
if lc_switch_id != "0":
388383
# Linecard other than linecard 1 (owner line card)
389384
asic_db = dvs.get_asic_db()
390-
remotesyslagkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG")
385+
remotesyslagkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG", 1)
391386
assert len(remotesyslagkeys) == 1, "No remote system lag entries in ASIC_DB"
392387

393388
remotesyslag_entry = asic_db.get_entry("ASIC_STATE:SAI_OBJECT_TYPE_LAG", remotesyslagkeys[0])
@@ -396,7 +391,7 @@ def test_chassis_system_lag(self, vct):
396391
assert remote_lag_id == spa_id, "Remote system lag programmed with wrong lag id"
397392

398393
# Verify remote system lag has system port as member
399-
lagmemberkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG_MEMBER")
394+
lagmemberkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG_MEMBER", 1)
400395
assert len(lagmemberkeys) == 1, "The LAG member for remote system lag is not available in asic db"
401396

402397
remotelagmember_entry = asic_db.get_entry("ASIC_STATE:SAI_OBJECT_TYPE_LAG_MEMBER", lagmemberkeys[0])
@@ -453,11 +448,9 @@ def test_chassis_system_lag_id_allocator_table_full(self, vct):
453448
fvs = swsscommon.FieldValuePairs([("admin", "up"), ("mtu", "9100")])
454449
psTbl_lag.set(f"{test_lag2_name}", fvs)
455450

456-
time.sleep(1)
457-
458451
# Verify creation of the PorChannels with voq system port aggregator id in asic db
459452
asic_db = dvs.get_asic_db()
460-
lagkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG")
453+
lagkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG", 2)
461454
assert len(lagkeys) == 2, "Two configured LAG entries are not available in asic db"
462455

463456
# Check for the presence of voq system port aggregate id attribute for 2 LAGs
@@ -539,32 +532,40 @@ def test_chassis_system_lag_id_allocator_del_id(self, vct):
539532
psTbl_lag = swsscommon.ProducerStateTable(app_db, "LAG_TABLE")
540533
psTbl_lagMember = swsscommon.ProducerStateTable(app_db, "LAG_MEMBER_TABLE")
541534

535+
# Make sure presence of 2 port channels before deleting
536+
asic_db = dvs.get_asic_db()
537+
lagkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG", 2)
538+
assert len(lagkeys) == 2, "Expected 2 PortChannels are not available"
539+
540+
# Make sure presence of total of 1 lag member added in test_lag1_name
541+
# No lag member added in test_lag2_name
542+
lagmemberkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG_MEMBER", 1)
543+
assert len(lagmemberkeys) == 1, "Expected 1 LAG members are not available"
544+
542545
# Delete port channel member of PortChannel test_lag1_name
543546
psTbl_lagMember.delete(f"{test_lag1_name}:{test_lag1_member}")
544547

545-
time.sleep(1)
548+
# Verify the lag member is removed from asic db
549+
lagmemberkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG_MEMBER", 0)
550+
assert len(lagmemberkeys) == 0, "Deleted LAG member is not removed from asic db"
546551

547552
# Delete PortChannel test_lag1_name
548553
psTbl_lag.delete(f"{test_lag1_name}")
549554

550-
time.sleep(1)
551-
552555
# Verify deletion of the PorChannel
553556
asic_db = dvs.get_asic_db()
554-
lagkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG")
557+
lagkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG", 1)
555558
assert len(lagkeys) == 1, "Two LAG entries in asic db even after deleting a PortChannel"
556559

557560
# Create PortChannel test_lag3_name. This should be addedd successfully since deleting
558561
# PortChannel test_lag1_name made a lag id available for allocation
559562
fvs = swsscommon.FieldValuePairs([("admin", "up"), ("mtu", "9100")])
560563
psTbl_lag.set(f"{test_lag3_name}", fvs)
561564

562-
time.sleep(1)
563-
564565
# Verify creation of the additional PortChannel after making space for more
565566
# PortChannels by deleting some PortChannels
566567
asic_db = dvs.get_asic_db()
567-
lagkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG")
568+
lagkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG", 2)
568569
assert len(lagkeys) == 2, "Two configured LAG entries are not available in asic db"
569570

570571
# Check for the presence of voq system port aggregate id attribute for 2 LAGs
@@ -582,11 +583,9 @@ def test_chassis_system_lag_id_allocator_del_id(self, vct):
582583

583584
psTbl_lag.delete(f"{test_lag3_name}")
584585

585-
time.sleep(1)
586-
587586
# Verify deletion of all PortChannels
588587
asic_db = dvs.get_asic_db()
589-
lagkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG")
588+
lagkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG", 0)
590589
assert len(lagkeys) == 0, "LAG entries in asic db even after deleting all PortChannels"
591590

592591
break
@@ -596,10 +595,10 @@ def test_chassis_system_lag_id_allocator_del_id(self, vct):
596595
if name.startswith("supervisor"):
597596
dvs = dvss[name]
598597
chassis_app_db = DVSDatabase(swsscommon.CHASSIS_APP_DB, dvs.redis_chassis_sock)
599-
syslagkeys = chassis_app_db.get_keys("SYSTEM_LAG_TABLE")
598+
syslagkeys = chassis_app_db.wait_for_n_keys("SYSTEM_LAG_TABLE", 0)
600599
assert len(syslagkeys) == 0, "Stale system lag entries in chassis app db"
601600

602-
syslagmemberkeys = chassis_app_db.get_keys("SYSTEM_LAG_MEMBER_TABLE")
601+
syslagmemberkeys = chassis_app_db.wait_for_n_keys("SYSTEM_LAG_MEMBER_TABLE", 0)
603602
assert len(syslagmemberkeys) == 0, "Stale system lag member entries in chassis app db"
604603

605604
break
@@ -621,11 +620,11 @@ def test_chassis_system_lag_id_allocator_del_id(self, vct):
621620
if lc_switch_id != "0":
622621
# Linecard other than linecard 1 (owner line card)
623622
asic_db = dvs.get_asic_db()
624-
remotesyslagkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG")
623+
remotesyslagkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG", 0)
625624
assert len(remotesyslagkeys) == 0, "Stale remote system lag entries in asic db"
626625

627626
# Verify cleaning of system lag members
628-
lagmemberkeys = asic_db.get_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG_MEMBER")
627+
lagmemberkeys = asic_db.wait_for_n_keys("ASIC_STATE:SAI_OBJECT_TYPE_LAG_MEMBER", 0)
629628
assert len(lagmemberkeys) == 0, "Stale system lag member entries in asic db"
630629

631630
break

0 commit comments

Comments
 (0)