Пример #1
0
    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)
Пример #2
0
    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()
Пример #3
0
    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)
Пример #4
0
    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)
Пример #5
0
 def build(self) -> ConfigurationManager:
     manager = ConfigurationManager()
     if self.metrics is None:
         self.metrics = ConfigurationManagerMetrics()
     mapper = ConfigurationMapper(self.root_node,
                                  self.value_decoder_factory,
                                  self.skip_non_instantiable, self.metrics)
     reader = ConfigurationReader(self.application, self.file_names,
                                  self.fetcher, mapper, manager,
                                  self.metrics, self.maximum_skips)
     self.readers.append(reader)
     return manager
Пример #6
0
    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)
    def test_set_contexts(self):
        configuration = Configuration(
            "enable-welcome",
            Context(
                False,
                Modifiers(
                    'environment', {
                        'qa':
                        Context(
                            False,
                            Modifiers('user', {'joe': Context(True, None)})),
                        'prod':
                        Context(False, None)
                    })))

        configuration_manager = ConfigurationManager()

        configuration_store = {"enable-welcome": configuration}
        configuration_manager.set_configuration_store(configuration_store)

        is_welcome_enabled = configuration_manager.get_object(
            "enable-welcome", self.joe_in_qa, False)

        self.assertTrue(is_welcome_enabled)

        configuration_manager = ConfigurationManager()
        feature_flag_manager = FeatureFlagManager(configuration_manager)

        configuration_manager.set_configuration_store(configuration_store)

        is_welcome_enabled = feature_flag_manager.is_active(
            "enable-welcome", self.joe_in_qa, False)

        self.assertTrue(is_welcome_enabled)

        is_welcome_enabled = feature_flag_manager.is_active(
            "enable-welcome", self.joe_in_prod, False)

        self.assertFalse(is_welcome_enabled)