@@ -392,6 +392,47 @@ def test_fetch_datafile(self, _):
392
392
)
393
393
self .assertEqual (test_headers ['Last-Modified' ], project_config_manager .last_modified )
394
394
self .assertIsInstance (project_config_manager .get_config (), project_config .ProjectConfig )
395
+ self .assertTrue (project_config_manager .is_running )
396
+
397
+ def test_fetch_datafile__exception_raised (self , _ ):
398
+ """ Test that config_manager keeps running if exception is raised when fetching datafile. """
399
+ class MockExceptionResponse (object ):
400
+ def raise_for_status (self ):
401
+ raise requests .exceptions .RequestException ('Error Error !!' )
402
+
403
+ sdk_key = 'some_key'
404
+ mock_logger = mock .Mock ()
405
+ with mock .patch ('optimizely.config_manager.PollingConfigManager.fetch_datafile' ):
406
+ project_config_manager = config_manager .PollingConfigManager (sdk_key = sdk_key , logger = mock_logger )
407
+ expected_datafile_url = enums .ConfigManager .DATAFILE_URL_TEMPLATE .format (sdk_key = sdk_key )
408
+ test_headers = {'Last-Modified' : 'New Time' }
409
+ test_datafile = json .dumps (self .config_dict_with_features )
410
+ test_response = requests .Response ()
411
+ test_response .status_code = 200
412
+ test_response .headers = test_headers
413
+ test_response ._content = test_datafile
414
+ with mock .patch ('requests.get' , return_value = test_response ):
415
+ project_config_manager .fetch_datafile ()
416
+
417
+ self .assertEqual (test_headers ['Last-Modified' ], project_config_manager .last_modified )
418
+ self .assertIsInstance (project_config_manager .get_config (), project_config .ProjectConfig )
419
+
420
+ # Call fetch_datafile again, but raise exception this time
421
+ with mock .patch ('requests.get' , return_value = MockExceptionResponse ()) as mock_requests :
422
+ project_config_manager .fetch_datafile ()
423
+
424
+ mock_requests .assert_called_once_with (
425
+ expected_datafile_url ,
426
+ headers = {'If-Modified-Since' : test_headers ['Last-Modified' ]},
427
+ timeout = enums .ConfigManager .REQUEST_TIMEOUT ,
428
+ )
429
+ mock_logger .error .assert_called_once_with ('Fetching datafile from {} failed. Error: Error Error !!' .format (
430
+ expected_datafile_url
431
+ ))
432
+ self .assertEqual (test_headers ['Last-Modified' ], project_config_manager .last_modified )
433
+ self .assertIsInstance (project_config_manager .get_config (), project_config .ProjectConfig )
434
+ # Confirm that config manager keeps running
435
+ self .assertTrue (project_config_manager .is_running )
395
436
396
437
def test_is_running (self , _ ):
397
438
""" Test that polling thread is running after instance of PollingConfigManager is created. """
0 commit comments