diff options
author | Matt Caswell <matt@openssl.org> | 2023-09-19 12:21:27 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2023-09-22 13:56:43 +0100 |
commit | b1584a85d07fdf1cfaa7423392fba439f7b6b0ac (patch) | |
tree | dec4f66f47c3e6dc70490828615d4364fd958be4 /test | |
parent | 35bd8a60043bde500f777e465530076524d2534a (diff) |
Extend the noisy dgram test so that packets are also affected by noise
Where multiple packets are in a single datagram we split them so that all
packets can be affected by the noise
Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22157)
Diffstat (limited to 'test')
-rw-r--r-- | test/helpers/quictestlib.c | 8 | ||||
-rw-r--r-- | test/helpers/quictestlib.h | 2 | ||||
-rw-r--r-- | test/quicapitest.c | 21 |
3 files changed, 26 insertions, 5 deletions
diff --git a/test/helpers/quictestlib.c b/test/helpers/quictestlib.c index 6381d720ff..3c3cb73f96 100644 --- a/test/helpers/quictestlib.c +++ b/test/helpers/quictestlib.c @@ -141,6 +141,14 @@ int qtest_create_quic_objects(OSSL_LIB_CTX *libctx, SSL_CTX *clientctx, goto err; } + if ((flags & QTEST_FLAG_PACKET_SPLIT) != 0) { + BIO *pktsplitbio = BIO_new(bio_f_pkt_split_dgram_filter()); + + if (!TEST_ptr(pktsplitbio)) + goto err; + cbio = BIO_push(pktsplitbio, cbio); + } + if ((flags & QTEST_FLAG_NOISE) != 0) { BIO *noisebio = BIO_new(bio_f_noisy_dgram_filter()); diff --git a/test/helpers/quictestlib.h b/test/helpers/quictestlib.h index f18cd29481..4e61b8965d 100644 --- a/test/helpers/quictestlib.h +++ b/test/helpers/quictestlib.h @@ -32,6 +32,8 @@ typedef struct qtest_fault_encrypted_extensions { #define QTEST_FLAG_FAKE_TIME (1 << 1) /* Introduce noise in the BIO */ #define QTEST_FLAG_NOISE (1 << 2) +/* Split datagrams such that each datagram contains one packet */ +#define QTEST_FLAG_PACKET_SPLIT (1 << 3) /* * Given an SSL_CTX for the client and filenames for the server certificate and diff --git a/test/quicapitest.c b/test/quicapitest.c index 023738a22b..cd006b4703 100644 --- a/test/quicapitest.c +++ b/test/quicapitest.c @@ -1301,7 +1301,15 @@ static int unreliable_server_read(QUIC_TSERVER *qtserv, uint64_t sid, return 0; } -static int test_noisy_dgram(void) +/* + * Create a connection and send data using an unreliable transport. We introduce + * random noise to drop, delay and duplicate datagrams. + * Test 0: Introduce random noise to datagrams + * Test 1: As with test 0 but also split datagrams containing multiple packets + * into individual datagrams so that individual packets can be affected + * by noise - not just a whole datagram. + */ +static int test_noisy_dgram(int idx) { SSL_CTX *cctx = SSL_CTX_new_ex(libctx, NULL, OSSL_QUIC_client_method()); SSL *clientquic = NULL, *stream[2] = { NULL, NULL }; @@ -1311,12 +1319,14 @@ static int test_noisy_dgram(void) char *msg = "Hello world!"; size_t msglen = strlen(msg), written, readbytes, i, j; unsigned char buf[80]; + int flags = QTEST_FLAG_NOISE | QTEST_FLAG_FAKE_TIME; + + if (idx == 1) + flags |= QTEST_FLAG_PACKET_SPLIT; if (!TEST_ptr(cctx) || !TEST_true(qtest_create_quic_objects(libctx, cctx, NULL, cert, - privkey, - QTEST_FLAG_NOISE - | QTEST_FLAG_FAKE_TIME, + privkey, flags, &qtserv, &clientquic, NULL))) goto err; @@ -1470,7 +1480,7 @@ int setup_tests(void) ADD_ALL_TESTS(test_non_io_retry, 2); ADD_TEST(test_quic_psk); ADD_ALL_TESTS(test_alpn, 2); - ADD_TEST(test_noisy_dgram); + ADD_ALL_TESTS(test_noisy_dgram, 2); return 1; err: @@ -1481,6 +1491,7 @@ int setup_tests(void) void cleanup_tests(void) { bio_f_noisy_dgram_filter_free(); + bio_f_pkt_split_dgram_filter_free(); OPENSSL_free(cert); OPENSSL_free(privkey); OSSL_PROVIDER_unload(defctxnull); |