Skip to content

Commit 496c81e

Browse files
committed
feat: support stress routes test on T2 topo (sonic-net#13341)
1 parent c9ffb8d commit 496c81e

3 files changed

Lines changed: 37 additions & 23 deletions

File tree

tests/stress/conftest.py

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import logging
2-
import pytest
32
import time
43

4+
import pytest
5+
56
from tests.common.utilities import wait_until
6-
from utils import get_crm_resources, check_queue_status, sleep_to_wait
7+
from utils import get_crm_resource_status, check_queue_status, sleep_to_wait
78

89
CRM_POLLING_INTERVAL = 1
910
CRM_DEFAULT_POLL_INTERVAL = 300
@@ -18,7 +19,8 @@ def get_function_conpleteness_level(pytestconfig):
1819

1920

2021
@pytest.fixture(scope="module", autouse=True)
21-
def set_polling_interval(duthost):
22+
def set_polling_interval(duthosts, enum_rand_one_per_hwsku_frontend_hostname):
23+
duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname]
2224
wait_time = 2
2325
duthost.command("crm config polling interval {}".format(CRM_POLLING_INTERVAL))
2426
logger.info("Waiting {} sec for CRM counters to become updated".format(wait_time))
@@ -32,7 +34,12 @@ def set_polling_interval(duthost):
3234

3335

3436
@pytest.fixture(scope='module')
35-
def withdraw_and_announce_existing_routes(duthost, localhost, tbinfo):
37+
def withdraw_and_announce_existing_routes(duthosts, localhost, tbinfo, enum_rand_one_per_hwsku_frontend_hostname,
38+
enum_rand_one_frontend_asic_index):
39+
duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname]
40+
asichost = duthost.asic_instance(enum_rand_one_frontend_asic_index)
41+
namespace = asichost.namespace
42+
3643
ptf_ip = tbinfo["ptf_ip"]
3744
topo_name = tbinfo["topo"]["name"]
3845

@@ -41,8 +48,8 @@ def withdraw_and_announce_existing_routes(duthost, localhost, tbinfo):
4148

4249
wait_until(MAX_WAIT_TIME, CRM_POLLING_INTERVAL, 0, lambda: check_queue_status(duthost, "inq") == True)
4350
sleep_to_wait(CRM_POLLING_INTERVAL * 100)
44-
ipv4_route_used_before = get_crm_resources(duthost, "ipv4_route", "used")
45-
ipv6_route_used_before = get_crm_resources(duthost, "ipv6_route", "used")
51+
ipv4_route_used_before = get_crm_resource_status(duthost, "ipv4_route", "used", namespace)
52+
ipv6_route_used_before = get_crm_resource_status(duthost, "ipv6_route", "used", namespace)
4653
logger.info("ipv4 route used {}".format(ipv4_route_used_before))
4754
logger.info("ipv6 route used {}".format(ipv6_route_used_before))
4855

@@ -53,6 +60,5 @@ def withdraw_and_announce_existing_routes(duthost, localhost, tbinfo):
5360

5461
wait_until(MAX_WAIT_TIME, CRM_POLLING_INTERVAL, 0, lambda: check_queue_status(duthost, "outq") == True)
5562
sleep_to_wait(CRM_POLLING_INTERVAL * 5)
56-
logger.info("ipv4 route used {}".format(get_crm_resources(duthost, "ipv4_route", "used")))
57-
logger.info("ipv6 route used {}".format(get_crm_resources(duthost, "ipv6_route", "used")))
58-
63+
logger.info("ipv4 route used {}".format(get_crm_resource_status(duthost, "ipv4_route", "used", namespace)))
64+
logger.info("ipv6 route used {}".format(get_crm_resource_status(duthost, "ipv6_route", "used", namespace)))

tests/stress/test_stress_routes.py

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
#!/usr/bin/env python
22

33
import logging
4+
45
import pytest
56

67
from tests.common.helpers.assertions import pytest_assert
78
from tests.common.utilities import wait_until
8-
from utils import get_crm_resources, check_queue_status, sleep_to_wait, LOOP_TIMES_LEVEL_MAP
9+
from utils import get_crm_resource_status, check_queue_status, sleep_to_wait, LOOP_TIMES_LEVEL_MAP
910

1011
ALLOW_ROUTES_CHANGE_NUMS = 5
1112
CRM_POLLING_INTERVAL = 1
@@ -14,33 +15,38 @@
1415
logger = logging.getLogger(__name__)
1516

1617
pytestmark = [
17-
pytest.mark.topology('t0', 't1', 'm0', 'mx')
18+
pytest.mark.topology('t0', 't1', 'm0', 'mx', 't2')
1819
]
1920

2021

21-
def announce_withdraw_routes(duthost, localhost, ptf_ip, topo_name):
22+
def announce_withdraw_routes(duthost, namespace, localhost, ptf_ip, topo_name):
2223
logger.info("announce ipv4 and ipv6 routes")
2324
localhost.announce_routes(topo_name=topo_name, ptf_ip=ptf_ip, action="announce", path="../ansible/")
2425

