コード例 #1
0
 def test_with_refresh(self):
     config_fetcher = ConfigFetcherMock()
     config_cache = InMemoryConfigCache()
     cache_policy = ManualPollingCachePolicy(config_fetcher, config_cache,
                                             cache_key)
     cache_policy.force_refresh()
     value = cache_policy.get()
     self.assertEqual(value, TEST_JSON)
     self.assertEqual(config_fetcher.get_call_count, 1)
     cache_policy.stop()
コード例 #2
0
 def test_updated_values(self):
     config_fetcher = ConfigFetcherCountMock()
     config_cache = InMemoryConfigCache()
     cache_policy = AutoPollingCachePolicy(config_fetcher, config_cache,
                                           cache_key, 2, 5, None)
     config = cache_policy.get()
     self.assertEqual(config, 10)
     time.sleep(2.200)
     config = cache_policy.get()
     self.assertEqual(config, 20)
     cache_policy.stop()
コード例 #3
0
 def test_init_wait_time_timeout(self):
     config_fetcher = ConfigFetcherWaitMock(5)
     config_cache = InMemoryConfigCache()
     start_time = time.time()
     cache_policy = AutoPollingCachePolicy(config_fetcher, config_cache,
                                           cache_key, 60, 1, None)
     config = cache_policy.get()
     end_time = time.time()
     elapsed_time = end_time - start_time
     self.assertEqual(config, None)
     self.assertTrue(elapsed_time > 1)
     self.assertTrue(elapsed_time < 2)
     cache_policy.stop()
コード例 #4
0
    def test_cache(self):
        config_store = InMemoryConfigCache()

        value = config_store.get('key')
        self.assertEqual(value, None)

        config_store.set('key', TEST_JSON)
        value = config_store.get('key')
        self.assertEqual(value, TEST_JSON)

        value2 = config_store.get('key2')
        self.assertEqual(value2, None)
コード例 #5
0
    def test_force_refresh(self):
        config_fetcher = ConfigFetcherMock()
        config_cache = InMemoryConfigCache()
        cache_policy = LazyLoadingCachePolicy(config_fetcher, config_cache,
                                              160)

        # Get value from Config Store, which indicates a config_fetcher call
        value = cache_policy.get()
        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 1)

        # Get value from Config Store, which indicates a config_fetcher call after cache invalidation
        cache_policy.force_refresh()
        value = cache_policy.get()
        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 2)
        cache_policy.stop()
コード例 #6
0
 def test_callback(self):
     call_counter = CallCounter()
     config_fetcher = ConfigFetcherMock()
     config_cache = InMemoryConfigCache()
     cache_policy = AutoPollingCachePolicy(config_fetcher, config_cache, 2,
                                           5, call_counter.callback)
     time.sleep(1)
     self.assertEqual(config_fetcher.get_call_count, 1)
     self.assertEqual(call_counter.get_call_count, 1)
     time.sleep(1.2)
     self.assertEqual(config_fetcher.get_call_count, 2)
     self.assertEqual(call_counter.get_call_count, 1)
     config_fetcher.set_configuration_json(TEST_JSON2)
     time.sleep(2.2)
     self.assertEqual(config_fetcher.get_call_count, 3)
     self.assertEqual(call_counter.get_call_count, 2)
     cache_policy.stop()
コード例 #7
0
    def test_with_force_refresh(self):
        config_fetcher = ConfigFetcherMock()
        config_cache = InMemoryConfigCache()
        cache_policy = ManualPollingCachePolicy(config_fetcher, config_cache)
        cache_policy.force_refresh()
        value = cache_policy.get()
        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 1)

        try:
            # Clear the cache
            cache_policy._lock.acquire_write()
            cache_policy._config_cache.set(None)
        finally:
            cache_policy._lock.release_write()

        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 1)
        cache_policy.stop()
コード例 #8
0
    def test_force_refresh(self):
        config_fetcher = ConfigFetcherMock()
        config_cache = InMemoryConfigCache()
        cache_policy = LazyLoadingCachePolicy(config_fetcher, config_cache, 160)

        # Get value from Config Store, which indicates a config_fetcher call
        value = cache_policy.get()
        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 1)

        with mock.patch('configcatclient.lazyloadingcachepolicy.datetime') as mock_datetime:
            # assume 160 seconds has elapsed since the last call enough to do a 
            # force refresh
            mock_datetime.datetime.utcnow.return_value = cache_policy._last_updated + datetime.timedelta(seconds=161)
            # Get value from Config Store, which indicates a config_fetcher call after cache invalidation
            cache_policy.force_refresh()
            value = cache_policy.get()
            self.assertEqual(value, TEST_JSON)
            self.assertEqual(config_fetcher.get_call_count, 2)
            cache_policy.stop()
