Test Execution¶
Required PR CI includes fast unit tests, installed-wheel E2E tests, and a separate provisioned Sionna RT gate. The E2E environment installs Sionna once, runs the two production-qualified Golden Paths (narrowband classifier and chirp-radar), and runs a small UMa/RMa/CDL backend smoke set. Smoke tests exercise selectors and failure boundaries; they are not Golden Paths or user products.
Capability |
Test category |
PR CI |
|---|---|---|
Components, RX, seeded determinism, the Signal Dataset store, TorchSig interop, and the fixed-shape HDF5 export stage |
Unit |
Required |
Narrowband UMi and chirp TDL products |
Golden Path E2E |
Required |
UMa, RMa, CDL |
Installed-wheel smoke |
Required |
Sionna RT real-solver contracts and OpenGERT/Munich journeys |
Core integration |
Required |
Gemini annotation and Dataproc |
Live/ad-hoc |
Excluded |
Run required local checks with:
pytest -q tests/unit
pytest -q -o addopts='' -m 'not dataproc_e2e and not live and not sionna_rt' tests/integration/local
Sionna RT is required core CI and can also be manually dispatched. It requires Sionna RT, Mitsuba, Dr.Jit, and local scene assets. The preflight is deliberately non-skipping: it fails with the missing runtime module or fixture bundle before the RT solver tests run.
uv pip install -e '.[sionna]' && \
python -c 'from rfgen.engine.propagation_sionna import validate_sionna_rt_capability; validate_sionna_rt_capability()' && \
pytest -q -o addopts='' -m sionna_rt tests/unit/test_propagation.py && \
pytest -q -o addopts='' tests/integration/sionna_rt
On macOS, Dr.Jit may additionally need DRJIT_LIBLLVM_PATH set to a compatible
local LLVM library. The real Gemini qualification is the manually gated
Annotation Golden Path; it is excluded from
ordinary CI because it makes billed hosted-provider requests.
Dataproc Serverless has one opt-in live test surface. It is excluded from ordinary CI and provides manual evidence, not production qualification. A second surface, the annotation E2E test, was deleted with the route it exercised; see below.
The generation E2E test submits four samples, polls for at most ten minutes, opens the published Signal Dataset snapshot to verify the record count, one record’s IQ, and the declared label fields, and deletes only its unique test-owned GCS prefix. It requires a staging URI and worker service account:
RFGEN_ANNOTATION_E2E=YES, RFGEN_ANNOTATION_E2E_REGION,
RFGEN_ANNOTATION_E2E_STAGING_URI, RFGEN_ANNOTATION_E2E_OUTPUT_URI, and
RFGEN_ANNOTATION_E2E_SERVICE_ACCOUNT (plus optional GOOGLE_CLOUD_PROJECT):
RFGEN_ANNOTATION_E2E=YES \
pytest -m dataproc_e2e tests/manual/test_dataproc_serverless.py
The separate annotation E2E test read immutable GCS WebDataset shards
through Vertex Gemini Batch, and was deleted with that route; a Signal Dataset
replacement is owed before the surface claims live coverage again, which
ci/integration/coverage_manifest.json records against its gcs and gemini
entries. RFGEN_ANNOTATION_E2E_DEPS_BUCKET and
RFGEN_ANNOTATION_E2E_IMAGE_DIGEST were that test’s variables and are read by
nothing in this build; setting them does nothing. Use the exact
Dataproc annotation qualification command,
including its explicit billed-work approval and cleanup boundary.