Files
computer-playbook/scripts/tests/environment/README.md
T
kevinveenbirkenbach f9f3dfd10d test(environment): differentiate cache assertions, split helpers, verify DiD path
Replace the previous OR-based assertion in scripts/tests/environment
(which trivially passed because the Nexus log always grows from
health probes) with a richer set of helpers split across two files
under utils/ for SRP/SPOT.

scripts/tests/environment/utils/cache.sh (new):

* expected_system_proxy_for_runtime maps DEV_RUNTIME_IMAGE to the
  Nexus proxy that handles its system package manager (apt-debian,
  apt-ubuntu, yum-fedora, yum-rocky; empty for Manjaro/Arch where
  pacman is not cached).
* nexus_repo_requests counts only /repository/<name>/... entries in
  the Nexus request log, optionally scoped to one proxy. Filters out
  health probes, admin REST calls, and Web-UI traffic.
* registry_cache_flows counts every cache-flow status (HIT, MISS,
  REVALIDATED, UPDATING, STALE) so cold deploys also count.
* assert_caches_used fails with a per-cache breakdown when any of
  three independent conditions is violated: total Nexus repo
  traffic = 0, the runtime's expected system proxy has 0 cached
  requests, or the deploy itself produced 0 registry-cache flows.
* probe_caches actively fetches a known upstream resource through
  each cache (apt-debian/dists/bookworm/Release for the package
  cache, /ca.crt for the registry cache).
* probe_did_inner_build drives a throwaway docker build whose
  apt-get update runs against deb.debian.org. The build container
  is placed on the compose network and pinned via --add-host to the
  frontend IP, exactly like the runtime override that
  roles/sys-svc-compose/files/compose.py injects for app builds.
  After the build the test snapshots
  ``docker logs infinito-package-cache-frontend`` and asserts the
  frontend recorded new requests, proving DiD apt traffic flows
  through nginx -> Nexus apt-debian and not directly to upstream.
  DOCKER_BUILDKIT=0 because BuildKit refuses --network=<compose-net>.

scripts/tests/environment/utils/common.sh (renamed from lib.sh):
keeps the bootstrap, constants, inventory inspect, and
assert_http_status; cache helpers moved out so the file is
single-concern.

scripts/tests/environment/07_deploy_minimal.sh sources both files;
order is snapshot, deploy, probe_caches, probe_did_inner_build,
snapshot, assert_caches_used. Active probes contribute traffic that
the AND assertion verifies, so the assertion is robust on deploys
that do not naturally trigger inner-build apt traffic.

.github/workflows/test-environment.yml: propagate DEV_RUNTIME_IMAGE
into the inner ``docker run`` so per-distro probe target and proxy
expectation resolve correctly inside the orchestrator.

.gitignore + .dockerignore: also ignore .claude/settings.local.json,
which compose mounts as /dev/null and which the classic docker
builder would otherwise try (and fail) to read into the build
context.

Verified end-to-end with five iterations of
``make act-workflow ACT_WORKFLOW=.github/workflows/test-environment.yml
ACT_JOB=test-environment ACT_MATRIX='dev_runtime_image:debian:bookworm'``.
The final iteration reports +81 apt-debian, +235 registry-cache
flows, +13 frontend log lines from the DiD probe, and "[OK] both
cache stacks observed activity" plus "[OK] DiD inner-build flowed
through cache frontend".
2026-05-01 10:25:45 +02:00

35 lines
1.7 KiB
Markdown

# Environment Test Suite
This directory contains the modular environment test suite for Infinito.Nexus.
It validates the full local development flow from a clean state.
The entry point is [00_orchestrator.sh](00_orchestrator.sh).
## Structure
| File | Purpose |
|---|---|
| [00_orchestrator.sh](00_orchestrator.sh) | Runs all numbered steps in order |
| [01_install.sh](01_install.sh) | Installs package prerequisites and repository dependencies |
| [02_system.sh](02_system.sh) | Shows disk usage and purges cached state |
| [03_build.sh](03_build.sh) | Builds the local Docker image |
| [04_bootstrap.sh](04_bootstrap.sh) | Bootstraps the development environment and starts the stack |
| [05_commit.sh](05_commit.sh) | Validates pre-commit hook enforcement and `--no-verify` bypass |
| [06_test.sh](06_test.sh) | Runs the full validation suite |
| [07_deploy_minimal.sh](07_deploy_minimal.sh) | Deploys on minimal hardware with service exclusion |
| [08_deploy_performance.sh](08_deploy_performance.sh) | Deploys the full application set on performance hardware |
| [09_deploy_reuse.sh](09_deploy_reuse.sh) | Redeploys reusing existing inventory and packages |
| [10_teardown.sh](10_teardown.sh) | Shuts down the stack and reverses environment changes |
| [utils/common.sh](utils/common.sh) | Shared bootstrap, constants, and generic helpers (HTTP assertion, inventory inspection) |
| [utils/cache.sh](utils/cache.sh) | Cache-stack assertions and probes (registry-cache, package-cache, DiD inner-build) |
## Usage
Run the full suite via the entry point:
```bash
bash scripts/tests/environment/00_orchestrator.sh
```
For documentation on the overall development workflow, see the [Deploy Guide](../../../docs/administration/deploy.md).