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)
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)
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)
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
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