def test_purge_returns_400_on_invalid_cache_name(self): with pytest.raises(bravado.exception.HTTPBadRequest) as e: purge_resource({ 'namespace': 'backend.main', 'cache_name': 'timestamp_invalid' }) assert e.value.response.status_code == 400 assert e.value.response.text == 'Unknown cache_name timestamp_invalid for namespace backend.main'
def test_purge_cassandra_by_id(self): get_through_spectre('/bulk_requester?ids=1') assert_is_in_spectre_cache('/bulk_requester?ids=1') # Purge id 1 purge_resource({'namespace': 'backend.main', 'cache_name': 'bulk_requester_does_not_cache_missing_ids', 'id': '1'}) get_resp_3 = get_through_spectre('/bulk_requester?ids=1') # resp 3 was no longer cached. assert get_resp_3.headers['Spectre-Cache-Status'] == 'miss'
def purge(self): purge_resource({ 'namespace': 'backend.main', 'cache_name': 'bulk_requester_does_not_cache_missing_ids' }) purge_resource({ 'namespace': 'backend.main', 'cache_name': 'bulk_requester_default' })
def test_caching_works_with_id_extraction(self): response = get_through_spectre('/biz?foo=bar&business_id=1234') assert response.headers['Spectre-Cache-Status'] == 'miss' # ensure extracting the id is not messing up the caching logic assert_is_in_spectre_cache('/biz?foo=bar&business_id=1234') # check that invalidation is actually supported purge_resource({ 'namespace': 'backend.main', 'cache_name': 'url_with_id_extraction', 'id': '1234', }) # now this should be a cache miss response = get_through_spectre('/biz?foo=bar&business_id=1234') assert response.headers['Spectre-Cache-Status'] == 'miss'
def test_post_cached_with_id_can_be_purged(self): response = post_through_spectre( '/post_id_cache/', data='{"request_id":123, "vary_id":"abc"}', extra_headers={'content-type': 'application/json'}) assert response.status_code == 200 assert response.headers['Spectre-Cache-Status'] == 'miss' # When calling with different data with same id, we will see a cache miss. response = post_through_spectre( '/post_id_cache/', data='{"request_id":123, "vary_id":"def"}', extra_headers={'content-type': 'application/json'}) assert response.status_code == 200 assert response.headers['Spectre-Cache-Status'] == 'miss' # Calling again with same request_id should be a cache hit response = post_through_spectre( '/post_id_cache/', data='{"request_id":123, "vary_id":"abc"}', extra_headers={'content-type': 'application/json'}) assert response.status_code == 200 assert response.headers['Spectre-Cache-Status'] == 'hit' # Purge all resources with same id. purge_resource({ 'namespace': 'backend.main', 'cache_name': 'post_with_id', 'id': '123' }) # All resources with same id should be a miss now. response = post_through_spectre( '/post_id_cache/', data='{"request_id":123, "vary_id":"def"}', extra_headers={'content-type': 'application/json'}) assert response.status_code == 200 assert response.headers['Spectre-Cache-Status'] == 'miss' response = post_through_spectre( '/post_id_cache/', data='{"request_id":123, "vary_id":"abc"}', extra_headers={'content-type': 'application/json'}) assert response.status_code == 200 assert response.headers['Spectre-Cache-Status'] == 'miss'
def test_purge_cassandra(self): val1_before = get_timestamp('/timestamp/purge/1') val2_before = get_timestamp('/timestamp/purge/2') val3_before = get_timestamp('/long_ttl/no-purge') response = purge_resource({'namespace': 'backend.main', 'cache_name': 'timestamp'}) assert response == 'Purged namespace: backend.main & cache_name: timestamp' val1_after = get_timestamp('/timestamp/purge/1') val2_after = get_timestamp('/timestamp/purge/2') val3_after, miss_values = get_timestamp_until_hit('/long_ttl/no-purge') # Both val1 and val2 should be deleted after purge; # however, val3 should remain as is before and after the purge. assert val1_before != val1_after assert val2_before != val2_after assert val3_before in [val3_after] + miss_values
def purge(self): purge_resource({ 'namespace': 'backend.main', 'cache_name': 'post_no_id' }) purge_resource({ 'namespace': 'backend.main', 'cache_name': 'post_with_id' }) purge_resource({ 'namespace': 'backend.main', 'cache_name': 'post_with_id_varying_body' })
def purge(self): purge_resource({ 'namespace': 'backend.main', 'cache_name': 'timestamp' }) purge_resource({'namespace': 'backend.main', 'cache_name': 'long_ttl'})