コード例 #9
0
    def test_cache(self):
        config_fetcher = ConfigFetcherMock()
        config_cache = InMemoryConfigCache()
        cache_policy = LazyLoadingCachePolicy(config_fetcher, config_cache, 1)

        # Get value from Config Store, which indicates a config_fetcher call
        value = cache_policy.get()
        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 1)

        # Get value from Config Store, which doesn't indicates a config_fetcher call (cache)
        value = cache_policy.get()
        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 1)

        # Get value from Config Store, which indicates a config_fetcher call - 1 sec cache TTL
        time.sleep(1)
        value = cache_policy.get()
        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 2)
        cache_policy.stop()
コード例 #10
0
    def test_force_refresh(self):
        config_fetcher = ConfigFetcherMock()
        config_cache = InMemoryConfigCache()
        cache_policy = LazyLoadingCachePolicy(config_fetcher, config_cache, 160)

        # Get value from Config Store, which indicates a config_fetcher call
        value = cache_policy.get()
        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 1)

        try:
            # Clear the cache
            cache_policy._lock.acquire_write()
            cache_policy._config_cache.set(None)
        finally:
            cache_policy._lock.release_write()

        value = cache_policy.get()
        self.assertEqual(value, TEST_JSON)
        self.assertEqual(config_fetcher.get_call_count, 2)
        cache_policy.stop()
コード例 #11
0
    def test_refetch_config(self):
        config_fetcher = ConfigFetcherMock()
        config_cache = InMemoryConfigCache()
        cache_policy = AutoPollingCachePolicy(config_fetcher, config_cache, 2,
                                              1, None)
        time.sleep(1.5)
        config = cache_policy.get()
        self.assertEqual(config, TEST_JSON)

        try:
            # Clear the cache
            cache_policy._lock.acquire_write()
            cache_policy._config_cache.set(None)
        finally:
            cache_policy._lock.release_write()

        time.sleep(1.5)
        self.assertEqual(config_fetcher.get_call_count, 2)
        config = cache_policy.get()
        self.assertEqual(config, TEST_JSON)
        cache_policy.stop()
コード例 #12
0
    def test_force_refresh_not_modified_config(self):
        config_fetcher = mock.MagicMock()
        successful_fetch_response = mock.MagicMock()
        successful_fetch_response.is_fetched.return_value = True
        successful_fetch_response.json.return_value = TEST_JSON
        not_modified_fetch_response = mock.MagicMock()
        not_modified_fetch_response.is_fetched.return_value = False
        config_fetcher.get_configuration_json.return_value = successful_fetch_response
        config_cache = InMemoryConfigCache()
        cache_policy = LazyLoadingCachePolicy(config_fetcher, config_cache, 160)

        # Get value from Config Store, which indicates a config_fetcher call
        with mock.patch(
            "configcatclient.lazyloadingcachepolicy.datetime"
        ) as mock_datetime:
            mock_datetime.datetime.utcnow.return_value = datetime.datetime(
                2020, 5, 20, 0, 0, 0
            )
            value = cache_policy.get()
            self.assertEqual(mock_datetime.datetime.utcnow.call_count, 2)
            self.assertEqual(value, TEST_JSON)
            self.assertEqual(successful_fetch_response.json.call_count, 1)
            config_fetcher.get_configuration_json.return_value = (
                not_modified_fetch_response
            )
            new_time = datetime.datetime(2020, 5, 20, 0, 0, 0) + datetime.timedelta(
                seconds=161
            )
            mock_datetime.datetime.utcnow.return_value = new_time
            cache_policy.force_refresh()
            self.assertEqual(config_fetcher.get_configuration_json.call_count, 2)
            # this indicates that is_fetched() was correctly called and
            # the setting of the new last updated didn't occur
            self.assertEqual(not_modified_fetch_response.json.call_count, 0)
            self.assertEqual(mock_datetime.datetime.utcnow.call_count, 3)
            # last updated should still be set in the case of a 304
            self.assertEqual(cache_policy._last_updated, new_time)
        cache_policy.stop()