Skip to content

Commit 51393a2

Browse files
EmmaLin11lguohan
authored andcommitted
[VLAN] Add pytest cases to validate different use-case of tagging_mode. (sonic-net#860)
* [VLAN] Add pytest cases to validate different use-case of tagging_mode. Signed-off-by: Emma Lin <[email protected]>
1 parent 6301abe commit 51393a2

File tree

1 file changed

+70
-1
lines changed

1 file changed

+70
-1
lines changed

tests/test_vlan.py

+70-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def remove_vlan_member(self, vlan, interface):
3737
time.sleep(1)
3838

3939
def check_syslog(self, dvs, marker, process, err_log, vlan_str, expected_cnt):
40-
(exitcode, num) = dvs.runcmd(['sh', '-c', "awk \'/%s/,ENDFILE {print;}\' /var/log/syslog | grep %s | grep \"%s\" | grep -i %s | wc -l" % (marker, process, err_log, vlan_str)])
40+
(exitcode, num) = dvs.runcmd(['sh', '-c', "awk \'/%s/,ENDFILE {print;}\' /var/log/syslog | grep %s | grep \"%s\" | grep -i \"%s\" | wc -l" % (marker, process, err_log, vlan_str)])
4141
assert num.strip() == str(expected_cnt)
4242

4343
def check_app_db_vlan_fields(self, fvs, admin_status="up", mtu="9100"):
@@ -439,6 +439,74 @@ def test_RemoveNonexistentVlan(self, dvs, testlog):
439439
# remove vlan
440440
dvs.remove_vlan(vlan)
441441

442+
@pytest.mark.skipif(StrictVersion(platform.linux_distribution()[1]) <= StrictVersion('8.9'), reason="Debian 8.9 or before has no support")
443+
@pytest.mark.parametrize("test_input, expected", [
444+
(["tagging_mode", "untagged"], [1, "SAI_VLAN_TAGGING_MODE_UNTAGGED"]),
445+
(["tagging_mode", "tagged"], [1, "SAI_VLAN_TAGGING_MODE_TAGGED"]),
446+
(["tagging_mode", "priority_tagged"], [1, "SAI_VLAN_TAGGING_MODE_PRIORITY_TAGGED"]),
447+
(["tagging_mode", "unexpected_mode"], [0, ""]),
448+
(["no_tag_mode", ""], [1, "SAI_VLAN_TAGGING_MODE_UNTAGGED"]),
449+
])
450+
def test_VlanMemberTaggingMode(self, dvs, testlog, test_input, expected):
451+
self.setup_db(dvs)
452+
tagging_mode_prefix = test_input[0]
453+
tagging_mode = test_input[1]
454+
marker = dvs.add_log_marker()
455+
vlan = "2"
456+
457+
# create vlan
458+
self.create_vlan(vlan)
459+
460+
# check asic database
461+
tbl = swsscommon.Table(self.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN")
462+
vlan_entries = [k for k in tbl.getKeys() if k != dvs.asicdb.default_vlan_id]
463+
assert len(vlan_entries) == 1
464+
vlan_oid = vlan_entries[0]
465+
466+
# add vlan member
467+
tbl = swsscommon.Table(self.cdb, "VLAN_MEMBER")
468+
fvs = swsscommon.FieldValuePairs([(tagging_mode_prefix, tagging_mode)])
469+
tbl.set("Vlan" + vlan + "|" + "Ethernet0", fvs)
470+
time.sleep(1)
471+
472+
# check asic database
473+
bridge_port_map = {}
474+
tbl = swsscommon.Table(self.adb, "ASIC_STATE:SAI_OBJECT_TYPE_BRIDGE_PORT")
475+
bridge_port_entries = tbl.getKeys()
476+
for key in bridge_port_entries:
477+
(status, fvs) = tbl.get(key)
478+
assert status == True
479+
for fv in fvs:
480+
if fv[0] == "SAI_BRIDGE_PORT_ATTR_PORT_ID":
481+
bridge_port_map[key] = fv[1]
482+
483+
tbl = swsscommon.Table(self.adb, "ASIC_STATE:SAI_OBJECT_TYPE_VLAN_MEMBER")
484+
vlan_member_entries = tbl.getKeys()
485+
assert len(vlan_member_entries) == expected[0]
486+
487+
if len(vlan_member_entries) == 1:
488+
(status, fvs) = tbl.get(vlan_member_entries[0])
489+
assert status == True
490+
assert len(fvs) == 3
491+
for fv in fvs:
492+
if fv[0] == "SAI_VLAN_MEMBER_ATTR_VLAN_TAGGING_MODE":
493+
assert fv[1] == expected[1]
494+
elif fv[0] == "SAI_VLAN_MEMBER_ATTR_VLAN_ID":
495+
assert fv[1] == vlan_oid
496+
elif fv[0] == "SAI_VLAN_MEMBER_ATTR_BRIDGE_PORT_ID":
497+
assert dvs.asicdb.portoidmap[bridge_port_map[fv[1]]] == "Ethernet0"
498+
else:
499+
assert False
500+
else:
501+
# check error log
502+
self.check_syslog(dvs, marker, "vlanmgrd", "Wrong tagging_mode", test_input, 1)
503+
504+
# remove vlan member
505+
self.remove_vlan_member(vlan, "Ethernet0")
506+
507+
# remove vlan
508+
self.remove_vlan(vlan)
509+
442510
@pytest.mark.skip(reason="AddMaxVlan take too long to execute")
443511
def test_AddMaxVlan(self, dvs, testlog):
444512
dvs.setup_db()
@@ -562,6 +630,7 @@ def test_VlanDbData(self, dvs, testlog):
562630
# remove vlan
563631
self.remove_vlan(vlan)
564632

633+
@pytest.mark.skipif(StrictVersion(platform.linux_distribution()[1]) <= StrictVersion('8.9'), reason="Debian 8.9 or before has no support")
565634
@pytest.mark.parametrize("test_input, expected", [
566635
(["untagged"], ["SAI_VLAN_TAGGING_MODE_UNTAGGED"]),
567636
(["tagged"], ["SAI_VLAN_TAGGING_MODE_TAGGED"]),

0 commit comments

Comments
 (0)