Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: add a regression test for WASI #4822

Merged
merged 5 commits into from Jul 11, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
35 changes: 35 additions & 0 deletions .github/workflows/ci.yml
Expand Up @@ -48,6 +48,7 @@ jobs:
- check-readme
- test-hyper
- wasm32-unknown-unknown
- wasm32-wasi
steps:
- run: exit 0

Expand Down Expand Up @@ -462,3 +463,37 @@ jobs:
- name: test tokio
run: wasm-pack test --node -- --features "macros sync"
working-directory: tokio

wasm32-wasi:
name: wasm32-wasi
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Install Rust ${{ env.rust_stable }}
uses: actions-rs/toolchain@v1
with:
toolchain: ${{ env.rust_stable }}
override: true
- uses: Swatinem/rust-cache@v1

# Install dependencies
- name: Install cargo-hack
run: cargo install cargo-hack

- name: Install wasm32-wasi target
run: rustup target add wasm32-wasi

- name: Install wasmtime
run: cargo install wasmtime-cli

- name: Install cargo-wasi
run: cargo install cargo-wasi

# TODO: Expand this when full WASI support lands.
# Currently, this is a bare bones regression test
# for features that work today with wasi.

- name: test tests-integration --features wasi-rt
# TODO: this should become: `cargo hack wasi test --each-feature`
run: cargo wasi test --test rt_yield --features wasi-rt
working-directory: tests-integration
18 changes: 18 additions & 0 deletions tests-integration/Cargo.toml
Expand Up @@ -17,12 +17,30 @@ required-features = ["rt-net"]
name = "test-process-signal"
required-features = ["rt-process-signal"]

[[test]]
name = "macros_main"

[[test]]
name = "macros_pin"

[[test]]
name = "macros_select"

[[test]]
name = "rt_yield"
required-features = ["rt", "macros", "sync"]

[features]
rt-process-io-util = ["tokio/rt", "tokio/macros", "tokio/process", "tokio/io-util", "tokio/io-std"]
# For mem check
rt-net = ["tokio/rt", "tokio/rt-multi-thread", "tokio/net"]
# For test-process-signal
rt-process-signal = ["rt-net", "tokio/process", "tokio/signal"]
# For testing wasi + rt/macros/sync features
#
# This is an explicit feature so we can use `cargo hack` testing single features
# instead of all possible permutations.
wasi-rt = ["rt", "macros", "sync"]

full = [
"macros",
Expand Down
2 changes: 1 addition & 1 deletion tests-integration/tests/macros_main.rs
@@ -1,4 +1,4 @@
#![cfg(all(feature = "macros", feature = "rt"))]
#![cfg(all(feature = "macros", feature = "rt-multi-thread"))]

#[tokio::main]
async fn basic_main() -> usize {
Expand Down
41 changes: 41 additions & 0 deletions tests-integration/tests/rt_yield.rs
@@ -0,0 +1,41 @@
use tokio::sync::oneshot;
use tokio::task;

async fn spawn_send() {
let (tx, rx) = oneshot::channel();

let task = tokio::spawn(async {
for _ in 0..10 {
task::yield_now().await;
}

tx.send("done").unwrap();
});

assert_eq!("done", rx.await.unwrap());
task.await.unwrap();
}

#[tokio::main(flavor = "current_thread")]
async fn entry_point() {
spawn_send().await;
}

#[tokio::test]
async fn test_macro() {
spawn_send().await;
}

#[test]
fn main_macro() {
entry_point();
}

#[test]
fn manual_rt() {
let rt = tokio::runtime::Builder::new_current_thread()
.build()
.unwrap();

rt.block_on(async { spawn_send().await });
}