WebAssembly / WebAssembly/component-model
Upstream Wasmtime's async test suite
@yoshuawuyts is already working on this.
Since Oct 21, 2025.
- Dominant language
- WebAssembly
- Stars
- 1.4k
- Forks
- 130
- Avg merge
- 2d 1h
- Merged PRs (30d)
- 15
Description
This issue is a sibling of https://github.com/WebAssembly/wasi-testsuite/issues/181. Wasmtime currently has its own set of component model async tests written in Rust. With an eye on portability, we should upstream these tests from Wasmtime into the component model repo. I've ported a first test in https://github.com/WebAssembly/component-model/pull/569, but we should make it a goal to eventually port all tests. If done right, runtimes like Jco would eventually be able to drop their dependence on Wasmtime's test suite for the component model, and instead be able to directly test against the component model repo. Thanks!
Tasks
These are all the component model async test programs in Wasmtime, grouped by scenario. There are a current total of 65 tests. Each test refers to a specific test case, which itself may be composed of one or more test programs interacting with one another. When translating that to WAST, it should result in a single .wast file which captures both the scenario and test programs.
backpressure
borrowing
- async_borrowing_callee:
async_borrowing_callee - async_borrowing_callee_misbehave:
async_borrowing_callee - async_borrowing_caller:
async_borrowing_caller,async_borrowing_callee - async_borrowing_caller_misbehave:
async_borrowing_caller,async_borrowing_callee
error_context
- async_error_context:
async_error_context - async_error_context_caller:
async_error_context_caller,async_error_context_callee
post_return
- async_post_return_caller:
async_post_return_caller,async_post_return_callee - async_sleep_post_return_callee:
async_sleep_post_return_callee - async_sleep_post_return_caller:
async_sleep_post_return_caller,async_sleep_post_return_callee
read_resource_stream
round_trip
- async_round_trip_stackful:
async_round_trip_stackful - async_round_trip_stackful_plus_stackful:
async_round_trip_stackful,async_round_trip_stackful - async_round_trip_stackful_plus_stackless:
async_round_trip_stackful,async_round_trip_stackless - async_round_trip_stackful_plus_synchronous:
async_round_trip_stackful,async_round_trip_synchronous - async_round_trip_stackless:
async_round_trip_stackless - async_round_trip_stackless_joined:
async_round_trip_stackless - async_round_trip_stackless_plus_stackful:
async_round_trip_stackless,async_round_trip_stackful - async_round_trip_stackless_plus_stackless:
async_round_trip_stackless,async_round_trip_stackless - async_round_trip_stackless_plus_synchronous:
async_round_trip_stackless,async_round_trip_synchronous - async_round_trip_stackless_plus_wait:
async_round_trip_stackless,async_round_trip_wait - async_round_trip_stackless_sync_import:
async_round_trip_stackless_sync_import - async_round_trip_synchronous:
async_round_trip_synchronous - async_round_trip_synchronous_plus_stackful:
async_round_trip_synchronous,async_round_trip_stackful - async_round_trip_synchronous_plus_stackless:
async_round_trip_synchronous,async_round_trip_stackless - async_round_trip_synchronous_plus_synchronous:
async_round_trip_synchronous,async_round_trip_synchronous - async_round_trip_synchronous_plus_wait:
async_round_trip_synchronous,async_round_trip_wait - async_round_trip_wait:
async_round_trip_wait - async_round_trip_wait_plus_stackless:
async_round_trip_wait,async_round_trip_stackless - async_round_trip_wait_plus_synchronous:
async_round_trip_wait,async_round_trip_synchronous - async_round_trip_wait_plus_wait:
async_round_trip_wait,async_round_trip_wait
round_trip_direct
round_trip_many
- async_round_trip_many_stackful:
async_round_trip_many_stackful - async_round_trip_many_stackful_plus_stackful:
async_round_trip_many_stackful,async_round_trip_many_stackful - async_round_trip_many_stackful_plus_stackless:
async_round_trip_many_stackful,async_round_trip_many_stackless - async_round_trip_many_stackful_plus_synchronous:
async_round_trip_many_stackful,async_round_trip_many_synchronous - async_round_trip_many_stackless:
async_round_trip_many_stackless - async_round_trip_many_stackless_plus_stackful:
async_round_trip_many_stackless,async_round_trip_many_stackful - async_round_trip_many_stackless_plus_stackless:
async_round_trip_many_stackless,async_round_trip_many_stackless - async_round_trip_many_stackless_plus_synchronous:
async_round_trip_many_stackless,async_round_trip_many_synchronous - async_round_trip_many_stackless_plus_wait:
async_round_trip_many_stackless,async_round_trip_many_wait - async_round_trip_many_synchronous:
async_round_trip_many_synchronous - async_round_trip_many_synchronous_plus_stackful:
async_round_trip_many_synchronous,async_round_trip_many_stackful - async_round_trip_many_synchronous_plus_stackless:
async_round_trip_many_synchronous,async_round_trip_many_stackless - async_round_trip_many_synchronous_plus_synchronous:
async_round_trip_many_synchronous,async_round_trip_many_synchronous - async_round_trip_many_synchronous_plus_wait:
async_round_trip_many_synchronous,async_round_trip_many_wait - async_round_trip_many_wait:
async_round_trip_many_wait - async_round_trip_many_wait_plus_stackless:
async_round_trip_many_wait,async_round_trip_many_stackless - async_round_trip_many_wait_plus_synchronous:
async_round_trip_many_wait,async_round_trip_many_synchronous - async_round_trip_many_wait_plus_wait:
async_round_trip_many_wait,async_round_trip_many_wait
streams
transmit
- async_cancel_caller:
async_cancel_caller,async_cancel_callee - async_cancel_transmit:
async_cancel_transmit - async_intertask_communication:
async_intertask_communication - async_poll_stackless:
async_poll_stackless - async_poll_synchronous:
async_poll_synchronous - async_readiness:
async_readiness - async_synchronous_transmit:
async_synchronous_transmit - async_transmit_callee:
async_transmit_callee - async_transmit_caller:
async_transmit_caller
unit_stream
yield
- async_yield_callee_cancel_stackless:
async_yield_caller_cancel,async_yield_callee_stackless - async_yield_callee_cancel_synchronous:
async_yield_caller_cancel,async_yield_callee_synchronous - async_yield_callee_stackless:
async_yield_caller,async_yield_callee_stackless - async_yield_callee_synchronous:
async_yield_caller,async_yield_callee_synchronous
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.