Skip to content

Commit f96a132

Browse files
authored
[consutil] Fix consule CLI and enhance unittest (sonic-net#3360)
**What I did?** 1. Bugfix for console CLI (This is introduced by [consutil] replace shell=True sonic-net#2725, * cannot be treated as wildcard correctly). ``` admin@sonic:~$ show line ls: cannot access '/dev/C0-*': No such file or directory ``` 2. Enhance UT to avoid regression mentioned in 1. 3. Fix incorrect statement in UT. 4. Fix critical Flake8 error. **How to verify it** 1. Verified on Nokia-7215 MC0 device. 2. Verified by UT Sign-Off By: Zhijian Li <zhijianli@microsoft.com>
1 parent 1ebd099 commit f96a132

File tree

4 files changed

+12
-9
lines changed

4 files changed

+12
-9
lines changed

consutil/lib.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def init_device_prefix():
277277
@staticmethod
278278
def list_console_ttys():
279279
"""Lists all console tty devices"""
280-
cmd = ["ls", SysInfoProvider.DEVICE_PREFIX + "*"]
280+
cmd = ["bash", "-c", "ls " + SysInfoProvider.DEVICE_PREFIX + "*"]
281281
output, _ = SysInfoProvider.run_command(cmd, abort=False)
282282
ttys = output.split('\n')
283283
ttys = list([dev for dev in ttys if re.match(SysInfoProvider.DEVICE_PREFIX + r"\d+", dev) != None])

tests/console_mock/dev/ttyACM1

Whitespace-only changes.

tests/console_mock/dev/ttyUSB0

Whitespace-only changes.

tests/console_test.py

+11-8
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,15 @@
1414

1515
from click.testing import CliRunner
1616
from utilities_common.db import Db
17-
from consutil.lib import *
17+
from consutil.lib import ConsolePortProvider, ConsolePortInfo, ConsoleSession, SysInfoProvider, DbUtils, \
18+
InvalidConfigurationError, LineBusyError, LineNotFoundError, ConnectionFailedError
1819
from sonic_py_common import device_info
1920
from jsonpatch import JsonPatchConflict
2021

22+
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
23+
CONSOLE_MOCK_DIR = SCRIPT_DIR + "/console_mock"
24+
25+
2126
class TestConfigConsoleCommands(object):
2227
@classmethod
2328
def setup_class(cls):
@@ -543,17 +548,15 @@ def test_sys_info_provider_init_device_prefix_plugin(self):
543548
with mock.patch("builtins.open", mock.mock_open(read_data="C0-")):
544549
SysInfoProvider.init_device_prefix()
545550
assert SysInfoProvider.DEVICE_PREFIX == "/dev/C0-"
546-
SysInfoProvider.DEVICE_PREFIX = "/dev/ttyUSB"
547551

548-
@mock.patch('consutil.lib.SysInfoProvider.run_command', mock.MagicMock(return_value=("/dev/ttyUSB0\n/dev/ttyACM1", "")))
549552
def test_sys_info_provider_list_console_ttys(self):
550-
SysInfoProvider.DEVICE_PREFIX == "/dev/ttyUSB"
553+
SysInfoProvider.DEVICE_PREFIX = CONSOLE_MOCK_DIR + "/dev/ttyUSB"
551554
ttys = SysInfoProvider.list_console_ttys()
552555
print(SysInfoProvider.DEVICE_PREFIX)
553556
assert len(ttys) == 1
554557

555-
@mock.patch('consutil.lib.SysInfoProvider.run_command', mock.MagicMock(return_value=("", "ls: cannot access '/dev/ttyUSB*': No such file or directory")))
556558
def test_sys_info_provider_list_console_ttys_device_not_exists(self):
559+
SysInfoProvider.DEVICE_PREFIX = CONSOLE_MOCK_DIR + "/dev_not_exist/ttyUSB"
557560
ttys = SysInfoProvider.list_console_ttys()
558561
assert len(ttys) == 0
559562

@@ -563,7 +566,7 @@ def test_sys_info_provider_list_console_ttys_device_not_exists(self):
563566
"""
564567
@mock.patch('consutil.lib.SysInfoProvider.run_command', mock.MagicMock(return_value=all_active_processes_output))
565568
def test_sys_info_provider_list_active_console_processes(self):
566-
SysInfoProvider.DEVICE_PREFIX == "/dev/ttyUSB"
569+
SysInfoProvider.DEVICE_PREFIX = "/dev/ttyUSB"
567570
procs = SysInfoProvider.list_active_console_processes()
568571
assert len(procs) == 1
569572
assert "0" in procs
@@ -572,15 +575,15 @@ def test_sys_info_provider_list_active_console_processes(self):
572575
active_process_output = "13751 Wed Mar 6 08:31:35 2019 /usr/bin/sudo picocom -b 9600 -f n /dev/ttyUSB1"
573576
@mock.patch('consutil.lib.SysInfoProvider.run_command', mock.MagicMock(return_value=active_process_output))
574577
def test_sys_info_provider_get_active_console_process_info_exists(self):
575-
SysInfoProvider.DEVICE_PREFIX == "/dev/ttyUSB"
578+
SysInfoProvider.DEVICE_PREFIX = "/dev/ttyUSB"
576579
proc = SysInfoProvider.get_active_console_process_info("13751")
577580
assert proc is not None
578581
assert proc == ("1", "13751", "Wed Mar 6 08:31:35 2019")
579582

580583
active_process_empty_output = ""
581584
@mock.patch('consutil.lib.SysInfoProvider.run_command', mock.MagicMock(return_value=active_process_empty_output))
582585
def test_sys_info_provider_get_active_console_process_info_nonexists(self):
583-
SysInfoProvider.DEVICE_PREFIX == "/dev/ttyUSB"
586+
SysInfoProvider.DEVICE_PREFIX = "/dev/ttyUSB"
584587
proc = SysInfoProvider.get_active_console_process_info("2")
585588
assert proc is None
586589

0 commit comments

Comments
 (0)