Skip to content

Commit 3714f63

Browse files
[port2alias]: Fix to get right number of return values (sonic-net#1906)
What I did get_port_config was modified to return different set number of arguments in PR: sonic-net#4222. Changes in this PR is: To address the different set of return values To get the ports from all namespaces To add unit-test How I did it Modify port2alias to read ports from all namespaces and also add unit-test How to verify it Test on single and multi-asic platforms. unit-test passed.
1 parent 3fa0854 commit 3714f63

File tree

2 files changed

+73
-19
lines changed

2 files changed

+73
-19
lines changed

scripts/port2alias

+18-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,25 @@
11
#!/usr/bin/env python3
22

33
import sys
4+
import os
45
from io import StringIO
56

67
from portconfig import get_port_config
78
from sonic_py_common import device_info
9+
from sonic_py_common import multi_asic
810

11+
# mock the redis for unit test purposes #
12+
try:
13+
if os.environ["UTILITIES_UNIT_TESTING"] == "2":
14+
modules_path = os.path.join(os.path.dirname(__file__), "..")
15+
test_path = os.path.join(modules_path, "tests")
16+
sys.path.insert(0, modules_path)
17+
sys.path.insert(0, test_path)
18+
import mock_tables.dbconnector
19+
import mock_tables.mock_multi_asic
20+
mock_tables.dbconnector.load_namespace_config()
21+
except KeyError:
22+
pass
923

1024
def translate_line(line, ports):
1125
allowed_symbols = ['-', '_']
@@ -35,7 +49,10 @@ def translate_line(line, ports):
3549

3650
def main():
3751
(platform, hwsku) = device_info.get_platform_and_hwsku()
38-
(ports, _) = get_port_config(hwsku, platform)
52+
ports = {}
53+
for ns in multi_asic.get_namespace_list():
54+
(ports_ns, _, _) = get_port_config(hwsku=hwsku, platform=platform, asic_name=ns)
55+
ports.update(ports_ns)
3956
for line in sys.stdin:
4057
sys.stdout.write(translate_line(line, ports))
4158

tests/port2alias_test.py

+55-18
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,81 @@
11
import os
22
import sys
33
from unittest import TestCase
4+
from unittest import mock
5+
from mock import patch
6+
from io import StringIO
7+
import tests.mock_tables.dbconnector
8+
import importlib
49

510
from utilities_common.general import load_module_from_source
6-
711
# Load the file under test
812
port2alias_path = os.path.join(os.path.dirname(__file__), '..', 'scripts', 'port2alias')
9-
port2alias = load_module_from_source('port2alias', port2alias_path)
1013

1114

1215
class TestPort2Alias(TestCase):
1316
def setUp(self):
17+
self.port2alias = load_module_from_source('port2alias', port2alias_path)
1418
self.ports = {
1519
"Ethernet1": {"alias" : "fortyG0/1"},
1620
"Ethernet2": {"alias" : "fortyG0/2"},
1721
"Ethernet10": {"alias" : "fortyG0/10"},
1822
"Ethernet_11": {"alias" : "fortyG0/11"},
1923
}
2024

25+
@mock.patch('sys.stdout.write')
26+
def test_main(self, mock_stdout):
27+
with patch('sys.stdin', StringIO("Ethernet0")):
28+
self.port2alias.main()
29+
mock_stdout.assert_called_with("etp1")
30+
2131
def test_translate_line_single_word(self):
22-
self.assertEqual(port2alias.translate_line("1", self.ports),"1")
23-
self.assertEqual(port2alias.translate_line("1\n", self.ports),"1\n")
24-
self.assertEqual(port2alias.translate_line("Ethernet1", self.ports),"fortyG0/1")
25-
self.assertEqual(port2alias.translate_line("Ethernet1\n", self.ports),"fortyG0/1\n")
26-
self.assertEqual(port2alias.translate_line("Ethernet2\n", self.ports),"fortyG0/2\n")
27-
self.assertEqual(port2alias.translate_line("Ethernet10\n", self.ports),"fortyG0/10\n")
28-
self.assertEqual(port2alias.translate_line("Ethernet20\n", self.ports),"Ethernet20\n")
32+
self.assertEqual(self.port2alias.translate_line("1", self.ports),"1")
33+
self.assertEqual(self.port2alias.translate_line("1\n", self.ports),"1\n")
34+
self.assertEqual(self.port2alias.translate_line("Ethernet1", self.ports),"fortyG0/1")
35+
self.assertEqual(self.port2alias.translate_line("Ethernet1\n", self.ports),"fortyG0/1\n")
36+
self.assertEqual(self.port2alias.translate_line("Ethernet2\n", self.ports),"fortyG0/2\n")
37+
self.assertEqual(self.port2alias.translate_line("Ethernet10\n", self.ports),"fortyG0/10\n")
38+
self.assertEqual(self.port2alias.translate_line("Ethernet20\n", self.ports),"Ethernet20\n")
2939

3040
def test_translate_line_with_symbol(self):
31-
self.assertEqual(port2alias.translate_line("Ethernet_11\n", self.ports),"fortyG0/11\n")
32-
self.assertEqual(port2alias.translate_line("Ethernet1_1\n", self.ports),"Ethernet1_1\n")
33-
self.assertEqual(port2alias.translate_line("Ethernet1-1\n", self.ports),"Ethernet1-1\n")
34-
self.assertEqual(port2alias.translate_line("Ethernet1/1\n", self.ports),"fortyG0/1/1\n")
35-
self.assertEqual(port2alias.translate_line("Ethernet1:1\n", self.ports),"fortyG0/1:1\n")
36-
self.assertEqual(port2alias.translate_line("Ethernet1 U\n", self.ports),"fortyG0/1 U\n")
41+
self.assertEqual(self.port2alias.translate_line("Ethernet_11\n", self.ports),"fortyG0/11\n")
42+
self.assertEqual(self.port2alias.translate_line("Ethernet1_1\n", self.ports),"Ethernet1_1\n")
43+
self.assertEqual(self.port2alias.translate_line("Ethernet1-1\n", self.ports),"Ethernet1-1\n")
44+
self.assertEqual(self.port2alias.translate_line("Ethernet1/1\n", self.ports),"fortyG0/1/1\n")
45+
self.assertEqual(self.port2alias.translate_line("Ethernet1:1\n", self.ports),"fortyG0/1:1\n")
46+
self.assertEqual(self.port2alias.translate_line("Ethernet1 U\n", self.ports),"fortyG0/1 U\n")
3747

3848
def test_translate_line_multiple_words(self):
39-
self.assertEqual(port2alias.translate_line(" Ethernet1 Ethernet2 \n", self.ports)," fortyG0/1 fortyG0/2 \n")
40-
self.assertEqual(port2alias.translate_line("Ethernet1,Ethernet1,Ethernet1,Ethernet1\n", self.ports),"fortyG0/1,fortyG0/1,fortyG0/1,fortyG0/1\n")
49+
self.assertEqual(self.port2alias.translate_line(" Ethernet1 Ethernet2 \n", self.ports)," fortyG0/1 fortyG0/2 \n")
50+
self.assertEqual(self.port2alias.translate_line("Ethernet1,Ethernet1,Ethernet1,Ethernet1\n", self.ports),"fortyG0/1,fortyG0/1,fortyG0/1,fortyG0/1\n")
4151

4252
def test_translate_line_empty_ports(self):
43-
self.assertEqual(port2alias.translate_line("Ethernet1\n", {}),"Ethernet1\n")
53+
self.assertEqual(self.port2alias.translate_line("Ethernet1\n", {}),"Ethernet1\n")
54+
55+
class TestPort2AliasNamespace(TestCase):
56+
@classmethod
57+
def setup_class(cls):
58+
os.environ['UTILITIES_UNIT_TESTING'] = "2"
59+
from .mock_tables import dbconnector
60+
from .mock_tables import mock_multi_asic
61+
importlib.reload(mock_multi_asic)
62+
dbconnector.load_namespace_config()
63+
64+
def setUp(self):
65+
self.port2alias = load_module_from_source('port2alias', port2alias_path)
66+
67+
@mock.patch('sys.stdout.write')
68+
def test_main(self, mock_stdout):
69+
with patch('sys.stdin', StringIO("Ethernet0")):
70+
self.port2alias.main()
71+
mock_stdout.assert_called_with("Ethernet1/1")
4472

73+
@classmethod
74+
def teardown_class(cls):
75+
print("TEARDOWN")
76+
os.environ['UTILITIES_UNIT_TESTING'] = "0"
77+
# change back to single asic config
78+
from .mock_tables import dbconnector
79+
from .mock_tables import mock_single_asic
80+
importlib.reload(mock_single_asic)
81+
dbconnector.load_namespace_config()

0 commit comments

Comments
 (0)