Path: blob/main/crates/wasi/tests/all/p3/mod.rs
1693 views
use crate::store::{Ctx, MyWasiCtx};1use anyhow::{Context as _, anyhow};2use std::path::Path;3use test_programs_artifacts::*;4use wasmtime::Result;5use wasmtime::component::{Component, Linker};6use wasmtime_wasi::p3::bindings::Command;78async fn run(path: &str) -> Result<()> {9run_allow_blocking_current_thread(path, false).await10}1112async fn run_allow_blocking_current_thread(13path: &str,14allow_blocking_current_thread: bool,15) -> Result<()> {16let path = Path::new(path);17let name = path.file_stem().unwrap().to_str().unwrap();18let engine = test_programs_artifacts::engine(|config| {19config.async_support(true);20config.wasm_component_model_async(true);21});22let mut linker = Linker::new(&engine);23// TODO: Remove once test components are not built for `wasm32-wasip1`24wasmtime_wasi::p2::add_to_linker_async(&mut linker)25.context("failed to link `wasi:[email protected]`")?;26wasmtime_wasi::p3::add_to_linker(&mut linker).context("failed to link `wasi:[email protected]`")?;2728let (mut store, _td) = Ctx::new(&engine, name, |builder| MyWasiCtx {29wasi: builder30.allow_blocking_current_thread(allow_blocking_current_thread)31.build(),32table: Default::default(),33})?;34let component = Component::from_file(&engine, path)?;35let instance = linker.instantiate_async(&mut store, &component).await?;36let command =37Command::new(&mut store, &instance).context("failed to instantiate `wasi:cli/command`")?;38instance39.run_concurrent(&mut store, async move |store| {40command.wasi_cli_run().call_run(store).await41})42.await43.context("failed to call `wasi:cli/run#run`")?44.context("guest trapped")?45.map_err(|()| anyhow!("`wasi:cli/run#run` failed"))46}4748foreach_p3!(assert_test_exists);4950#[test_log::test(tokio::test(flavor = "multi_thread"))]51async fn p3_cli() -> anyhow::Result<()> {52run(P3_CLI_COMPONENT).await53}5455#[test_log::test(tokio::test(flavor = "multi_thread"))]56async fn p3_clocks_sleep() -> anyhow::Result<()> {57run(P3_CLOCKS_SLEEP_COMPONENT).await58}5960#[test_log::test(tokio::test(flavor = "multi_thread"))]61async fn p3_filesystem_file_read_write() -> anyhow::Result<()> {62run(P3_FILESYSTEM_FILE_READ_WRITE_COMPONENT).await63}6465#[test_log::test(tokio::test(flavor = "multi_thread"))]66async fn p3_filesystem_file_read_write_blocking() -> anyhow::Result<()> {67run_allow_blocking_current_thread(P3_FILESYSTEM_FILE_READ_WRITE_COMPONENT, true).await68}6970#[test_log::test(tokio::test(flavor = "multi_thread"))]71async fn p3_random_imports() -> anyhow::Result<()> {72run(P3_RANDOM_IMPORTS_COMPONENT).await73}7475#[test_log::test(tokio::test(flavor = "multi_thread"))]76async fn p3_sockets_ip_name_lookup() -> anyhow::Result<()> {77run(P3_SOCKETS_IP_NAME_LOOKUP_COMPONENT).await78}7980#[test_log::test(tokio::test(flavor = "multi_thread"))]81async fn p3_sockets_tcp_bind() -> anyhow::Result<()> {82run(P3_SOCKETS_TCP_BIND_COMPONENT).await83}8485#[test_log::test(tokio::test(flavor = "multi_thread"))]86async fn p3_sockets_tcp_connect() -> anyhow::Result<()> {87run(P3_SOCKETS_TCP_CONNECT_COMPONENT).await88}8990#[test_log::test(tokio::test(flavor = "multi_thread"))]91async fn p3_sockets_tcp_sample_application() -> anyhow::Result<()> {92run(P3_SOCKETS_TCP_SAMPLE_APPLICATION_COMPONENT).await93}9495#[test_log::test(tokio::test(flavor = "multi_thread"))]96async fn p3_sockets_tcp_sockopts() -> anyhow::Result<()> {97run(P3_SOCKETS_TCP_SOCKOPTS_COMPONENT).await98}99100#[test_log::test(tokio::test(flavor = "multi_thread"))]101async fn p3_sockets_tcp_states() -> anyhow::Result<()> {102run(P3_SOCKETS_TCP_STATES_COMPONENT).await103}104105#[test_log::test(tokio::test(flavor = "multi_thread"))]106async fn p3_sockets_tcp_streams() -> anyhow::Result<()> {107run(P3_SOCKETS_TCP_STREAMS_COMPONENT).await108}109110#[test_log::test(tokio::test(flavor = "multi_thread"))]111async fn p3_sockets_udp_bind() -> anyhow::Result<()> {112run(P3_SOCKETS_UDP_BIND_COMPONENT).await113}114115#[test_log::test(tokio::test(flavor = "multi_thread"))]116async fn p3_sockets_udp_connect() -> anyhow::Result<()> {117run(P3_SOCKETS_UDP_CONNECT_COMPONENT).await118}119120#[test_log::test(tokio::test(flavor = "multi_thread"))]121async fn p3_sockets_udp_sample_application() -> anyhow::Result<()> {122run(P3_SOCKETS_UDP_SAMPLE_APPLICATION_COMPONENT).await123}124125#[test_log::test(tokio::test(flavor = "multi_thread"))]126async fn p3_sockets_udp_sockopts() -> anyhow::Result<()> {127run(P3_SOCKETS_UDP_SOCKOPTS_COMPONENT).await128}129130#[test_log::test(tokio::test(flavor = "multi_thread"))]131async fn p3_sockets_udp_states() -> anyhow::Result<()> {132run(P3_SOCKETS_UDP_STATES_COMPONENT).await133}134135#[test_log::test(tokio::test(flavor = "multi_thread"))]136async fn p3_readdir() -> anyhow::Result<()> {137run(P3_READDIR_COMPONENT).await138}139140#[test_log::test(tokio::test(flavor = "multi_thread"))]141async fn p3_readdir_blocking() -> anyhow::Result<()> {142run_allow_blocking_current_thread(P3_READDIR_COMPONENT, true).await143}144145146