diff --git a/lib/wasix/tests/wasm_tests/mod.rs b/lib/wasix/tests/wasm_tests/mod.rs index 7e32bc11cb9..b240690c5ce 100644 --- a/lib/wasix/tests/wasm_tests/mod.rs +++ b/lib/wasix/tests/wasm_tests/mod.rs @@ -11,6 +11,8 @@ mod lifecycle_tests; mod longjmp_tests; mod path_tests; mod poll_tests; +mod proc_exec; +mod proc_exec2; mod reflection_tests; mod semaphore_tests; mod shared_library_tests; diff --git a/lib/wasix/tests/wasm_tests/proc_exec.rs b/lib/wasix/tests/wasm_tests/proc_exec.rs new file mode 100644 index 00000000000..91f4aca64e5 --- /dev/null +++ b/lib/wasix/tests/wasm_tests/proc_exec.rs @@ -0,0 +1,7 @@ +use super::{run_build_script, run_wasm}; + +#[test] +fn test_proc_exec() { + let wasm = run_build_script(file!(), ".").unwrap(); + run_wasm(&wasm, wasm.parent().unwrap()).unwrap(); +} diff --git a/lib/wasix/tests/wasm_tests/proc_exec/build.sh b/lib/wasix/tests/wasm_tests/proc_exec/build.sh new file mode 100755 index 00000000000..211f2b7ed87 --- /dev/null +++ b/lib/wasix/tests/wasm_tests/proc_exec/build.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +$CC proc_exec_child.c -o proc_exec_child.wasm +$CC main.c -o main diff --git a/lib/wasix/tests/wasm_tests/proc_exec/main.c b/lib/wasix/tests/wasm_tests/proc_exec/main.c new file mode 100644 index 00000000000..b4a9b84579f --- /dev/null +++ b/lib/wasix/tests/wasm_tests/proc_exec/main.c @@ -0,0 +1,20 @@ +#include +#include +#include +#include + +int main(void) { + char cwd[256]; + assert(getcwd(cwd, sizeof(cwd)) != NULL); + + char name[512]; + int name_len = snprintf(name, sizeof(name), "%s/proc_exec_child.wasm", cwd); + assert(name_len > 0 && name_len < (int)sizeof(name)); + + char args[512]; + int args_len = snprintf(args, sizeof(args), "%s\ncanary", name); + assert(args_len > 0 && args_len < (int)sizeof(args)); + + __wasi_proc_exec(name, args); + assert(!"proc_exec returned"); +} diff --git a/lib/wasix/tests/wasm_tests/proc_exec/proc_exec_child.c b/lib/wasix/tests/wasm_tests/proc_exec/proc_exec_child.c new file mode 100644 index 00000000000..5fecb6e0b3a --- /dev/null +++ b/lib/wasix/tests/wasm_tests/proc_exec/proc_exec_child.c @@ -0,0 +1,8 @@ +#include +#include + +int main(int argc, char** argv) { + assert(argc >= 2); + assert(strcmp(argv[1], "canary") == 0); + return 0; +} diff --git a/lib/wasix/tests/wasm_tests/proc_exec2.rs b/lib/wasix/tests/wasm_tests/proc_exec2.rs new file mode 100644 index 00000000000..092c078fe3b --- /dev/null +++ b/lib/wasix/tests/wasm_tests/proc_exec2.rs @@ -0,0 +1,7 @@ +use super::{run_build_script, run_wasm}; + +#[test] +fn test_proc_exec2() { + let wasm = run_build_script(file!(), ".").unwrap(); + run_wasm(&wasm, wasm.parent().unwrap()).unwrap(); +} diff --git a/lib/wasix/tests/wasm_tests/proc_exec2/build.sh b/lib/wasix/tests/wasm_tests/proc_exec2/build.sh new file mode 100755 index 00000000000..824a94127da --- /dev/null +++ b/lib/wasix/tests/wasm_tests/proc_exec2/build.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -euo pipefail + +$CC proc_exec2_child.c -o proc_exec2_child.wasm +$CC main.c -o main diff --git a/lib/wasix/tests/wasm_tests/proc_exec2/main.c b/lib/wasix/tests/wasm_tests/proc_exec2/main.c new file mode 100644 index 00000000000..8d8c6183535 --- /dev/null +++ b/lib/wasix/tests/wasm_tests/proc_exec2/main.c @@ -0,0 +1,22 @@ +#include +#include +#include +#include + +int main(void) { + char cwd[256]; + assert(getcwd(cwd, sizeof(cwd)) != NULL); + + char name[512]; + int name_len = snprintf(name, sizeof(name), "%s/proc_exec2_child.wasm", cwd); + assert(name_len > 0 && name_len < (int)sizeof(name)); + + char args[512]; + int args_len = snprintf(args, sizeof(args), "%s\ncanary", name); + assert(args_len > 0 && args_len < (int)sizeof(args)); + + const char* envs = "LTP_TEST_ENV_VAR=test"; + + __wasi_proc_exec2(name, args, envs); + assert(!"proc_exec2 returned"); +} diff --git a/lib/wasix/tests/wasm_tests/proc_exec2/proc_exec2_child.c b/lib/wasix/tests/wasm_tests/proc_exec2/proc_exec2_child.c new file mode 100644 index 00000000000..6e2c41a83c2 --- /dev/null +++ b/lib/wasix/tests/wasm_tests/proc_exec2/proc_exec2_child.c @@ -0,0 +1,13 @@ +#include +#include +#include + +int main(int argc, char** argv) { + assert(argc >= 2); + assert(strcmp(argv[1], "canary") == 0); + + const char* v = getenv("LTP_TEST_ENV_VAR"); + assert(v != NULL); + assert(strcmp(v, "test") == 0); + return 0; +}