From 1ba0233b1efb004590b9510bcd7ecbecca757a2f Mon Sep 17 00:00:00 2001 From: Skgland Date: Sun, 12 Nov 2023 13:52:03 +0100 Subject: [PATCH] detect new spuroius error and fix a regression considered spurious - change from TestFail to non-spuriouse BuildFail is a regression - no space left on drive is spuriouse --- src/report/display.rs | 2 ++ src/report/mod.rs | 4 ++-- src/results/mod.rs | 5 +++++ src/runner/test.rs | 6 ++++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/report/display.rs b/src/report/display.rs index b28d9316..17837d76 100644 --- a/src/report/display.rs +++ b/src/report/display.rs @@ -15,6 +15,7 @@ impl ResultName for FailureReason { FailureReason::NetworkAccess => "network access".into(), FailureReason::OOM => "OOM".into(), FailureReason::ICE => "ICE".into(), + FailureReason::NoSpace => "no space left on device".into(), FailureReason::CompilerError(_) => "compiler error".into(), FailureReason::DependsOn(_) => "faulty deps".into(), FailureReason::CompilerDiagnosticChange => "compiler diagnostic changed".into(), @@ -28,6 +29,7 @@ impl ResultName for FailureReason { | FailureReason::NetworkAccess | FailureReason::Timeout | FailureReason::OOM + | FailureReason::NoSpace | FailureReason::CompilerDiagnosticChange | FailureReason::ICE => self.short_name(), } diff --git a/src/report/mod.rs b/src/report/mod.rs index 56faf2f9..46016c2e 100644 --- a/src/report/mod.rs +++ b/src/report/mod.rs @@ -510,7 +510,7 @@ fn compare( | (BuildFail(_), TestSkipped) | (BuildFail(_), TestPass) | (TestFail(_), TestPass) => Comparison::Fixed, - + (TestFail(_), BuildFail(reason)) if !reason.is_spurious() => Comparison::Regressed, (TestFail(reason1), BuildFail(reason2)) if reason1.is_spurious() || reason2.is_spurious() => { @@ -831,6 +831,7 @@ mod tests { TestPass, BuildFail(Unknown) => Regressed; TestSkipped, BuildFail(Unknown) => Regressed; TestFail(Unknown), BuildFail(Unknown) => Regressed; + TestFail(OOM), BuildFail(Unknown) => Regressed; // ICE is special BuildFail(Unknown), BuildFail(ICE) => Regressed; @@ -846,7 +847,6 @@ mod tests { TestPass, TestFail(OOM) => SpuriousRegressed; TestPass, BuildFail(OOM) => SpuriousRegressed; TestSkipped, BuildFail(OOM) => SpuriousRegressed; - TestFail(OOM), BuildFail(Unknown) => SpuriousRegressed; TestFail(Unknown), BuildFail(OOM) => SpuriousRegressed; // Errors diff --git a/src/results/mod.rs b/src/results/mod.rs index bfe76adb..894feeea 100644 --- a/src/results/mod.rs +++ b/src/results/mod.rs @@ -194,6 +194,7 @@ impl ::std::str::FromStr for DiagnosticCode { pub enum FailureReason { Unknown, OOM, + NoSpace, Timeout, ICE, NetworkAccess, @@ -209,6 +210,7 @@ impl ::std::fmt::Display for FailureReason { match self { FailureReason::Unknown => write!(f, "unknown"), FailureReason::OOM => write!(f, "oom"), + FailureReason::NoSpace => write!(f, "no-space"), FailureReason::Timeout => write!(f, "timeout"), FailureReason::ICE => write!(f, "ice"), FailureReason::NetworkAccess => write!(f, "network-access"), @@ -265,6 +267,7 @@ impl ::std::str::FromStr for FailureReason { "oom" => Ok(FailureReason::OOM), "timeout" => Ok(FailureReason::Timeout), "ice" => Ok(FailureReason::ICE), + "no-space" => Ok(FailureReason::NoSpace), _ => bail!("unexpected value: {}", s), } } @@ -275,6 +278,7 @@ impl FailureReason { pub(crate) fn is_spurious(&self) -> bool { match *self { FailureReason::OOM + | FailureReason::NoSpace | FailureReason::Timeout | FailureReason::NetworkAccess | FailureReason::CompilerDiagnosticChange => true, @@ -351,6 +355,7 @@ mod tests { "build-fail:compiler-error(001)" => BuildFail(CompilerError(btreeset!["001".parse().unwrap()])), "build-fail:oom" => BuildFail(OOM), "build-fail:ice" => BuildFail(ICE), + "build-fail:no-space" => BuildFail(NoSpace), "test-fail:timeout" => TestFail(Timeout), "test-pass" => TestPass, "error" => Error, diff --git a/src/runner/test.rs b/src/runner/test.rs index 887b1113..0eda0394 100644 --- a/src/runner/test.rs +++ b/src/runner/test.rs @@ -112,6 +112,7 @@ fn run_cargo( let mut did_ice = false; let mut did_network = false; let mut did_trybuild = false; + let mut ran_out_of_space = false; let mut error_codes = BTreeSet::new(); let mut deps = BTreeSet::new(); @@ -122,6 +123,9 @@ fn run_cargo( if line.contains("Address already in use") { did_network = true; } + if line.to_lowercase().contains("no space left on device") { + ran_out_of_space = true; + } if line.contains("code: 111") && line.contains("Connection refused") { did_network = true; } @@ -205,6 +209,8 @@ fn run_cargo( Err(e.context(FailureReason::NetworkAccess).into()) } else if did_trybuild { Err(e.context(FailureReason::CompilerDiagnosticChange).into()) + } else if ran_out_of_space { + Err(e.context(FailureReason::NoSpace).into()) } else { Err(e.into()) }