summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2023-09-19 12:21:27 +0100
committerMatt Caswell <matt@openssl.org>2023-09-22 13:56:43 +0100
commitb1584a85d07fdf1cfaa7423392fba439f7b6b0ac (patch)
treedec4f66f47c3e6dc70490828615d4364fd958be4
parent35bd8a60043bde500f777e465530076524d2534a (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)
-rw-r--r--test/helpers/quictestlib.c8
-rw-r--r--test/helpers/quictestlib.h2
-rw-r--r--test/quicapitest.c21
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);