Skip to content

Commit 6a10766

Browse files
committed
[VOQ][saidump] Add saidump unit test scripts sonic-net#3079
sonic-net#2972 added two below functions into scripts/generate_dump. get_route_table_size_by_asic_id_and_ipver save_saidump_by_route_size The unittest scripts need to be added. Related PRs: sonic-net#2972 sonic-net/sonic-buildimage#16466 sonic-net/sonic-sairedis#1288 sonic-net/sonic-sairedis#1298 Microsoft ADO (25892277): Add two scripts: tests/saidump_test.py tests/saidump_test.sh To use below 6 test cases to verify the functionality of get_route_table_size_by_asic_id_and_ipver and save_saidump_by_route_size behave correctly. ``` saidump test list format: [ACIS number, ipv4 and ipv6 route table size, expected function save_cmd arguments] saidump_test_list = [ [1, 10000, "docker exec syncd saidump saidump"], [1, 12000, "docker exec syncd saidump saidump"], [1, 12001, "docker exec syncd saidump.sh saidump"], [1, 20000, "docker exec syncd saidump.sh saidump"], [2, 10000, "docker exec syncd0 saidump saidump0\ndocker exec syncd1 saidump saidump1"], [2, 12000, "docker exec syncd0 saidump saidump0\ndocker exec syncd1 saidump saidump1"], [2, 12001, "docker exec syncd0 saidump.sh saidump0\ndocker exec syncd1 saidump.sh saidump1"], [2, 20000, "docker exec syncd0 saidump.sh saidump0\ndocker exec syncd1 saidump.sh saidump1"] ] ``` During the compiling stage, run the below command to check if it's PASSED. jumao@1b1ffba5949a:/sonic/src/sonic-utilities$ time python3 setup.py test tests/saidump_test.py::test_saidump PASSED
1 parent 1ca9676 commit 6a10766

File tree

2 files changed

+96
-0
lines changed

2 files changed

+96
-0
lines changed

tests/saidump_test.py

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
import os
2+
import subprocess
3+
4+
GENERATE_DUMP_FILE = "/tmp/generate_dump_tmp"
5+
6+
test_path = os.path.dirname(os.path.abspath(__file__))
7+
modules_path = os.path.dirname(test_path)
8+
scripts_path = os.path.join(modules_path, "scripts")
9+
10+
11+
def run_saidump(asic_num, route_num):
12+
result = subprocess.run([". " + test_path + "/saidump_test.sh && test_saidump " + str(asic_num) +
13+
" " + str(route_num)], capture_output=True, text=True, shell=True, executable='/bin/bash')
14+
return result.stdout.strip()
15+
16+
17+
# saidump test list format: [ACIS number, ipv4 and ipv6 route table size, expected function save_cmd arguments]
18+
saidump_test_list = [
19+
[1, 10000, "docker exec syncd saidump saidump"],
20+
[1, 12000, "docker exec syncd saidump saidump"],
21+
[1, 12001, "docker exec syncd saidump.sh saidump"],
22+
[1, 20000, "docker exec syncd saidump.sh saidump"],
23+
[2, 10000, "docker exec syncd0 saidump saidump0\ndocker exec syncd1 saidump saidump1"],
24+
[2, 12000, "docker exec syncd0 saidump saidump0\ndocker exec syncd1 saidump saidump1"],
25+
[2, 12001, "docker exec syncd0 saidump.sh saidump0\ndocker exec syncd1 saidump.sh saidump1"],
26+
[2, 20000, "docker exec syncd0 saidump.sh saidump0\ndocker exec syncd1 saidump.sh saidump1"]
27+
]
28+
29+
30+
def shell_pre_process(in_file, out_file):
31+
buf = []
32+
33+
with open(in_file, 'r') as file:
34+
lines = file.readlines()
35+
36+
for line in lines:
37+
if line.strip().startswith("while getopts"):
38+
break
39+
else:
40+
buf.append(line)
41+
42+
# Write the modified content back to the file
43+
with open(out_file, 'w') as file:
44+
file.writelines(buf)
45+
46+
47+
def test_saidump():
48+
# preprocess the generate_dump to a new script without non-functional codes
49+
shell_pre_process(scripts_path + '/generate_dump', GENERATE_DUMP_FILE)
50+
51+
for item in saidump_test_list:
52+
output = run_saidump(item[0], item[1])
53+
assert output == item[2]
54+
55+
os.remove(GENERATE_DUMP_FILE)

tests/saidump_test.sh

+41
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
#!/bin/bash
2+
3+
GENERATE_DUMP_FILE="/tmp/generate_dump_tmp"
4+
ROUTE_FILE="/tmp/route_summary.txt"
5+
shopt -s expand_aliases
6+
alias eval="mock_eval"
7+
alias save_cmd="mock_save_cmd"
8+
9+
source $GENERATE_DUMP_FILE
10+
11+
mock_route_summary(){
12+
local routenum=$1
13+
echo "\
14+
{
15+
\"routesTotal\":$routenum
16+
}" > $ROUTE_FILE
17+
}
18+
19+
route_num=0
20+
save_cmd_arguments=""
21+
22+
# Mock eval command in function get_route_table_size_by_asic_id_and_ipver
23+
mock_eval(){
24+
mock_route_summary $route_num
25+
}
26+
27+
# Mock function save_cmd called in function save_saidump_by_route_size
28+
mock_save_cmd(){
29+
save_cmd_arguments="$save_cmd_arguments$*\n"
30+
}
31+
32+
test_saidump(){
33+
NUM_ASICS=$1
34+
route_num=$2
35+
save_saidump_by_route_size > /dev/null
36+
echo -e $save_cmd_arguments
37+
local ret=$save_cmd_arguments
38+
save_cmd_arguments=""
39+
rm $ROUTE_FILE
40+
return $ret
41+
}

0 commit comments

Comments
 (0)