Provision tests

Provision tests exercise a complete observing mode on deployed hardware. They run the Master Controller through provision, configure, capture, one or more measurement cycles, deconfigure, and deprovision. After each transition, the runner executes core checks and plugin-specific checks inside every product.

Test levels

Unit tests

Validate functions and processing components without a deployed pipeline.

Pipeline lifecycle tests

Start one pipeline and exercise its common state interface with controlled input.

Provision tests

Exercise the real site inventory, stream graph, containers, hardware, monitoring, output storage, and cleanup.

Running provision tests

Provision testing is provided by the EDD core CLI, not by the standalone deployment-only edd-tool 0.2 package. Invoke the core module explicitly to avoid an ambiguous edd-tool entry point:

$ python -m edd.edd_tool.cli provision-test \
    master-controller.example.org:7147 \
    --include 'TEST_*' \
    --exclude '*DESTRUCTIVE*' \
    --sequence-file test_sequences.yml \
    --output /data/edd_test_results

The command queries the Master Controller for its checkout, inventory, plugin list, and available provisions. It prints the selected modes and asks for an interactive confirmation before changing the system.

Sequence file

The optional YAML sequence file provides TMI values and configuration for specific provision-name patterns. The first matching pattern is used.

test_sequences:
  - provision: "TEST_PULSAR_*"
    sequence:
      - TMI:
          source-name: "J1939+2134"
          project: "EDD_TEST"
          ra: 294.9107
          dec: 21.5831
          scannum: "0001"
          subscannum: "0"
        measurement_prepare:
          "dig_pack_controller*":
            noise_diode_pattern:
              percentage: 0.5
              period: 1.0

One sequence may contain multiple configure entries and multiple measurement entries. Keep test metadata clearly distinguishable from science projects and write outputs to a dedicated test location.

Plugin test registration

A plugin registers tests for lifecycle stages and pipeline types through its Python provision-test module. Its Ansible role passes that module as provision_test_imports to EDD.core.common. Tests should check scientific and operational invariants that generic state checks cannot cover, such as packet progress, output rate, headers, generated files, spectra, or device lock.

Results and acceptance

The runner creates terminal, JSON, and HTML results with diagnostic output. Review checks marked for manual confirmation; a process exit code alone cannot validate a plotted bandpass or astronomical phase convention.

A provision passes commissioning only when it returns to unprovisioned without leftover containers, buffers, queues, multicast senders, or files still being written. Retain the report with the tested site and plugin revisions.