Path: blob/main/crates/wasi/tests/all/p3/mod.rs
3130 views
use crate::store::{Ctx, MyWasiCtx};1use std::path::Path;2use test_programs_artifacts::*;3use wasmtime::component::{Component, Linker};4use wasmtime::{Result, error::Context as _, format_err};5use wasmtime_wasi::p3::bindings::Command;67async fn run(path: &str) -> Result<()> {8run_allow_blocking_current_thread(path, false).await9}1011async fn run_allow_blocking_current_thread(12path: &str,13allow_blocking_current_thread: bool,14) -> Result<()> {15let path = Path::new(path);16let name = path.file_stem().unwrap().to_str().unwrap();17let engine = test_programs_artifacts::engine(|config| {18config.wasm_component_model_async(true);19});20let mut linker = Linker::new(&engine);21// TODO: Remove once test components are not built for `wasm32-wasip1`22wasmtime_wasi::p2::add_to_linker_async(&mut linker)23.context("failed to link `wasi:[email protected]`")?;24wasmtime_wasi::p3::add_to_linker(&mut linker).context("failed to link `wasi:[email protected]`")?;2526let (mut store, _td) = Ctx::new(&engine, name, |builder| MyWasiCtx {27wasi: builder28.allow_blocking_current_thread(allow_blocking_current_thread)29.build(),30table: Default::default(),31})?;32let component = Component::from_file(&engine, path)?;33let command = Command::instantiate_async(&mut store, &component, &linker)34.await35.context("failed to instantiate `wasi:cli/command`")?;36store37.run_concurrent(async move |store| command.wasi_cli_run().call_run(store).await)38.await39.context("failed to call `wasi:cli/run#run`")?40.context("guest trapped")?41.042.map_err(|()| format_err!("`wasi:cli/run#run` failed"))43}4445foreach_p3!(assert_test_exists);4647#[test_log::test(tokio::test(flavor = "multi_thread"))]48async fn p3_cli() -> wasmtime::Result<()> {49run(P3_CLI_COMPONENT).await50}5152#[test_log::test(tokio::test(flavor = "multi_thread"))]53async fn p3_clocks_sleep() -> wasmtime::Result<()> {54run(P3_CLOCKS_SLEEP_COMPONENT).await55}5657#[test_log::test(tokio::test(flavor = "multi_thread"))]58async fn p3_filesystem_file_read_write() -> wasmtime::Result<()> {59run(P3_FILESYSTEM_FILE_READ_WRITE_COMPONENT).await60}6162#[test_log::test(tokio::test(flavor = "multi_thread"))]63async fn p3_filesystem_file_read_write_blocking() -> wasmtime::Result<()> {64run_allow_blocking_current_thread(P3_FILESYSTEM_FILE_READ_WRITE_COMPONENT, true).await65}6667#[test_log::test(tokio::test(flavor = "multi_thread"))]68async fn p3_random_imports() -> wasmtime::Result<()> {69run(P3_RANDOM_IMPORTS_COMPONENT).await70}7172#[test_log::test(tokio::test(flavor = "multi_thread"))]73async fn p3_sockets_ip_name_lookup() -> wasmtime::Result<()> {74run(P3_SOCKETS_IP_NAME_LOOKUP_COMPONENT).await75}7677#[test_log::test(tokio::test(flavor = "multi_thread"))]78async fn p3_sockets_tcp_bind() -> wasmtime::Result<()> {79run(P3_SOCKETS_TCP_BIND_COMPONENT).await80}8182#[test_log::test(tokio::test(flavor = "multi_thread"))]83async fn p3_sockets_tcp_connect() -> wasmtime::Result<()> {84run(P3_SOCKETS_TCP_CONNECT_COMPONENT).await85}8687#[test_log::test(tokio::test(flavor = "multi_thread"))]88async fn p3_sockets_tcp_listen() -> wasmtime::Result<()> {89run(P3_SOCKETS_TCP_LISTEN_COMPONENT).await90}9192#[test_log::test(tokio::test(flavor = "multi_thread"))]93async fn p3_sockets_tcp_sample_application() -> wasmtime::Result<()> {94run(P3_SOCKETS_TCP_SAMPLE_APPLICATION_COMPONENT).await95}9697#[test_log::test(tokio::test(flavor = "multi_thread"))]98async fn p3_sockets_tcp_sockopts() -> wasmtime::Result<()> {99run(P3_SOCKETS_TCP_SOCKOPTS_COMPONENT).await100}101102#[test_log::test(tokio::test(flavor = "multi_thread"))]103async fn p3_sockets_tcp_states() -> wasmtime::Result<()> {104run(P3_SOCKETS_TCP_STATES_COMPONENT).await105}106107#[test_log::test(tokio::test(flavor = "multi_thread"))]108async fn p3_sockets_tcp_streams() -> wasmtime::Result<()> {109run(P3_SOCKETS_TCP_STREAMS_COMPONENT).await110}111112#[test_log::test(tokio::test(flavor = "multi_thread"))]113async fn p3_sockets_udp_bind() -> wasmtime::Result<()> {114run(P3_SOCKETS_UDP_BIND_COMPONENT).await115}116117#[test_log::test(tokio::test(flavor = "multi_thread"))]118async fn p3_sockets_udp_connect() -> wasmtime::Result<()> {119run(P3_SOCKETS_UDP_CONNECT_COMPONENT).await120}121122#[test_log::test(tokio::test(flavor = "multi_thread"))]123async fn p3_sockets_udp_receive() -> wasmtime::Result<()> {124run(P3_SOCKETS_UDP_RECEIVE_COMPONENT).await125}126127#[test_log::test(tokio::test(flavor = "multi_thread"))]128async fn p3_sockets_udp_sample_application() -> wasmtime::Result<()> {129run(P3_SOCKETS_UDP_SAMPLE_APPLICATION_COMPONENT).await130}131132#[test_log::test(tokio::test(flavor = "multi_thread"))]133async fn p3_sockets_udp_send() -> wasmtime::Result<()> {134run(P3_SOCKETS_UDP_SEND_COMPONENT).await135}136137#[test_log::test(tokio::test(flavor = "multi_thread"))]138async fn p3_sockets_udp_sockopts() -> wasmtime::Result<()> {139run(P3_SOCKETS_UDP_SOCKOPTS_COMPONENT).await140}141142#[test_log::test(tokio::test(flavor = "multi_thread"))]143async fn p3_sockets_udp_states() -> wasmtime::Result<()> {144run(P3_SOCKETS_UDP_STATES_COMPONENT).await145}146147#[test_log::test(tokio::test(flavor = "multi_thread"))]148async fn p3_readdir() -> wasmtime::Result<()> {149run(P3_READDIR_COMPONENT).await150}151152#[test_log::test(tokio::test(flavor = "multi_thread"))]153async fn p3_readdir_blocking() -> wasmtime::Result<()> {154run_allow_blocking_current_thread(P3_READDIR_COMPONENT, true).await155}156157#[test_log::test(tokio::test(flavor = "multi_thread"))]158async fn p3_file_write() -> wasmtime::Result<()> {159run(P3_FILE_WRITE_COMPONENT).await160}161162#[test_log::test(tokio::test(flavor = "multi_thread"))]163async fn p3_file_write_blocking() -> wasmtime::Result<()> {164run_allow_blocking_current_thread(P3_FILE_WRITE_COMPONENT, true).await165}166167#[expect(168dead_code,169reason = "tested in the wasi-cli crate, satisfying foreach_api! macro"170)]171fn p3_cli_hello_stdout() {}172173#[expect(174dead_code,175reason = "tested in the wasi-cli crate, satisfying foreach_api! macro"176)]177fn p3_cli_hello_stdout_post_return() {}178179#[expect(180dead_code,181reason = "tested in the wasi-cli crate, satisfying foreach_api! macro"182)]183fn p3_cli_much_stdout() {}184185#[expect(186dead_code,187reason = "tested in the wasi-cli crate, satisfying foreach_api! macro"188)]189fn p3_cli_serve_hello_world() {}190191#[expect(192dead_code,193reason = "tested in the wasi-cli crate, satisfying foreach_api! macro"194)]195fn p3_cli_serve_sleep() {}196197198