2526
wait_until(MAX_WAIT_TIME, CRM_POLLING_INTERVAL, 0, lambda: check_queue_status(duthost, "outq") is True)
2627

27-
logger.info("ipv4 route used {}".format(get_crm_resources(duthost, "ipv4_route", "used")))
28-
logger.info("ipv6 route used {}".format(get_crm_resources(duthost, "ipv6_route", "used")))
28+
logger.info("ipv4 route used {}".format(get_crm_resource_status(duthost, "ipv4_route", "used", namespace)))
29+
logger.info("ipv6 route used {}".format(get_crm_resource_status(duthost, "ipv6_route", "used", namespace)))
2930
sleep_to_wait(CRM_POLLING_INTERVAL * 5)
3031

3132
logger.info("withdraw ipv4 and ipv6 routes")
3233
localhost.announce_routes(topo_name=topo_name, ptf_ip=ptf_ip, action="withdraw", path="../ansible/")
3334

3435
wait_until(MAX_WAIT_TIME, CRM_POLLING_INTERVAL, 0, lambda: check_queue_status(duthost, "inq") is True)
3536
sleep_to_wait(CRM_POLLING_INTERVAL * 5)
36-
logger.info("ipv4 route used {}".format(get_crm_resources(duthost, "ipv4_route", "used")))
37-
logger.info("ipv6 route used {}".format(get_crm_resources(duthost, "ipv6_route", "used")))
37+
logger.info("ipv4 route used {}".format(get_crm_resource_status(duthost, "ipv4_route", "used", namespace)))
38+
logger.info("ipv6 route used {}".format(get_crm_resource_status(duthost, "ipv6_route", "used", namespace)))
3839

3940

40-
def test_announce_withdraw_route(duthost, localhost, tbinfo, get_function_conpleteness_level,
41-
withdraw_and_announce_existing_routes, loganalyzer):
41+
def test_announce_withdraw_route(duthosts, localhost, tbinfo, get_function_conpleteness_level,
42+
withdraw_and_announce_existing_routes, loganalyzer,
43+
enum_rand_one_per_hwsku_frontend_hostname, enum_rand_one_frontend_asic_index):
4244
ptf_ip = tbinfo["ptf_ip"]
4345
topo_name = tbinfo["topo"]["name"]
46+
duthost = duthosts[enum_rand_one_per_hwsku_frontend_hostname]
47+
asichost = duthost.asic_instance(enum_rand_one_frontend_asic_index)
48+
namespace = asichost.namespace
49+
4450
if loganalyzer:
4551
ignoreRegex = [
4652
".*ERR route_check.py:.*",
@@ -57,13 +63,13 @@ def test_announce_withdraw_route(duthost, localhost, tbinfo, get_function_conple
5763
loop_times = LOOP_TIMES_LEVEL_MAP[normalized_level]
5864

5965
while loop_times > 0:
60-
announce_withdraw_routes(duthost, localhost, ptf_ip, topo_name)
66+
announce_withdraw_routes(duthost, namespace, localhost, ptf_ip, topo_name)
6167
loop_times -= 1
6268

6369
sleep_to_wait(CRM_POLLING_INTERVAL * 100)
6470

65-
ipv4_route_used_after = get_crm_resources(duthost, "ipv4_route", "used")
66-
ipv6_route_used_after = get_crm_resources(duthost, "ipv6_route", "used")
71+
ipv4_route_used_after = get_crm_resource_status(duthost, "ipv4_route", "used", namespace)
72+
ipv6_route_used_after = get_crm_resource_status(duthost, "ipv6_route", "used", namespace)
6773

6874
pytest_assert(abs(ipv4_route_used_after - ipv4_route_used_before) < ALLOW_ROUTES_CHANGE_NUMS,
6975
"ipv4 route used after is not equal to it used before")

tests/stress/utils.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import re
22
import time
33

4+
from tests.common.helpers.constants import DEFAULT_NAMESPACE
45

56
TOPO_FILENAME_TEMPLATE = 'topo_{}.yml'
67
SHOW_BGP_SUMMARY_CMD = "show ip bgp summary"
@@ -12,8 +13,9 @@
1213
'diagnose': 200
1314
}
1415

15-
def get_crm_resources(duthost, resource, status):
16-
return duthost.get_crm_resources().get("main_resources").get(resource).get(status)
16+
17+
def get_crm_resource_status(duthost, resource, status, namespace=DEFAULT_NAMESPACE):
18+
return duthost.get_crm_resources(namespace).get("main_resources").get(resource).get(status)
1719

1820
def check_queue_status(duthost, queue):
1921
bgp_neighbors = duthost.show_and_parse(SHOW_BGP_SUMMARY_CMD)

0 commit comments

Comments
 (0)