예제 #1
0
    def initialize_client(self) -> None:
        """
        Initializes client and starts communication with central unleash server(s).

        This kicks off:
        * Client registration
        * Provisioning poll
        * Stats poll

        :return:
        """
        # Setup
        fl_args = {
            "url": self.unleash_url,
            "app_name": self.unleash_app_name,
            "instance_id": self.unleash_instance_id,
            "custom_headers": self.unleash_custom_headers,
            "custom_options": self.unleash_custom_options,
            "cache": self.cache,
            "features": self.features,
            "strategy_mapping": self.strategy_mapping,
            "project": self.unleash_project_name
        }

        metrics_args = {
            "url": self.unleash_url,
            "app_name": self.unleash_app_name,
            "instance_id": self.unleash_instance_id,
            "custom_headers": self.unleash_custom_headers,
            "custom_options": self.unleash_custom_options,
            "features": self.features,
            "ondisk_cache": self.cache
        }

        # Register app
        if not self.unleash_disable_registration:
            register_client(self.unleash_url, self.unleash_app_name,
                            self.unleash_instance_id,
                            self.unleash_metrics_interval,
                            self.unleash_custom_headers,
                            self.unleash_custom_options, self.strategy_mapping)

        fetch_and_load_features(**fl_args)

        # Start periodic jobs
        self.scheduler.start()
        self.fl_job = self.scheduler.add_job(
            fetch_and_load_features,
            trigger=IntervalTrigger(
                seconds=int(self.unleash_refresh_interval)),
            kwargs=fl_args)

        if not self.unleash_disable_metrics:
            self.metric_job = self.scheduler.add_job(
                aggregate_and_send_metrics,
                trigger=IntervalTrigger(
                    seconds=int(self.unleash_metrics_interval)),
                kwargs=metrics_args)

        self.is_initialized = True
def test_fetch_and_load_failure(cache_empty):
    # Set up for tests
    in_memory_features = {}
    responses.add(responses.GET, FULL_FEATURE_URL, json=MOCK_FEATURE_RESPONSE, status=200)
    temp_cache = cache_empty

    fetch_and_load_features(URL,
                            APP_NAME,
                            INSTANCE_ID,
                            CUSTOM_HEADERS,
                            temp_cache,
                            in_memory_features,
                            DEFAULT_STRATEGY_MAPPING)

    # Fail next request
    responses.reset()
    responses.add(responses.GET, FULL_FEATURE_URL, json={}, status=500)

    fetch_and_load_features(URL,
                            APP_NAME,
                            INSTANCE_ID,
                            CUSTOM_HEADERS,
                            temp_cache,
                            in_memory_features,
                            DEFAULT_STRATEGY_MAPPING)

    assert isinstance(in_memory_features["testFlag"], Feature)
예제 #3
0
    def initialize_client(self, disable_registration=False) -> None:
        """
        Initializes client and starts communication with central unleash server(s).

        This kicks off:
        * Client registration
        * Provisioning poll
        * Stats poll

        :return:
        """
        # Setup
        fl_args = {
            "url": self.unleash_url,
            "app_name": self.unleash_app_name,
            "instance_id": self.unleash_instance_id,
            "custom_headers": self.unleash_custom_headers,
            "custom_options": self.unleash_custom_options,
            "cache": self.cache,
            "features": self.features,
            "strategy_mapping": self.strategy_mapping
        }
        # Register app
        if not self.unleash_disable_registration and not disable_registration:
            register_client(self.unleash_url, self.unleash_app_name, self.unleash_instance_id,
                            self.unleash_metrics_interval, self.unleash_custom_headers,
                            self.unleash_custom_options, self.strategy_mapping)

        fetch_and_load_features(**fl_args)

        self.is_initialized = True
def test_fetch_and_load(cache_empty):
    # Set up for tests
    in_memory_features = {}
    responses.add(responses.GET,
                  FULL_FEATURE_URL,
                  json=MOCK_FEATURE_RESPONSE,
                  status=200)
    temp_cache = cache_empty

    fetch_and_load_features(URL, APP_NAME, INSTANCE_ID, CUSTOM_HEADERS,
                            temp_cache, in_memory_features)

    assert isinstance(in_memory_features["testFlag"], Feature)
예제 #5
0
def test_fetch_and_load_project(cache_empty):  # noqa: F811
    # Set up for tests
    in_memory_features = {}
    responses.add(responses.GET,
                  PROJECT_URL,
                  json=MOCK_FEATURE_RESPONSE_PROJECT,
                  status=200)
    temp_cache = cache_empty

    fetch_and_load_features(URL, APP_NAME, INSTANCE_ID, CUSTOM_HEADERS,
                            CUSTOM_OPTIONS, temp_cache, in_memory_features,
                            DEFAULT_STRATEGY_MAPPING, PROJECT_NAME)

    assert len(in_memory_features.keys()) == 1
    assert isinstance(in_memory_features["ivan-project"], Feature)
예제 #6
0
def test_fetch_and_load(cache_empty):  # noqa: F811
    # Set up for tests
    in_memory_features = {}
    responses.add(responses.GET, FULL_FEATURE_URL, json=MOCK_FEATURE_RESPONSE, status=200, headers={'etag': ETAG_VALUE})
    temp_cache = cache_empty

    fetch_and_load_features(URL,
                            APP_NAME,
                            INSTANCE_ID,
                            CUSTOM_HEADERS,
                            CUSTOM_OPTIONS,
                            temp_cache,
                            in_memory_features,
                            DEFAULT_STRATEGY_MAPPING)

    assert isinstance(in_memory_features["testFlag"], Feature)
    assert temp_cache.get(ETAG) == ETAG_VALUE
예제 #7
0
    def initialize_client(self) -> None:
        """
        Initializes client and starts communication with central unleash server(s).

        This kicks off:
        * Client registration
        * Provisioning poll
        * Stats poll

        :return:
        """
        # Setup
        fl_args = [self.unleash_url,
                   self.unleash_app_name,
                   self.unleash_instance_id,
                   self.unleash_custom_headers,
                   self.cache,
                   self.features]

        metrics_args = [self.unleash_url,
                        self.unleash_app_name,
                        self.unleash_instance_id,
                        self.unleash_custom_headers,
                        self.features,
                        self.metrics_last_sent_time]

        # Register app
        register_client(self.unleash_url, self.unleash_app_name, self.unleash_instance_id,
                        self.unleash_metrics_interval, self.unleash_custom_headers)

        fetch_and_load_features(*fl_args)

        # Start periodic jobs
        self.scheduler.start()
        self.fl_job = self.scheduler.add_job(fetch_and_load_features,
                                             trigger=IntervalTrigger(seconds=int(self.unleash_refresh_interval)),
                                             args=fl_args)

        self.metric_job = self.scheduler.add_job(aggregate_and_send_metrics,
                                                 trigger=IntervalTrigger(seconds=int(self.unleash_metrics_interval)),
                                                 args=metrics_args)

        self.is_initialized = True