Skip to content

Commit c367995

Browse files
committed
add UT
1 parent 2c6dbd1 commit c367995

File tree

3 files changed

+135
-7
lines changed

3 files changed

+135
-7
lines changed

generic_config_updater/field_operation_validators.py

+1-2
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,9 @@ def get_asic_name():
1212
asic = "unknown"
1313
command = ["sudo", "lspci"]
1414
hwsku = device_info.get_hwsku()
15-
1615
proc = subprocess.Popen(command, universal_newlines=True, stdout=subprocess.PIPE)
17-
output = proc.stdout.readlines()
1816
proc.communicate()
17+
output = proc.stdout.readlines()
1918

2019
if proc.returncode == 0:
2120
if "Broadcom Limited Device b960" in output or "Broadcom Limited Broadcom BCM56960" in output:
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
import unittest
2+
import mock
3+
import subprocess
4+
import generic_config_updater
5+
import generic_config_updater.field_operation_validators as fov
6+
import generic_config_updater.gu_common as gu_common
7+
8+
from unittest.mock import MagicMock, Mock
9+
from mock import patch
10+
from sonic_py_common.device_info import get_hwsku, get_sonic_version_info
11+
12+
13+
class TestValidateFieldOperation(unittest.TestCase):
14+
15+
@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"asic_type": "mellanox", "build_version": "SONiC.20181131"}))
16+
def test_validate_field_operation_legal__pfcwd(self):
17+
old_config = {"PFC_WD": {"GLOBAL": {"POLL_INTERVAL": "60"}}}
18+
target_config = {"PFC_WD": {"GLOBAL": {"POLL_INTERVAL": "40"}}}
19+
config_wrapper = gu_common.ConfigWrapper()
20+
config_wrapper.validate_field_operation(old_config, target_config)
21+
22+
def test_validate_field_operation_illegal__pfcwd(self):
23+
old_config = {"PFC_WD": {"GLOBAL": {"POLL_INTERVAL": "60"}}}
24+
target_config = {"PFC_WD": {"GLOBAL": {}}}
25+
config_wrapper = gu_common.ConfigWrapper()
26+
self.assertRaises(gu_common.IllegalPatchOperationError, config_wrapper.validate_field_operation, old_config, target_config)
27+
28+
@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"build_version": "SONiC.20181131"}))
29+
@patch("generic_config_updater.field_operation_validators.get_asic_name", mock.Mock(return_value="unknown"))
30+
def test_validate_field_modification_illegal__pfcwd(self):
31+
path = "/PFC_WD/GLOBAL/POLL_INTERVAL"
32+
operation = "replace"
33+
assert generic_config_updater.field_operation_validators.rdma_config_update_validator(path, operation) == False
34+
35+
def test_validate_field_operation_legal__rm_loopback1(self):
36+
old_config = {
37+
"LOOPBACK_INTERFACE": {
38+
"Loopback0": {},
39+
"Loopback0|10.1.0.32/32": {},
40+
"Loopback1": {},
41+
"Loopback1|10.1.0.33/32": {}
42+
}
43+
}
44+
target_config = {
45+
"LOOPBACK_INTERFACE": {
46+
"Loopback0": {},
47+
"Loopback0|10.1.0.32/32": {}
48+
}
49+
}
50+
config_wrapper = gu_common.ConfigWrapper()
51+
config_wrapper.validate_field_operation(old_config, target_config)
52+
53+
def test_validate_field_operation_illegal__rm_loopback0(self):
54+
old_config = {
55+
"LOOPBACK_INTERFACE": {
56+
"Loopback0": {},
57+
"Loopback0|10.1.0.32/32": {},
58+
"Loopback1": {},
59+
"Loopback1|10.1.0.33/32": {}
60+
}
61+
}
62+
target_config = {
63+
"LOOPBACK_INTERFACE": {
64+
"Loopback1": {},
65+
"Loopback1|10.1.0.33/32": {}
66+
}
67+
}
68+
config_wrapper = gu_common.ConfigWrapper()
69+
self.assertRaises(gu_common.IllegalPatchOperationError, config_wrapper.validate_field_operation, old_config, target_config)
70+
71+
class TestGetAsicName(unittest.TestCase):
72+
73+
@patch('sonic_py_common.device_info.get_hwsku')
74+
@patch('sonic_py_common.device_info.get_sonic_version_info')
75+
@patch('subprocess.Popen')
76+
def test_get_asic_spc1(self, mock_popen, mock_get_sonic_version_info, mock_get_hwsku):
77+
mock_get_hwsku.return_value = 'ACS-MSN2700'
78+
mock_get_sonic_version_info.return_value = {'asic_type': ''}
79+
mock_popen.return_value = mock.Mock()
80+
mock_popen.return_value.stdout.readlines.return_value = ""
81+
mock_popen.return_value.returncode = 0
82+
self.assertEqual(fov.get_asic_name(), "spc1")
83+
84+
@patch('sonic_py_common.device_info.get_hwsku')
85+
@patch('sonic_py_common.device_info.get_sonic_version_info')
86+
@patch('subprocess.Popen')
87+
def test_get_asic_th(self, mock_popen, mock_get_sonic_version_info, mock_get_hwsku):
88+
mock_popen.return_value = mock.Mock()
89+
mock_popen.return_value.stdout.readlines.return_value = "Broadcom Limited Device b960"
90+
mock_popen.return_value.returncode = 0
91+
self.assertEqual(fov.get_asic_name(), "th")
92+
93+
@patch('sonic_py_common.device_info.get_hwsku')
94+
@patch('sonic_py_common.device_info.get_sonic_version_info')
95+
@patch('subprocess.Popen')
96+
def test_get_asic_th2(self, mock_popen, mock_get_sonic_version_info, mock_get_hwsku):
97+
mock_popen.return_value = mock.Mock()
98+
mock_popen.return_value.stdout.readlines.return_value = "Broadcom Limited Device b971"
99+
mock_popen.return_value.returncode = 0
100+
self.assertEqual(fov.get_asic_name(), "th2")
101+
102+
@patch('sonic_py_common.device_info.get_hwsku')
103+
@patch('sonic_py_common.device_info.get_sonic_version_info')
104+
@patch('subprocess.Popen')
105+
def test_get_asic_td2(self, mock_popen, mock_get_sonic_version_info, mock_get_hwsku):
106+
mock_popen.return_value = mock.Mock()
107+
mock_popen.return_value.stdout.readlines.return_value = "Broadcom Limited Device b850"
108+
mock_popen.return_value.returncode = 0
109+
self.assertEqual(fov.get_asic_name(), "td2")
110+
111+
@patch('sonic_py_common.device_info.get_hwsku')
112+
@patch('sonic_py_common.device_info.get_sonic_version_info')
113+
@patch('subprocess.Popen')
114+
def test_get_asic_td3(self, mock_popen, mock_get_sonic_version_info, mock_get_hwsku):
115+
mock_popen.return_value = mock.Mock()
116+
mock_popen.return_value.stdout.readlines.return_value = "Broadcom Limited Device b870"
117+
mock_popen.return_value.returncode = 0
118+
self.assertEqual(fov.get_asic_name(), "td3")
119+
120+
@patch('sonic_py_common.device_info.get_hwsku')
121+
@patch('sonic_py_common.device_info.get_sonic_version_info')
122+
@patch('subprocess.Popen')
123+
def test_get_asic_cisco(self, mock_popen, mock_get_sonic_version_info, mock_get_hwsku):
124+
mock_get_sonic_version_info.return_value = {'asic_type': 'cisco-8000'}
125+
mock_popen.return_value = mock.Mock()
126+
mock_popen.return_value.stdout.readlines.return_value = ""
127+
mock_popen.return_value.returncode = 0
128+
self.assertEqual(fov.get_asic_name(), "cisco-8000")

