@@ -205,6 +205,7 @@ def test_feature_registration(mock_sonic_db, manifest):
205
205
mock_connector = Mock ()
206
206
mock_connector .get_entry = Mock (return_value = {})
207
207
mock_sonic_db .get_connectors = Mock (return_value = [mock_connector ])
208
+ mock_sonic_db .get_initial_db_connector = Mock (return_value = mock_connector )
208
209
feature_registry = FeatureRegistry (mock_sonic_db )
209
210
feature_registry .register (manifest )
210
211
mock_connector .set_entry .assert_called_with ('FEATURE' , 'test' , {
@@ -258,6 +259,7 @@ def test_feature_registration_with_timer(mock_sonic_db, manifest):
258
259
mock_connector = Mock ()
259
260
mock_connector .get_entry = Mock (return_value = {})
260
261
mock_sonic_db .get_connectors = Mock (return_value = [mock_connector ])
262
+ mock_sonic_db .get_initial_db_connector = Mock (return_value = mock_connector )
261
263
feature_registry = FeatureRegistry (mock_sonic_db )
262
264
feature_registry .register (manifest )
263
265
mock_connector .set_entry .assert_called_with ('FEATURE' , 'test' , {
@@ -275,6 +277,7 @@ def test_feature_registration_with_non_default_owner(mock_sonic_db, manifest):
275
277
mock_connector = Mock ()
276
278
mock_connector .get_entry = Mock (return_value = {})
277
279
mock_sonic_db .get_connectors = Mock (return_value = [mock_connector ])
280
+ mock_sonic_db .get_initial_db_connector = Mock (return_value = mock_connector )
278
281
feature_registry = FeatureRegistry (mock_sonic_db )
279
282
feature_registry .register (manifest , owner = 'kube' )
280
283
mock_connector .set_entry .assert_called_with ('FEATURE' , 'test' , {
@@ -286,3 +289,107 @@ def test_feature_registration_with_non_default_owner(mock_sonic_db, manifest):
286
289
'has_global_scope' : 'True' ,
287
290
'has_timer' : 'False' ,
288
291
})
292
+
293
+
294
+ class AutoTSHelp :
295
+ """ Helper class for Auto TS Feature Registry Tests
296
+ """
297
+ GLOBAL_STATE = {}
298
+
299
+ @classmethod
300
+ def get_entry (cls , table , key ):
301
+ if table == "AUTO_TECHSUPPORT" and key == "GLOBAL" :
302
+ return AutoTSHelp .GLOBAL_STATE
303
+ elif table == "AUTO_TECHSUPPORT_FEATURE" and key == "test" :
304
+ return {"state" : "enabled" , "rate_limit_interval" : "600" }
305
+ else :
306
+ return {}
307
+
308
+ @classmethod
309
+ def get_entry_running_cfg (cls , table , key ):
310
+ if table == "AUTO_TECHSUPPORT_FEATURE" and key == "test" :
311
+ return {"state" : "disabled" , "rate_limit_interval" : "1000" }
312
+ else :
313
+ return {}
314
+
315
+
316
+ def test_auto_ts_global_disabled (mock_sonic_db , manifest ):
317
+ mock_init_cfg = Mock ()
318
+ AutoTSHelp .GLOBAL_STATE = {"state" : "disabled" }
319
+ mock_init_cfg .get_entry = Mock (side_effect = AutoTSHelp .get_entry )
320
+ mock_sonic_db .get_connectors = Mock (return_value = [mock_init_cfg ])
321
+ mock_sonic_db .get_initial_db_connector = Mock (return_value = mock_init_cfg )
322
+ feature_registry = FeatureRegistry (mock_sonic_db )
323
+ feature_registry .register (manifest )
324
+ mock_init_cfg .set_entry .assert_any_call ("AUTO_TECHSUPPORT_FEATURE" , "test" , {
325
+ "state" : "disabled" ,
326
+ "rate_limit_interval" : "600"
327
+ }
328
+ )
329
+
330
+
331
+ def test_auto_ts_global_enabled (mock_sonic_db , manifest ):
332
+ mock_init_cfg = Mock ()
333
+ AutoTSHelp .GLOBAL_STATE = {"state" : "enabled" }
334
+ mock_init_cfg .get_entry = Mock (side_effect = AutoTSHelp .get_entry )
335
+ mock_sonic_db .get_connectors = Mock (return_value = [mock_init_cfg ])
336
+ mock_sonic_db .get_initial_db_connector = Mock (return_value = mock_init_cfg )
337
+ feature_registry = FeatureRegistry (mock_sonic_db )
338
+ feature_registry .register (manifest )
339
+ mock_init_cfg .set_entry .assert_any_call ("AUTO_TECHSUPPORT_FEATURE" , "test" , {
340
+ "state" : "enabled" ,
341
+ "rate_limit_interval" : "600"
342
+ }
343
+ )
344
+
345
+
346
+ def test_auto_ts_deregister (mock_sonic_db ):
347
+ mock_connector = Mock ()
348
+ mock_sonic_db .get_connectors = Mock (return_value = [mock_connector ])
349
+ feature_registry = FeatureRegistry (mock_sonic_db )
350
+ feature_registry .deregister ("test" )
351
+ mock_connector .set_entry .assert_any_call ("AUTO_TECHSUPPORT_FEATURE" , "test" , None )
352
+
353
+
354
+ def test_auto_ts_feature_update_flow (mock_sonic_db , manifest ):
355
+ new_manifest = copy .deepcopy (manifest )
356
+ new_manifest ['service' ]['name' ] = 'test_new'
357
+ new_manifest ['service' ]['delayed' ] = True
358
+
359
+ AutoTSHelp .GLOBAL_STATE = {"state" : "enabled" }
360
+ # Mock init_cfg connector
361
+ mock_init_cfg = Mock ()
362
+ mock_init_cfg .get_entry = Mock (side_effect = AutoTSHelp .get_entry )
363
+
364
+ # Mock running/peristent cfg connector
365
+ mock_other_cfg = Mock ()
366
+ mock_other_cfg .get_entry = Mock (side_effect = AutoTSHelp .get_entry_running_cfg )
367
+
368
+ # Setup sonic_db class
369
+ mock_sonic_db .get_connectors = Mock (return_value = [mock_init_cfg , mock_other_cfg ])
370
+ mock_sonic_db .get_initial_db_connector = Mock (return_value = mock_init_cfg )
371
+
372
+ feature_registry = FeatureRegistry (mock_sonic_db )
373
+ feature_registry .update (manifest , new_manifest )
374
+
375
+ mock_init_cfg .set_entry .assert_has_calls (
376
+ [
377
+ call ("AUTO_TECHSUPPORT_FEATURE" , "test" , None ),
378
+ call ("AUTO_TECHSUPPORT_FEATURE" , "test_new" , {
379
+ "state" : "enabled" ,
380
+ "rate_limit_interval" : "600"
381
+ })
382
+ ],
383
+ any_order = True
384
+ )
385
+
386
+ mock_other_cfg .set_entry .assert_has_calls (
387
+ [
388
+ call ("AUTO_TECHSUPPORT_FEATURE" , "test" , None ),
389
+ call ("AUTO_TECHSUPPORT_FEATURE" , "test_new" , {
390
+ "state" : "disabled" ,
391
+ "rate_limit_interval" : "1000"
392
+ })
393
+ ],
394
+ any_order = True
395
+ )
0 commit comments