--- /dev/null
+# Copyright (C) Daniel Stenberg, <daniel@haxx.se>, et al.
+#
+# SPDX-License-Identifier: curl
+
+name: quiche
+
+on:
+ push:
+ branches:
+ - master
+ - '*/ci'
+ paths-ignore:
+ - '**/*.md'
+ - '**/CMakeLists.txt'
+ - '.azure-pipelines.yml'
+ - '.circleci/**'
+ - '.cirrus.yml'
+ - 'appveyor.yml'
+ - 'CMake/**'
+ - 'packages/**'
+ - 'plan9/**'
+ - 'projects/**'
+ - 'winbuild/**'
+ pull_request:
+ branches:
+ - master
+ paths-ignore:
+ - '**/*.md'
+ - '**/CMakeLists.txt'
+ - '.azure-pipelines.yml'
+ - '.circleci/**'
+ - '.cirrus.yml'
+ - 'appveyor.yml'
+ - 'CMake/**'
+ - 'packages/**'
+ - 'plan9/**'
+ - 'projects/**'
+ - 'winbuild/**'
+
+concurrency:
+ # Hardcoded workflow filename as workflow name above is just Linux again
+ group: quiche-${{ github.event.pull_request.number || github.sha }}
+ cancel-in-progress: true
+
+permissions: {}
+
+env:
+ MAKEFLAGS: -j 3
+
+jobs:
+ autotools:
+ name: ${{ matrix.build.name }}
+ runs-on: 'ubuntu-latest'
+ timeout-minutes: 60
+ strategy:
+ fail-fast: false
+ matrix:
+ build:
+ - name: quiche
+ install: >-
+ libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev
+ openssl-version: 3.0.9+quic
+ nghttp3-version: v0.13.0
+ ngtcp2-version: v0.17.0
+ nghttp2-version: v1.55.1
+ quiche-version: 0.17.2
+ install_steps: pytest
+ configure: >-
+ LDFLAGS="-Wl,-rpath,/home/runner/quiche/target/release"
+ --with-openssl=/home/runner/quiche/quiche/deps/boringssl/src
+ --enable-debug
+ --with-quiche=/home/runner/quiche/target/release
+ --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx"
+
+ steps:
+ - run: |
+ sudo apt-get update
+ sudo apt-get install libtool autoconf automake pkg-config stunnel4 ${{ matrix.build.install }}
+ sudo apt-get install apache2 apache2-dev
+ name: 'install prereqs and impacket, pytest, crypto'
+
+ - name: cache nghttpx
+ uses: actions/cache@v3
+ id: cache-nghttpx
+ env:
+ cache-name: cache-nghttpx
+ with:
+ path: /home/runner/nghttpx
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-openssl-${{ matrix.build.openssl-version }}-nghttp3-${{ matrix.build.nghttp3-version }}-ngtcp2-${{ matrix.build.ngtcp2-version }}-nghttp2-${{ matrix.build.nghttp2-version }}
+
+ - if: steps.cache-nghttpx.outputs.cache-hit != 'true'
+ run: |
+ git clone --quiet --depth=1 -b openssl-${{ matrix.build.openssl-version }} https://github.com/quictls/openssl
+ cd openssl
+ ./config --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib
+ make -j1 install_sw
+ name: 'install quictls'
+
+ - if: steps.cache-nghttpx.outputs.cache-hit != 'true'
+ run: |
+ git clone --quiet --depth=1 -b ${{ matrix.build.nghttp3-version }} https://github.com/ngtcp2/nghttp3
+ cd nghttp3
+ autoreconf -fi
+ ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only
+ make install
+ name: 'install nghttp3'
+
+ - if: steps.cache-nghttpx.outputs.cache-hit != 'true'
+ run: |
+ git clone --quiet --depth=1 -b ${{ matrix.build.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2
+ cd ngtcp2
+ autoreconf -fi
+ ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl
+ make install
+ name: 'install ngtcp2'
+
+ - if: steps.cache-nghttpx.outputs.cache-hit != 'true'
+ run: |
+ git clone --quiet --depth=1 -b ${{ matrix.build.nghttp2-version }} https://github.com/nghttp2/nghttp2
+ cd nghttp2
+ autoreconf -fi
+ ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3
+ make install
+ name: 'install nghttp2'
+
+ - name: cache quiche
+ uses: actions/cache@v3
+ id: cache-quiche
+ env:
+ cache-name: cache-quiche
+ with:
+ path: /home/runner/quiche
+ key: ${{ runner.os }}-build-${{ env.cache-name }}-quiche-${{ matrix.build.quiche-version }}
+
+ - if: steps.cache-quiche.outputs.cache-hit != 'true'
+ run: |
+ cd $HOME
+ git clone --quiet --depth=1 -b ${{ matrix.build.quiche-version }} --recursive https://github.com/cloudflare/quiche.git
+ cd quiche
+ #### Work-around https://github.com/curl/curl/issues/7927 #######
+ #### See https://github.com/alexcrichton/cmake-rs/issues/131 ####
+ sed -i -e 's/cmake = "0.1"/cmake = "=0.1.45"/' quiche/Cargo.toml
+
+ cargo build -v --package quiche --release --features ffi,pkg-config-meta,qlog --verbose
+ mkdir -v quiche/deps/boringssl/src/lib
+ ln -vnf $(find target/release -name libcrypto.a -o -name libssl.a) quiche/deps/boringssl/src/lib/
+
+ # include dir
+ # /home/runner/quiche/quiche/deps/boringssl/src/include
+ # lib dir
+ # /home/runner/quiche/quiche/deps/boringssl/src/lib
+ name: 'build quiche and boringssl'
+
+ - if: ${{ contains(matrix.build.install_steps, 'pytest') }}
+ run: |
+ sudo apt-get install apache2 apache2-dev libnghttp2-dev
+ git clone --quiet --depth=1 -b master https://github.com/icing/mod_h2
+ cd mod_h2
+ autoreconf -fi
+ ./configure
+ make
+ sudo make install
+ name: 'install apach2-dev and mod-h2'
+
+ - uses: actions/checkout@v3
+
+ - run: |
+ sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt
+ name: 'install python test prereqs'
+
+ - run: autoreconf -fi
+ name: 'autoreconf'
+
+ - run: ./configure ${{ matrix.build.configure }}
+ name: 'configure'
+
+ - run: make V=1
+ name: 'make'
+
+ - run: make V=1 examples
+ name: 'make examples'
+
+ - run: make V=1 -C tests
+ name: 'make tests'
+
+ - run: make V=1 test-ci
+ name: 'run tests'
+ env:
+ TFLAGS: "${{ matrix.build.tflags }}"
+
+ - run: pytest -v tests/http
+ name: 'run pytest'
+ env:
+ TFLAGS: "${{ matrix.build.tflags }}"
def test_14_05_basic_large_pw(self, env: Env, httpd, nghttpx, repeat, proto):
if proto == 'h3' and not env.have_h3():
pytest.skip("h3 not supported")
+ if proto == 'h3' and env.curl_uses_lib('quiche'):
+ # See <https://github.com/cloudflare/quiche/issues/1573>
+ pytest.skip("quiche has problems with large requests")
# just large enought that nghttp2 will submit
password = 'x' * (47 * 1024)
fdata = os.path.join(env.gen_dir, 'data-10m')
def test_14_06_basic_very_large_pw(self, env: Env, httpd, nghttpx, repeat, proto):
if proto == 'h3' and not env.have_h3():
pytest.skip("h3 not supported")
- data='0123456789'
+ if proto == 'h3' and env.curl_uses_lib('quiche'):
+ # See <https://github.com/cloudflare/quiche/issues/1573>
+ pytest.skip("quiche has problems with large requests")
password = 'x' * (64 * 1024)
fdata = os.path.join(env.gen_dir, 'data-10m')
curl = CurlClient(env=env)