Ensure wasi-common tests always have an unreadable stdin

Some wasi-common tests assume that stdin is never ready to be read, but
on CI stdin is closed so it's always ready to be read. Work around this
by guaranteeing that wasi-common tests always have an unreadable stdin
pipe by creating our own pipe.
This commit is contained in:
Alex Crichton
2019-11-07 14:57:43 -08:00
parent cd1e54487c
commit 2411831964
10 changed files with 185 additions and 157 deletions

View File

@@ -0,0 +1,30 @@
use std::fs;
use std::path::Path;
use tempfile::{Builder, TempDir};
pub fn read_wasm(path: &Path) -> anyhow::Result<Vec<u8>> {
let data = fs::read(path)?;
if data.starts_with(&[b'\0', b'a', b's', b'm']) {
Ok(data)
} else {
anyhow::bail!("Invalid Wasm file encountered")
}
}
pub fn prepare_workspace(exe_name: &str) -> anyhow::Result<TempDir> {
let prefix = format!("wasi_common_{}", exe_name);
let tempdir = Builder::new().prefix(&prefix).tempdir()?;
Ok(tempdir)
}
pub fn extract_exec_name_from_path(path: &Path) -> anyhow::Result<String> {
path.file_stem()
.and_then(|s| s.to_str())
.map(String::from)
.ok_or_else(|| {
anyhow::anyhow!(
"couldn't extract the file stem from path {}",
path.display()
)
})
}