Skip to content

Conversation

@wingo
Copy link
Collaborator

@wingo wingo commented Sep 19, 2025

Instead of having the adapter files be top-level python scripts, now
they are modules with exported functions. One of those functions
computes the argv to execute when running a test.

Also, clean up directories before and after each test, in addition to
before running the suite. This makes one failure to clean up not cause
other cascading failures, and makes it more reliable to be able to run
test cases outside the test-runner harness.

Stacked on #149.

Add `./run-tests` executable that doesn't require arguments,
automatically detecting available runtimes and tests.

Simplify `README.md` accordingly.

Console test case reporter more concise and useful:
 - Single line to indicate total results
 - One copy-pastable command line per failure
 - Requires refactors to record command lines, remove cwd change

Allow testing multiple engines in one run.
 - Required changing `TEST_RUNTIME_EXE` environment variable
   convention to one env var per executable
 - Requires refactor to collect which runtime ran a testcase
Don't go beyond a page or so of output.
@wingo wingo marked this pull request as ready for review September 19, 2025 12:08
Instead of having the adapter files be top-level python scripts, now
they are modules with exported functions.  One of those functions
computes the argv to execute when running a test.

Also, clean up directories before and after each test, in addition to
before running the suite.  This makes one failure to clean up not cause
other cascading failures, and makes it more reliable to be able to run
test cases outside the test-runner harness.
@wingo
Copy link
Collaborator Author

wingo commented Sep 19, 2025

With this change, output looks like this:

$ IWASM="$HOME/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1" WASMTIME="$HOME/src/wasip3/wasmtime/target/release/wasmtime -Wcomponent-model-async=y -Sp3=y" ./run-tests
Detecting WASI runtime availability:
  wasmtime.py: wasmtime 38.0.0
  wasm-micro-runtime.py: wamr 2.4.1
  wizard.py unavailable; pass `--runtime /home/wingo/src/wasip3/wasi-testsuite/adapters/wizard.py` to debug.

Running test suite WASI C tests [wasm32-wasip1] with wasmtime 38.0.0
...........!..
Running test suite WASI C tests [wasm32-wasip1] with wamr 2.4.1
!!!.!......!!!


Running test suite WASI Rust tests [wasm32-wasip3] with wasmtime 38.0.0
!!.
Running test suite WASI Rust tests [wasm32-wasip3] with wamr 2.4.1
!!!
Running test suite WASI Rust tests [wasm32-wasip1] with wasmtime 38.0.0
.................!....!........!..............
Running test suite WASI Rust tests [wasm32-wasip1] with wamr 2.4.1
!!!!!!!.!!!!!.!.!!!!.!!!!!!!!!!!!!!!!!!!!!!!!!
Running test suite WASI Assemblyscript  tests [wasm32-wasip1] with wasmtime 38.0.0
............
Running test suite WASI Assemblyscript  tests [wasm32-wasip1] with wamr 2.4.1
...!....!...
===== Test results =====
wasmtime 38.0.0: FAIL: 6/75 tests failed
  /home/wingo/src/wasip3/wasmtime/target/release/wasmtime -Wcomponent-model-async=y -Sp3=y --dir tests/c/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/c/testsuite/wasm32-wasip1/pwrite-with-append.wasm
  /home/wingo/src/wasip3/wasmtime/target/release/wasmtime -Wcomponent-model-async=y -Sp3=y tests/rust/testsuite/wasm32-wasip3/http-fields.wasm
  /home/wingo/src/wasip3/wasmtime/target/release/wasmtime -Wcomponent-model-async=y -Sp3=y tests/rust/testsuite/wasm32-wasip3/test-stat-at-root.wasm
  /home/wingo/src/wasip3/wasmtime/target/release/wasmtime -Wcomponent-model-async=y -Sp3=y --dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/remove_directory_trailing_slashes.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasmtime/target/release/wasmtime -Wcomponent-model-async=y -Sp3=y --dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_link.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasmtime/target/release/wasmtime -Wcomponent-model-async=y -Sp3=y --dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/fd_fdstat_set_rights.wasm fs-tests.dir
