use std::process::Command;
fn write_flow(dir: &std::path::Path, name: &str) -> std::path::PathBuf {
let p = dir.join(name);
std::fs::write(&p, "appId: smix.parallel.test\n---\n- launchApp\n").expect("write flow");
p
}
#[test]
fn parallel_two_shards_across_two_sims_and_a_failed_shard_fails_the_run() {
let dir = tempfile::tempdir().expect("tempdir");
let f1 = write_flow(dir.path(), "a.yaml");
let f2 = write_flow(dir.path(), "b.yaml");
let out = Command::new(env!("CARGO_BIN_EXE_smix"))
.args(["run"])
.arg(&f1)
.arg(&f2)
.args([
"--parallel",
"2",
"--device",
"FAKE-UDID-1",
"--also-device",
"FAKE-UDID-2",
"--retry",
"1",
])
.output()
.expect("run smix");
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(
stderr.contains("smix run --parallel: sim FAKE-UDID-1")
&& stderr.contains("smix run --parallel: sim FAKE-UDID-2"),
"both shards must be dispatched:\n{stderr}"
);
assert!(
!out.status.success(),
"a failed shard must fail the batch; exit was {:?}",
out.status.code()
);
}
#[test]
fn parallel_one_does_not_take_the_parallel_path() {
let dir = tempfile::tempdir().expect("tempdir");
let f1 = write_flow(dir.path(), "a.yaml");
let out = Command::new(env!("CARGO_BIN_EXE_smix"))
.args(["run"])
.arg(&f1)
.args(["--parallel", "1", "--device", "FAKE-UDID-1", "--retry", "1"])
.output()
.expect("run smix");
let stderr = String::from_utf8_lossy(&out.stderr);
assert!(
!stderr.contains("smix run --parallel:"),
"--parallel 1 must not fan out to the parallel path:\n{stderr}"
);
}