hotglue-smoke-test
Smoke-test harness for hotglue taps and targets with colocated __smoke-tests__/ fixtures in connector repos.
Three phases: record HTTP (then scrub) → generate data.singer/state.json → run (replay + compare).
Run from the connector repo root (after installing into that venv). Connector name for logs is derived from the directory (tap-shopify-v2 → shopify-v2).
Layout (per connector repo)
tap-foo/
__smoke-tests__/
record-vcr.py
__smoke-tests__/some_stream_test/
config.json
catalog-selected.json
fixtures/vcr.yaml
expected_output/data.singer
Install
uv pip install hotglue-smoke-test
# pin when needed, e.g. uv pip install 'hotglue-smoke-test~=1.0.0'
Dev / unreleased branch:
uv pip install "hotglue-smoke-test @ git+https://github.com/hotgluexyz/hotglue-smoke-test.git@<branch>"
Release (PyPI)
Uses uv build / uv publish with trusted publishing (no PYPI_API_TOKEN).
One-time setup:
- GitHub → Settings → Environments → create
pypi. - PyPI → project → Publishing → add a trusted publisher matching this repo/workflow/
pypienvironment.
Then bump version in pyproject.toml, commit, tag, push the tag:
# after merging to main with version bumped
git tag 1.0.0
git push origin 1.0.0
Commands
# 1. Record VCR cassette (live API; discards Singer output), then scrub secrets/PII
hotglue-smoke-test record orders_test
# 2. Replay cassette → write expected_output/
hotglue-smoke-test generate orders_test
# 3. Replay cassette → test_runtime/ → compare (CI uses bare `run` = all cases)
hotglue-smoke-test run
hotglue-smoke-test run orders_test
record scrubs by default after the live HTTP capture (cassette response bodies + connector record-vcr.py rules). Use --no-scrub only for local debug; do not commit unsanitized cassettes.
Add --target for target repos. Add --force on record or generate to overwrite existing artifacts. Override the repo root with --connector-directory only when not running from cwd.
--force semantics
| Command | Without --force |
With --force |
|---|---|---|
record |
Fails if fixtures/vcr.yaml exists |
Wipes fixtures/, expected_output/, test_runtime/, then live-records + scrub |
generate |
Fails if data.singer/state.json output exists | Wipes expected_output/, test_runtime/, then regenerates from cassette |
run never mutates committed artifacts.
Typical workflow
hotglue-smoke-test record orders_test # live → fixtures/vcr.yaml → scrub
hotglue-smoke-test generate orders_test # replay → expected_output/
hotglue-smoke-test run orders_test # replay → test_runtime/ → diff
hotglue-smoke-test record --force orders_test # full re-record + scrub (start over)
hotglue-smoke-test generate orders_test
hotglue-smoke-test run orders_test
hotglue-smoke-test generate --force orders_test # refresh data.singer/state.json after connector change (HTTP unchanged)
hotglue-smoke-test run orders_test
Connector __smoke-tests__/record-vcr.py:
from hotglue_smoke_test.vcr.tap import VCRTapTestRunner
Override sanitize_cassette() for connector-specific PII rules. Default base scrub only redacts OAuth token keys in response JSON.
Self-check: python -m hotglue_smoke_test.self_check
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file hotglue_smoke_test-1.0.0.tar.gz.
File metadata
- Download URL: hotglue_smoke_test-1.0.0.tar.gz
- Upload date:
- Size: 23.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
30720e3e86a7bd81f2e1d73ebf4952e7de9d7ab7cc1d33f5bd52a27c9345d0bd
|
|
| MD5 |
fb626e85106608f30b4329b6cb77f639
|
|
| BLAKE2b-256 |
19b2e94f3f338fc0a63a0bda8d7ab9bbeacf2726ba68a09c658463f8b7b1e6cc
|
File details
Details for the file hotglue_smoke_test-1.0.0-py3-none-any.whl.
File metadata
- Download URL: hotglue_smoke_test-1.0.0-py3-none-any.whl
- Upload date:
- Size: 28.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.20
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
80ff08b02a6133750f55626aa5c9d581dcb811800a2346a8e5dafe4e68ceeb0a
|
|
| MD5 |
a42fafaa080c1dfa5823a2f1f58f2804
|
|
| BLAKE2b-256 |
e38a5a8a75df639e13d5a5d5bb2a48324def1591648b146aaa5295e24b96ac02
|