Merge pull request #9881 from Frauschi/f-297 #546
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 -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 |