graphql-engine/server/tests-py/test_query_cache.py
Samir Talwar 44ad07eeab server/tests-py: Fix up the Redis tests so they run.
This fixes the existing tests around query caching and other Redis-related behaviors so they actually run.

Some of the tests still fail because of a couple of bugs, but the error messages are now meaningful.

They do not yet run in CI. We will enable them once they are fixed.

I added a bit of extra logging; we now log the Redis server host and port. I also left in the `Show` instance derivations I used for debugging, as I don't think they'll harm anything and might be useful in the future.

The changes are as follows:

1. I added a `redis` server to the tests and configured both HGE and the test runner to talk to it.
2. I fixed up the action tests so they set up and tear down correctly, including a fix to the output type of the action.
3. Caching has been implemented for actions with client header forwarding, so I have changed the test accordingly.
4. Tests now fail correctly if the response headers are wrong but the body is correct.
5. I have updated the keys in the response headers as the algorithm for generating them seems to have changed.
6. A few improvements have been made to the Python tests to handle lint warnings and improve logging.

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/10839
GitOrigin-RevId: 5d31a376346190b5c7b398b4dee84b88a9d1b18b
2024-05-28 15:12:10 +00:00

36 lines
1.5 KiB
Python

import pytest
from validate import check_query_f
@pytest.mark.admin_secret
@pytest.mark.parametrize('transport', ['http'])
@pytest.mark.usefixtures('pro_tests_fixtures', 'enterprise_edition', 'per_class_tests_db_state', 'actions_fixture', 'flush_redis')
class TestQueryCache:
@classmethod
def dir(cls):
return 'queries/query_cache'
def test_simple_cached_endpoint(self, hge_ctx, transport):
check_query_f(hge_ctx, self.dir() + '/simple_cached.yaml', transport)
def test_metrics_one_endpoint(self, hge_ctx, transport):
check_query_f(hge_ctx, self.dir() + '/test_metrics_one.yaml', transport)
def test_metrics_two_endpoint(self, hge_ctx, transport):
check_query_f(hge_ctx, self.dir() + '/test_metrics_two.yaml', transport)
def test_cache_clear_endpoint(self, hge_ctx, transport):
check_query_f(hge_ctx, self.dir() + '/test_cache_clear.yaml', transport)
def test_cache_clear_endpoint_key(self, hge_ctx, transport):
check_query_f(hge_ctx, self.dir() + '/test_cache_clear_key.yaml', transport)
def test_cache_clear_endpoint_family(self, hge_ctx, transport):
check_query_f(hge_ctx, self.dir() + '/test_cache_clear_family.yaml', transport)
def test_no_variables_in_query_key(self, hge_ctx, transport):
check_query_f(hge_ctx, self.dir() + '/test_no_variables_in_query_key.yaml', transport)
def test_action_query(self, hge_ctx, transport):
check_query_f(hge_ctx, self.dir() + '/test_action_query.yaml', transport)