From 6223c182e88c37a38e9b36fb1a92e0983e3c1fbf Mon Sep 17 00:00:00 2001 From: Devrandom Date: Sun, 29 Dec 2024 13:21:57 +0100 Subject: [PATCH] Run externalized tests in CI --- .github/workflows/build.yml | 14 ++++++++++ ci/ci-tests.sh | 7 ----- ext-functional-test-demo/Cargo.toml | 3 +++ ext-functional-test-demo/src/main.rs | 40 ++++++++++++++++++++++++---- 4 files changed, 52 insertions(+), 12 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 83ae38a1b9e..61969fad7a0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,6 +13,20 @@ concurrency: cancel-in-progress: true jobs: + ext-test: + runs-on: ubuntu-latest + steps: + - name: Checkout source code + uses: actions/checkout@v4 + - name: Install Rust stable toolchain + run: | + curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal --default-toolchain stable + rustup override set stable + - name: Run externalized tests + run: | + cd ext-functional-test-demo + cargo test --verbose --color always + cargo test --verbose --color always --features test-broken build: strategy: fail-fast: false diff --git a/ci/ci-tests.sh b/ci/ci-tests.sh index 1f6ffe0a86e..8e3edfa43a8 100755 --- a/ci/ci-tests.sh +++ b/ci/ci-tests.sh @@ -112,13 +112,6 @@ cargo check --verbose --color always [ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean popd -echo -e "\n\Running functional tests from outside the workspace" -pushd ext-functional-test-demo -[ "$RUSTC_MINOR_VERSION" -lt 65 ] && cargo update -p regex --precise "1.9.6" --verbose -cargo test --color always -[ "$CI_MINIMIZE_DISK_USAGE" != "" ] && cargo clean -popd - # Test that we can build downstream code with only the "release pins". pushd msrv-no-dev-deps-check PIN_RELEASE_DEPS diff --git a/ext-functional-test-demo/Cargo.toml b/ext-functional-test-demo/Cargo.toml index a3f6bde3d7c..85bd5a658cc 100644 --- a/ext-functional-test-demo/Cargo.toml +++ b/ext-functional-test-demo/Cargo.toml @@ -3,5 +3,8 @@ name = "ext-functional-tester" version = "0.1.0" edition = "2021" +[features] +test-broken = [] + [dependencies] lightning = { path = "../lightning", features = ["_externalize_tests"] } diff --git a/ext-functional-test-demo/src/main.rs b/ext-functional-test-demo/src/main.rs index 4636e115015..943bacf85d4 100644 --- a/ext-functional-test-demo/src/main.rs +++ b/ext-functional-test-demo/src/main.rs @@ -3,7 +3,9 @@ fn main() { } #[cfg(test)] +#[allow(unused)] mod tests { + use lightning::ln::functional_tests::*; use lightning::util::dyn_signer::{DynKeysInterfaceTrait, DynSigner}; use lightning::util::test_utils::{TestSignerFactory, SIGNER_FACTORY}; use std::panic::catch_unwind; @@ -20,12 +22,40 @@ mod tests { } } + #[cfg(feature = "test-broken")] #[test] - fn test_functional() { - lightning::ln::functional_tests::test_insane_channel_opens(); - lightning::ln::functional_tests::fake_network_test(); - + fn test_broken() { SIGNER_FACTORY.set(Arc::new(BrokenSignerFactory())); - catch_unwind(|| lightning::ln::functional_tests::fake_network_test()).unwrap_err(); + catch_unwind(|| fake_network_test()).unwrap_err(); + } + + #[cfg(not(feature = "test-broken"))] + #[test] + fn test_default_one() { + test_htlc_on_chain_success(); + } + + #[cfg(not(feature = "test-broken"))] + #[test] + fn test_default_all() { + let mut failed_tests = Vec::new(); + for test in lightning::get_xtests() { + print!("Running test: {}", test.test_name); + let mut pass = catch_unwind(|| (test.test_fn)()).is_ok(); + if test.should_panic { + pass = !pass; + } + if !pass { + failed_tests.push(test.test_name); + } + } + if !failed_tests.is_empty() { + println!("Failed tests:"); + for test in failed_tests.iter() { + println!("- {}", test); + } + } + println!("Done with {} failures", failed_tests.len()); + assert!(failed_tests.is_empty()); } }