Skip to content
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.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions .github/scripts/check-workflow-result.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
126 changes: 126 additions & 0 deletions .github/workflows/tcpdump.yml
Original file line number Diff line number Diff line change
@@ -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