name: Integration & Soak Tests
on:
push:
branches: [main]
pull_request:
branches: [main]
schedule:
- cron: '0 3 * * 1'
env:
CARGO_TERM_COLOR: always
RUSTFLAGS: "-D warnings"
jobs:
api-coverage:
name: API Coverage Guard
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
submodules: recursive
- name: Symlink dependencies
run: |
mkdir -p .deps
git clone --depth 1 https://github.com/saorsa-labs/ant-quic .deps/ant-quic || true
git clone --depth 1 https://github.com/saorsa-labs/saorsa-gossip .deps/saorsa-gossip || true
ln -sf "$(pwd)/.deps/ant-quic" ../ant-quic
ln -sf "$(pwd)/.deps/saorsa-gossip" ../saorsa-gossip
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Run guardian tests
run: cargo test --all-features --test api_coverage
proptest:
name: Property Tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
submodules: recursive
- name: Symlink dependencies
run: |
mkdir -p .deps
git clone --depth 1 https://github.com/saorsa-labs/ant-quic .deps/ant-quic || true
git clone --depth 1 https://github.com/saorsa-labs/saorsa-gossip .deps/saorsa-gossip || true
ln -sf "$(pwd)/.deps/ant-quic" ../ant-quic
ln -sf "$(pwd)/.deps/saorsa-gossip" ../saorsa-gossip
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@nextest
- name: Run property tests
run: |
cargo nextest run --all-features --build-jobs 2 --lib \
--test proptest_connectivity --test proptest_crdt --test proptest_files \
--test proptest_groups --test proptest_kv --test proptest_mls \
--test proptest_presence --test proptest_trust \
-E 'binary(proptest_connectivity) | binary(proptest_crdt) | binary(proptest_files) | binary(proptest_groups) | binary(proptest_kv) | binary(proptest_mls) | binary(proptest_presence) | binary(proptest_trust) | test(/^proptest_/) | test(/proptest/)'
integration-core:
name: Integration (core)
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v5
with:
submodules: recursive
- name: Symlink dependencies
run: |
mkdir -p .deps
git clone --depth 1 https://github.com/saorsa-labs/ant-quic .deps/ant-quic || true
git clone --depth 1 https://github.com/saorsa-labs/saorsa-gossip .deps/saorsa-gossip || true
ln -sf "$(pwd)/.deps/ant-quic" ../ant-quic
ln -sf "$(pwd)/.deps/saorsa-gossip" ../saorsa-gossip
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@nextest
- name: Build release binaries (shared across suites)
run: cargo build --release --bin x0xd --bin x0x
- name: Run daemon API integration tests
run: cargo nextest run --all-features --test daemon_api_integration -- --ignored
- name: Run named group D4 signed commit integration tests
run: cargo nextest run --all-features --test named_group_d4_apply -- --ignored
integration-groups:
name: Integration (groups)
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v5
with:
submodules: recursive
- name: Symlink dependencies
run: |
mkdir -p .deps
git clone --depth 1 https://github.com/saorsa-labs/ant-quic .deps/ant-quic || true
git clone --depth 1 https://github.com/saorsa-labs/saorsa-gossip .deps/saorsa-gossip || true
ln -sf "$(pwd)/.deps/ant-quic" ../ant-quic
ln -sf "$(pwd)/.deps/saorsa-gossip" ../saorsa-gossip
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@nextest
- name: Build release binaries (shared across suites)
run: cargo build --release --bin x0xd --bin x0x
- name: Run named group integration tests
run: cargo nextest run --all-features --test named_group_integration --run-ignored ignored-only
integration-net:
name: Integration (net)
runs-on: ubuntu-latest
timeout-minutes: 20
steps:
- uses: actions/checkout@v5
with:
submodules: recursive
- name: Symlink dependencies
run: |
mkdir -p .deps
git clone --depth 1 https://github.com/saorsa-labs/ant-quic .deps/ant-quic || true
git clone --depth 1 https://github.com/saorsa-labs/saorsa-gossip .deps/saorsa-gossip || true
ln -sf "$(pwd)/.deps/ant-quic" ../ant-quic
ln -sf "$(pwd)/.deps/saorsa-gossip" ../saorsa-gossip
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@nextest
- name: Build release binaries (shared across suites)
run: cargo build --release --bin x0xd --bin x0x
- name: Run GUI smoke tests
run: cargo nextest run --all-features --test gui_smoke
- name: Run WebSocket tests
run: cargo nextest run --all-features --test ws_integration -- --ignored
- name: Run KvStore first-join bootstrap tests (issue 96)
run: cargo nextest run --all-features --test kv_first_join_bootstrap --test-threads 1 -- --ignored
- name: Run local-topic routing tests (issue 89)
run: cargo nextest run --all-features --test local_topics --test-threads 1 -- --ignored
integration-timing:
name: Integration Timing Suites (weekly)
runs-on: ubuntu-latest
timeout-minutes: 30
if: github.event_name == 'schedule'
steps:
- uses: actions/checkout@v5
with:
submodules: recursive
- name: Symlink dependencies
run: |
mkdir -p .deps
git clone --depth 1 https://github.com/saorsa-labs/ant-quic .deps/ant-quic || true
git clone --depth 1 https://github.com/saorsa-labs/saorsa-gossip .deps/saorsa-gossip || true
ln -sf "$(pwd)/.deps/ant-quic" ../ant-quic
ln -sf "$(pwd)/.deps/saorsa-gossip" ../saorsa-gossip
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: taiki-e/install-action@nextest
- name: Build release binaries (shared across suites)
run: cargo build --release --bin x0xd --bin x0x
- name: Run peer-lifecycle daemon tests (de-flaked, ignored-only)
run: cargo nextest run --all-features --test peer_lifecycle_integration --run-ignored ignored-only
- name: Run x0x_0041 reissue timing test (de-flaked, ignored-only)
run: cargo nextest run --all-features --test x0x_0041_prefer_newest_test --run-ignored ignored-only
- name: Run named-group join-metadata convergence tests (de-flaked, ignored-only)
run: cargo nextest run --all-features --test named_group_join_metadata_event --run-ignored ignored-only
soak:
name: Soak Test
runs-on: ubuntu-latest
timeout-minutes: 90
if: github.event_name == 'schedule'
steps:
- uses: actions/checkout@v5
with:
submodules: recursive
- name: Symlink dependencies
run: |
mkdir -p .deps
git clone --depth 1 https://github.com/saorsa-labs/ant-quic .deps/ant-quic || true
git clone --depth 1 https://github.com/saorsa-labs/saorsa-gossip .deps/saorsa-gossip || true
ln -sf "$(pwd)/.deps/ant-quic" ../ant-quic
ln -sf "$(pwd)/.deps/saorsa-gossip" ../saorsa-gossip
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- uses: grafana/setup-k6-action@v1
- name: Build release binaries
run: cargo build --release --bin x0xd
- name: Run 1-hour soak
run: bash tests/soak/run_soak.sh --duration 1h
- name: Upload soak results
if: always()
uses: actions/upload-artifact@v5
with:
name: soak-results
path: tests/soak/results/