22from swsscommon import swsscommon
33from dvslib .dvs_database import DVSDatabase
44import ast
5- import time
65
76class 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