Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Print a summary of which test suite failed #78705

Merged
merged 1 commit into from
Nov 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/bootstrap/test.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1039,6 +1039,7 @@ note: if you're sure you want to do this, please open an issue as to why. In the
cmd.arg("--src-base").arg(builder.src.join("src/test").join(suite));
cmd.arg("--build-base").arg(testdir(builder, compiler.host).join(suite));
cmd.arg("--stage-id").arg(format!("stage{}-{}", compiler.stage, target));
cmd.arg("--suite").arg(suite);
cmd.arg("--mode").arg(mode);
cmd.arg("--target").arg(target.rustc_target_arg());
cmd.arg("--host").arg(&*compiler.host.triple);
Expand Down
4 changes: 4 additions & 0 deletions src/tools/compiletest/src/common.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,10 @@ pub struct Config {
/// The test mode, compile-fail, run-fail, ui
pub mode: Mode,

/// The test suite (essentially which directory is running, but without the
/// directory prefix such as src/test)
pub suite: String,

/// The debugger to use in debuginfo mode. Unset otherwise.
pub debugger: Option<Debugger>,

Expand Down
1 change: 1 addition & 0 deletions src/tools/compiletest/src/header/tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ fn config() -> Config {
let args = &[
"compiletest",
"--mode=ui",
"--suite=ui",
"--compile-lib-path=",
"--run-lib-path=",
"--rustc-path=",
Expand Down
32 changes: 30 additions & 2 deletions src/tools/compiletest/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,12 @@ pub fn parse_config(args: Vec<String>) -> Config {
"compile-fail | run-fail | run-pass-valgrind | pretty | debug-info | codegen | rustdoc \
codegen-units | incremental | run-make | ui | js-doc-test | mir-opt | assembly",
)
.reqopt(
"",
"suite",
"which suite of compile tests to run. used for nicer error reporting.",
"SUITE",
)
.optopt(
"",
"pass",
Expand Down Expand Up @@ -201,6 +207,7 @@ pub fn parse_config(args: Vec<String>) -> Config {
build_base: opt_path(matches, "build-base"),
stage_id: matches.opt_str("stage-id").unwrap(),
mode: matches.opt_str("mode").unwrap().parse().expect("invalid mode"),
suite: matches.opt_str("suite").unwrap(),
debugger: None,
run_ignored,
filter: matches.free.first().cloned(),
Expand Down Expand Up @@ -340,7 +347,7 @@ pub fn run_tests(config: Config) {
configs.extend(configure_lldb(&config));
}
} else {
configs.push(config);
configs.push(config.clone());
};

let mut tests = Vec::new();
Expand All @@ -351,11 +358,32 @@ pub fn run_tests(config: Config) {
let res = test::run_tests_console(&opts, tests);
match res {
Ok(true) => {}
Ok(false) => panic!("Some tests failed"),
Ok(false) => {
// We want to report that the tests failed, but we also want to give
// some indication of just what tests we were running. Especially on
// CI, where there can be cross-compiled tests for a lot of
// architectures, without this critical information it can be quite
// easy to miss which tests failed, and as such fail to reproduce
// the failure locally.

eprintln!(
"Some tests failed in compiletest suite={}{} mode={} host={} target={}",
config.suite,
config.compare_mode.map(|c| format!(" compare_mode={:?}", c)).unwrap_or_default(),
config.mode,
config.host,
config.target
);

std::process::exit(1);
}
Err(e) => {
// We don't know if tests passed or not, but if there was an error
// during testing we don't want to just suceeed (we may not have
// tested something), so fail.
//
// This should realistically "never" happen, so don't try to make
// this a pretty error message.
panic!("I/O failure during tests: {:?}", e);
}
}
Expand Down