Dette passe 1, lot L8 : tests non destructifs, fixtures synthétiques, script de tests sur base jetable #9

Open
Thomas wants to merge 8 commits from pr/dette-l8 into pr/dette-l6
Member

Lot L8 : tests et fixtures, avec l'intégration de L6 et L7.

Cette PR reprend le lot L8 (cinq commits), sa fusion avec L6 et L7 sur une branche d'intégration, le retrait d'un emoji et la fusion finale dans dette-pass-1. Compte rendu : _byan-output/dette-pass-1/L8.md, section « Intégration avec L6 et L7 ».

Contenu

  • Fixtures synthétiques (schéma et boîtiers de test) dans la plage d'ids réservée 7000000 à 7099999 ; aucun test ne supprime ni n'écrit hors de cette plage.
  • TEST_DATABASE_URL est obligatoire : le repli sur une base locale est supprimé.
  • scripts/test/run-db-tests.sh : base MariaDB et brokers Mosquitto jetables, empreinte de la base avant et après chaque passage, suppression par nom des seules ressources créées.
  • Extraction de la logique de démarrage hors des main.rs (startup.rs côté serveur, runtime.rs côté boîtier).
  • Fusion avec L6 et L7 : 10 conflits résolus. Les main.rs restent structurés comme dans L8, le comportement L6 (health-check serveur, fichier d'activité, identifiants MQTT, /tmp/health lié à la session) est reporté dans startup.rs et runtime.rs, et le motif SQL de L7 est réappliqué dans les tests.
  • Feature aquaboitier-phase-green retirée.
  • proptest et mockall non ajoutés : le double MQTT est écrit à la main.

Vérifications du fil principal sur bd5b018

cargo fmt propre, cargo clippy -D warnings propre, 408 tests passés, 0 échec, 95 ignorés.

🤖 Generated with Claude Code

https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18


Pile de PR

Base de cette PR : pr/dette-l6. Fusion dans l'ordre de la pile ; apres chaque fusion, vigie.py retarget rebase la PR suivante sur main.

  1. #2 pr/dette-l2 : Dette passe 1, lot L2 : contrats partagés dans aquashared et client MQTT du boîtier
  2. #3 pr/dette-l3 : Dette passe 1, lot L3 : provisioning non destructif et identifiant validé à l'entrée MQTT
  3. #4 pr/dette-l4 : Dette passe 1, lot L4 : mesures, alertes et déduplication
  4. #5 pr/dette-l5 : Dette passe 1, lot L5 : boucle MQTT du serveur, livraison de la configuration et journaux
  5. #6 pr/dette-l4bis : Dette passe 1, lot L4-bis : alertes même si l'écriture échoue, délai unique de 600 s, typage des capteurs, ordre des accusés MQTT
  6. #7 pr/dette-l7 : Dette passe 1, lot L7 : builds reproductibles, dépendances, durcissement des conteneurs
  7. #8 pr/dette-l6 : Dette passe 1, lot L6 : authentification Mosquitto, ACL par compte, healthchecks réels, pile e2e isolée
  8. #9 pr/dette-l8 : Dette passe 1, lot L8 : tests non destructifs, fixtures synthétiques, script de tests sur base jetable (cette PR)

Commits du lot

  • 8926dd9 test: add synthetic DB fixtures and a disposable test runner script
  • 1bd1ea0 refactor: move startup and runtime logic out of the main.rs files
  • cfdd155 test: make integration tests non-destructive and fill coverage gaps
  • 0689617 docs: rewrite the test documentation for the current suite
  • d1deaf8 docs: record the coverage measured after the L8 tests
  • dc7730a chore: merge L8 tests and fixtures into dette-pass-1
  • e5f45a0 chore: drop emoji from the L8 test table comment
  • bd5b018 chore: merge L8 integration into dette-pass-1
Lot L8 : tests et fixtures, avec l'intégration de L6 et L7. Cette PR reprend le lot L8 (cinq commits), sa fusion avec L6 et L7 sur une branche d'intégration, le retrait d'un emoji et la fusion finale dans dette-pass-1. Compte rendu : `_byan-output/dette-pass-1/L8.md`, section « Intégration avec L6 et L7 ». ### Contenu - Fixtures synthétiques (schéma et boîtiers de test) dans la plage d'ids réservée 7000000 à 7099999 ; aucun test ne supprime ni n'écrit hors de cette plage. - `TEST_DATABASE_URL` est obligatoire : le repli sur une base locale est supprimé. - `scripts/test/run-db-tests.sh` : base MariaDB et brokers Mosquitto jetables, empreinte de la base avant et après chaque passage, suppression par nom des seules ressources créées. - Extraction de la logique de démarrage hors des `main.rs` (`startup.rs` côté serveur, `runtime.rs` côté boîtier). - Fusion avec L6 et L7 : 10 conflits résolus. Les `main.rs` restent structurés comme dans L8, le comportement L6 (health-check serveur, fichier d'activité, identifiants MQTT, `/tmp/health` lié à la session) est reporté dans `startup.rs` et `runtime.rs`, et le motif SQL de L7 est réappliqué dans les tests. - Feature `aquaboitier-phase-green` retirée. - `proptest` et `mockall` non ajoutés : le double MQTT est écrit à la main. ### Vérifications du fil principal sur bd5b018 `cargo fmt` propre, `cargo clippy -D warnings` propre, 408 tests passés, 0 échec, 95 ignorés. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18 --- ### Pile de PR Base de cette PR : `pr/dette-l6`. Fusion dans l'ordre de la pile ; apres chaque fusion, `vigie.py retarget` rebase la PR suivante sur `main`. 1. #2 `pr/dette-l2` : Dette passe 1, lot L2 : contrats partagés dans aquashared et client MQTT du boîtier 2. #3 `pr/dette-l3` : Dette passe 1, lot L3 : provisioning non destructif et identifiant validé à l'entrée MQTT 3. #4 `pr/dette-l4` : Dette passe 1, lot L4 : mesures, alertes et déduplication 4. #5 `pr/dette-l5` : Dette passe 1, lot L5 : boucle MQTT du serveur, livraison de la configuration et journaux 5. #6 `pr/dette-l4bis` : Dette passe 1, lot L4-bis : alertes même si l'écriture échoue, délai unique de 600 s, typage des capteurs, ordre des accusés MQTT 6. #7 `pr/dette-l7` : Dette passe 1, lot L7 : builds reproductibles, dépendances, durcissement des conteneurs 7. #8 `pr/dette-l6` : Dette passe 1, lot L6 : authentification Mosquitto, ACL par compte, healthchecks réels, pile e2e isolée 8. #9 `pr/dette-l8` : Dette passe 1, lot L8 : tests non destructifs, fixtures synthétiques, script de tests sur base jetable (cette PR) ### Commits du lot - `8926dd9` test: add synthetic DB fixtures and a disposable test runner script - `1bd1ea0` refactor: move startup and runtime logic out of the main.rs files - `cfdd155` test: make integration tests non-destructive and fill coverage gaps - `0689617` docs: rewrite the test documentation for the current suite - `d1deaf8` docs: record the coverage measured after the L8 tests - `dc7730a` chore: merge L8 tests and fixtures into dette-pass-1 - `e5f45a0` chore: drop emoji from the L8 test table comment - `bd5b018` chore: merge L8 integration into dette-pass-1 <!-- vigie:stack -->
Versioned schema and permanent test boitiers under aquaserveur/tests/fixtures,
and scripts/test/run-db-tests.sh: a tmpfs MariaDB and two Mosquitto brokers on a
private Docker network, fixtures only (no production dump), a database digest
checked after each pass to prove the ignored tests are non-destructive and
replayable, removal by name only.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18
aquaserveur::startup reads the configuration and builds the pool;
aquaboitier_embedded::runtime executes session actions, reacts to client events
and writes the health file. MqttSink lets tests check topic, QoS, retain and
payload of what the boitier publishes. Remove the aquaboitier alert_detector
module, its feature-gated tests and its re-exports (decision D7).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18
Reserved boitier id range 7000000 to 7099999 with one block per test file, each
test creates and removes its own boitiers, TEST_DATABASE_URL is mandatory with a
clear message, the 30 s test runs in 0.5 s. Move the database tests out of
store.rs into store_db.rs, rename the misleading legionella tests, merge the
duplicated tests, add tests for the alert bounds, load_alert_rules_from_db,
configuration delivery, durable database errors, epochs beyond i32::MAX,
end to end firstco and acknowledgement flows, and a proptest round trip of the
MPT v2 frame.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18
Counts, TEST_DATABASE_URL, the runner script, the fixtures, the reserved id
ranges and the reasons for each #[ignore].

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18
Structure L8 conservee (startup.rs, runtime.rs) ; main.rs reprend de L6 le mode
--health-check, l'authentification MQTT du boitier et le heartbeat lie a la
session (health.rs). Les temoins de sante de runtime.rs, remplaces par ceux de
L6, sont retires avec leurs tests.
Tests d'integration : version L8 (non destructive) avec le motif de L7, SQL
construit hors des appels sqlx, y compris dans common/mod.rs.
Feature aquaboitier-phase-green retiree (plus lue par aucun code).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18
chore: merge L8 integration into dette-pass-1
Some checks are pending
aquaprocess/revue-statique revue statique en cours
bd5b018135
Brings the L8 tests, fixtures and main.rs split (resolved against L6 and
L7 on fix/dette-pass-1-l8int) on top of the supervision password fix.
No conflict: the two sides touch disjoint files.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UH3JcaVWsmFLC6kyEsVL18
Some checks are pending
aquaprocess/revue-statique revue statique en cours
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin pr/dette-l8:pr/dette-l8
git switch pr/dette-l8

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch pr/dette-l6
git merge --no-ff pr/dette-l8
git switch pr/dette-l8
git rebase pr/dette-l6
git switch pr/dette-l6
git merge --ff-only pr/dette-l8
git switch pr/dette-l8
git rebase pr/dette-l6
git switch pr/dette-l6
git merge --no-ff pr/dette-l8
git switch pr/dette-l6
git merge --squash pr/dette-l8
git switch pr/dette-l6
git merge --ff-only pr/dette-l8
git switch pr/dette-l6
git merge pr/dette-l8
git push origin pr/dette-l6
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
AcadeNice/Acquarefactoring-Thomas!9
No description provided.