mirror of
https://github.com/alexhopeoconnor/arduino-home-assistant.git
synced 2026-10-04 02:48:13 +10:00
58 lines
3.0 KiB
Markdown
58 lines
3.0 KiB
Markdown
# Home Assistant MQTT test harness tests
|
|
|
|
This harness runs retained MQTT discovery messages through Mosquitto and a real
|
|
Home Assistant container. It verifies the behavior that firmware unit tests
|
|
cannot: Home Assistant's entity-registry identity, user-owned registry changes,
|
|
and retained discovery after a Home Assistant restart.
|
|
|
|
It has two ordered modes:
|
|
|
|
1. `migration` publishes single-component discovery, applies a user rename and
|
|
disable, then sends `migrate_discovery` markers, a device bundle, and legacy
|
|
retained-topic cleanup.
|
|
2. `retained-restart` runs after Home Assistant restarts and verifies the
|
|
retained device bundle plus preserved registry customization.
|
|
|
|
The migration case also rejects malformed retained JSON, checks that a direct
|
|
single-to-device publication does not duplicate registry identity, exercises the
|
|
device-component tombstone/omission sequence, and makes the current
|
|
`def_ent_id`/no-`obj_id` schema expectation explicit.
|
|
|
|
## Run locally
|
|
|
|
From the repository root:
|
|
|
|
```bash
|
|
HA_VERSION=2024.11.3 docker compose -f tests/ha-test-harness/compose.yaml up -d mqtt homeassistant
|
|
HA_VERSION=2024.11.3 docker compose -f tests/ha-test-harness/compose.yaml run --rm tests
|
|
HA_VERSION=2024.11.3 docker compose -f tests/ha-test-harness/compose.yaml restart homeassistant
|
|
TEST_HARNESS_MODE=retained-restart HA_VERSION=2024.11.3 docker compose -f tests/ha-test-harness/compose.yaml run --rm tests
|
|
HA_VERSION=2024.11.3 docker compose -f tests/ha-test-harness/compose.yaml down -v
|
|
```
|
|
|
|
Use `HA_VERSION=stable` and `HA_VERSION=dev` for the current supported and
|
|
development Home Assistant images.
|
|
|
|
The checked-in GitHub workflow runs the baseline, stable, and development images
|
|
as a compatibility audit. When it is on the repository's default branch, GitHub
|
|
exposes it for manual dispatch and the weekly schedule. It is not a tag-release
|
|
gate.
|
|
|
|
For a local development-image test, add `TEST_HARNESS_EXPECT_DISABLED_CLEANUP=1` to
|
|
both `docker compose run ... tests` commands. That lane checks that initially
|
|
disabled device components are cleaned. The test uses only ephemeral named volumes;
|
|
`down -v` removes its broker data, Home Assistant config, owner token, and
|
|
registry state.
|
|
|
|
## Shared support
|
|
|
|
The schema-neutral [HA/MQTT test harness testkit](../../test-support/ha-mqtt-test-harness/README.md) owns only Docker-side Home Assistant onboarding, MQTT transport, registry/service access, retries, and artifact helpers. It has no ArduinoHA discovery assertions. This suite owns ArduinoHA migration fixtures; DeviceFramework carries its own fixtures and hardware adapter while reusing the testkit.
|
|
|
|
## Scope
|
|
|
|
The firmware's native Unity suite covers JSON escaping, invalid topic tokens,
|
|
serializer preflight, migration ordering, component removal, and lifecycle
|
|
behavior. This container suite covers Home Assistant's persistence test harness. It
|
|
does not need a physical board: fixture discovery documents mirror retained
|
|
payloads emitted by ArduinoHA and isolate Home Assistant/MQTT compatibility.
|