From 808d52563e234769d2fc296ff17ca12173735d9e Mon Sep 17 00:00:00 2001 From: Carl Lerche Date: Fri, 18 Nov 2022 14:02:53 -0800 Subject: [PATCH] ci: run tests on ARM and i686 using cross (#5196) This patch updates CI to use `cross` to run Tokio tests on virtualized ARM and i686 VMs. Because ipv6 doesn't work on Github action running in a docker instance, those tests are disabled --- .github/workflows/ci.yml | 35 ++++++++++++++++++++++++++++------- tokio/tests/rt_common.rs | 3 +-- tokio/tests/rt_metrics.rs | 2 +- tokio/tests/task_local_set.rs | 14 +++++++++----- tokio/tests/tcp_connect.rs | 1 + tokio/tests/tcp_socket.rs | 1 + 6 files changed, 41 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bc8987614..68817b2bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -42,7 +42,8 @@ jobs: - test-unstable - miri - asan - - cross + - cross-check + - cross-test - features - minrust - minimal-versions @@ -234,13 +235,12 @@ jobs: # Ignore `trybuild` errors as they are irrelevant and flaky on nightly TRYBUILD: overwrite - cross: - name: cross + cross-check: + name: cross-check runs-on: ubuntu-latest strategy: matrix: target: - - i686-unknown-linux-gnu - powerpc-unknown-linux-gnu - powerpc64-unknown-linux-gnu - mips-unknown-linux-gnu @@ -259,13 +259,34 @@ jobs: use-cross: true command: check args: --workspace --all-features --target ${{ matrix.target }} + env: + RUSTFLAGS: --cfg tokio_unstable -Dwarnings + + cross-test: + name: cross-test + runs-on: ubuntu-latest + strategy: + matrix: + target: + - i686-unknown-linux-gnu + - arm-unknown-linux-gnueabihf + - armv7-unknown-linux-gnueabihf + - aarch64-unknown-linux-gnu + steps: + - uses: actions/checkout@v3 + - name: Install Rust ${{ env.rust_stable }} + uses: actions-rs/toolchain@v1 + with: + toolchain: ${{ env.rust_stable }} + target: ${{ matrix.target }} + override: true - uses: actions-rs/cargo@v1 with: use-cross: true - command: check - args: --workspace --all-features --target ${{ matrix.target }} + command: test + args: -p tokio --all-features --target ${{ matrix.target }} --tests env: - RUSTFLAGS: --cfg tokio_unstable -Dwarnings + RUSTFLAGS: --cfg tokio_unstable -Dwarnings --cfg tokio_no_ipv6 features: name: features diff --git a/tokio/tests/rt_common.rs b/tokio/tests/rt_common.rs index 1039162ac..433eb2444 100644 --- a/tokio/tests/rt_common.rs +++ b/tokio/tests/rt_common.rs @@ -869,14 +869,13 @@ rt_test! { #[test] fn io_notify_while_shutting_down() { use tokio::net::UdpSocket; - use std::net::Ipv6Addr; use std::sync::Arc; for _ in 1..10 { let runtime = rt(); runtime.block_on(async { - let socket = UdpSocket::bind((Ipv6Addr::LOCALHOST, 0)).await.unwrap(); + let socket = UdpSocket::bind("127.0.0.1:0").await.unwrap(); let addr = socket.local_addr().unwrap(); let send_half = Arc::new(socket); let recv_half = send_half.clone(); diff --git a/tokio/tests/rt_metrics.rs b/tokio/tests/rt_metrics.rs index 71a60e4df..2a9f998f0 100644 --- a/tokio/tests/rt_metrics.rs +++ b/tokio/tests/rt_metrics.rs @@ -105,7 +105,7 @@ fn worker_park_count() { time::sleep(Duration::from_millis(1)).await; }); drop(rt); - assert!(2 <= metrics.worker_park_count(0)); + assert!(1 <= metrics.worker_park_count(0)); let rt = threaded(); let metrics = rt.metrics(); diff --git a/tokio/tests/task_local_set.rs b/tokio/tests/task_local_set.rs index 1d3a81533..2da87f5ae 100644 --- a/tokio/tests/task_local_set.rs +++ b/tokio/tests/task_local_set.rs @@ -500,11 +500,15 @@ async fn local_tasks_are_polled_after_tick_inner() { tx.send(()).unwrap(); } - time::sleep(Duration::from_millis(20)).await; - let rx1 = RX1.load(SeqCst); - let rx2 = RX2.load(SeqCst); - assert_eq!(EXPECTED, rx1); - assert_eq!(EXPECTED, rx2); + loop { + time::sleep(Duration::from_millis(20)).await; + let rx1 = RX1.load(SeqCst); + let rx2 = RX2.load(SeqCst); + + if rx1 == EXPECTED && rx2 == EXPECTED { + break; + } + } }); while let Some(oneshot) = rx.recv().await { diff --git a/tokio/tests/tcp_connect.rs b/tokio/tests/tcp_connect.rs index e1359c936..f2384420e 100644 --- a/tokio/tests/tcp_connect.rs +++ b/tokio/tests/tcp_connect.rs @@ -35,6 +35,7 @@ async fn connect_v4() { } #[tokio::test] +#[cfg(not(tokio_no_ipv6))] async fn connect_v6() { let srv = assert_ok!(TcpListener::bind("[::1]:0").await); let addr = assert_ok!(srv.local_addr()); diff --git a/tokio/tests/tcp_socket.rs b/tokio/tests/tcp_socket.rs index d67c9f4a0..66309d304 100644 --- a/tokio/tests/tcp_socket.rs +++ b/tokio/tests/tcp_socket.rs @@ -24,6 +24,7 @@ async fn basic_usage_v4() { } #[tokio::test] +#[cfg(not(tokio_no_ipv6))] async fn basic_usage_v6() { // Create server let addr = assert_ok!("[::1]:0".parse());