Skip to content

Run openssl quic interop testing #481

Run openssl quic interop testing

Run openssl quic interop testing #481

name: "Run openssl quic interop testing"
on:
schedule:
- cron: '40 02 * * *'
workflow_dispatch:
inputs:
only_interop:
type: boolean
required: false
default: false
description: "Run only interop jobs (skip building/pushing containers)"
permissions: {}
jobs:
update_quay_container:
if: ${{ github.repository == 'openssl/openssl' && !inputs.only_interop }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
persist-credentials: false
- name: "log in to quay.io"
run: |
docker login -u openssl-ci+machine -p ${{ secrets.QUAY_IO_PASSWORD }} quay.io
- name: "Build container"
run: |
cd test/quic-openssl-docker/
docker build -t quay.io/openssl-ci/openssl-quic-interop:latest .
- name: "Push to quay"
run: |
docker push quay.io/openssl-ci/openssl-quic-interop:latest
update_msquic_quay_container:
if: ${{ github.repository == 'openssl/openssl' && !inputs.only_interop }}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
repository: microsoft/msquic
ref: main
submodules: recursive
persist-credentials: false
- name: "log in to quay.io"
run: |
docker login -u openssl-ci+machine -p ${{ secrets.QUAY_IO_PASSWORD }} quay.io
- name: Patch qns.Dockerfile
run: |
sed -i 's/RUN cmake -DQUIC_BUILD_TOOLS=on -DQUIC_ENABLE_LOGGING=on ../RUN cmake -DQUIC_BUILD_TOOLS=on -DQUIC_ENABLE_LOGGING=on -DQUIC_TLS_LIB=openssl ../' ./scripts/qns.Dockerfile
if grep -q "RUN cmake -DQUIC_BUILD_TOOLS=on -DQUIC_ENABLE_LOGGING=on -DQUIC_TLS_LIB=openssl .." ./scripts/qns.Dockerfile; then echo "Patched successfully"; else exit 1; fi
- name: "Build container"
run: |
docker build -f ./scripts/qns.Dockerfile -t quay.io/openssl-ci/msquic-openssl:latest .
- name: "Push to quay"
run: |
docker push quay.io/openssl-ci/msquic-openssl:latest
run_quic_interop_openssl_client:
if: ${{ !inputs.only_interop }}
needs: [update_quay_container, update_msquic_quay_container]
runs-on: ubuntu-latest
strategy:
matrix:
tests: [http3, transfer, handshake, retry, chacha20, resumption, multiplexing, ipv6]
servers: [quic-go, ngtcp2, mvfst, quiche, nginx, msquic, haproxy, msquic-openssl]
exclude:
- servers: msquic
tests: retry
- servers: msquic-openssl
tests: retry
fail-fast: false
steps: &client_steps
- uses: actions/checkout@v5
with:
repository: 'quic-interop/quic-interop-runner'
fetch-depth: 0
persist-credentials: false
- name: Install python requirements
run: |
for i in {1..3}; do pip install -r requirements.txt && break; sleep 10; done
- name: Add tshark repo
run: |
for i in {1..3}; do sudo add-apt-repository ppa:wireshark-dev/stable && break; sleep 10; done
- name: Update apt repos
run: |
for i in {1..3}; do sudo apt-get update && break; sleep 10; done
- name: Install tshark
run: |
for i in {1..3}; do sudo apt-get install -y tshark && break; sleep 10; done
- name: Patch implementations file
run: |
jq '. + {
"openssl": { image: "quay.io/openssl-ci/openssl-quic-interop"
, url: "https://github.com/openssl/openssl"
, role: "both"
},
"msquic-openssl": { image: "quay.io/openssl-ci/msquic-openssl"
, url: "https://github.com/microsoft/msquic"
, role: "both"
}}' ./implementations.json > ./implementations.tmp
mv ./implementations.tmp implementations.json
- name: Set up docker
uses: docker/setup-docker-action@efe9e3891a4f7307e689f2100b33a155b900a608 # v4.5.0
with:
version: "28.1.1"
- name: Set up docker compose
uses: docker/setup-compose-action@364cc21a5de5b1ee4a7f5f9d3fa374ce0ccde746 # v1.2.0
with:
version: "v2.36.2"
- name: Check docker version
run: |
docker version
docker compose version
- name: "Run interop with openssl client"
run: |
python3 ./run.py -c openssl -t ${{ matrix.tests }} -s ${{ matrix.servers }} --log-dir ./logs-client -d
run_quic_interop_openssl_server:
if: ${{ !inputs.only_interop }}
needs: [update_quay_container, update_msquic_quay_container]
runs-on: ubuntu-latest
strategy:
matrix:
tests: [http3, transfer, handshake, retry, chacha20, resumption, amplificationlimit, ipv6]
clients: [quic-go, ngtcp2, mvfst, quiche, msquic, openssl, chrome, msquic-openssl]
exclude:
- clients: mvfst
tests: amplificationlimit
fail-fast: false
steps: &server_steps
- uses: actions/checkout@v5
with:
repository: 'quic-interop/quic-interop-runner'
fetch-depth: 0
persist-credentials: false
- name: Install python requirements
run: |
for i in {1..3}; do pip install -r requirements.txt && break; done
- name: Add tshark repo
run: |
for i in {1..3}; do sudo add-apt-repository ppa:wireshark-dev/stable && break; done
- name: Update apt repos
run: |
for i in {1..3}; do sudo apt-get update && break; done
- name: Install tshark
run: |
for i in {1..3}; do sudo apt-get install -y tshark && break; done
- name: Patch implementations file
run: |
jq '. + {
"openssl": { image: "quay.io/openssl-ci/openssl-quic-interop"
, url: "https://github.com/openssl/openssl"
, role: "both"
},
"msquic-openssl": { image: "quay.io/openssl-ci/msquic-openssl"
, url: "https://github.com/microsoft/msquic"
, role: "both"
}}' ./implementations.json > ./implementations.tmp
mv ./implementations.tmp implementations.json
- name: Set up docker
uses: docker/setup-docker-action@efe9e3891a4f7307e689f2100b33a155b900a608 # v4.5.0
with:
version: "28.1.1"
- name: Set up docker compose
uses: docker/setup-compose-action@364cc21a5de5b1ee4a7f5f9d3fa374ce0ccde746 # v1.2.0
with:
version: "v2.36.2"
- name: Check docker version
run: |
docker version
docker compose version
- name: "Run interop with openssl server"
run: |
python3 ./run.py -s openssl -t "${{ matrix.tests }}" -c "${{ matrix.clients }}" --log-dir ./logs-server -d
run_quic_interop_openssl_client_only:
if: ${{ inputs.only_interop }}
runs-on: ubuntu-latest
strategy:
matrix:
tests: [http3, transfer, handshake, retry, chacha20, resumption, multiplexing, ipv6]
servers: [quic-go, ngtcp2, mvfst, quiche, nginx, msquic, haproxy, msquic-openssl]
exclude:
- servers: msquic
tests: retry
- servers: msquic-openssl
tests: retry
fail-fast: false
steps: *client_steps
run_quic_interop_openssl_server_only:
if: ${{ inputs.only_interop }}
runs-on: ubuntu-latest
strategy:
matrix:
tests: [http3, transfer, handshake, retry, chacha20, resumption, amplificationlimit, ipv6]
clients: [quic-go, ngtcp2, mvfst, quiche, msquic, openssl, chrome, msquic-openssl]
exclude:
- clients: mvfst
tests: amplificationlimit
fail-fast: false
steps: *server_steps