Skip to content

Commit 58b0aee

Browse files
committed
test(cli): cover Wasm host tools in CI; switch to TempDir
Signed-off-by: Akrm Al-Hakimi <alhakimiakrmj@gmail.com>
1 parent 378ae01 commit 58b0aee

4 files changed

Lines changed: 53 additions & 31 deletions

File tree

.github/workflows/host-checks.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,9 @@ jobs:
6060
- name: Cargo clippy (warnings are errors)
6161
run: cargo clippy --all-targets --locked -- -D warnings
6262

63+
- name: Cargo clippy with Wasm host tools
64+
run: cargo clippy --bin hyperlight-unikraft --tests --locked --features wasm-host-fns -- -D warnings
65+
6366
- name: Enable KVM permissions
6467
working-directory: .
6568
run: |
@@ -75,6 +78,11 @@ jobs:
7578
RUST_BACKTRACE: '1'
7679
run: cargo test --all-targets --locked
7780

81+
- name: Cargo test with Wasm host tools
82+
env:
83+
RUST_BACKTRACE: '1'
84+
run: cargo test --bin hyperlight-unikraft --locked --features wasm-host-fns wasm_host_fns::tests
85+
7886
host-checks-passed:
7987
if: always()
8088
needs: [checks]

host/Cargo.lock

Lines changed: 20 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

host/Cargo.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,3 +51,6 @@ libc = "0.2"
5151

5252
[target.'cfg(windows)'.dependencies]
5353
windows-sys = { version = "0.61", features = ["Win32_System_IO", "Win32_System_Ioctl", "Win32_Storage_FileSystem"] }
54+
55+
[dev-dependencies]
56+
tempfile = "3"

