From 02ff0ae2cc8dc3ae22a673f92d8efcbc47b3dd4f Mon Sep 17 00:00:00 2001 From: Artem Boldariev Date: Mon, 21 Jul 2025 16:39:46 +0300 Subject: [PATCH] WIP: QUIC dispatcher experiments --- tests/isc/meson.build | 1 + tests/isc/quic_dispatcher_test.c | 135 +++++++++++++++++++++++++++++++ 2 files changed, 136 insertions(+) create mode 100644 tests/isc/quic_dispatcher_test.c diff --git a/tests/isc/meson.build b/tests/isc/meson.build index f1f6ac573b..1b5fd7acec 100644 --- a/tests/isc/meson.build +++ b/tests/isc/meson.build @@ -69,6 +69,7 @@ endif if config.has('HAVE_LIBNGTCP2') isc_test += [ 'ngtcp2_integration', + 'quic_dispatcher', 'quic_session', 'quic_tls', ] diff --git a/tests/isc/quic_dispatcher_test.c b/tests/isc/quic_dispatcher_test.c new file mode 100644 index 0000000000..14fccd64f6 --- /dev/null +++ b/tests/isc/quic_dispatcher_test.c @@ -0,0 +1,135 @@ +/* + * Copyright (C) Internet Systems Consortium, Inc. ("ISC") + * + * SPDX-License-Identifier: MPL-2.0 + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, you can obtain one at https://mozilla.org/MPL/2.0/. + * + * See the COPYRIGHT file distributed with this work for additional + * information regarding copyright ownership. + */ + +#include +#include /* IWYU pragma: keep */ +#include +#include +#include +#include + +#define UNIT_TESTING +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +static struct call_rcu_data *thread_call_rcu_data = NULL; + +static isc_mem_t *mctx = NULL; + +static isc_tlsctx_t *default_server_tlsctx = NULL; +static isc_tlsctx_t *default_client_tlsctx = NULL; + +ISC_RUN_TEST_IMPL(quic_dispatcher_noop_test) { + isc_quic_cid_map_t *map = NULL; + isc_quic_cid_map_create(mctx, &map); + + isc_quic_cid_map_detach(&map); +} + +static isc_tlsctx_t * +create_quic_tls_context(const bool is_server, + const isc_tls_quic_interface_t *iface) { + isc_tlsctx_t *tlsctx = NULL; + isc_result_t result; + + if (is_server) { + result = isc_tlsctx_createserver(NULL, NULL, &tlsctx); + } else { + result = isc_tlsctx_createclient(&tlsctx); + } + + if (result != ISC_R_SUCCESS) { + return NULL; + } + + isc_tlsctx_set_random_session_id_context(tlsctx); + isc_tlsctx_quic_configure(tlsctx, iface); + + return tlsctx; +} + +static int +quic_dispatcher_test_setup(void **state) { + UNUSED(state); + + default_server_tlsctx = create_quic_tls_context( + true, isc_tls_get_default_quic_interface()); + + if (default_server_tlsctx == NULL) { + return -1; + } + + default_client_tlsctx = create_quic_tls_context( + false, isc_tls_get_default_quic_interface()); + + if (default_client_tlsctx == NULL) { + return -1; + } + + return 0; +} + +static int +quic_dispatcher_test_teardown(void **state) { + UNUSED(state); + + isc_tlsctx_free(&default_client_tlsctx); + isc_tlsctx_free(&default_server_tlsctx); + + return 0; +} + +static int +quic_dispatcher_testset_setup(void **state) { + UNUSED(state); + + set_thread_call_rcu_data(thread_call_rcu_data); + + isc_tls_quic_crypto_initialize(); + + isc_mem_create("testctx", &mctx); + + return 0; +} + +static int +quic_dispatcher_testset_teardown(void **state) { + UNUSED(state); + + isc_mem_detach(&mctx); + + isc_tls_quic_crypto_shutdown(); + + set_thread_call_rcu_data(NULL); + + return 0; +} + +ISC_TEST_LIST_START +ISC_TEST_ENTRY_CUSTOM(quic_dispatcher_noop_test, quic_dispatcher_test_setup, + quic_dispatcher_test_teardown) +ISC_TEST_LIST_END + +ISC_TEST_MAIN_CUSTOM(quic_dispatcher_testset_setup, + quic_dispatcher_testset_teardown);