def test_loader(self): fetcher_metrics = ConfigurationFetcherMetrics() fetcher = FilesystemConfigurationFetcher( self.resource_dir + "/configurations", False, fetcher_metrics) feature_metrics = ConfigurationManagerMetrics() feature_mapper = ConfigurationMapper("feature-flags", SingleValueDecoderFactory(), False, feature_metrics) feature_configuration_manager = ConfigurationManager() feature_manager = FeatureFlagManager(feature_configuration_manager) feature_reader = ConfigurationReader("first-app", ["/featureflags.json"], fetcher, feature_mapper, feature_configuration_manager, feature_metrics, 2) config_metrics = ConfigurationManagerMetrics() config_mapper = ConfigurationMapper("configs", ObjectValueDecoderFactory(), False, config_metrics) config_configuration_manager = ConfigurationManager() config_manager = ConfigManager(config_configuration_manager) config_reader = ConfigurationReader("first-app", ["/configs.json"], fetcher, config_mapper, config_configuration_manager, config_metrics, 2) loader_metrics = ConfigurationLoaderMetrics() configuration_loader = ConfigurationLoader( [feature_reader, config_reader], BackgroundScheduler(), 3, loader_metrics) configuration_loader.start() self.assertEqual( True, feature_manager.is_active("enable-feature-all", self.empty_context, False)) self.assertEqual( False, feature_manager.is_active("enable-feature-none", self.empty_context, True)) xj_config: XJConfig = config_manager.get_config( XJConfig, self.qa_context) self.assertEqual(["xj2001"], xj_config.hosts) self.assertEqual(2, loader_metrics.configuration_requests) self.assertEqual(0, loader_metrics.configuration_failures) self.assertEqual(2, fetcher_metrics.requests) self.assertEqual(0, fetcher_metrics.missing_files) self.assertEqual(0, fetcher_metrics.failures) configuration_loader.shutdown()
def test_execute_for_file_with_non_instantiable_config(self): fetcher_metrics = ConfigurationFetcherMetrics() manager_metrics = ConfigurationManagerMetrics() fetcher = FilesystemConfigurationFetcher(self.resource_dir + "/configurations", True, fetcher_metrics) mapper = ConfigurationMapper("configs", ObjectValueDecoderFactory(), False, manager_metrics) manager = ConfigurationManager() reader = ConfigurationReader("first-app", ["/configs-non-instantiable.json", "/configs.json"], fetcher, mapper, manager, manager_metrics, 2) try: reader.execute() except InstantiationException: self.assertEqual(0, manager_metrics.non_instantiable_skips) else: self.fail('Expected InstantiationException did not get thrown.') xj_config: XJConfig = manager.get_object("configs.XJConfig", self.qa_context, None) self.assertEqual(None, xj_config) self.assertEqual(0, manager_metrics.updates) self.assertEqual(0, fetcher_metrics.missing_files) self.assertEqual(0, fetcher_metrics.failures)
def test_execute_for_skipping_missing_file(self): fetcher_metrics = ConfigurationFetcherMetrics() manager_metrics = ConfigurationManagerMetrics() fetcher = FilesystemConfigurationFetcher(self.resource_dir + "/configurations", True, fetcher_metrics) mapper = ConfigurationMapper("feature-flags", SingleValueDecoderFactory(), False, manager_metrics) manager = ConfigurationManager() reader = ConfigurationReader("first-app", ["/unknown-featureflags-file.json", "/featureflags.json"], fetcher, mapper, manager, manager_metrics, 2) reader.execute() self.assertEqual(True, manager.get_object("enable-feature-all", self.empty_context, False)) self.assertEqual(False, manager.get_object("enable-feature-none", self.empty_context, True)) self.assertEqual(1, fetcher_metrics.missing_files) self.assertEqual(0, fetcher_metrics.failures)
def test_execute_for_instantiable_config(self): fetcher_metrics = ConfigurationFetcherMetrics() manager_metrics = ConfigurationManagerMetrics() fetcher = FilesystemConfigurationFetcher(self.resource_dir + "/configurations", True, fetcher_metrics) mapper = ConfigurationMapper("configs", ObjectValueDecoderFactory(), False, manager_metrics) manager = ConfigurationManager() reader = ConfigurationReader("first-app", ["/configs.json"], fetcher, mapper, manager, manager_metrics, 2) reader.execute() xj_config: XJConfig = manager.get_object("configs.XJConfig", self.qa_context, None) self.assertEqual(["xj2001"], xj_config.hosts) self.assertEqual(1, manager_metrics.updates) self.assertEqual(0, fetcher_metrics.missing_files) self.assertEqual(0, fetcher_metrics.failures)
def test_execute_for_file_with_bad_json(self): fetcher_metrics = ConfigurationFetcherMetrics() manager_metrics = ConfigurationManagerMetrics() fetcher = FilesystemConfigurationFetcher(self.resource_dir + "/configurations", True, fetcher_metrics) mapper = ConfigurationMapper("feature-flags", SingleValueDecoderFactory(), False, manager_metrics) manager = ConfigurationManager() reader = ConfigurationReader("first-app", ["/featureflags-bad-json.json", "/featureflags.json"], fetcher, mapper, manager, manager_metrics, 2) try: reader.execute() except IOError: self.assertEqual(1, manager_metrics.content_failures) else: self.fail('Expected FileNotFoundError did not get thrown.') self.assertEqual(False,manager.get_object("enable-feature-all", self.empty_context, False)) self.assertEqual(True, manager.get_object("enable-feature-none", self.empty_context, True)) self.assertEqual(0, fetcher_metrics.missing_files) self.assertEqual(0, fetcher_metrics.failures)