Exemplo n.º 1
0
 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'
Exemplo n.º 2
0
    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'
Exemplo n.º 3
0
 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'
     })
Exemplo n.º 4
0
    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'
Exemplo n.º 5
0
    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'
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
 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'
     })
Exemplo n.º 8
0
 def purge(self):
     purge_resource({
         'namespace': 'backend.main',
         'cache_name': 'timestamp'
     })
     purge_resource({'namespace': 'backend.main', 'cache_name': 'long_ttl'})