77bf2b9694
In addition to the whole-system emulation/virtualization, QEMU also supports user-mode emulation, where the emulation happens as a normal process inside the parent system. This allows running most tests by simply spawning remote-test-server inside user-mode emulation. Unfortunately, QEMU always writes its own message in addition to the system one when a core dump happens, which breaks a few tests which match on the exact output of the system. This PR changes those tests to strip the (possible) QEMU output before checking if the output is expected.
29 lines
905 B
Rust
29 lines
905 B
Rust
// run-pass
|
|
// ignore-emscripten no processes
|
|
// ignore-sgx no processes
|
|
|
|
use std::alloc::{Layout, handle_alloc_error};
|
|
use std::env;
|
|
use std::process::Command;
|
|
use std::str;
|
|
|
|
fn main() {
|
|
if env::args().len() > 1 {
|
|
handle_alloc_error(Layout::new::<[u8; 42]>())
|
|
}
|
|
|
|
let me = env::current_exe().unwrap();
|
|
let output = Command::new(&me).arg("next").output().unwrap();
|
|
assert!(!output.status.success(), "{:?} is a success", output.status);
|
|
|
|
let mut stderr = str::from_utf8(&output.stderr).unwrap();
|
|
|
|
// When running inside QEMU user-mode emulation, there will be an extra message printed by QEMU
|
|
// in the stderr whenever a core dump happens. Remove it before the check.
|
|
stderr = stderr
|
|
.strip_suffix("qemu: uncaught target signal 6 (Aborted) - core dumped\n")
|
|
.unwrap_or(stderr);
|
|
|
|
assert_eq!(stderr, "memory allocation of 42 bytes failed\n");
|
|
}
|