Skip to content

Commit

Permalink
Fix random Windows CI error for changing_bin_features_caches_targets
Browse files Browse the repository at this point in the history
Fixes #5481.
  • Loading branch information
ehuss committed May 6, 2018
1 parent b429a36 commit 3521144
Showing 1 changed file with 46 additions and 35 deletions.
81 changes: 46 additions & 35 deletions tests/testsuite/freshness.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ use std::fs::{self, File};
use std::io::prelude::*;

use cargotest::sleep_ms;
use cargotest::support::{execs, project, path2url};
use cargotest::support::paths::CargoPathExt;
use cargotest::support::registry::Package;
use cargotest::support::{execs, path2url, project};
use hamcrest::{assert_that, existing_file};

#[test]
Expand Down Expand Up @@ -515,60 +515,71 @@ fn changing_bin_features_caches_targets() {
)
.build();

// Windows has a problem with replacing a binary that was just executed.
// Unlinking it will succeed, but then attempting to immediately replace
// it will sometimes fail with "Already Exists".
// See https://github.com/rust-lang/cargo/issues/5481
let foo_proc = |name: &str| {
let src = p.bin("foo");
let dst = p.bin(name);
fs::copy(&src, &dst).expect("Failed to copy foo");
p.process(dst)
};

assert_that(
p.cargo("run"),
execs()
.with_status(0)
.with_stdout("feature off")
.with_stderr(
"\
[..]Compiling foo v0.0.1 ([..])
p.cargo("build"),
execs().with_status(0).with_stderr(
"\
[COMPILING] foo v0.0.1 ([..])
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
[RUNNING] `target[/]debug[/]foo[EXE]`
",
),
),
);
assert_that(
foo_proc("off1"),
execs().with_status(0).with_stdout("feature off"),
);

assert_that(
p.cargo("run").arg("--features").arg("foo"),
execs()
.with_status(0)
.with_stdout("feature on")
.with_stderr(
"\
[..]Compiling foo v0.0.1 ([..])
p.cargo("build").arg("--features").arg("foo"),
execs().with_status(0).with_stderr(
"\
[COMPILING] foo v0.0.1 ([..])
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
[RUNNING] `target[/]debug[/]foo[EXE]`
",
),
),
);
assert_that(
foo_proc("on1"),
execs().with_status(0).with_stdout("feature on"),
);

/* Targets should be cached from the first build */

assert_that(
p.cargo("run"),
execs()
.with_status(0)
.with_stdout("feature off")
.with_stderr(
"\
p.cargo("build"),
execs().with_status(0).with_stderr(
"\
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
[RUNNING] `target[/]debug[/]foo[EXE]`
",
),
),
);
assert_that(
foo_proc("off2"),
execs().with_status(0).with_stdout("feature off"),
);

assert_that(
p.cargo("run").arg("--features").arg("foo"),
execs()
.with_status(0)
.with_stdout("feature on")
.with_stderr(
"\
p.cargo("build").arg("--features").arg("foo"),
execs().with_status(0).with_stderr(
"\
[FINISHED] dev [unoptimized + debuginfo] target(s) in [..]
[RUNNING] `target[/]debug[/]foo[EXE]`
",
),
),
);
assert_that(
foo_proc("on2"),
execs().with_status(0).with_stdout("feature on"),
);
}

Expand Down

0 comments on commit 3521144

Please sign in to comment.