host/src/wasm_host_fns.rs

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -344,23 +344,13 @@ mod tests {
344344
use super::*;
345345
use serde_json::json;
346346
use std::fs;
347-
use std::sync::atomic::{AtomicUsize, Ordering};
348-
use std::time::{SystemTime, UNIX_EPOCH};
349-
350-
static TMP_COUNTER: AtomicUsize = AtomicUsize::new(0);
351-
352-
fn tempdir(label: &str) -> PathBuf {
353-
let nanos = SystemTime::now()
354-
.duration_since(UNIX_EPOCH)
355-
.unwrap_or_default()
356-
.as_nanos();
357-
let count = TMP_COUNTER.fetch_add(1, Ordering::Relaxed);
358-
let dir = std::env::temp_dir().join(format!(
359-
"hl-wasm-tools-{label}-{}-{nanos}-{count}",
360-
std::process::id()
361-
));
362-
fs::create_dir_all(&dir).unwrap();
363-
dir
347+
use tempfile::TempDir;
348+
349+
fn tempdir(label: &str) -> TempDir {
350+
tempfile::Builder::new()
351+
.prefix(&format!("hl-wasm-tools-{label}-"))
352+
.tempdir()
353+
.unwrap()
364354
}
365355

366356
fn default_options() -> WasmToolOptions {
@@ -373,7 +363,7 @@ mod tests {
373363

374364
fn load_tool(name: &str, wasm: Vec<u8>, options: WasmToolOptions) -> WasmTool {
375365
let dir = tempdir(name);
376-
let path = dir.join(format!("{name}.wasm"));
366+
let path = dir.path().join(format!("{name}.wasm"));
377367
fs::write(&path, wasm).unwrap();
378368
let specs = vec![format!("{name}={}", path.display())];
379369
let mut tools = WasmTool::load_all(&specs, &options).unwrap();
@@ -848,8 +838,8 @@ mod tests {
848838
let rw = tempdir("rw");
849839
let ro = tempdir("ro");
850840
let opts = WasmToolOptions::from_cli(
851-
&[format!("{}:/rw", rw.display())],
852-
&[format!("{}:/ro", ro.display())],
841+
&[format!("{}:/rw", rw.path().display())],
842+
&[format!("{}:/ro", ro.path().display())],
853843
&["A=B".to_string(), "EMPTY=".to_string()],
854844
&[],
855845
123,
@@ -864,10 +854,10 @@ mod tests {
864854
vec![("A".into(), "B".into()), ("EMPTY".into(), "".into())]
865855
);
866856
assert_eq!(opts.dirs.len(), 2);
867-
assert_eq!(opts.dirs[0].host, fs::canonicalize(&rw).unwrap());
857+
assert_eq!(opts.dirs[0].host, fs::canonicalize(rw.path()).unwrap());
868858
assert_eq!(opts.dirs[0].guest, "/rw");
869859
assert!(!opts.dirs[0].read_only);
870-
assert_eq!(opts.dirs[1].host, fs::canonicalize(&ro).unwrap());
860+
assert_eq!(opts.dirs[1].host, fs::canonicalize(ro.path()).unwrap());
871861
assert_eq!(opts.dirs[1].guest, "/ro");
872862
assert!(opts.dirs[1].read_only);
873863
}
@@ -876,7 +866,8 @@ mod tests {
876866
fn cli_options_default_wasi_guest_path_to_host() {
877867
let dir = tempdir("default-guest");
878868
let opts =
879-
WasmToolOptions::from_cli(&[dir.display().to_string()], &[], &[], &[], 1, 1).unwrap();
869+
WasmToolOptions::from_cli(&[dir.path().display().to_string()], &[], &[], &[], 1, 1)
870+
.unwrap();
880871
assert_eq!(opts.dirs[0].guest, "/host");
881872
}
882873

@@ -912,7 +903,7 @@ mod tests {
912903
assert!(WasmToolOptions::from_cli(&[], &[], &["=value".to_string()], &[], 1, 1).is_err());
913904
assert!(WasmToolOptions::from_cli(&[], &[], &[], &["".to_string()], 1, 1).is_err());
914905
assert!(WasmToolOptions::from_cli(
915-
&[format!("{}:relative", dir.display())],
906+
&[format!("{}:relative", dir.path().display())],
916907
&[],
917908
&[],
918909
&[],
@@ -922,8 +913,8 @@ mod tests {
922913
.is_err());
923914
assert!(WasmToolOptions::from_cli(
924915
&[
925-
format!("{}:/dup", dir.display()),
926-
format!("{}:/dup", dir.display())
916+
format!("{}:/dup", dir.path().display()),
917+
format!("{}:/dup", dir.path().display())
927918
],
928919
&[],
929920
&[],
@@ -987,9 +978,9 @@ mod tests {
987978
#[test]
988979
fn load_all_rejects_duplicate_names_invalid_wasm_and_unknown_imports() {
989980
let dir = tempdir("load-errors");
990-
let ok = dir.join("ok.wasm");
991-
let bad = dir.join("bad.wasm");
992-
let unknown = dir.join("unknown.wasm");
981+
let ok = dir.path().join("ok.wasm");
982+
let bad = dir.path().join("bad.wasm");
983+
let unknown = dir.path().join("unknown.wasm");
993984
fs::write(&ok, no_output_module()).unwrap();
994985
fs::write(&bad, b"not wasm").unwrap();
995986
fs::write(&unknown, unknown_import_module()).unwrap();
@@ -1037,10 +1028,10 @@ mod tests {
10371028
#[test]
10381029
fn invoke_can_read_explicit_read_only_preopen() {
10391030
let root = tempdir("preopen-read");
1040-
fs::write(root.join("answer.json"), br#"{"result":"file-ok"}"#).unwrap();
1031+
fs::write(root.path().join("answer.json"), br#"{"result":"file-ok"}"#).unwrap();
10411032
let options = WasmToolOptions::from_cli(
10421033
&[],
1043-
&[format!("{}:.", root.display())],
1034+
&[format!("{}:.", root.path().display())],
10441035
&[],
10451036
&[],
10461037
1_000_000,

0 commit comments

Comments
 (0)