Skip to content

Commit

Permalink
[port2alias]: Fix to get right number of return values (sonic-net#1906)
Browse files Browse the repository at this point in the history
What I did
get_port_config was modified to return different set number of arguments in PR: sonic-net/sonic-buildimage#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.

(cherry picked from commit 3714f63)
Signed-off-by: Suvarna Meenakshi <sumeenak@microsoft.com>
  • Loading branch information
SuvarnaMeenakshi committed May 27, 2022
1 parent 2a9aea6 commit c2ecc19
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 1 deletion.
19 changes: 18 additions & 1 deletion scripts/port2alias
Original file line number Diff line number Diff line change
@@ -1,11 +1,25 @@
#!/usr/bin/env python3

import sys
import os
from io import StringIO

from portconfig import get_port_config
from sonic_py_common import device_info
from sonic_py_common import multi_asic

# mock the redis for unit test purposes #
try:
if os.environ["UTILITIES_UNIT_TESTING"] == "2":
modules_path = os.path.join(os.path.dirname(__file__), "..")
test_path = os.path.join(modules_path, "tests")
sys.path.insert(0, modules_path)
sys.path.insert(0, test_path)
import mock_tables.dbconnector
import mock_tables.mock_multi_asic
mock_tables.dbconnector.load_namespace_config()
except KeyError:
pass

def translate_line(line, ports):
allowed_symbols = ['-', '_']
Expand Down Expand Up @@ -35,7 +49,10 @@ def translate_line(line, ports):

def main():
(platform, hwsku) = device_info.get_platform_and_hwsku()
(ports, _) = get_port_config(hwsku, platform)
ports = {}
for ns in multi_asic.get_namespace_list():
(ports_ns, _, _) = get_port_config(hwsku=hwsku, platform=platform, asic_name=ns)
ports.update(ports_ns)
for line in sys.stdin:
sys.stdout.write(translate_line(line, ports))

Expand Down
39 changes: 39 additions & 0 deletions tests/port2alias_test.py
Original file line number Diff line number Diff line change
@@ -1,20 +1,32 @@
import sys
import os
from unittest import TestCase
from unittest import mock
from mock import patch
from io import StringIO
import tests.mock_tables.dbconnector
import importlib

import imp

port2alias = imp.load_source('port2alias', os.path.join(os.path.dirname(__file__), '..', 'scripts', 'port2alias'))

class TestPort2Alias(TestCase):
def setUp(self):
port2alias = load_module_from_source('port2alias', port2alias_path)
self.ports = {
"Ethernet1": {"alias" : "fortyG0/1"},
"Ethernet2": {"alias" : "fortyG0/2"},
"Ethernet10": {"alias" : "fortyG0/10"},
"Ethernet_11": {"alias" : "fortyG0/11"},
}

@mock.patch('sys.stdout.write')
def test_main(self, mock_stdout):
with patch('sys.stdin', StringIO("Ethernet0")):
port2alias.main()
mock_stdout.assert_called_with("etp1")

def test_translate_line_single_word(self):
self.assertEqual(port2alias.translate_line("1", self.ports),"1")
self.assertEqual(port2alias.translate_line("1\n", self.ports),"1\n")
Expand All @@ -39,3 +51,30 @@ def test_translate_line_multiple_words(self):
def test_translate_line_empty_ports(self):
self.assertEqual(port2alias.translate_line("Ethernet1\n", {}),"Ethernet1\n")

class TestPort2AliasNamespace(TestCase):
@classmethod
def setup_class(cls):
os.environ['UTILITIES_UNIT_TESTING'] = "2"
from .mock_tables import dbconnector
from .mock_tables import mock_multi_asic
importlib.reload(mock_multi_asic)
dbconnector.load_namespace_config()

def setUp(self):
port2alias = load_module_from_source('port2alias', port2alias_path)

@mock.patch('sys.stdout.write')
def test_main(self, mock_stdout):
with patch('sys.stdin', StringIO("Ethernet0")):
port2alias.main()
mock_stdout.assert_called_with("Ethernet1/1")

@classmethod
def teardown_class(cls):
print("TEARDOWN")
os.environ['UTILITIES_UNIT_TESTING'] = "0"
# change back to single asic config
from .mock_tables import dbconnector
from .mock_tables import mock_single_asic
importlib.reload(mock_single_asic)
dbconnector.load_namespace_config()

0 comments on commit c2ecc19

Please sign in to comment.