mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2026-07-06 01:30:49 +02:00
585a1ecaaf
* ensure make -j is called everywhere * shallow clones where possible * set fixed ubuntu version for linux tests
112 lines
3.4 KiB
YAML
112 lines
3.4 KiB
YAML
name: Async Examples
|
|
|
|
on:
|
|
push:
|
|
branches: [ 'master', 'main', 'release/**' ]
|
|
pull_request:
|
|
branches: [ '*' ]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
async_examples:
|
|
if: github.repository_owner == 'wolfssl'
|
|
runs-on: ubuntu-24.04
|
|
timeout-minutes: 10
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
async_mode: ['sw', 'cryptocb']
|
|
extra_cflags:
|
|
- ''
|
|
- '-DWOLFSSL_SMALL_CERT_VERIFY'
|
|
- '-DWOLFSSL_STATIC_MEMORY'
|
|
name: Async Examples (${{ matrix.async_mode }}, ${{ matrix.extra_cflags || 'default' }})
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
name: Checkout wolfSSL
|
|
|
|
- name: Build async examples (no configure)
|
|
run: |
|
|
make -C examples/async clean
|
|
make -j -C examples/async ASYNC_MODE=${{ matrix.async_mode }} EXTRA_CFLAGS="${{ matrix.extra_cflags }}"
|
|
|
|
- name: Run async examples
|
|
run: |
|
|
set -euo pipefail
|
|
|
|
ASYNC_MODE="${{ matrix.async_mode }}"
|
|
MIN_PENDING=100
|
|
|
|
run_pair() {
|
|
local label="$1"
|
|
shift
|
|
local args="$*"
|
|
local ready="/tmp/wolfssl_async_ready_${label}"
|
|
rm -f "$ready"
|
|
|
|
WOLFSSL_ASYNC_READYFILE="$ready" \
|
|
./examples/async/async_server $args \
|
|
> "/tmp/async_server_${label}.log" 2>&1 &
|
|
local pid=$!
|
|
|
|
WOLFSSL_ASYNC_READYFILE="$ready" \
|
|
./examples/async/async_client $args 127.0.0.1 11111 \
|
|
> "/tmp/async_client_${label}.log" 2>&1
|
|
local rc=$?
|
|
|
|
kill "$pid" >/dev/null 2>&1 || true
|
|
wait "$pid" >/dev/null 2>&1 || true
|
|
|
|
if [ "$rc" -ne 0 ]; then
|
|
echo "FAIL: $label (exit=$rc)"
|
|
return 1
|
|
fi
|
|
|
|
# Validate WC_PENDING_E count for sw mode only
|
|
# cryptocb mode uses callback pending which isn't tracked the same way
|
|
if [ "$ASYNC_MODE" = "sw" ]; then
|
|
local count
|
|
count=$(awk '/WC_PENDING_E count:/ {print $NF}' \
|
|
"/tmp/async_client_${label}.log")
|
|
if [ -z "$count" ] || [ "$count" -lt "$MIN_PENDING" ]; then
|
|
echo "FAIL: $label - WC_PENDING_E count too low:" \
|
|
"${count:-missing} (expected >= $MIN_PENDING)"
|
|
return 1
|
|
fi
|
|
echo "PASS: $label (WC_PENDING_E: $count)"
|
|
else
|
|
echo "PASS: $label (cryptocb mode - connection successful)"
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# TLS 1.3
|
|
run_pair ecc_tls13 --ecc
|
|
run_pair x25519_tls13 --x25519
|
|
|
|
# TLS 1.2
|
|
run_pair ecc_tls12 --tls12 --ecc
|
|
run_pair x25519_tls12 --tls12 --x25519
|
|
|
|
# TLS 1.3 mutual auth
|
|
run_pair ecc_tls13_mutual --mutual --ecc
|
|
run_pair x25519_tls13_mutual --mutual --x25519
|
|
|
|
# TLS 1.2 mutual auth
|
|
run_pair ecc_tls12_mutual --mutual --tls12 --ecc
|
|
run_pair x25519_tls12_mutual --mutual --tls12 --x25519
|
|
|
|
|
|
- name: Print async logs
|
|
if: ${{ failure() }}
|
|
run: |
|
|
for f in /tmp/async_server_*.log /tmp/async_client_*.log; do
|
|
if [ -f "$f" ]; then
|
|
echo "==> $f"
|
|
cat "$f"
|
|
fi
|
|
done
|