wamr 2.4.1: FAIL: 54/75 tests failed
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/c/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/c/testsuite/wasm32-wasip1/pwrite-with-access.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/c/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/c/testsuite/wasm32-wasip1/stat-dev-ino.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/c/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/c/testsuite/wasm32-wasip1/fdopendir-with-access.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/c/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/c/testsuite/wasm32-wasip1/pread-with-access.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/c/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/c/testsuite/wasm32-wasip1/pwrite-with-append.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/c/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/c/testsuite/wasm32-wasip1/fopen-with-access.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/c/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/c/testsuite/wasm32-wasip1/lseek.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 tests/rust/testsuite/wasm32-wasip3/http-fields.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 tests/rust/testsuite/wasm32-wasip3/test-stat-at-root.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 tests/rust/testsuite/wasm32-wasip3/monotonic-clock.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/truncation_rights.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_open_preopen.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_filestat.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/dangling_symlink.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/fd_filestat_set.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/symlink_loop.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_rename.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_exists.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/fd_flags_set.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/isatty.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/dangling_fd.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/stdio.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/file_allocate.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_open_dirfd_not_dir.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/remove_directory_trailing_slashes.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/interesting_paths.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/unlink_file_trailing_slashes.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/directory_seek.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_link.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/file_truncation.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_rename_dir_trailing_slashes.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/nofollow_errors.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/file_unbuffered_write.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_open_create_existing.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/fd_advise.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/fd_readdir.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_open_read_write.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/fd_fdstat_set_rights.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/file_seek_tell.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/fstflags_validate.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/remove_nonempty_directory.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/renumber.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/overwrite_preopen.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/readlink.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/dir_fd_op_failures.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_symlink_trailing_slashes.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/symlink_filestat.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/close_preopen.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/symlink_create.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_open_missing.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/path_open_nonblock.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --map-dir tests/rust/testsuite/wasm32-wasip1/fs-tests.dir::fs-tests.dir tests/rust/testsuite/wasm32-wasip1/file_pread_pwrite.wasm fs-tests.dir
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --env a=text --env 'b=escap " ing' --env 'c=new
line' tests/assemblyscript/testsuite/wasm32-wasip1/environ_get-multiple-variables.wasm
  /home/wingo/src/wasip3/wasm-micro-runtime/product-mini/platforms/linux/build/iwasm-2.4.1 --env a=b --env b=c --env c=d tests/assemblyscript/testsuite/wasm32-wasip1/environ_sizes_get-multiple-variables.wasm

@wingo
Copy link
Collaborator Author

wingo commented Sep 19, 2025

Cc @mohanson for the out-of-tree pywasm adapter; wdyt?

@wingo
Copy link
Collaborator Author

wingo commented Sep 19, 2025

Need similar adaptations for out-of-tree wasmedge and wazero adapters

@mohanson
Copy link
Contributor

I see that in your refactoring design, by default you need the WASI implementation to provide a binary file, and then you can call it through subprocess to run a specified test case. However, pywasm currently doesn't have binary releases and is only published as a package. Therefore, does this mean I now need to provide a binary program to adapt to this refactoring (this should be easy to implement, but I want to confirm whether this is an expected change within the scope of this refactoring)?

https://github.com/mohanson/pywasm/blob/master/script/wasi_testsuite_adapter.py#L22-L30
As you can see here, currently pywasm is not run through the shell

@wingo
Copy link
Collaborator Author

wingo commented Sep 19, 2025

Can you run pywasm through python? E.g. python3 -m pywasm ... ?

You don't necessarily need to ship a binary. wasi-testsuite can contain the needed trampoline. I am not trying to make your life difficult, I just want wasi-testsuite to print out command lines that can be run directly :)

@wingo
Copy link
Collaborator Author

wingo commented Sep 19, 2025

To finish the other thought I had, @mohanson it may be a good idea to just put the pywasm adapter into wasi-testsuite. As you like!

@mohanson
Copy link
Contributor

To finish the other thought I had, @mohanson it may be a good idea to just put the pywasm adapter into wasi-testsuite. As you like!

I like this idea too!

@mohanson
Copy link
Contributor

@wingo I've updated pywasm and provided an entry script. You can download this file (or include it directly in wasi-testsuite), then treat "python wasi.py" as the binary you need, and write an adapter.py file according to your new design. This should work properly.

libraries/pywasm#94

@wingo
Copy link
Collaborator Author

wingo commented Sep 24, 2025

OK! Merging this one then, and will add an adapter for pywasm in a followup.

@wingo wingo merged commit 5bf2592 into WebAssembly:main Sep 24, 2025
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants