2
2
from swsscommon import swsscommon
3
3
from dvslib .dvs_database import DVSDatabase
4
4
import ast
5
- import time
6
5
7
6
class TestVirtualChassis (object ):
8
7
@@ -321,26 +320,22 @@ def test_chassis_system_lag(self, vct):
321
320
fvs = swsscommon .FieldValuePairs ([("admin" , "up" ), ("mtu" , "9100" )])
322
321
psTbl_lag .set (f"{ test_lag1_name } " , fvs )
323
322
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
-
332
323
# Verify creation of the PorChannel with voq system port aggregator id in asic db
333
324
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 )
335
326
assert len (lagkeys ) == 1 , "The LAG entry for configured PortChannel is not available in asic db"
336
327
337
328
# Check for the presence of voq system port aggregate id attribute
338
329
lag_entry = asic_db .get_entry ("ASIC_STATE:SAI_OBJECT_TYPE_LAG" , lagkeys [0 ])
339
330
spa_id = lag_entry .get ("SAI_LAG_ATTR_SYSTEM_PORT_AGGREGATE_ID" )
340
331
assert spa_id != "" , "VOQ System port aggregate id not present for the LAG"
341
332
333
+ # Add port channel member
334
+ fvs = swsscommon .FieldValuePairs ([("status" , "enabled" )])
335
+ psTbl_lagMember .set (f"{ test_lag1_name } :{ test_lag1_member } " , fvs )
336
+
342
337
# 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 )
344
339
assert len (lagmemberkeys ) == 1 , "The LAG member for configured PortChannel is not available in asic db"
345
340
346
341
break
@@ -350,7 +345,7 @@ def test_chassis_system_lag(self, vct):
350
345
if name .startswith ("supervisor" ):
351
346
dvs = dvss [name ]
352
347
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 )
354
349
assert len (syslagkeys ) == 1 , "System lag entry is not available in chassis app db"
355
350
356
351
# system lag alias (key) should be unique across chassis. To ensure such uniqueness,
@@ -365,7 +360,7 @@ def test_chassis_system_lag(self, vct):
365
360
# This id must be same as the id allocated in owner linecard.
366
361
assert remote_lag_id == spa_id , "System lag id in chassis app db is not same as allocated lag id"
367
362
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 )
369
364
assert len (syslagmemberkeys ) == 1 , "No system lag member entries in chassis app db"
370
365
371
366
break
@@ -387,7 +382,7 @@ def test_chassis_system_lag(self, vct):
387
382
if lc_switch_id != "0" :
388
383
# Linecard other than linecard 1 (owner line card)
389
384
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 )
391
386
assert len (remotesyslagkeys ) == 1 , "No remote system lag entries in ASIC_DB"
392
387
393
388
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):
396
391
assert remote_lag_id == spa_id , "Remote system lag programmed with wrong lag id"
397
392
398
393
# 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 )
400
395
assert len (lagmemberkeys ) == 1 , "The LAG member for remote system lag is not available in asic db"
401
396
402
397
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):
453
448
fvs = swsscommon .FieldValuePairs ([("admin" , "up" ), ("mtu" , "9100" )])
454
449
psTbl_lag .set (f"{ test_lag2_name } " , fvs )
455
450
456
- time .sleep (1 )
457
-
458
451
# Verify creation of the PorChannels with voq system port aggregator id in asic db
459
452
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 )
461
454
assert len (lagkeys ) == 2 , "Two configured LAG entries are not available in asic db"
462
455
463
456
# 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):
539
532
psTbl_lag = swsscommon .ProducerStateTable (app_db , "LAG_TABLE" )
540
533
psTbl_lagMember = swsscommon .ProducerStateTable (app_db , "LAG_MEMBER_TABLE" )
541
534
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
+
542
545
# Delete port channel member of PortChannel test_lag1_name
543
546
psTbl_lagMember .delete (f"{ test_lag1_name } :{ test_lag1_member } " )
544
547
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"
546
551
547
552
# Delete PortChannel test_lag1_name
548
553
psTbl_lag .delete (f"{ test_lag1_name } " )
549
554
550
- time .sleep (1 )
551
-
552
555
# Verify deletion of the PorChannel
553
556
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 )
555
558
assert len (lagkeys ) == 1 , "Two LAG entries in asic db even after deleting a PortChannel"
556
559
557
560
# Create PortChannel test_lag3_name. This should be addedd successfully since deleting
558
561
# PortChannel test_lag1_name made a lag id available for allocation
559
562
fvs = swsscommon .FieldValuePairs ([("admin" , "up" ), ("mtu" , "9100" )])
560
563
psTbl_lag .set (f"{ test_lag3_name } " , fvs )
561
564
562
- time .sleep (1 )
563
-
564
565
# Verify creation of the additional PortChannel after making space for more
565
566
# PortChannels by deleting some PortChannels
566
567
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 )
568
569
assert len (lagkeys ) == 2 , "Two configured LAG entries are not available in asic db"
569
570
570
571
# 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):
582
583
583
584
psTbl_lag .delete (f"{ test_lag3_name } " )
584
585
585
- time .sleep (1 )
586
-
587
586
# Verify deletion of all PortChannels
588
587
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 )
590
589
assert len (lagkeys ) == 0 , "LAG entries in asic db even after deleting all PortChannels"
591
590
592
591
break
@@ -596,10 +595,10 @@ def test_chassis_system_lag_id_allocator_del_id(self, vct):
596
595
if name .startswith ("supervisor" ):
597
596
dvs = dvss [name ]
598
597
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 )
600
599
assert len (syslagkeys ) == 0 , "Stale system lag entries in chassis app db"
601
600
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 )
603
602
assert len (syslagmemberkeys ) == 0 , "Stale system lag member entries in chassis app db"
604
603
605
604
break
@@ -621,11 +620,11 @@ def test_chassis_system_lag_id_allocator_del_id(self, vct):
621
620
if lc_switch_id != "0" :
622
621
# Linecard other than linecard 1 (owner line card)
623
622
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 )
625
624
assert len (remotesyslagkeys ) == 0 , "Stale remote system lag entries in asic db"
626
625
627
626
# 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 )
629
628
assert len (lagmemberkeys ) == 0 , "Stale system lag member entries in asic db"
630
629
631
630
break
0 commit comments