1
+ import io
1
2
import unittest
2
3
import mock
4
+ import json
3
5
import subprocess
4
6
import generic_config_updater
5
7
import generic_config_updater .field_operation_validators as fov
6
8
import generic_config_updater .gu_common as gu_common
7
9
8
- from unittest .mock import MagicMock , Mock
10
+ from unittest .mock import MagicMock , Mock , mock_open
9
11
from mock import patch
10
12
from sonic_py_common .device_info import get_hwsku , get_sonic_version_info
11
13
12
14
13
15
class TestValidateFieldOperation (unittest .TestCase ):
14
16
17
+ @patch ("sonic_py_common.device_info.get_sonic_version_info" , mock .Mock (return_value = {"build_version" : "SONiC.20181131" }))
18
+ @patch ("generic_config_updater.field_operation_validators.get_asic_name" , mock .Mock (return_value = "unknown" ))
19
+ def test_rdma_config_update_validator_unknown_asic (self ):
20
+ path = "/PFC_WD/GLOBAL/POLL_INTERVAL"
21
+ operation = "replace"
22
+ assert generic_config_updater .field_operation_validators .rdma_config_update_validator (path , operation ) == False
23
+
24
+ @patch ("sonic_py_common.device_info.get_sonic_version_info" , mock .Mock (return_value = {"build_version" : "SONiC.20171131" }))
25
+ @patch ("generic_config_updater.field_operation_validators.get_asic_name" , mock .Mock (return_value = "spc1" ))
26
+ @patch ("os.path.exists" , mock .Mock (return_value = True ))
27
+ @patch ("builtins.open" , mock_open (read_data = "sample" ))
28
+ @patch ('json.load' )
29
+ def test_rdma_config_update_validator_spc_asic_invalid_version (self , mock_json_config ):
30
+ path = "/PFC_WD/Ethernet8/action"
31
+ operation = "replace"
32
+ 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" }}}}}}}
33
+ assert generic_config_updater .field_operation_validators .rdma_config_update_validator (path , operation ) == False
34
+
35
+ @patch ("sonic_py_common.device_info.get_sonic_version_info" , mock .Mock (return_value = {"build_version" : "SONiC.20181131" }))
36
+ @patch ("generic_config_updater.field_operation_validators.get_asic_name" , mock .Mock (return_value = "spc1" ))
37
+ @patch ("os.path.exists" , mock .Mock (return_value = True ))
38
+ @patch ("builtins.open" , mock_open (read_data = "sample" ))
39
+ @patch ('json.load' )
40
+ def test_rdma_config_update_validator_spc_asic_valid_version (self , mock_json_config ):
41
+ path = "/PFC_WD/Ethernet8/action"
42
+ operation = "replace"
43
+ 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" }}}}}}}
44
+ assert generic_config_updater .field_operation_validators .rdma_config_update_validator (path , operation ) == True
45
+
46
+ @patch ("sonic_py_common.device_info.get_sonic_version_info" , mock .Mock (return_value = {"build_version" : "SONiC.20181131" }))
47
+ @patch ("generic_config_updater.field_operation_validators.get_asic_name" , mock .Mock (return_value = "spc1" ))
48
+ @patch ("os.path.exists" , mock .Mock (return_value = True ))
49
+ @patch ("builtins.open" , mock_open (read_data = "sample" ))
50
+ @patch ('json.load' )
51
+ def test_rdma_config_update_validator_spc_asic_invalid_op (self , mock_json_config ):
52
+ path = "/PFC_WD/Ethernet8/action"
53
+ operation = "invalid-op"
54
+ 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" }}}}}}}
55
+ assert generic_config_updater .field_operation_validators .rdma_config_update_validator (path , operation ) == False
56
+
57
+ @patch ("sonic_py_common.device_info.get_sonic_version_info" , mock .Mock (return_value = {"build_version" : "SONiC.20181131" }))
58
+ @patch ("generic_config_updater.field_operation_validators.get_asic_name" , mock .Mock (return_value = "spc1" ))
59
+ @patch ("os.path.exists" , mock .Mock (return_value = True ))
60
+ @patch ("builtins.open" , mock_open (read_data = "sample" ))
61
+ @patch ('json.load' )
62
+ def test_rdma_config_update_validator_spc_asic_other_field (self , mock_json_config ):
63
+ path = "/PFC_WD/Ethernet8/other_field"
64
+ operation = "invalid-op"
65
+ 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" }}}}}}}
66
+ assert generic_config_updater .field_operation_validators .rdma_config_update_validator (path , operation ) == False
67
+
68
+ @patch ("sonic_py_common.device_info.get_sonic_version_info" , mock .Mock (return_value = {"build_version" : "SONiC.20181131" }))
69
+ @patch ("generic_config_updater.field_operation_validators.get_asic_name" , mock .Mock (return_value = "unknown" ))
70
+ def test_rdma_config_update_validator_unknown_asic (self ):
71
+ path = "/PFC_WD/GLOBAL/POLL_INTERVAL"
72
+ operation = "replace"
73
+
15
74
@patch ("sonic_py_common.device_info.get_sonic_version_info" , mock .Mock (return_value = {"asic_type" : "mellanox" , "build_version" : "SONiC.20181131" }))
16
75
def test_validate_field_operation_legal__pfcwd (self ):
17
76
old_config = {"PFC_WD" : {"GLOBAL" : {"POLL_INTERVAL" : "60" }}}
@@ -25,13 +84,6 @@ def test_validate_field_operation_illegal__pfcwd(self):
25
84
config_wrapper = gu_common .ConfigWrapper ()
26
85
self .assertRaises (gu_common .IllegalPatchOperationError , config_wrapper .validate_field_operation , old_config , target_config )
27
86
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
87
def test_validate_field_operation_legal__rm_loopback1 (self ):
36
88
old_config = {
37
89
"LOOPBACK_INTERFACE" : {
0 commit comments