diff --git a/.github/scripts/check-workflow-result.sh b/.github/scripts/check-workflow-result.sh index e168b63f..351d7bd7 100755 --- a/.github/scripts/check-workflow-result.sh +++ b/.github/scripts/check-workflow-result.sh @@ -256,6 +256,21 @@ if [ "$WOLFPROV_FORCE_FAIL" = "WOLFPROV_FORCE_FAIL=1" ]; then else echo "Error: liboauth2-test.log not found" fi + # ----- TCPDUMP ----- + elif [ "$TEST_SUITE" = "tcpdump" ]; then + if [ -f "tcpdump-test.log" ]; then + # Check for expected 7 failed tests (ESP/crypto segfaults) + if grep -q "7 tests failed" tcpdump-test.log; then + echo "PASS: tcpdump tests failed as expected with force fail enabled (7 tests failed)" + exit 0 + else + echo "FAIL: tcpdump tests did not fail as expected (should have 7 failed tests)" + exit 1 + fi + else + echo "Error: tcpdump-test.log not found" + exit 1 + fi # ----- IPERF ----- elif [ "$TEST_SUITE" = "iperf" ]; then IPERF_TEST_LOG="iperf-test.log" diff --git a/.github/workflows/tcpdump.yml b/.github/workflows/tcpdump.yml new file mode 100644 index 00000000..409b40a7 --- /dev/null +++ b/.github/workflows/tcpdump.yml @@ -0,0 +1,126 @@ +name: tcpdump Tests + +on: + push: + branches: [ 'master', 'main', 'release/**' ] + pull_request: + branches: [ '*' ] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + build_wolfprovider: + uses: ./.github/workflows/build-wolfprovider.yml + with: + wolfssl_ref: ${{ matrix.wolfssl_ref }} + openssl_ref: ${{ matrix.openssl_ref }} + strategy: + matrix: + wolfssl_ref: [ 'master', 'v5.8.0-stable' ] + openssl_ref: [ 'openssl-3.5.0' ] + + test_tcpdump: + runs-on: ubuntu-22.04 + needs: build_wolfprovider + timeout-minutes: 15 + strategy: + matrix: + wolfssl_ref: [ 'master', 'v5.8.0-stable' ] + openssl_ref: [ 'openssl-3.5.0' ] + tcpdump_ref: [ 'master', 'tcpdump-4.99.3' ] + force_fail: [ 'WOLFPROV_FORCE_FAIL=1', '' ] + exclude: + - tcpdump_ref: 'master' + force_fail: 'WOLFPROV_FORCE_FAIL=1' + + steps: + - name: Checkout wolfProvider + uses: actions/checkout@v4 + + - name: Retrieve OpenSSL from cache + uses: actions/cache/restore@v4 + id: openssl-cache + with: + path: | + openssl-source + openssl-install + key: ossl-depends-${{ matrix.openssl_ref }}-${{ github.sha }} + fail-on-cache-miss: true + + - name: Retrieve wolfSSL/wolfProvider from cache + uses: actions/cache/restore@v4 + id: wolfprov-cache + with: + path: | + wolfssl-source + wolfssl-install + wolfprov-install + provider.conf + key: wolfprov-${{ matrix.wolfssl_ref }}-${{ github.sha }} + fail-on-cache-miss: true + + - name: Install test dependencies + run: | + sudo apt-get update + sudo apt-get install -y build-essential flex bison autoconf libtool + + - name: Checkout libpcap + uses: actions/checkout@v4 + with: + repository: the-tcpdump-group/libpcap + path: libpcap_repo + # Compiling tcpdump from source explicitly requires a built libpcap installation + - name: Build and install libpcap + working-directory: libpcap_repo + run: | + ./autogen.sh + ./configure --prefix=$GITHUB_WORKSPACE/libpcap-install + make -j$(nproc) + make install + + - name: Checkout tcpdump + uses: actions/checkout@v4 + with: + repository: the-tcpdump-group/tcpdump + path: tcpdump_repo + ref: ${{ matrix.tcpdump_ref }} + + - name: Build and install tcpdump + working-directory: tcpdump_repo + run: | + if [ -f ./autogen.sh ]; then + ./autogen.sh + elif [ ! -f ./configure ]; then + autoreconf -fiv + fi + export PKG_CONFIG_PATH=$GITHUB_WORKSPACE/libpcap-install/lib/pkgconfig:$PKG_CONFIG_CONFIG:$PKG_CONFIG_PATH + ./configure --prefix=$GITHUB_WORKSPACE/tcpdump-install --with-pcap=$GITHUB_WORKSPACE/libpcap-install + make -j$(nproc) + make install + + - name: Run tcpdump tests + working-directory: tcpdump_repo + run: | + export LD_LIBRARY_PATH="$GITHUB_WORKSPACE/wolfssl-install/lib:$GITHUB_WORKSPACE/openssl-install/lib:$GITHUB_WORKSPACE/openssl-install/lib64:$GITHUB_WORKSPACE/libpcap-install/lib:$GITHUB_WORKSPACE/tcpdump-install/lib:$LD_LIBRARY_PATH" + export OPENSSL_CONF="$GITHUB_WORKSPACE/provider.conf" + export OPENSSL_MODULES="$GITHUB_WORKSPACE/wolfprov-install/lib" + export PKG_CONFIG_PATH="$GITHUB_WORKSPACE/openssl-install/lib64/pkgconfig:$GITHUB_WORKSPACE/libpcap-install/lib/pkgconfig:$PKG_CONFIG_PATH" + export PATH="$GITHUB_WORKSPACE/tcpdump-install/sbin:$GITHUB_WORKSPACE/tcpdump-install/bin:$PATH" + + export ${{ matrix.force_fail }} + + echo "Checking OpenSSL providers:" + $GITHUB_WORKSPACE/openssl-install/bin/openssl list -providers | tee provider-list.log + grep libwolfprov provider-list.log || (echo "ERROR: libwolfprov not found in OpenSSL providers" && exit 1) + + # Run tests + make check 2>&1 | tee tcpdump-test.log + TEST_RESULT=$? + + if [ $TEST_RESULT -ne 0 ]; then + grep -A2 -B2 "exit code\|failed\|FAILED" tcpdump-test.log || true + fi + + $GITHUB_WORKSPACE/.github/scripts/check-workflow-result.sh $TEST_RESULT ${{ matrix.force_fail }} tcpdump +