From 69a96963b47e2a90d60ef4c2f041371df6a66154 Mon Sep 17 00:00:00 2001 From: Arshia Ghafoori Date: Fri, 4 Aug 2023 11:43:35 +0400 Subject: [PATCH 1/6] Implement test for path_rename syscall --- tests/integration/cli/tests/snapshot.rs | 9 ++++++++ .../snapshot__snapshot_fs_rename.snap | 21 ++++++++++++++++++ .../integration/cli/tests/wasm/fs-rename.wasm | Bin 0 -> 131125 bytes 3 files changed, 30 insertions(+) create mode 100644 tests/integration/cli/tests/snapshots/snapshot__snapshot_fs_rename.snap create mode 100644 tests/integration/cli/tests/wasm/fs-rename.wasm diff --git a/tests/integration/cli/tests/snapshot.rs b/tests/integration/cli/tests/snapshot.rs index 6beddfa5811..b231512ed74 100644 --- a/tests/integration/cli/tests/snapshot.rs +++ b/tests/integration/cli/tests/snapshot.rs @@ -1268,3 +1268,12 @@ fn test_snapshot_quickjs() { .run_wasm(include_bytes!("./wasm/qjs.wasm")); assert_json_snapshot!(snapshot); } + +#[cfg_attr(any(target_env = "musl", target_os = "windows"), ignore)] +#[test] +fn test_snapshot_fs_rename() { + let snapshot = TestBuilder::new() + .with_name(function!()) + .run_wasm(include_bytes!("./wasm/fs-rename.wasm")); + assert_json_snapshot!(snapshot); +} diff --git a/tests/integration/cli/tests/snapshots/snapshot__snapshot_fs_rename.snap b/tests/integration/cli/tests/snapshots/snapshot__snapshot_fs_rename.snap new file mode 100644 index 00000000000..f50db203957 --- /dev/null +++ b/tests/integration/cli/tests/snapshots/snapshot__snapshot_fs_rename.snap @@ -0,0 +1,21 @@ +--- +source: tests/integration/cli/tests/snapshot.rs +expression: snapshot +--- +{ + "spec": { + "name": "snapshot::test_snapshot_fs_rename", + "use_packages": [], + "include_webcs": [], + "cli_args": [], + "enable_threads": true, + "enable_network": false + }, + "result": { + "Success": { + "stdout": "/test-dir/a:a\n/test-dir/b:a\n/test-dir/c:c\n/test-dir/d:c\n", + "stderr": "", + "exit_code": 0 + } + } +} diff --git a/tests/integration/cli/tests/wasm/fs-rename.wasm b/tests/integration/cli/tests/wasm/fs-rename.wasm new file mode 100644 index 0000000000000000000000000000000000000000..a4c99b58dfb763c641517b15fd73e013b5d3c471 GIT binary patch literal 131125 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 z%0D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 Date: Fri, 4 Aug 2023 13:27:17 +0400 Subject: [PATCH 2/6] Remove platform filters --- tests/integration/cli/tests/snapshot.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/integration/cli/tests/snapshot.rs b/tests/integration/cli/tests/snapshot.rs index b231512ed74..00e405d3ebc 100644 --- a/tests/integration/cli/tests/snapshot.rs +++ b/tests/integration/cli/tests/snapshot.rs @@ -1269,7 +1269,6 @@ fn test_snapshot_quickjs() { assert_json_snapshot!(snapshot); } -#[cfg_attr(any(target_env = "musl", target_os = "windows"), ignore)] #[test] fn test_snapshot_fs_rename() { let snapshot = TestBuilder::new() From 63f11882b078b3d070a5987bff0fb12feb635241 Mon Sep 17 00:00:00 2001 From: Arshia Ghafoori Date: Fri, 4 Aug 2023 13:40:26 +0400 Subject: [PATCH 3/6] Add rust-wasi-tests crate with code for fs-rename test --- Cargo.lock | 7 +++++ Cargo.toml | 16 ++++++---- tests/rust-wasi-tests/Cargo.toml | 9 ++++++ tests/rust-wasi-tests/src/bin/fs-rename.rs | 34 ++++++++++++++++++++++ tests/rust-wasi-tests/src/lib.rs | 0 5 files changed, 60 insertions(+), 6 deletions(-) create mode 100644 tests/rust-wasi-tests/Cargo.toml create mode 100644 tests/rust-wasi-tests/src/bin/fs-rename.rs create mode 100644 tests/rust-wasi-tests/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 3b6cdd856e0..6da4a72a68a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3537,6 +3537,13 @@ dependencies = [ "smallvec", ] +[[package]] +name = "rust-wasi-tests" +version = "0.1.0" +dependencies = [ + "wasi", +] + [[package]] name = "rustc-demangle" version = "0.1.23" diff --git a/Cargo.toml b/Cargo.toml index 2428e29a828..5cf62f1c32c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -15,7 +15,7 @@ version.workspace = true wasmer = { version = "=4.1.0", path = "lib/api", default-features = false } wasmer-compiler = { version = "=4.1.0", path = "lib/compiler", features = [ "compiler", -], optional=true } +], optional = true } wasmer-compiler-cranelift = { version = "=4.1.0", path = "lib/compiler-cranelift", optional = true } wasmer-compiler-singlepass = { version = "=4.1.0", path = "lib/compiler-singlepass", optional = true } wasmer-compiler-llvm = { version = "=4.1.0", path = "lib/compiler-llvm", optional = true } @@ -27,7 +27,11 @@ wasmer-cache = { version = "=4.1.0", path = "lib/cache", optional = true } wasmer-types = { version = "=4.1.0", path = "lib/types" } wasmer-middlewares = { version = "=4.1.0", path = "lib/middlewares", optional = true } cfg-if = "1.0" -tokio = { version = "1", features = [ "rt", "rt-multi-thread", "macros" ], optional = true } +tokio = { version = "1", features = [ + "rt", + "rt-multi-thread", + "macros", +], optional = true } [workspace] members = [ @@ -64,11 +68,10 @@ members = [ "tests/integration/ios", "tests/lib/compiler-test-derive", "tests/lib/wast", + "tests/rust-wasi-tests", "tests/wasi-wast", ] -exclude = [ - "lib/wasi-web", -] +exclude = ["lib/wasi-web"] resolver = "2" [workspace.package] @@ -92,7 +95,8 @@ glob = "0.3" rustc_version = "0.4" [dev-dependencies] -wasmer = { version = "=4.1.0", path = "lib/api", default-features = false, features = [] } +wasmer = { version = "=4.1.0", path = "lib/api", default-features = false, features = [ +] } anyhow = "1.0" criterion = { version = "0.5", default-features = false } lazy_static = "1.4" diff --git a/tests/rust-wasi-tests/Cargo.toml b/tests/rust-wasi-tests/Cargo.toml new file mode 100644 index 00000000000..335a2be0029 --- /dev/null +++ b/tests/rust-wasi-tests/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "rust-wasi-tests" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +wasi = "0.11.0" diff --git a/tests/rust-wasi-tests/src/bin/fs-rename.rs b/tests/rust-wasi-tests/src/bin/fs-rename.rs new file mode 100644 index 00000000000..840e2f87f33 --- /dev/null +++ b/tests/rust-wasi-tests/src/bin/fs-rename.rs @@ -0,0 +1,34 @@ +use std::fs::{self, File}; +use std::os::fd::AsRawFd; +use std::path::Path; + +fn print_contents(path: impl AsRef + Copy) { + let contents = fs::read_to_string(path).unwrap(); + println!( + "{}:{contents}", + path.as_ref().to_string_lossy().into_owned() + ); +} + +fn main() { + unsafe { + fs::create_dir("/test-dir").unwrap(); + + fs::write("/test-dir/a", "a").unwrap(); + print_contents("/test-dir/a"); + + let dir = File::open("/test-dir").unwrap(); + let dir_raw_fd = dir.as_raw_fd() as u32; + + wasi::path_rename(dir_raw_fd, "a", dir_raw_fd, "b").unwrap(); + + print_contents("/test-dir/b"); + + fs::write("/test-dir/c", "c").unwrap(); + print_contents("/test-dir/c"); + + fs::rename("/test-dir/c", "/test-dir/d").unwrap(); + + print_contents("/test-dir/d"); + } +} diff --git a/tests/rust-wasi-tests/src/lib.rs b/tests/rust-wasi-tests/src/lib.rs new file mode 100644 index 00000000000..e69de29bb2d From d956477603c410119fad99402e7cd27b6b0b9c5f Mon Sep 17 00:00:00 2001 From: Arshia Ghafoori Date: Fri, 4 Aug 2023 14:01:31 +0400 Subject: [PATCH 4/6] Revert "Remove platform filters" This reverts commit 7634b2b2ee6597df02b03206705323aeda5385ad. --- tests/integration/cli/tests/snapshot.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/integration/cli/tests/snapshot.rs b/tests/integration/cli/tests/snapshot.rs index 00e405d3ebc..b231512ed74 100644 --- a/tests/integration/cli/tests/snapshot.rs +++ b/tests/integration/cli/tests/snapshot.rs @@ -1269,6 +1269,7 @@ fn test_snapshot_quickjs() { assert_json_snapshot!(snapshot); } +#[cfg_attr(any(target_env = "musl", target_os = "windows"), ignore)] #[test] fn test_snapshot_fs_rename() { let snapshot = TestBuilder::new() From 813c5720dd65abedd6ab0ffcb22509da246913ad Mon Sep 17 00:00:00 2001 From: Arshia Ghafoori Date: Fri, 4 Aug 2023 14:10:54 +0400 Subject: [PATCH 5/6] Lint --- tests/rust-wasi-tests/src/lib.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/rust-wasi-tests/src/lib.rs b/tests/rust-wasi-tests/src/lib.rs index e69de29bb2d..8b137891791 100644 --- a/tests/rust-wasi-tests/src/lib.rs +++ b/tests/rust-wasi-tests/src/lib.rs @@ -0,0 +1 @@ + From 77a1b2f4a46518b9ddb62230fbe2ea3ff51ad05c Mon Sep 17 00:00:00 2001 From: Arshia Ghafoori Date: Mon, 7 Aug 2023 15:43:25 +0400 Subject: [PATCH 6/6] Remove rust-wasi-tests from the root workspace --- Cargo.lock | 7 ------- Cargo.toml | 1 - tests/rust-wasi-tests/Cargo.lock | 16 ++++++++++++++++ tests/rust-wasi-tests/Cargo.toml | 2 ++ 4 files changed, 18 insertions(+), 8 deletions(-) create mode 100644 tests/rust-wasi-tests/Cargo.lock diff --git a/Cargo.lock b/Cargo.lock index 8e7ad51cb8f..46577c500f3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3571,13 +3571,6 @@ dependencies = [ "smallvec", ] -[[package]] -name = "rust-wasi-tests" -version = "0.1.0" -dependencies = [ - "wasi", -] - [[package]] name = "rustc-demangle" version = "0.1.23" diff --git a/Cargo.toml b/Cargo.toml index ded71550b93..9baaf349685 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -68,7 +68,6 @@ members = [ "tests/integration/ios", "tests/lib/compiler-test-derive", "tests/lib/wast", - "tests/rust-wasi-tests", "tests/wasi-wast", ] exclude = ["lib/wasi-web"] diff --git a/tests/rust-wasi-tests/Cargo.lock b/tests/rust-wasi-tests/Cargo.lock new file mode 100644 index 00000000000..59c7e8f295d --- /dev/null +++ b/tests/rust-wasi-tests/Cargo.lock @@ -0,0 +1,16 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "rust-wasi-tests" +version = "0.1.0" +dependencies = [ + "wasi", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" diff --git a/tests/rust-wasi-tests/Cargo.toml b/tests/rust-wasi-tests/Cargo.toml index 335a2be0029..45731f7731f 100644 --- a/tests/rust-wasi-tests/Cargo.toml +++ b/tests/rust-wasi-tests/Cargo.toml @@ -3,6 +3,8 @@ name = "rust-wasi-tests" version = "0.1.0" edition = "2021" +[workspace] + # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies]