]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
Add PROXYv2 related checks to DNS over HTTP(S) unit test suite
authorArtem Boldariev <artem@boldariev.com>
Thu, 11 May 2023 13:53:16 +0000 (16:53 +0300)
committerArtem Boldariev <artem@boldariev.com>
Wed, 6 Dec 2023 13:15:24 +0000 (15:15 +0200)
This commit extends DNS over HTTP(S) unit test suite with PROXYv2
related checks to ensure that the transport is compatible with that
mode.

tests/isc/doh_test.c

index 6e46abe91795eb70de3d72cc7ef89be66ebd67c0..03bcbf557df739d3a99168c5001faa8c2ac45eeb 100644 (file)
@@ -133,6 +133,21 @@ static isc_nm_t **nm = NULL;
 #define X(v)
 #endif
 
+static void
+proxy_verify_unspec_endpoint(isc_nmhandle_t *handle) {
+       isc_sockaddr_t real_local, real_peer, local, peer;
+
+       if (isc_nm_is_proxy_unspec(handle)) {
+               peer = isc_nmhandle_peeraddr(handle);
+               local = isc_nmhandle_localaddr(handle);
+               real_peer = isc_nmhandle_real_peeraddr(handle);
+               real_local = isc_nmhandle_real_localaddr(handle);
+
+               assert_true(isc_sockaddr_equal(&peer, &real_peer));
+               assert_true(isc_sockaddr_equal(&local, &real_local));
+       }
+}
+
 typedef struct csdata {
        isc_mem_t *mctx;
        isc_nm_recv_cb_t reply_cb;
@@ -305,6 +320,7 @@ setup_test(void **state) {
 
        atomic_store(&POST, false);
        atomic_store(&use_TLS, false);
+       atomic_store(&use_PROXY, false);
 
        noanswer = false;
 
@@ -397,6 +413,9 @@ doh_receive_reply_cb(isc_nmhandle_t *handle, isc_result_t eresult,
        UNUSED(region);
 
        if (eresult == ISC_R_SUCCESS) {
+               if (atomic_load(&use_PROXY)) {
+                       assert_true(isc_nm_is_proxy_handle(handle));
+               }
                (void)atomic_fetch_sub(&nsends, 1);
                if (have_expected_csends(atomic_fetch_add(&csends, 1) + 1) ||
                    have_expected_creads(atomic_fetch_add(&creads, 1) + 1))
@@ -432,6 +451,11 @@ doh_receive_request_cb(isc_nmhandle_t *handle, isc_result_t eresult,
                return;
        }
 
+       if (atomic_load(&use_PROXY)) {
+               assert_true(isc_nm_is_proxy_handle(handle));
+               proxy_verify_unspec_endpoint(handle);
+       }
+
        atomic_fetch_add(&sreads, 1);
 
        memmove(tcp_buffer_storage + tcp_buffer_length, region->base,
@@ -1780,6 +1804,197 @@ ISC_RUN_TEST_IMPL(doh_connect_makeuri) {
        assert_true(strcmp("https://[::1]:44343/dns-query", uri) == 0);
 }
 
+/* PROXY */
+ISC_LOOP_TEST_IMPL(proxy_doh_noop_POST) {
+       atomic_store(&POST, true);
+       atomic_store(&use_PROXY, true);
+       doh_noop(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_noop_GET) {
+       atomic_store(&use_PROXY, true);
+       doh_noop(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_noresponse_POST) {
+       atomic_store(&POST, true);
+       atomic_store(&use_PROXY, true);
+       doh_noresponse(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_noresponse_GET) {
+       atomic_store(&use_PROXY, true);
+       doh_noresponse(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_timeout_recovery_POST) {
+       atomic_store(&POST, true);
+       atomic_store(&use_PROXY, true);
+       doh_timeout_recovery(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_timeout_recovery_GET) {
+       atomic_store(&use_PROXY, true);
+       doh_timeout_recovery(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_one_POST) {
+       atomic_store(&POST, true);
+       atomic_store(&use_PROXY, true);
+       doh_recv_one(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_one_GET) {
+       atomic_store(&use_PROXY, true);
+       doh_recv_one(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_one_POST_TLS) {
+       atomic_store(&POST, true);
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       doh_recv_one(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_one_GET_TLS) {
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       doh_recv_one(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_one_POST_quota) {
+       atomic_store(&POST, true);
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_one(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_one_GET_quota) {
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_one(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_one_GET_TLS_quota) {
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_one(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_one_POST_TLS_quota) {
+       atomic_store(&POST, true);
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_one(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_two_POST) {
+       atomic_store(&POST, true);
+       atomic_store(&use_PROXY, true);
+       doh_recv_two(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_two_GET) {
+       ;
+       atomic_store(&use_PROXY, true);
+       doh_recv_two(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_two_POST_TLS) {
+       atomic_store(&POST, true);
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       doh_recv_two(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_two_GET_TLS) {
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       doh_recv_two(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_two_POST_quota) {
+       atomic_store(&POST, true);
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_two(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_two_GET_quota) {
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_two(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_two_POST_TLS_quota) {
+       atomic_store(&POST, true);
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_two(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_two_GET_TLS_quota) {
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_two(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_send_POST) {
+       atomic_store(&POST, true);
+       atomic_store(&use_PROXY, true);
+       doh_recv_send(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_send_GET) {
+       atomic_store(&use_PROXY, true);
+       doh_recv_send(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_send_POST_TLS) {
+       atomic_store(&POST, true);
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       doh_recv_send(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_send_GET_TLS) {
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       doh_recv_send(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_send_POST_quota) {
+       atomic_store(&POST, true);
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_send(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_send_GET_quota) {
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_send(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_send_POST_TLS_quota) {
+       atomic_store(&POST, true);
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_send(arg);
+}
+
+ISC_LOOP_TEST_IMPL(proxy_doh_recv_send_GET_TLS_quota) {
+       atomic_store(&use_TLS, true);
+       atomic_store(&use_PROXY, true);
+       atomic_store(&check_listener_quota, true);
+       doh_recv_send(arg);
+}
+
 ISC_TEST_LIST_START
 
 ISC_TEST_ENTRY_CUSTOM(mock_doh_uv_tcp_bind, setup_test, teardown_test)
@@ -1833,6 +2048,61 @@ ISC_TEST_ENTRY_CUSTOM(doh_recv_send_POST_TLS_quota, setup_test,
                      doh_recv_send_teardown)
 ISC_TEST_ENTRY_CUSTOM(doh_bad_connect_uri, setup_test,
                      doh_bad_connect_uri_teardown)
+/* PROXY */
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_noop_POST, setup_test, teardown_test)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_noop_GET, setup_test, teardown_test)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_noresponse_POST, setup_test, teardown_test)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_noresponse_GET, setup_test, teardown_test)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_timeout_recovery_POST, setup_test,
+                     doh_timeout_recovery_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_timeout_recovery_GET, setup_test,
+                     doh_timeout_recovery_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_one_POST, setup_test,
+                     doh_recv_one_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_one_GET, setup_test, doh_recv_one_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_one_POST_TLS, setup_test,
+                     doh_recv_one_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_one_GET_TLS, setup_test,
+                     doh_recv_one_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_one_POST_quota, setup_test,
+                     doh_recv_one_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_one_GET_quota, setup_test,
+                     doh_recv_one_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_one_POST_TLS_quota, setup_test,
+                     doh_recv_one_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_one_GET_TLS_quota, setup_test,
+                     doh_recv_one_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_two_POST, setup_test,
+                     doh_recv_two_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_two_GET, setup_test, doh_recv_two_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_two_POST_TLS, setup_test,
+                     doh_recv_two_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_two_GET_TLS, setup_test,
+                     doh_recv_two_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_two_POST_quota, setup_test,
+                     doh_recv_two_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_two_GET_quota, setup_test,
+                     doh_recv_two_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_two_POST_TLS_quota, setup_test,
+                     doh_recv_two_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_two_GET_TLS_quota, setup_test,
+                     doh_recv_two_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_send_GET, setup_test,
+                     doh_recv_send_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_send_POST, setup_test,
+                     doh_recv_send_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_send_GET_TLS, setup_test,
+                     doh_recv_send_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_send_POST_TLS, setup_test,
+                     doh_recv_send_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_send_GET_quota, setup_test,
+                     doh_recv_send_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_send_POST_quota, setup_test,
+                     doh_recv_send_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_send_GET_TLS_quota, setup_test,
+                     doh_recv_send_teardown)
+ISC_TEST_ENTRY_CUSTOM(proxy_doh_recv_send_POST_TLS_quota, setup_test,
+                     doh_recv_send_teardown)
 ISC_TEST_LIST_END
 
 ISC_TEST_MAIN