5
5
import signal
6
6
import threading
7
7
from imp import load_source
8
+ import re
8
9
9
10
from mock import MagicMock
10
11
from sonic_py_common import daemon_base
@@ -75,14 +76,14 @@ def test_dpu_state_update_api(state, expected_state):
75
76
76
77
@pytest .mark .parametrize ('dpu_id, dp_state, cp_state, expected_state' , [
77
78
(0 , False , False , {'DPU0' :
78
- {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : '2000-01-01 00 :00:00' ,
79
- 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : '2000-01-01 00 :00:00' }}),
79
+ {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000' ,
80
+ 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' }}),
80
81
(0 , False , True , {'DPU0' :
81
- {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : '2000-01-01 00 :00:00' ,
82
- 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : '2000-01-01 00 :00:00' }}),
82
+ {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000' ,
83
+ 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' }}),
83
84
(0 , True , True , {'DPU0' :
84
- {'dpu_data_plane_state' : 'up' , 'dpu_data_plane_time' : '2000-01-01 00 :00:00' ,
85
- 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : '2000-01-01 00 :00:00' }}),
85
+ {'dpu_data_plane_state' : 'up' , 'dpu_data_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000' ,
86
+ 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' }}),
86
87
])
87
88
def test_dpu_state_update (dpu_id , dp_state , cp_state , expected_state ):
88
89
chassis = MockDpuChassis ()
@@ -102,7 +103,7 @@ def hset(key, field, value):
102
103
103
104
with mock .patch .object (swsscommon .Table , 'hset' , side_effect = hset ) as hset_mock :
104
105
dpu_updater = DpuStateUpdater (SYSLOG_IDENTIFIER , chassis )
105
- dpu_updater ._time_now = MagicMock (return_value = '2000-01-01 00 :00:00' )
106
+ dpu_updater ._time_now = MagicMock (return_value = 'Sat Jan 01 12 :00:00 AM UTC 2000 ' )
106
107
107
108
dpu_updater .update_state ()
108
109
@@ -112,20 +113,20 @@ def hset(key, field, value):
112
113
113
114
# After the deinit we assume that the DPU state is down.
114
115
assert chassis_state_db == {'DPU0' :
115
- {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : '2000-01-01 00 :00:00' ,
116
- 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : '2000-01-01 00 :00:00' }}
116
+ {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000' ,
117
+ 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' }}
117
118
118
119
119
120
@pytest .mark .parametrize ('dpu_id, dp_state, cp_state, expected_state' , [
120
121
(0 , False , False , {'DPU0' :
121
- {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : '2000-01-01 00 :00:00' ,
122
- 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : '2000-01-01 00 :00:00' }}),
122
+ {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' ,
123
+ 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' }}),
123
124
(0 , False , True , {'DPU0' :
124
- {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : '2000-01-01 00 :00:00' ,
125
- 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : '2000-01-01 00 :00:00' }}),
125
+ {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' ,
126
+ 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' }}),
126
127
(0 , True , True , {'DPU0' :
127
- {'dpu_data_plane_state' : 'up' , 'dpu_data_plane_time' : '2000-01-01 00 :00:00' ,
128
- 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : '2000-01-01 00 :00:00' }}),
128
+ {'dpu_data_plane_state' : 'up' , 'dpu_data_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' ,
129
+ 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' }}),
129
130
])
130
131
def test_dpu_state_manager (dpu_id , dp_state , cp_state , expected_state ):
131
132
chassis = MockDpuChassis ()
@@ -146,7 +147,7 @@ def hset(key, field, value):
146
147
with mock .patch .object (swsscommon .Table , 'hset' , side_effect = hset ):
147
148
with mock .patch .object (swsscommon .Select , 'select' , side_effect = ((swsscommon .Select .OBJECT , None ), (swsscommon .Select .OBJECT , None ), KeyboardInterrupt )):
148
149
dpu_updater = DpuStateUpdater (SYSLOG_IDENTIFIER , chassis )
149
- dpu_updater ._time_now = MagicMock (return_value = '2000-01-01 00 :00:00' )
150
+ dpu_updater ._time_now = MagicMock (return_value = 'Sat Jan 01 12 :00:00 AM UTC 2000 ' )
150
151
151
152
dpu_state_mng = DpuStateManagerTask (SYSLOG_IDENTIFIER , dpu_updater )
152
153
@@ -158,8 +159,8 @@ def hset(key, field, value):
158
159
159
160
# After the deinit we assume that the DPU state is down.
160
161
assert chassis_state_db == {'DPU0' :
161
- {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : '2000-01-01 00 :00:00' ,
162
- 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : '2000-01-01 00 :00:00' }}
162
+ {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' ,
163
+ 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' }}
163
164
164
165
165
166
def test_dpu_chassis_daemon ():
@@ -180,7 +181,7 @@ def hset(key, field, value):
180
181
chassis_state_db [key ][field ] = value
181
182
182
183
with mock .patch .object (swsscommon .Table , 'hset' , side_effect = hset ) as hset_mock :
183
- with mock .patch .object (DpuStateUpdater , '_time_now' , side_effect = lambda : '2000-01-01 00 :00:00' ) as mock_time_now :
184
+ with mock .patch .object (DpuStateUpdater , '_time_now' , side_effect = lambda : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' ) as mock_time_now :
184
185
185
186
daemon_chassisd = DpuChassisdDaemon (SYSLOG_IDENTIFIER , chassis )
186
187
daemon_chassisd .CHASSIS_INFO_UPDATE_PERIOD_SECS = MagicMock (return_value = 1 )
@@ -195,14 +196,40 @@ def hset(key, field, value):
195
196
time .sleep (3 )
196
197
197
198
assert chassis_state_db == {'DPU1' :
198
- {'dpu_data_plane_state' : 'up' , 'dpu_data_plane_time' : '2000-01-01 00 :00:00' ,
199
- 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : '2000-01-01 00 :00:00' }}
199
+ {'dpu_data_plane_state' : 'up' , 'dpu_data_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' ,
200
+ 'dpu_control_plane_state' : 'up' , 'dpu_control_plane_time' : 'Sat Jan 01 12 :00:00 AM UTC 2000 ' }}
200
201
201
202
daemon_chassisd .signal_handler (signal .SIGINT , None )
202
203
daemon_chassisd .stop .wait .return_value = True
203
204
204
205
thread .join ()
205
206
206
207
assert chassis_state_db == {'DPU1' :
207
- {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : '2000-01-01 00:00:00' ,
208
- 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : '2000-01-01 00:00:00' }}
208
+ {'dpu_data_plane_state' : 'down' , 'dpu_data_plane_time' : 'Sat Jan 01 12:00:00 AM UTC 2000' ,
209
+ 'dpu_control_plane_state' : 'down' , 'dpu_control_plane_time' : 'Sat Jan 01 12:00:00 AM UTC 2000' }}
210
+ with mock .patch .object (swsscommon .Table , 'hset' , side_effect = hset ):
211
+ daemon_chassisd = DpuChassisdDaemon (SYSLOG_IDENTIFIER , chassis )
212
+ daemon_chassisd .CHASSIS_INFO_UPDATE_PERIOD_SECS = MagicMock (return_value = 1 )
213
+
214
+ daemon_chassisd .stop = MagicMock ()
215
+ daemon_chassisd .stop .wait .return_value = False
216
+
217
+ thread = threading .Thread (target = daemon_chassisd .run )
218
+ thread .start ()
219
+ # Wait for thread to start and update DB
220
+ time .sleep (3 )
221
+ date_format = "%a %b %d %I:%M:%S %p UTC %Y"
222
+
223
+ def is_valid_date (date_str ):
224
+ try :
225
+ datetime .strptime (date_str , date_format )
226
+ except ValueError :
227
+ # Parsing failed and we are unable to obtain the time
228
+ return False
229
+ return True
230
+ assert is_valid_date (chassis_state_db ['DPU1' ]['dpu_data_plane_time' ])
231
+ assert is_valid_date (chassis_state_db ['DPU1' ]['dpu_control_plane_time' ])
232
+ daemon_chassisd .signal_handler (signal .SIGINT , None )
233
+ daemon_chassisd .stop .wait .return_value = True
234
+
235
+ thread .join ()
0 commit comments