mirror of
https://github.com/mozilla-services/syncstorage-rs.git
synced 2026-05-05 04:06:16 +02:00
test: add optional req/resp logging to integration tests and update docs (#2196)
Some checks failed
Glean probe-scraper / glean-probe-scraper (push) Has been cancelled
Main Workflow - Lint, Build, Test / python-env (push) Has been cancelled
Main Workflow - Lint, Build, Test / rust-env (push) Has been cancelled
Build, Tag and Push Container Images to GAR / check (push) Has been cancelled
Publish Sync docs to pages / build-mdbook (push) Has been cancelled
Publish Sync docs to pages / build-openapi (push) Has been cancelled
Main Workflow - Lint, Build, Test / python-checks (push) Has been cancelled
Main Workflow - Lint, Build, Test / rust-checks (push) Has been cancelled
Main Workflow - Lint, Build, Test / clippy (mysql) (push) Has been cancelled
Main Workflow - Lint, Build, Test / clippy (postgres) (push) Has been cancelled
Main Workflow - Lint, Build, Test / clippy (spanner) (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-and-unit-test-postgres (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-postgres-image (push) Has been cancelled
Main Workflow - Lint, Build, Test / postgres-e2e-tests (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-and-unit-test-mysql (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-mysql-image (push) Has been cancelled
Main Workflow - Lint, Build, Test / mysql-e2e-tests (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-and-unit-test-spanner (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-spanner-image (push) Has been cancelled
Main Workflow - Lint, Build, Test / spanner-e2e-tests (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncstorage-rs (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncserver-postgres (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncstorage-rs-spanner-python-utils (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncserver-postgres-python-utils (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncserver-mysql (push) Has been cancelled
Publish Sync docs to pages / combine-and-prepare (push) Has been cancelled
Publish Sync docs to pages / deploy (push) Has been cancelled
Some checks failed
Glean probe-scraper / glean-probe-scraper (push) Has been cancelled
Main Workflow - Lint, Build, Test / python-env (push) Has been cancelled
Main Workflow - Lint, Build, Test / rust-env (push) Has been cancelled
Build, Tag and Push Container Images to GAR / check (push) Has been cancelled
Publish Sync docs to pages / build-mdbook (push) Has been cancelled
Publish Sync docs to pages / build-openapi (push) Has been cancelled
Main Workflow - Lint, Build, Test / python-checks (push) Has been cancelled
Main Workflow - Lint, Build, Test / rust-checks (push) Has been cancelled
Main Workflow - Lint, Build, Test / clippy (mysql) (push) Has been cancelled
Main Workflow - Lint, Build, Test / clippy (postgres) (push) Has been cancelled
Main Workflow - Lint, Build, Test / clippy (spanner) (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-and-unit-test-postgres (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-postgres-image (push) Has been cancelled
Main Workflow - Lint, Build, Test / postgres-e2e-tests (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-and-unit-test-mysql (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-mysql-image (push) Has been cancelled
Main Workflow - Lint, Build, Test / mysql-e2e-tests (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-and-unit-test-spanner (push) Has been cancelled
Main Workflow - Lint, Build, Test / build-spanner-image (push) Has been cancelled
Main Workflow - Lint, Build, Test / spanner-e2e-tests (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncstorage-rs (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncserver-postgres (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncstorage-rs-spanner-python-utils (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncserver-postgres-python-utils (push) Has been cancelled
Build, Tag and Push Container Images to GAR / build-and-push-syncserver-mysql (push) Has been cancelled
Publish Sync docs to pages / combine-and-prepare (push) Has been cancelled
Publish Sync docs to pages / deploy (push) Has been cancelled
This commit is contained in:
parent
9e89b6025e
commit
2eddf6de6c
@ -108,3 +108,58 @@ In GitHub Actions, E2E tests run as part of the CI/CD pipeline for each backend:
|
||||
- [.github/workflows/spanner.yml](../../.github/workflows/spanner.yml) - `spanner-e2e-tests` job
|
||||
|
||||
Each workflow builds a Docker image, runs unit tests, then executes E2E tests using the same make targets described above.
|
||||
|
||||
### Running E2E Tests Against a Local Server
|
||||
|
||||
You can run the integration tests against a locally running Sync server. Start your server, then use the `run_local_e2e_tests` make target:
|
||||
|
||||
```bash
|
||||
SYNC_SYNCSTORAGE__DATABASE_URL="postgres://user:pass@localhost/syncstorage" \
|
||||
SYNC_TOKENSERVER__DATABASE_URL="postgres://user:pass@localhost/tokenserver" \
|
||||
make run_local_e2e_tests
|
||||
```
|
||||
|
||||
The target uses the following env vars:
|
||||
- `SYNC_SERVER_URL` (default: `http://localhost:8000`)
|
||||
- `TOKENSERVER_HOST` (default: `http://localhost:8000`)
|
||||
- `SYNC_MASTER_SECRET` (default: `secret0`)
|
||||
- `SYNC_TOKENSERVER__FXA_OAUTH_SERVER_URL` (default: `http://localhost:6000`)
|
||||
|
||||
`SYNC_SYNCSTORAGE__DATABASE_URL` and `SYNC_TOKENSERVER__DATABASE_URL` must be set when `make` is invoked.
|
||||
|
||||
To run a specific test by name:
|
||||
|
||||
```bash
|
||||
SYNC_SYNCSTORAGE__DATABASE_URL="..." \
|
||||
SYNC_TOKENSERVER__DATABASE_URL="..." \
|
||||
PYTHONPATH=/path/to/syncstorage-rs/tools \
|
||||
TOKENSERVER_HOST=http://localhost:8000 \
|
||||
poetry -C /path/to/syncstorage-rs/tools/integration_tests \
|
||||
run pytest . -k test_meta_global_sanity
|
||||
```
|
||||
|
||||
Or by full module path:
|
||||
|
||||
```bash
|
||||
SYNC_SYNCSTORAGE__DATABASE_URL="..." \
|
||||
SYNC_TOKENSERVER__DATABASE_URL="..." \
|
||||
PYTHONPATH=/path/to/syncstorage-rs/tools \
|
||||
TOKENSERVER_HOST=http://localhost:8000 \
|
||||
poetry -C /path/to/syncstorage-rs/tools/integration_tests \
|
||||
run pytest tokenserver/test_authorization.py::TestAuthorization::test_authorized_request
|
||||
```
|
||||
|
||||
#### HTTP Request and Response Logging
|
||||
|
||||
Set `SYNC_TEST_LOG_HTTP=1` and pass `--log-cli-level=INFO` to pytest log HTTP requests and responses to stdout:
|
||||
|
||||
```bash
|
||||
SYNC_SYNCSTORAGE__DATABASE_URL="..." \
|
||||
SYNC_TOKENSERVER__DATABASE_URL="..." \
|
||||
PYTHONPATH=/path/to/syncstorage-rs/tools \
|
||||
TOKENSERVER_HOST=http://localhost:8000 \
|
||||
SYNC_TEST_LOG_HTTP=1 \
|
||||
poetry -C /path/to/syncstorage-rs/tools/integration_tests \
|
||||
run pytest . -k test_meta_global_sanity --log-cli-level=INFO
|
||||
```
|
||||
|
||||
|
||||
27
tools/integration_tests/conftest.py
Normal file
27
tools/integration_tests/conftest.py
Normal file
@ -0,0 +1,27 @@
|
||||
"""Pytest configuration and fixtures for integration tests."""
|
||||
|
||||
import os
|
||||
import logging
|
||||
|
||||
# max number of attempts to check server heartbeat
|
||||
SYNC_SERVER_STARTUP_MAX_ATTEMPTS = 35
|
||||
SYNC_SERVER_URL = os.environ.get("SYNC_SERVER_URL", "http://localhost:8000")
|
||||
|
||||
logger = logging.getLogger("tools.integration-tests")
|
||||
|
||||
if os.environ.get("SYNC_TEST_LOG_HTTP"):
|
||||
import webtest
|
||||
|
||||
_orig_do_request = webtest.TestApp.do_request
|
||||
|
||||
def _logged_do_request(self, req, *args, **kwargs):
|
||||
"""Wrap request and response logging around original do_request."""
|
||||
logger.info(">> %s %s", req.method, req.url)
|
||||
if req.body:
|
||||
logger.info(">> BODY: %s", req.body)
|
||||
resp = _orig_do_request(self, req, *args, **kwargs)
|
||||
logger.info("<< %s", resp.status)
|
||||
logger.info("<< BODY: %s", resp.body)
|
||||
return resp
|
||||
|
||||
webtest.TestApp.do_request = _logged_do_request
|
||||
Loading…
x
Reference in New Issue
Block a user