From 6f95d0dad003a4c3b37f1b3ceeb4689fc4fb89f3 Mon Sep 17 00:00:00 2001 From: Amaury Denoyelle Date: Wed, 5 Mar 2025 10:24:44 +0100 Subject: [PATCH] TESTS: quic: create first quic unittest Define a first unit-test dedicated to QUIC. A single test for now ensures that variable length decoding is compliant. This should be extended in the future with new set of tests. --- Makefile | 2 +- src/quic_enc.c | 32 ++++++++++++++++++++++++++++++++ tests/unit/quic/quic.sh | 18 ++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 src/quic_enc.c create mode 100755 tests/unit/quic/quic.sh diff --git a/Makefile b/Makefile index c43d83cb2..759f91f72 100644 --- a/Makefile +++ b/Makefile @@ -657,7 +657,7 @@ OPTIONS_OBJS += src/mux_quic.o src/h3.o src/quic_rx.o src/quic_tx.o \ src/quic_cc_nocc.o src/quic_cc.o src/quic_pacing.o \ src/h3_stats.o src/quic_stats.o src/qpack-enc.o \ src/qpack-tbl.o src/quic_cc_drs.o src/quic_fctl.o \ - src/cbuf.o + src/cbuf.o src/quic_enc.o endif ifneq ($(USE_QUIC_OPENSSL_COMPAT:0=),) diff --git a/src/quic_enc.c b/src/quic_enc.c new file mode 100644 index 000000000..3dd7bd60d --- /dev/null +++ b/src/quic_enc.c @@ -0,0 +1,32 @@ +#include + +#include + +int quic_enc_unittest(int argc, char **argv) +{ + const uint8_t init = 4; + + uint64_t val = 0; + struct buffer b; + char area[12]; + size_t len; + + int ret = 1; + + b = b_make(area, sizeof(area), sizeof(area) - 2, 0); + /* encode an 8-bit integer as a 4 bytes long varint */ + b_putblk(&b, (char[]){0x80, 0x00, 0x00, init}, 4); + /* ensure encoded data is wrapping inside buffer */ + BUG_ON(b_data(&b) != b_contig_data(&b, b_head_ofs(&b))); + + /* test that b_quic_dec_int() can decode a wrapping value */ + b_quic_dec_int(&val, &b, &len); + if (val != init) + goto out; + + ret = 0; + + out: + return ret; +} +REGISTER_UNITTEST("quic_enc", quic_enc_unittest); diff --git a/tests/unit/quic/quic.sh b/tests/unit/quic/quic.sh new file mode 100755 index 000000000..ecea5d550 --- /dev/null +++ b/tests/unit/quic/quic.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +check() { + ${HAPROXY_PROGRAM} -vv | grep -E '^Unit tests list :' | grep -q "quic" +} + +run() { + ${HAPROXY_PROGRAM} -U quic_enc +} + +case "$1" in + "check") + check + ;; + "run") + run + ;; +esac