feat(s3s-test): add ignored tests and concurrent case execution#516
Merged
feat(s3s-test): add ignored tests and concurrent case execution#516
Conversation
- report.rs: Add `ignored` field to CaseReport and CountSummary - runner.rs: Handle ignored cases (skip with report), run cases concurrently within fixtures using tokio::spawn - tcx.rs: Add include_ignored() method to strip Ignored tags - cli.rs: Add --run-ignored CLI option, show IGNORED status in output Co-authored-by: Nugine <30099658+Nugine@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] Extend s3s-tests to support ignored tests and concurrent runs
feat(s3s-test): add ignored tests and concurrent case execution
Feb 25, 2026
Member
|
@copilot Test execution should be sequential by default. Add a flag to control concurrent test exection. |
…urrent flag Co-authored-by: Nugine <30099658+Nugine@users.noreply.github.com>
Contributor
Author
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
Contributor
There was a problem hiding this comment.
Pull request overview
Extends the s3s-test crate’s test runner and CLI to support ignored test cases and optional concurrent case execution within fixtures, improving flexibility for flaky/long-running suites.
Changes:
- Add
CaseTag::Ignoredhandling with reporting (IGNORED) and newignoredcounters in summaries. - Add
--run-ignoredto run ignored tests normally by stripping theIgnoredtag. - Add
--concurrentto execute cases within a fixture concurrently while preserving deterministic report ordering.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| crates/s3s-test/src/tcx.rs | Adds include_ignored() to remove Ignored tags so those cases run normally. |
| crates/s3s-test/src/runner.rs | Implements ignored-case skipping/reporting and optional concurrent per-fixture execution via spawned tasks. |
| crates/s3s-test/src/report.rs | Extends report schema with ignored fields and adjusts all_passed() logic. |
| crates/s3s-test/src/cli.rs | Adds CLI flags (--run-ignored, --concurrent) and prints IGNORED status in summaries. |
Comments suppressed due to low confidence (4)
crates/s3s-test/src/runner.rs:169
run_case()alwaystokio::spawns the case future and awaits the handle. This creates an extra task even when--concurrentis disabled and also results in a double-spawn in concurrent mode (one forrun_case, one inside it). Consider executingcase_futuredirectly and only spawning at the point you actually need isolation/panic capture.
async fn run_case(case_name: String, case_future: BoxFuture<'static, crate::Result>) -> CaseReport {
info!("Test case start");
let t0 = Instant::now();
let result = spawn(case_future.in_current_span()).await;
crates/s3s-test/src/report.rs:45
CaseReportderivesDeserialize. Adding the new non-optionalignored: boolfield will cause deserialization of older JSON reports (without this field) to fail unless a default is provided. Consider adding#[serde(default)]toignored(or making itOption<bool>).
pub passed: bool,
pub ignored: bool,
pub duration_ns: u64,
pub duration_ms: f64,
crates/s3s-test/src/report.rs:63
CountSummaryderivesDeserialize. Adding the new non-optionalignored: u64field will cause deserialization of older JSON reports (without this field) to fail unless a default is provided. Consider adding#[serde(default)]toignored(or making itOption<u64>).
pub total: u64,
pub passed: u64,
pub failed: u64,
pub ignored: u64,
}
crates/s3s-test/src/runner.rs:262
- In concurrent mode,
JoinHandle<CaseReport>errors are converted into a syntheticCaseReportwith name"<unknown>"andFnResult::Panicked, losing the actual case name and potentially misclassifying cancelled tasks as panics. Store the case name alongside the handle and mapJoinErrorintoPanickedvsErr(cancelled)consistently withrun_case().
CaseHandle::Running(h) => h.await.unwrap_or_else(|_| CaseReport {
name: String::from("<unknown>"),
passed: false,
ignored: false,
duration_ns: 0,
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.
Extends
s3s-testwith two features from the tracking issue: ignored test support and concurrent test execution within fixtures.Ignored tests
CaseTag::Ignoredare skipped at runtime and reported asIGNORED(yellow) in outputCaseReportandCountSummarygain anignoredfield;all_passed()now checksfailed == 0rather thanpassed == total--run-ignoredCLI flag stripsIgnoredtags viaTestContext::include_ignored(), running them normallyConcurrent case execution
--concurrentCLI flag enables concurrent case execution within a fixture viatokio::spawn✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.