Skip to content

Commit 7b4fb79

Browse files
SuvarnaMeenakshiAzarack
authored andcommitted
[cacl]: Fix fixture used in module level fixture. (sonic-net#5358)
What is the motivation for this PR? fixes: sonic-net#5303 Issues: Test case runs on rand_one_dut_hostname(randomly selected dut) but the module level fixture docker_network uses duthost(first dut in the testbed). This could cause mismatch when running on multi-dut testbed or chassis testbed. rand_one_dut_hostname selects on hostname to run the test, but enum_frontend_asic_index fixture is invoked much earlier and enum_frontend_asic_index generates list of frontend asic index based on first DUT of a multi-dut testbed. This can cause mismatch when running for chassis, where the rand_one_dut_hostname and enum_frontend_asic_index might not match. So modify to use enum_rand_one_per_hwsku_hostname. In case of chassis, the test case will now run for one of the LC and Supervisor. When running on supervisor, it will not have any frontend_asic_index which can cause failure in verify_nat_cacl, so ensure that nat_cacl check is run only when asic_index is not None. How did you do it? Run on each hwsku in testbed. Fix docker_network() to use the correct hostname. Execute verify_nat_cacl only when asic_index is not None. How did you verify/test it? Verified on chassis.
1 parent 6ed9ff4 commit 7b4fb79

File tree

1 file changed

+19
-16
lines changed

1 file changed

+19
-16
lines changed

tests/cacl/test_cacl_application.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,9 @@ def expected_dhcp_rules_for_standby(duthost_dualtor):
6161
return expected_dhcp_rules
6262

6363
@pytest.fixture(scope="module")
64-
def docker_network(duthost):
64+
def docker_network(duthosts, enum_rand_one_per_hwsku_hostname):
6565

66+
duthost = duthosts[enum_rand_one_per_hwsku_hostname]
6667
output = duthost.command("docker inspect bridge")
6768

6869
docker_containers_info = json.loads(output['stdout'])[0]['Containers']
@@ -92,18 +93,18 @@ def docker_network(duthost):
9293
return docker_network
9394

9495
@pytest.fixture(scope="function")
95-
def collect_ignored_rules(duthosts, rand_one_dut_hostname):
96+
def collect_ignored_rules(duthosts, enum_rand_one_per_hwsku_hostname):
9697
"""
9798
Collect existing iptables rules before test, set them as ignored as they are not related to CACL test cases.
9899
99100
Args:
100101
duthosts: All DUTs belong to the testbed.
101-
rand_one_dut_hostname: hostname of a random chosen dut to run test.
102+
enum_rand_one_per_hwsku_hostname: hostname of a random chosen dut to run test.
102103
103104
Returns:
104105
None
105106
"""
106-
duthost = duthosts[rand_one_dut_hostname]
107+
duthost = duthosts[enum_rand_one_per_hwsku_hostname]
107108

108109
ignored_rules_v4 = duthost.command("iptables -S")["stdout_lines"]
109110
ignored_rules_v6 = duthost.command("ip6tables -S")["stdout_lines"]
@@ -114,20 +115,20 @@ def collect_ignored_rules(duthosts, rand_one_dut_hostname):
114115
return ignored_rules
115116

116117
@pytest.fixture(scope="function")
117-
def clean_scale_rules(duthosts, rand_one_dut_hostname, collect_ignored_rules):
118+
def clean_scale_rules(duthosts, enum_rand_one_per_hwsku_hostname, collect_ignored_rules):
118119
"""
119120
Clear other control ACL rules before test to avoid miscalucation,
120121
delete ACL template json file and clean ACL rules, recover configuration after test.
121122
122123
Args:
123124
duthosts: All DUTs belong to the testbed.
124-
rand_one_dut_hostname: hostname of a random chosen dut to run test.
125+
enum_rand_one_per_hwsku_hostname: hostname of a random chosen dut to run test.
125126
collect_ignored_rules: ignored iptable/ip6table rules.
126127
127128
Returns:
128129
None
129130
"""
130-
duthost = duthosts[rand_one_dut_hostname]
131+
duthost = duthosts[enum_rand_one_per_hwsku_hostname]
131132

132133
yield
133134

@@ -805,15 +806,15 @@ def verify_nat_cacl(duthost, localhost, creds, docker_network, asic_index):
805806
unexpected_ip6tables_rules = set(actual_ip6tables_rules) - set(expected_ip6tables_rules)
806807
pytest_assert(len(unexpected_ip6tables_rules) == 0, "Unexpected ip6tables nat rules: {}".format(repr(unexpected_ip6tables_rules)))
807808

808-
def test_cacl_application_nondualtor(duthosts, tbinfo, rand_one_dut_hostname, localhost, creds, docker_network):
809+
def test_cacl_application_nondualtor(duthosts, tbinfo, enum_rand_one_per_hwsku_hostname, localhost, creds, docker_network):
809810
"""
810811
Test case to ensure caclmgrd is applying control plane ACLs properly
811812
812813
This is done by generating our own set of expected iptables and ip6tables
813814
rules based on the DuT's configuration and comparing them against the
814815
actual iptables/ip6tables rules on the DuT.
815816
"""
816-
duthost = duthosts[rand_one_dut_hostname]
817+
duthost = duthosts[enum_rand_one_per_hwsku_hostname]
817818
verify_cacl(duthost, tbinfo, localhost, creds, docker_network)
818819

819820
def test_cacl_application_dualtor(duthost_dualtor, tbinfo, localhost, creds, docker_network, expected_dhcp_rules_for_standby):
@@ -826,23 +827,25 @@ def test_cacl_application_dualtor(duthost_dualtor, tbinfo, localhost, creds, doc
826827
"""
827828
verify_cacl(duthost_dualtor, tbinfo, localhost, creds, docker_network, expected_dhcp_rules_for_standby)
828829

829-
def test_multiasic_cacl_application(duthosts, tbinfo, rand_one_dut_hostname, localhost, creds, docker_network, enum_frontend_asic_index):
830+
def test_multiasic_cacl_application(duthosts, tbinfo, enum_rand_one_per_hwsku_hostname, localhost, creds, docker_network, enum_frontend_asic_index):
830831
"""
831832
Test case to ensure caclmgrd is applying control plane ACLs properly on multi-ASIC platform.
832833
"""
833-
duthost = duthosts[rand_one_dut_hostname]
834+
duthost = duthosts[enum_rand_one_per_hwsku_hostname]
834835
verify_cacl(duthost, tbinfo, localhost, creds, docker_network, None, enum_frontend_asic_index)
835-
verify_nat_cacl(duthost, localhost, creds, docker_network, enum_frontend_asic_index)
836+
# Check added to handle testing on supervisor which could be multi-asic dut without any frontend asic
837+
if enum_frontend_asic_index:
838+
verify_nat_cacl(duthost, localhost, creds, docker_network, enum_frontend_asic_index)
836839

837-
def test_cacl_scale_rules_ipv4(duthosts, rand_one_dut_hostname, collect_ignored_rules, clean_scale_rules):
840+
def test_cacl_scale_rules_ipv4(duthosts, enum_rand_one_per_hwsku_hostname, collect_ignored_rules, clean_scale_rules):
838841
"""
839842
Test case to ensure cover scale rules for control plan ACL for ipv4
840843
841844
This is done by collecting existing iptable rules as ingnored rules list, creating scale rules for SNMP-ACL, SSH-ONLY, NTP-ACL tables
842845
and generating our own set of expected iptables rules based on the DUT's configuration and comparing them against the actual iptables
843846
rules on the DuT.
844847
"""
845-
duthost = duthosts[rand_one_dut_hostname]
848+
duthost = duthosts[enum_rand_one_per_hwsku_hostname]
846849
ignored_iptable_rules_v4 = collect_ignored_rules["v4"]
847850

848851
generate_scale_rules(duthost, "ipv4")
@@ -868,15 +871,15 @@ def test_cacl_scale_rules_ipv4(duthosts, rand_one_dut_hostname, collect_ignored_
868871
unexpected_iptables_rules = set(actual_iptables_rules) - set(expected_iptables_rules) - set(ignored_iptable_rules_v4)
869872
pytest_assert(len(unexpected_iptables_rules) == 0, "Unexpected iptables rules: {}".format(repr(unexpected_iptables_rules)))
870873

871-
def test_cacl_scale_rules_ipv6(duthosts, rand_one_dut_hostname, collect_ignored_rules, clean_scale_rules):
874+
def test_cacl_scale_rules_ipv6(duthosts, enum_rand_one_per_hwsku_hostname, collect_ignored_rules, clean_scale_rules):
872875
"""
873876
Test case to ensure cover scale rules for control plan ACL for ipv6
874877
875878
This is done by collecting existing ip6table rules as ingnored rules list, creating scale rules for SNMP-ACL, SSH-ONLY, NTP-ACL tables
876879
and generating our own set of expected ip6tables rules based on the DUT's configuration and comparing them against the actual ip6tables
877880
rules on the DuT.
878881
"""
879-
duthost = duthosts[rand_one_dut_hostname]
882+
duthost = duthosts[enum_rand_one_per_hwsku_hostname]
880883
ignored_iptable_rules_v6 = collect_ignored_rules["v6"]
881884

882885
generate_scale_rules(duthost, "ipv6")

0 commit comments

Comments
 (0)