graphql-engine/server/tests-py
Puru Gupta 504f13725f server: forward auth webhook set-cookies header on response
>

High-Level TODO:

* [x] Code Changes
* [x] Tests
* [x] Check that pro/multitenant build ok
* [x] Documentation Changes
* [x] Updating this PR with full details
* [ ] Reviews
* [ ] Ensure code has all FIXMEs and TODOs addressed
* [x] Ensure no files are checked in mistakenly
* [x] Consider impact on console, cli, etc.

### Description
>
This PR adds support for adding set-cookie header on the response from the auth webhook. If the set-cookie header is sent by the webhook, it will be forwarded in the graphQL engine response.

Fixes a bug in test-server.sh: testing of get-webhook tests was done by POST method and vice versa. To fix, the parameters were swapped.

### Changelog

- [x] `CHANGELOG.md` is updated with user-facing content relevant to this PR.

### Affected components

- [x] Server
- [ ] Console
- [ ] CLI
- [x] Docs
- [ ] Community Content
- [ ] Build System
- [x] Tests
- [ ] Other (list it)

### Related Issues
->
Closes [#2269](https://github.com/hasura/graphql-engine/issues/2269)

### Solution and Design
>

### Steps to test and verify
>
Please refer to the docs to see how to send the set-cookie header from webhook.

### Limitations, known bugs & workarounds
>
- Support for only set-cookie header forwarding is added
- the value forwarded in the set-cookie header cannot be validated completely, the [Cookie](https://hackage.haskell.org/package/cookie) package has been used to parse the header value and any unnecessary information is stripped off before forwarding the header. The standard given in [RFC6265](https://datatracker.ietf.org/doc/html/rfc6265) has been followed for the Set-Cookie format.

### Server checklist

#### Catalog upgrade

Does this PR change Hasura Catalog version?
- [x] No
- [ ] Yes
  - [ ] Updated docs with SQL for downgrading the catalog

#### Metadata

Does this PR add a new Metadata feature?
- [x] No

#### GraphQL
- [x] No new GraphQL schema is generated
- [ ] New GraphQL schema is being generated:
   - [ ] New types and typenames are correlated

#### Breaking changes

- [x] No Breaking changes

PR-URL: https://github.com/hasura/graphql-engine-mono/pull/2538
Co-authored-by: Robert <132113+robx@users.noreply.github.com>
GitOrigin-RevId: d9047e997dd221b7ce4fef51911c3694037e7c3f
2021-11-09 12:01:31 +00:00
..
pgdump server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
queries Source typename customization (close graphql-engine#6974) 2021-10-29 14:43:14 +00:00
remote_schemas/nodejs server/postgres: Support scalar computed fields in remote joins 2021-07-12 16:04:37 +00:00
test_tests Test result ordering, add --accept test mode to automatically accept changed test cases 2019-11-05 15:15:25 -06:00
webhook/insecure [server] coalesce multiple run_sql calls in tests (#270) 2021-01-06 16:07:22 +00:00
.gitignore server: support EdDSA keys for JWT 2021-08-12 01:54:06 +00:00
auth_webhook_server.py server: forward auth webhook set-cookies header on response 2021-11-09 12:01:31 +00:00
conftest.py server: forward auth webhook set-cookies header on response 2021-11-09 12:01:31 +00:00
context.py [server] Allow Nullable action response 2021-10-11 06:56:01 +00:00
graphql_server.py Remote Schema Customization take 2 using parser tranformations 2021-07-30 11:33:59 +00:00
jwk_server.py fix parsing JWK expiry time from headers on startup (fix #3655) (#3779) 2020-02-05 12:37:30 +05:30
pytest.ini run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
README.md Link to pytest docs in the server test suite READMEs (#4425) 2020-04-21 11:29:16 +02:00
remote_server.py actions: fix behaviour when using remote relationship in mutation action's relationship (#4982) 2020-06-05 17:33:18 +05:30
requirements-top-level.txt Add a new /dev/rts_stats endpoint, enabled when '+RTS -T' 2021-04-13 17:33:38 +00:00
requirements.txt server: support EdDSA keys for JWT 2021-08-12 01:54:06 +00:00
super_classes.py fix validation of null values, closes #1981 (#2057) 2019-04-24 13:19:39 +05:30
test_actions.py [server] Allow Nullable action response 2021-10-11 06:56:01 +00:00
test_allowlist_queries.py server: revert the relaxing of unique name constraint in allow-lists 2021-08-03 09:23:20 +00:00
test_apis_disabled.py disable explain end-points when metadata API is disabled, fix #3717 (#3751) 2020-01-22 16:20:49 +05:30
test_auth_webhook_cookie.py server: forward auth webhook set-cookies header on response 2021-11-09 12:01:31 +00:00
test_compat.py remove usage of deprecated 'pytest.config' (#3434) 2019-11-29 10:44:26 +05:30
test_compression.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_config_api.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_cors.py remove usage of deprecated 'pytest.config' (#3434) 2019-11-29 10:44:26 +05:30
test_dev_endpoints.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_endpoints.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_events.py Feature/request transform string interpolation 2021-09-29 08:14:29 +00:00
test_graphql_introspection.py server: fix the nullability of object relationships (fix hasura/graphql-engine#7201) 2021-08-26 15:27:34 +00:00
test_graphql_mutations.py server/mssql: insert SQL generation and execution 2021-10-01 12:53:15 +00:00
test_graphql_queries.py server/mysql: Implement MySQL explain API 2021-10-23 11:43:25 +00:00
test_heterogeneous.py server: heterogeneous execution of GraphQL queries (#5869) 2020-10-07 10:23:17 +00:00
test_horizontal_scale.py remove usage of deprecated 'pytest.config' (#3434) 2019-11-29 10:44:26 +05:30
test_inconsistent_meta.py server/citus: feature branch 2021-05-21 02:47:51 +00:00
test_jwk.py read cache control header to refresh JWK (fix #3301) (#3446) 2019-12-03 14:56:59 -06:00
test_jwt_claims_map.py server: support EdDSA keys for JWT 2021-08-12 01:54:06 +00:00
test_jwt.py server: support EdDSA keys for JWT 2021-08-12 01:54:06 +00:00
test_logging.py server: add parameterized query hash for websocket logs 2021-09-06 12:27:48 +00:00
test_metadata.py Source typename customization (close graphql-engine#6974) 2021-10-29 14:43:14 +00:00
test_openapi.py fix OpenAPI for mutiple methods on same REST endpoint path 2021-10-14 10:32:18 +00:00
test_pg_dump.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_query_cache.py server: disable caching for actions with forward client headers enabled 2021-04-13 07:01:34 +00:00
test_remote_relationships.py server: Add regression tests for hasura/graphql-engine#7172 2021-08-25 21:06:09 +00:00
test_remote_schema_permissions.py server: inherited roles for mutations, remote schemas, actions and custom functions 2021-08-09 10:21:05 +00:00
test_roles_inheritance.py Always enable inherited roles tests 2021-09-16 06:24:54 +00:00
test_scheduled_triggers.py server: fix flaky test_check_events_statuses test 2021-10-22 05:55:59 +00:00
test_schema_duplication.py add tests 2020-09-01 17:13:42 +05:30
test_schema_stitching.py Test customization with update_remote_schema 2021-08-02 05:50:49 +00:00
test_subscriptions.py Source typename customization (close graphql-engine#6974) 2021-10-29 14:43:14 +00:00
test_tests.py server: hasura on PG v13 (#125) 2020-12-01 12:22:42 +00:00
test_v1_queries.py server: add tests ensuring the correct functioning of all endpoints based on user roles 2021-07-16 16:09:25 +00:00
test_v1alpha1_endpoint.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_v2_queries.py server/mssql: add cascade to mssql_run_sql 2021-10-22 14:50:13 +00:00
test_validation.py server: fix validation of query variables (fixes hasura/graphql-engine#6867) 2021-05-04 17:58:43 +00:00
test_version.py server: add logs for version and healthz endpoints 2021-06-08 14:28:52 +00:00
test_webhook_insecure.py run default tests in test_server_upgrade (#3718) 2020-02-13 14:44:02 +05:30
test_webhook_request_context.py server: call auth webhook even if the request fails to parse 2021-10-28 18:43:47 +00:00
test_webhook.py server: forward auth webhook set-cookies header on response 2021-11-09 12:01:31 +00:00
test_websocket_init_cookie.py server: forward auth webhook set-cookies header on response 2021-11-09 12:01:31 +00:00
utils.py server: restore proper batching behavior in event trigger processing (#1237) 2021-04-29 04:02:05 +00:00
validate.py server: address recent graphql-ws related bugs 2021-11-04 12:40:02 +00:00
webhook.py pass gql requests into auth webhook POST body (#149) 2021-02-03 07:11:39 +00:00
webserver.py server: forward auth webhook set-cookies header on response 2021-11-09 12:01:31 +00:00

Running tests

The easiest way to run the test suite is to do:

$ scripts/dev.sh test

This should install python dependencies if required, and run in isolation. The output format is described in the pytest documentation. Errors and failures are indicated by Fs and Es.

Tests Structure

  • Tests are grouped as test classes in test modules (names starting with test_)

  • The configuration files (if needed) for the tests in a class are usually kept in one folder.

    • The folder name is usually either the dir variable or the dir() function
  • Some tests (like in test_graphql_queries.py) requires a setup and teardown per class.

    • Here we are extending the DefaultTestSelectQueries class.
    • This class defines a fixture which will run the configurations in setup.yaml and teardown.yaml once per class
    • Extending test class should define a function name dir(), which returns the configuration folder
  • For mutation tests (like in test_graphql_mutations.py)

    • We need a schema_setup and schema_teardown per class
    • And values_setup and values_teardown per test
    • Doing schema setup and teardown per test is expensive.
    • We are extending the DefaultTestMutations class for this.
    • This class defines a fixture which will run the configuration in setup.yaml and teardown.yaml once per class.
    • Another fixture defined in this class runs the configuration in values_setup.yaml and values_teardown.yaml once per class.