You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Sibling of #389. While investigating the Docker outage there, an audit of the test suites and workflows found several other places where CI reports green while tests silently skip — the suite passes whether or not the gated tests ran. #389 covered the email-channel instance; this issue tracks the rest.
Rust's libtest has no runtime "skip" outcome, so availability guards must choose between passing and failing when a dependency is missing — and everywhere below they chose "pass," which converts missing infrastructure or unset variables into green checkmarks.
Confirmed gaps — green in CI, tests never run anywhere
Never set in any workflow. Main CI runs cargo test --workspace --all-features, so these compile and pass vacuously while their sibling tests in the same file run against a testcontainer
Silent but covered elsewhere (acceptable, worth documenting)
crates/auth/tests/jwks_cluster_redis.rs — skips unless RUN_REDIS_CLUSTER_TESTS=1; silent in main CI, but redis-cluster-tests.yml sets it and triggers on auth-path changes + nightly + dispatch.
The model pattern already exists in-repo
ci.yml handles minio_s3_tests.rs correctly: it sets RUN_MINIO_S3_TESTS=1and has an anti-vacuous contract check (ci.yml:~109) — the comment reads "This step must not be able to pass vacuously" and the step asserts the expected number of tests actually ran, so a renamed test or typo'd variable turns the step red. This pattern just wasn't applied to the other gated suites.
Lower-risk observations
The persistence capability harness (crates/persistence/tests/common/harness.rs, TestDecision::Skip) passes on skip. It's deterministic (capability-matrix-driven, not infra-dependent), but a wrongly-declared capability silently drops entire suites — relevant given fix(persistence): correct tenancy capability advertisements (#369) #379 is about incorrect capability advertisements.
crates/serde/tests/test_examples.rs permanently skips known-problem resources (printed, but invisible in results).
Not problems: audit-events.yml's exit 0s are readiness-wait loops; the || trues are cleanup; subscriptions-smoke.yml's MAILPIT_HTTP_URL gate is self-satisfied (the workflow starts mailpit itself).
Proposed remediation
Extend the MinIO anti-vacuous contract check to every env-gated suite that CI intends to run.
Set RUN_MINIO_S3_ES_TESTS=1 in CI (the suite uses MinIO via testcontainers, same infra as the covered MinIO suite).
Either point the 8 gated MongoDB tests at the same testcontainer their sibling tests use, or set HFS_TEST_MONGODB_URL in CI.
Wire s3_tests.rs into a scheduled workflow rather than leaving it manual-only. This is low-friction with the repo's existing AWS setup: the workflows already authenticate via OIDC federation (id-token: write + aws-actions/configure-aws-credentials@v6 with role-to-assume: ${{ secrets.AWS_ROLE_ARN }} — see bulk-export-smoke.yml, bulk-submit-smoke.yml, audit-events.yml), so no long-lived AWS secrets need to be stored or rotated; short-lived credentials are minted per run. The scheduled job would need: id-token: write, the configure-aws-credentials step (it exports the standard AWS_* env vars the SDK reads), RUN_AWS_S3_TESTS=1, and HFS_S3_TEST_BUCKET_TENANT_A/B values. AWS-side prerequisites: the IAM role's trust policy must allow that workflow to assume it, and the role must have access to the test buckets. Until that lands, document the suite as manual-only so its absence from CI is at least visible.
Summary
Sibling of #389. While investigating the Docker outage there, an audit of the test suites and workflows found several other places where CI reports green while tests silently skip — the suite passes whether or not the gated tests ran. #389 covered the email-channel instance; this issue tracks the rest.
Rust's libtest has no runtime "skip" outcome, so availability guards must choose between passing and failing when a dependency is missing — and everywhere below they chose "pass," which converts missing infrastructure or unset variables into green checkmarks.
Confirmed gaps — green in CI, tests never run anywhere
crates/persistence/tests/s3_es_tests.rs(S3+ES composite)RUN_MINIO_S3_ES_TESTS=1crates/persistence/tests/mongodb_tests.rs(count_by_types,count_all_types,count_by_day,count_deltas_by_bucket,activity_histogram,count_by_tenant,tenant_registry_crud,purge_tenant_data)HFS_TEST_MONGODB_URLcargo test --workspace --all-features, so these compile and pass vacuously while their sibling tests in the same file run against a testcontainercrates/persistence/tests/s3_tests.rs(real AWS S3)RUN_AWS_S3_TESTS=1+HFS_S3_TEST_BUCKET_TENANT_A/Bcrates/subscriptions/tests/email_integration.rsdocker_available()guardSilent but covered elsewhere (acceptable, worth documenting)
crates/auth/tests/jwks_cluster_redis.rs— skips unlessRUN_REDIS_CLUSTER_TESTS=1; silent in main CI, butredis-cluster-tests.ymlsets it and triggers on auth-path changes + nightly + dispatch.The model pattern already exists in-repo
ci.ymlhandlesminio_s3_tests.rscorrectly: it setsRUN_MINIO_S3_TESTS=1and has an anti-vacuous contract check (ci.yml:~109) — the comment reads "This step must not be able to pass vacuously" and the step asserts the expected number of tests actually ran, so a renamed test or typo'd variable turns the step red. This pattern just wasn't applied to the other gated suites.Lower-risk observations
crates/persistence/tests/common/harness.rs,TestDecision::Skip) passes on skip. It's deterministic (capability-matrix-driven, not infra-dependent), but a wrongly-declared capability silently drops entire suites — relevant given fix(persistence): correct tenancy capability advertisements (#369) #379 is about incorrect capability advertisements.crates/serde/tests/test_examples.rspermanently skips known-problem resources (printed, but invisible in results).audit-events.yml'sexit 0s are readiness-wait loops; the|| trues are cleanup;subscriptions-smoke.yml'sMAILPIT_HTTP_URLgate is self-satisfied (the workflow starts mailpit itself).Proposed remediation
RUN_MINIO_S3_ES_TESTS=1in CI (the suite uses MinIO via testcontainers, same infra as the covered MinIO suite).HFS_TEST_MONGODB_URLin CI.s3_tests.rsinto a scheduled workflow rather than leaving it manual-only. This is low-friction with the repo's existing AWS setup: the workflows already authenticate via OIDC federation (id-token: write+aws-actions/configure-aws-credentials@v6withrole-to-assume: ${{ secrets.AWS_ROLE_ARN }}— seebulk-export-smoke.yml,bulk-submit-smoke.yml,audit-events.yml), so no long-lived AWS secrets need to be stored or rotated; short-lived credentials are minted per run. The scheduled job would need:id-token: write, theconfigure-aws-credentialsstep (it exports the standardAWS_*env vars the SDK reads),RUN_AWS_S3_TESTS=1, andHFS_S3_TEST_BUCKET_TENANT_A/Bvalues. AWS-side prerequisites: the IAM role's trust policy must allow that workflow to assume it, and the role must have access to the test buckets. Until that lands, document the suite as manual-only so its absence from CI is at least visible.CIis set (as proposed in subscriptions-channels.yml fails on self-hosted Linux runners: no docker.sock (needs DOCKER_HOST env like smoke workflow) #389 for the email guard).