tests/generic_config_updater/gu_common_test.py

+6-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import sonic_yang
55
import unittest
66
import mock
7+
import generic_config_updater
78

89
from unittest.mock import MagicMock, Mock
910
from mock import patch
@@ -84,12 +85,12 @@ def test_validate_field_operation_illegal__pfcwd(self):
8485
config_wrapper = gu_common.ConfigWrapper()
8586
self.assertRaises(gu_common.IllegalPatchOperationError, config_wrapper.validate_field_operation, old_config, target_config)
8687

87-
@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"asic_type": "invalid-asic", "build_version": "SONiC.20181131"}))
88+
@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"build_version": "SONiC.20181131"}))
89+
@patch("generic_config_updater.field_operation_validators.get_asic_name", mock.Mock(return_value="unknown"))
8890
def test_validate_field_modification_illegal__pfcwd(self):
89-
old_config = {"PFC_WD": {"GLOBAL": {"POLL_INTERVAL": "60"}}}
90-
target_config = {"PFC_WD": {"GLOBAL": {"POLL_INTERVAL": "80"}}}
91-
config_wrapper = gu_common.ConfigWrapper()
92-
self.assertRaises(gu_common.IllegalPatchOperationError, config_wrapper.validate_field_operation, old_config, target_config)
91+
path = "/PFC_WD/GLOBAL/POLL_INTERVAL"
92+
operation = "replace"
93+
assert generic_config_updater.field_operation_validators.rdma_config_update_validator(path, operation) == False
9394

9495
def test_validate_field_operation_legal__rm_loopback1(self):
9596
old_config = {

0 commit comments

Comments
 (0)