6
6
from collections import defaultdict
7
7
from unittest .mock import patch
8
8
9
- from generic_config_updater .services_validator import vlan_validator , rsyslog_validator
9
+ from generic_config_updater .services_validator import vlan_validator , rsyslog_validator , caclmgrd_validator
10
10
import generic_config_updater .gu_common
11
11
12
12
13
13
# Mimics os.system call
14
14
#
15
15
os_system_calls = []
16
16
os_system_call_index = 0
17
+ time_sleep_calls = []
18
+ time_sleep_call_index = 0
17
19
msg = ""
18
20
19
21
def mock_os_system_call (cmd ):
@@ -26,6 +28,15 @@ def mock_os_system_call(cmd):
26
28
assert cmd == entry ["cmd" ], msg
27
29
return entry ["rc" ]
28
30
31
+ def mock_time_sleep_call (sleep_time ):
32
+ global time_sleep_calls , time_sleep_call_index
33
+
34
+ assert time_sleep_call_index < len (time_sleep_calls )
35
+ entry = time_sleep_calls [time_sleep_call_index ]
36
+ time_sleep_call_index += 1
37
+
38
+ assert sleep_time == entry ["sleep_time" ], msg
39
+
29
40
30
41
test_data = [
31
42
{ "old" : {}, "upd" : {}, "cmd" : "" },
@@ -60,6 +71,77 @@ def mock_os_system_call(cmd):
60
71
}
61
72
]
62
73
74
+ test_caclrule = [
75
+ { "old" : {}, "upd" : {}, "sleep_time" : 0 },
76
+ {
77
+ "old" : {
78
+ "ACL_TABLE" : { "XXX" : { "type" : "CTRLPLANE" } },
79
+ "ACL_RULE" : { "XXX|RULE_1" : { "SRC_IP" : "10.10.10.10/16" } }
80
+ },
81
+ "upd" : {
82
+ "ACL_TABLE" : { "XXX" : { "type" : "CTRLPLANE" } },
83
+ "ACL_RULE" : { "XXX|RULE_1" : { "SRC_IP" : "10.10.10.10/16" } }
84
+ },
85
+ "sleep_time" : 0
86
+ },
87
+ {
88
+ "old" : {
89
+ "ACL_TABLE" : {
90
+ "XXX" : { "type" : "CTRLPLANE" },
91
+ "YYY" : { "type" : "L3" }
92
+ },
93
+ "ACL_RULE" : {
94
+ "XXX|RULE_1" : { "SRC_IP" : "10.10.10.10/16" },
95
+ "YYY|RULE_1" : { "SRC_IP" : "192.168.1.10/32" }
96
+ }
97
+ },
98
+ "upd" : {
99
+ "ACL_TABLE" : {
100
+ "XXX" : { "type" : "CTRLPLANE" }
101
+ },
102
+ "ACL_RULE" : {
103
+ "XXX|RULE_1" : { "SRC_IP" : "10.10.10.10/16" }
104
+ }
105
+ },
106
+ "sleep_time" : 0
107
+ },
108
+ {
109
+ "old" : {
110
+ "ACL_TABLE" : { "XXX" : { "type" : "CTRLPLANE" } },
111
+ "ACL_RULE" : { "XXX|RULE_1" : { "SRC_IP" : "10.10.10.10/16" } }
112
+ },
113
+ "upd" : {
114
+ "ACL_TABLE" : { "XXX" : { "type" : "CTRLPLANE" } },
115
+ "ACL_RULE" : { "XXX|RULE_1" : { "SRC_IP" : "11.11.11.11/16" } }
116
+ },
117
+ "sleep_time" : 1
118
+ },
119
+ {
120
+ "old" : {
121
+ "ACL_TABLE" : { "XXX" : { "type" : "CTRLPLANE" } },
122
+ "ACL_RULE" : {
123
+ "XXX|RULE_1" : { "SRC_IP" : "10.10.10.10/16" }
124
+ }
125
+ },
126
+ "upd" : {
127
+ "ACL_TABLE" : { "XXX" : { "type" : "CTRLPLANE" } },
128
+ "ACL_RULE" : {
129
+ "XXX|RULE_1" : { "SRC_IP" : "10.10.10.10/16" },
130
+ "XXX|RULE_2" : { "SRC_IP" : "12.12.12.12/16" }
131
+ }
132
+ },
133
+ "sleep_time" : 1
134
+ },
135
+ {
136
+ "old" : {
137
+ "ACL_TABLE" : { "XXX" : { "type" : "CTRLPLANE" } },
138
+ "ACL_RULE" : { "XXX|RULE_1" : { "SRC_IP" : "10.10.10.10/16" } }
139
+ },
140
+ "upd" : {},
141
+ "sleep_time" : 1
142
+ },
143
+ ]
144
+
63
145
test_rsyslog_fail = [
64
146
# Fail the calls, to get the entire fail path calls invoked
65
147
#
@@ -70,17 +152,14 @@ def mock_os_system_call(cmd):
70
152
{ "cmd" : "systemctl restart rsyslog" , "rc" : 1 }, # restart again; fails
71
153
]
72
154
73
-
74
155
class TestServiceValidator (unittest .TestCase ):
75
156
76
157
@patch ("generic_config_updater.change_applier.os.system" )
77
- def test_change_apply (self , mock_os_sys ):
78
- global os_system_expected_cmd
158
+ def test_change_apply_os_system (self , mock_os_sys ):
79
159
global os_system_calls , os_system_call_index
80
160
81
161
mock_os_sys .side_effect = mock_os_system_call
82
162
83
- i = 0
84
163
for entry in test_data :
85
164
if entry ["cmd" ]:
86
165
os_system_calls .append ({"cmd" : entry ["cmd" ], "rc" : 0 })
@@ -89,6 +168,7 @@ def test_change_apply(self, mock_os_sys):
89
168
vlan_validator (entry ["old" ], entry ["upd" ], None )
90
169
91
170
171
+
92
172
# Test failure case
93
173
#
94
174
os_system_calls = test_rsyslog_fail
@@ -97,3 +177,16 @@ def test_change_apply(self, mock_os_sys):
97
177
rc = rsyslog_validator ("" , "" , "" )
98
178
assert not rc , "rsyslog_validator expected to fail"
99
179
180
+ @patch ("generic_config_updater.services_validator.time.sleep" )
181
+ def test_change_apply_time_sleep (self , mock_time_sleep ):
182
+ global time_sleep_calls , time_sleep_call_index
183
+
184
+ mock_time_sleep .side_effect = mock_time_sleep_call
185
+
186
+ for entry in test_caclrule :
187
+ if entry ["sleep_time" ]:
188
+ time_sleep_calls .append ({"sleep_time" : entry ["sleep_time" ]})
189
+ msg = "case failed: {}" .format (str (entry ))
190
+
191
+ caclmgrd_validator (entry ["old" ], entry ["upd" ], None )
192
+
0 commit comments