Skip to content

Commit 7cb6677

Browse files
committed
Add unittest
Signed-off-by: Longxiang Lyu <[email protected]>
1 parent c648ed4 commit 7cb6677

1 file changed

Lines changed: 42 additions & 0 deletions

File tree

tests/test_vlan.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -436,6 +436,48 @@ def test_VlanHostIf(self, dvs):
436436
self.dvs_vlan.get_and_verify_vlan_ids(0)
437437
self.dvs_vlan.get_and_verify_vlan_hostif_ids(len(dvs.asic_db.hostif_name_map) - 1)
438438

439+
def test_VlanMemberLinkDown(self, dvs):
440+
441+
# TODO: add_ip_address has a dependency on cdb within dvs,
442+
# so we still need to setup the db. This should be refactored.
443+
dvs.setup_db()
444+
445+
vlan = "1000"
446+
vlan_ip = "192.168.0.1/21"
447+
interface = "Ethernet0"
448+
vlan_interface = "Vlan%s" % vlan
449+
server_ip = "192.168.0.100"
450+
vlan_intf_sysctl_param_path = "/proc/sys/net/ipv4/conf/%s/arp_evict_nocarrier" % vlan_interface
451+
452+
self.dvs_vlan.create_vlan(vlan)
453+
vlan_oid = self.dvs_vlan.get_and_verify_vlan_ids(1)[0]
454+
self.dvs_vlan.verify_vlan(vlan_oid, vlan)
455+
self.dvs_vlan.create_vlan_member(vlan, interface)
456+
self.dvs_vlan.verify_vlan_member(vlan_oid, interface)
457+
dvs.set_interface_status(interface, "up")
458+
dvs.add_ip_address(vlan_interface, vlan_ip)
459+
dvs.runcmd("ip neigh replace %s lladdr 11:22:33:44:55:66 dev %s nud stale" % (server_ip, vlan_interface))
460+
461+
neigh_oid = self.dvs_vlan.app_db.wait_for_n_keys("NEIGH_TABLE", 1)[0]
462+
assert vlan_interface in neigh_oid and server_ip in neigh_oid
463+
464+
# NOTE: arp_evict_nocarrier is available for kernel >= v5.16 and current
465+
# docker-sonic-vs is based on kernel v5.4.0, so test only if this sysctl
466+
# param is present
467+
rc, res = dvs.runcmd("cat %s" % vlan_intf_sysctl_param_path)
468+
if rc == 0:
469+
assert res.strip() == "0"
470+
dvs.set_interface_status(interface, "down")
471+
neigh_oid = self.dvs_vlan.app_db.wait_for_n_keys("NEIGH_TABLE", 1)[0]
472+
assert vlan_interface in neigh_oid and server_ip in neigh_oid
473+
474+
dvs.runcmd("ip neigh flush all")
475+
dvs.remove_ip_address(vlan_interface, vlan_ip)
476+
self.dvs_vlan.remove_vlan_member(vlan, interface)
477+
self.dvs_vlan.get_and_verify_vlan_member_ids(0)
478+
self.dvs_vlan.remove_vlan(vlan)
479+
self.dvs_vlan.get_and_verify_vlan_ids(0)
480+
439481
# Add Dummy always-pass test at end as workaroud
440482
# for issue when Flaky fail on final test it invokes module tear-down before retrying
441483
def test_nonflaky_dummy():

0 commit comments

Comments
 (0)