Skip to content

Commit

Permalink
add UT
Browse files Browse the repository at this point in the history
  • Loading branch information
isabelmsft committed Apr 19, 2023
1 parent f54c0cf commit 79ed8df
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 10 deletions.
4 changes: 2 additions & 2 deletions generic_config_updater/field_operation_validators.py
Original file line number Diff line number Diff line change
Expand Up @@ -86,8 +86,8 @@ def rdma_config_update_validator(path, operation):
if operation not in scenario["operations"]:
return False

if platform in scenario["platforms"]:
if version < scenario["platforms"][platform]:
if asic in scenario["platforms"]:
if branch_version < scenario["platforms"][asic]:
return False
else:
return False
Expand Down
68 changes: 60 additions & 8 deletions tests/generic_config_updater/field_operation_validator_test.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,76 @@
import io
import unittest
import mock
import json
import subprocess
import generic_config_updater
import generic_config_updater.field_operation_validators as fov
import generic_config_updater.gu_common as gu_common

from unittest.mock import MagicMock, Mock
from unittest.mock import MagicMock, Mock, mock_open
from mock import patch
from sonic_py_common.device_info import get_hwsku, get_sonic_version_info


class TestValidateFieldOperation(unittest.TestCase):

@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"build_version": "SONiC.20181131"}))
@patch("generic_config_updater.field_operation_validators.get_asic_name", mock.Mock(return_value="unknown"))
def test_rdma_config_update_validator_unknown_asic(self):
path = "/PFC_WD/GLOBAL/POLL_INTERVAL"
operation = "replace"
assert generic_config_updater.field_operation_validators.rdma_config_update_validator(path, operation) == False

@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"build_version": "SONiC.20171131"}))
@patch("generic_config_updater.field_operation_validators.get_asic_name", mock.Mock(return_value="spc1"))
@patch("os.path.exists", mock.Mock(return_value=True))
@patch("builtins.open", mock_open(read_data="sample"))
@patch('json.load')
def test_rdma_config_update_validator_spc_asic_invalid_version(self, mock_json_config):
path = "/PFC_WD/Ethernet8/action"
operation = "replace"
mock_json_config.return_value = {"tables": {"pfc_wd": {"validator_data": {"rdma_config_update_validator": {"PFCWD enable/disable": {"fields": ["detection_time", "action"], "operations": ["remove", "replace", "add"], "platforms": {"spc1": "20181100"}}}}}}}
assert generic_config_updater.field_operation_validators.rdma_config_update_validator(path, operation) == False

@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"build_version": "SONiC.20181131"}))
@patch("generic_config_updater.field_operation_validators.get_asic_name", mock.Mock(return_value="spc1"))
@patch("os.path.exists", mock.Mock(return_value=True))
@patch("builtins.open", mock_open(read_data="sample"))
@patch('json.load')
def test_rdma_config_update_validator_spc_asic_valid_version(self, mock_json_config):
path = "/PFC_WD/Ethernet8/action"
operation = "replace"
mock_json_config.return_value = {"tables": {"pfc_wd": {"validator_data": {"rdma_config_update_validator": {"PFCWD enable/disable": {"fields": ["detection_time", "action"], "operations": ["remove", "replace", "add"], "platforms": {"spc1": "20181100"}}}}}}}
assert generic_config_updater.field_operation_validators.rdma_config_update_validator(path, operation) == True

@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"build_version": "SONiC.20181131"}))
@patch("generic_config_updater.field_operation_validators.get_asic_name", mock.Mock(return_value="spc1"))
@patch("os.path.exists", mock.Mock(return_value=True))
@patch("builtins.open", mock_open(read_data="sample"))
@patch('json.load')
def test_rdma_config_update_validator_spc_asic_invalid_op(self, mock_json_config):
path = "/PFC_WD/Ethernet8/action"
operation = "invalid-op"
mock_json_config.return_value = {"tables": {"pfc_wd": {"validator_data": {"rdma_config_update_validator": {"PFCWD enable/disable": {"fields": ["detection_time", "action"], "operations": ["remove", "replace", "add"], "platforms": {"spc1": "20181100"}}}}}}}
assert generic_config_updater.field_operation_validators.rdma_config_update_validator(path, operation) == False

@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"build_version": "SONiC.20181131"}))
@patch("generic_config_updater.field_operation_validators.get_asic_name", mock.Mock(return_value="spc1"))
@patch("os.path.exists", mock.Mock(return_value=True))
@patch("builtins.open", mock_open(read_data="sample"))
@patch('json.load')
def test_rdma_config_update_validator_spc_asic_other_field(self, mock_json_config):
path = "/PFC_WD/Ethernet8/other_field"
operation = "invalid-op"
mock_json_config.return_value = {"tables": {"pfc_wd": {"validator_data": {"rdma_config_update_validator": {"PFCWD enable/disable": {"fields": ["detection_time", "action"], "operations": ["remove", "replace", "add"], "platforms": {"spc1": "20181100"}}}}}}}
assert generic_config_updater.field_operation_validators.rdma_config_update_validator(path, operation) == False

@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"build_version": "SONiC.20181131"}))
@patch("generic_config_updater.field_operation_validators.get_asic_name", mock.Mock(return_value="unknown"))
def test_rdma_config_update_validator_unknown_asic(self):
path = "/PFC_WD/GLOBAL/POLL_INTERVAL"
operation = "replace"

@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"asic_type": "mellanox", "build_version": "SONiC.20181131"}))
def test_validate_field_operation_legal__pfcwd(self):
old_config = {"PFC_WD": {"GLOBAL": {"POLL_INTERVAL": "60"}}}
Expand All @@ -25,13 +84,6 @@ def test_validate_field_operation_illegal__pfcwd(self):
config_wrapper = gu_common.ConfigWrapper()
self.assertRaises(gu_common.IllegalPatchOperationError, config_wrapper.validate_field_operation, old_config, target_config)

@patch("sonic_py_common.device_info.get_sonic_version_info", mock.Mock(return_value={"build_version": "SONiC.20181131"}))
@patch("generic_config_updater.field_operation_validators.get_asic_name", mock.Mock(return_value="unknown"))
def test_validate_field_modification_illegal__pfcwd(self):
path = "/PFC_WD/GLOBAL/POLL_INTERVAL"
operation = "replace"
assert generic_config_updater.field_operation_validators.rdma_config_update_validator(path, operation) == False

def test_validate_field_operation_legal__rm_loopback1(self):
old_config = {
"LOOPBACK_INTERFACE": {
Expand Down

0 comments on commit 79ed8df

Please sign in to comment.