@@ -287,9 +287,6 @@ def test_DelTwiceNaPtStaticEntry(self, dvs, testlog):
287
287
#check the entry is not there in asic db
288
288
self .asic_db .wait_for_n_keys ("ASIC_STATE:SAI_OBJECT_TYPE_NAT_ENTRY" , 0 )
289
289
290
- # clear interfaces
291
- self .clear_interfaces (dvs )
292
-
293
290
def test_VerifyConntrackTimeoutForNatEntry (self , dvs , testlog ):
294
291
# get neighbor and arp entry
295
292
dvs .servers [0 ].runcmd ("ping -c 1 18.18.18.2" )
@@ -353,6 +350,81 @@ def test_DoNotNatAclAction(self, dvs_acl, testlog):
353
350
dvs_acl .remove_acl_table (L3_TABLE_NAME )
354
351
dvs_acl .verify_acl_table_count (0 )
355
352
353
+ def test_CrmSnatAndDnatEntryUsedCount (self , dvs , testlog ):
354
+ # initialize
355
+ self .setup_db (dvs )
356
+
357
+ # get neighbor and arp entry
358
+ dvs .servers [0 ].runcmd ("ping -c 1 18.18.18.2" )
359
+
360
+ # set pooling interval to 1
361
+ dvs .runcmd ("crm config polling interval 1" )
362
+
363
+ dvs .setReadOnlyAttr ('SAI_OBJECT_TYPE_SWITCH' , 'SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY' , '1000' )
364
+ dvs .setReadOnlyAttr ('SAI_OBJECT_TYPE_SWITCH' , 'SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY' , '1000' )
365
+
366
+ time .sleep (2 )
367
+
368
+ # get snat counters
369
+ used_snat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_snat_entry_used' )
370
+ avail_snat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_snat_entry_available' )
371
+
372
+ # get dnat counters
373
+ used_dnat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_dnat_entry_used' )
374
+ avail_dnat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_dnat_entry_available' )
375
+
376
+ # add a static nat entry
377
+ dvs .runcmd ("config nat add static basic 67.66.65.1 18.18.18.2" )
378
+
379
+ #check the entry in asic db, 3 keys = SNAT, DNAT and DNAT_Pool
380
+ keys = self .asic_db .wait_for_n_keys ("ASIC_STATE:SAI_OBJECT_TYPE_NAT_ENTRY" , 3 )
381
+ for key in keys :
382
+ if (key .find ("dst_ip:67.66.65.1" )) or (key .find ("src_ip:18.18.18.2" )):
383
+ assert True
384
+ else :
385
+ assert False
386
+
387
+ dvs .setReadOnlyAttr ('SAI_OBJECT_TYPE_SWITCH' , 'SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY' , '999' )
388
+ dvs .setReadOnlyAttr ('SAI_OBJECT_TYPE_SWITCH' , 'SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY' , '999' )
389
+
390
+ time .sleep (2 )
391
+
392
+ # get snat counters
393
+ new_used_snat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_snat_entry_used' )
394
+ new_avail_snat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_snat_entry_available' )
395
+
396
+ # get dnat counters
397
+ new_used_dnat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_dnat_entry_used' )
398
+ new_avail_dnat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_dnat_entry_available' )
399
+
400
+ assert new_used_snat_counter - used_snat_counter == 1
401
+ assert avail_snat_counter - new_avail_snat_counter == 1
402
+ assert new_used_dnat_counter - used_dnat_counter == 1
403
+ assert avail_dnat_counter - new_avail_dnat_counter == 1
404
+
405
+ # delete a static nat entry
406
+ dvs .runcmd ("config nat remove static basic 67.66.65.1 18.18.18.2" )
407
+
408
+ dvs .setReadOnlyAttr ('SAI_OBJECT_TYPE_SWITCH' , 'SAI_SWITCH_ATTR_AVAILABLE_SNAT_ENTRY' , '1000' )
409
+ dvs .setReadOnlyAttr ('SAI_OBJECT_TYPE_SWITCH' , 'SAI_SWITCH_ATTR_AVAILABLE_DNAT_ENTRY' , '1000' )
410
+
411
+ time .sleep (2 )
412
+
413
+ # get snat counters
414
+ new_used_snat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_snat_entry_used' )
415
+ new_avail_snat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_snat_entry_available' )
416
+
417
+ # get dnat counters
418
+ new_used_dnat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_dnat_entry_used' )
419
+ new_avail_dnat_counter = dvs .getCrmCounterValue ('STATS' , 'crm_stats_dnat_entry_available' )
420
+
421
+ assert new_used_snat_counter == used_snat_counter
422
+ assert new_avail_snat_counter == avail_snat_counter
423
+ assert new_used_dnat_counter == used_dnat_counter
424
+ assert new_avail_dnat_counter == avail_dnat_counter
425
+
426
+ # clear interfaces
427
+ self .clear_interfaces (dvs )
356
428
357
429
# Add Dummy always-pass test at end as workaroud
358
430
# for issue when Flaky fail on final test it invokes module tear-down before retrying
0 commit comments