Repository navigation
refact(test): switched the runner to penelope - #543
Merged
Merged
Conversation
The integration suite's Given/When/Then runner moved to its own repo, DLC-link/penelope, so other repos can reuse it. decman now depends on penelope instead of keeping its own copy. scenario.rs keeps a type alias that names decman's Fixture, so no phase changed. probe.rs keeps only decman's HTTP failure rules, because the 404 rule depends on how decman's frontend answers. The runner now logs under the `penelope` target, so both RUST_LOG presets in run.sh name it. Without that, the quiet preset would hide every step line. penelope also bounds each probe call by its step deadline. decman's HTTP client sets no timeout, so a hung probe used to block a run forever.
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
The externally hosted runner changes deadline behavior across the complete integration suite and requires final human validation of its pinned implementation.
0 open findings
What changed in this PR
Moves the integration-test Given/When/Then runner into the shared penelope crate while preserving DecMan-specific fixtures and HTTP failure classification.
Changes:
- Adds and pins
penelopeas a development dependency. - Replaces the local runner with a fixture-bound type alias and re-exports diagnostics.
- Updates logging presets and documentation.
| File | Description |
|---|---|
README.md |
Documents Penelope and updated logging behavior. |
integration-tests/run.sh |
Enables Penelope scenario logs. |
crates/decman/tests/common/scenario.rs |
Adapts DecMan’s fixture to Penelope. |
crates/decman/tests/common/probe.rs |
Retains HTTP classification and re-exports diagnostics. |
crates/decman/Cargo.toml |
Adds the test dependency. |
Cargo.toml |
Pins the Penelope Git revision. |
Cargo.lock |
Records the resolved dependency. |
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
scolear
approved these changes
Oct 14, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This PR switches the integration suite to penelope, a new crate that holds our Given/When/Then runner. The runner used to live in
crates/decman/tests/common/scenario.rs. Other repos could not use it without copying it, so it now has its own repo (penelope#1).decman pins penelope's merge commit
8f36b2das a git dev-dependency, the same way it pins canton-lib.scenario.rsis now a type alias,Scenario<Ctx = ()> = penelope::Scenario<Fixture, Ctx>, plus a short impl of penelope'sFixturetrait. Because of the alias, no phase needed an edit.probe.rskeeps only decman's HTTP failure rules (Failure,snippet). The 404 rule depends on how decman's frontend answers, so it stays here. It re-exportsProbeDiag,ClassandFATAL_STREAKfrom penelope, so existing imports still work.run.shaddspenelope=infoto bothRUST_LOGpresets. The step lines now log under thepenelopetarget. Without this change, the quiet preset would hide every GIVEN/WHEN/THEN line.chaostarget.run.shalready set that target, but the README had left it out.Related issues
None.
Type of change
Checklist
cargo fmt -- --checkpassescargo clippy --all-targets --all-features -- -D warningsis cleancargo testpasses<type>(<scope>): <subject>conventionNotes for reviewers
One behavior change. penelope fixed a bug that Copilot found during its review. Before, a Then step checked its deadline only after a probe returned. A probe that never returned blocked the run forever, and that can happen here, because decman's HTTP client sets no timeout. Now the deadline also cancels a probe call that is still running. A probe call that runs past its step deadline therefore fails, where before it could pass late.
Tests. The 11 runner tests and the 5
ProbeDiagtests moved to penelope with the code, where 22 tests now run. decman keeps the 4 tests for its ownFailureandsnippetcode. The integration test binary compiles every phase against penelope, and its 50 unit tests pass. The Integration Tests job on this PR runs the full localnet suite.Security tooling. penelope runs the same checks as decman: Dependabot, Cargo Audit, Cargo Deny, Cargo Machete and Socket.dev. The new dependency is our own public, Apache-2.0 crate, and it adds no new third-party crates to
Cargo.lock.