]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
tests: fix isc/socket_test.c teardown
authorWitold Kręcicki <wpk@isc.org>
Thu, 14 May 2020 07:39:57 +0000 (09:39 +0200)
committerOndřej Surý <ondrej@isc.org>
Wed, 3 Jun 2020 12:17:16 +0000 (14:17 +0200)
In case of a test failure we weren't tearing down sockets and tasks
properly, causing the test to hang instead of failing nicely.

(cherry picked from commit 4a8d9250cf330b37d0bca29067b0ff993ccf3ba5)

lib/isc/tests/socket_test.c

index 3827fac20f4af574d0231ee2dbdc1af585e9ed44..26d019ed9436f10971b313a857fef68d75047c5f 100644 (file)
@@ -38,6 +38,8 @@
 static bool recv_dscp;
 static unsigned int recv_dscp_value;
 static bool recv_trunc;
+isc_socket_t *s1 = NULL, *s2 = NULL, *s3 = NULL;
+isc_task_t *test_task = NULL;
 
 /*
  * Helper functions
@@ -59,6 +61,19 @@ static int
 _teardown(void **state) {
        UNUSED(state);
 
+       if (s1 != NULL) {
+               isc_socket_detach(&s1);
+       }
+       if (s2 != NULL) {
+               isc_socket_detach(&s2);
+       }
+       if (s3 != NULL) {
+               isc_socket_detach(&s3);
+       }
+       if (test_task != NULL) {
+               isc_task_detach(&test_task);
+       }
+
        isc_test_end();
 
        return (0);
@@ -180,8 +195,6 @@ udp_sendto_test(void **state)  {
        isc_result_t result;
        isc_sockaddr_t addr1, addr2;
        struct in_addr in;
-       isc_socket_t *s1 = NULL, *s2 = NULL;
-       isc_task_t *task = NULL;
        char sendbuf[BUFSIZ], recvbuf[BUFSIZ];
        completion_t completion;
        isc_region_t r;
@@ -208,7 +221,7 @@ udp_sendto_test(void **state)  {
        assert_int_equal(result, ISC_R_SUCCESS);
        assert_true(isc_sockaddr_getport(&addr2) != 0);
 
-       result = isc_task_create(taskmgr, 0, &task);
+       result = isc_task_create(taskmgr, 0, &test_task);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        snprintf(sendbuf, sizeof(sendbuf), "Hello");
@@ -216,7 +229,7 @@ udp_sendto_test(void **state)  {
        r.length = strlen(sendbuf) + 1;
 
        completion_init(&completion);
-       result = isc_socket_sendto(s1, &r, task, event_done, &completion,
+       result = isc_socket_sendto(s1, &r, test_task, event_done, &completion,
                                   &addr2, NULL);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
@@ -226,18 +239,12 @@ udp_sendto_test(void **state)  {
        r.base = (void *) recvbuf;
        r.length = BUFSIZ;
        completion_init(&completion);
-       result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
+       result = isc_socket_recv(s2, &r, 1, test_task, event_done, &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
        assert_int_equal(completion.result, ISC_R_SUCCESS);
        assert_string_equal(recvbuf, "Hello");
-
-       isc_task_detach(&task);
-
-       isc_socket_detach(&s1);
-       isc_socket_detach(&s2);
-
 }
 
 /* Test UDP sendto/recv with duplicated socket */
@@ -246,8 +253,6 @@ udp_dup_test(void **state) {
        isc_result_t result;
        isc_sockaddr_t addr1, addr2;
        struct in_addr in;
-       isc_socket_t *s1 = NULL, *s2 = NULL, *s3 = NULL;
-       isc_task_t *task = NULL;
        char sendbuf[BUFSIZ], recvbuf[BUFSIZ];
        completion_t completion;
        isc_region_t r;
@@ -277,7 +282,7 @@ udp_dup_test(void **state) {
        result = isc_socket_dup(s2, &s3);
        assert_int_equal(result, ISC_R_SUCCESS);
 
-       result = isc_task_create(taskmgr, 0, &task);
+       result = isc_task_create(taskmgr, 0, &test_task);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        snprintf(sendbuf, sizeof(sendbuf), "Hello");
@@ -285,7 +290,7 @@ udp_dup_test(void **state) {
        r.length = strlen(sendbuf) + 1;
 
        completion_init(&completion);
-       result = isc_socket_sendto(s1, &r, task, event_done, &completion,
+       result = isc_socket_sendto(s1, &r, test_task, event_done, &completion,
                                   &addr2, NULL);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
@@ -297,7 +302,7 @@ udp_dup_test(void **state) {
        r.length = strlen(sendbuf) + 1;
 
        completion_init(&completion);
-       result = isc_socket_sendto(s1, &r, task, event_done, &completion,
+       result = isc_socket_sendto(s1, &r, test_task, event_done, &completion,
                                   &addr2, NULL);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
@@ -307,7 +312,7 @@ udp_dup_test(void **state) {
        r.base = (void *) recvbuf;
        r.length = BUFSIZ;
        completion_init(&completion);
-       result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
+       result = isc_socket_recv(s2, &r, 1, test_task, event_done, &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -317,19 +322,12 @@ udp_dup_test(void **state) {
        r.base = (void *) recvbuf;
        r.length = BUFSIZ;
        completion_init(&completion);
-       result = isc_socket_recv(s3, &r, 1, task, event_done, &completion);
+       result = isc_socket_recv(s3, &r, 1, test_task, event_done, &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
        assert_int_equal(completion.result, ISC_R_SUCCESS);
        assert_string_equal(recvbuf, "World");
-
-       isc_task_detach(&task);
-
-       isc_socket_detach(&s1);
-       isc_socket_detach(&s2);
-       isc_socket_detach(&s3);
-
 }
 
 /* Test UDP sendto/recv (IPv4) */
@@ -338,8 +336,6 @@ udp_dscp_v4_test(void **state) {
        isc_result_t result;
        isc_sockaddr_t addr1, addr2;
        struct in_addr in;
-       isc_socket_t *s1 = NULL, *s2 = NULL;
-       isc_task_t *task = NULL;
        char sendbuf[BUFSIZ], recvbuf[BUFSIZ];
        completion_t completion;
        isc_region_t r;
@@ -368,7 +364,7 @@ udp_dscp_v4_test(void **state) {
        assert_int_equal(result, ISC_R_SUCCESS);
        assert_true(isc_sockaddr_getport(&addr2) != 0);
 
-       result = isc_task_create(taskmgr, 0, &task);
+       result = isc_task_create(taskmgr, 0, &test_task);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        snprintf(sendbuf, sizeof(sendbuf), "Hello");
@@ -393,7 +389,8 @@ udp_dscp_v4_test(void **state) {
        recv_dscp = false;
        recv_dscp_value = 0;
 
-       result = isc_socket_sendto2(s1, &r, task, &addr2, NULL, socketevent, 0);
+       result = isc_socket_sendto2(s1, &r, test_task, &addr2, NULL,
+                                   socketevent, 0);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -402,7 +399,7 @@ udp_dscp_v4_test(void **state) {
        r.base = (void *) recvbuf;
        r.length = BUFSIZ;
        completion_init(&completion);
-       result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
+       result = isc_socket_recv(s2, &r, 1, test_task, event_done, &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -415,11 +412,6 @@ udp_dscp_v4_test(void **state) {
        } else {
                assert_false(recv_dscp);
        }
-       isc_task_detach(&task);
-
-       isc_socket_detach(&s1);
-       isc_socket_detach(&s2);
-
 }
 
 #if defined(ISC_PLATFORM_HAVEIPV6) && defined(WANT_IPV6)
@@ -429,8 +421,6 @@ udp_dscp_v6_test(void **state) {
        isc_result_t result;
        isc_sockaddr_t addr1, addr2;
        struct in6_addr in6;
-       isc_socket_t *s1 = NULL, *s2 = NULL;
-       isc_task_t *task = NULL;
        char sendbuf[BUFSIZ], recvbuf[BUFSIZ];
        completion_t completion;
        isc_region_t r;
@@ -463,7 +453,7 @@ udp_dscp_v6_test(void **state) {
        assert_int_equal(result, ISC_R_SUCCESS);
        assert_true(isc_sockaddr_getport(&addr2) != 0);
 
-       result = isc_task_create(taskmgr, 0, &task);
+       result = isc_task_create(taskmgr, 0, &test_task);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        snprintf(sendbuf, sizeof(sendbuf), "Hello");
@@ -486,7 +476,8 @@ udp_dscp_v6_test(void **state) {
        recv_dscp = false;
        recv_dscp_value = 0;
 
-       result = isc_socket_sendto2(s1, &r, task, &addr2, NULL, socketevent, 0);
+       result = isc_socket_sendto2(s1, &r, test_task, &addr2, NULL,
+                                   socketevent, 0);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -495,7 +486,7 @@ udp_dscp_v6_test(void **state) {
        r.base = (void *) recvbuf;
        r.length = BUFSIZ;
        completion_init(&completion);
-       result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
+       result = isc_socket_recv(s2, &r, 1, test_task, event_done, &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -507,12 +498,6 @@ udp_dscp_v6_test(void **state) {
        } else {
                assert_false(recv_dscp);
        }
-
-       isc_task_detach(&task);
-
-       isc_socket_detach(&s1);
-       isc_socket_detach(&s2);
-
 }
 #endif
 
@@ -522,8 +507,6 @@ tcp_dscp_v4_test(void **state) {
        isc_result_t result;
        isc_sockaddr_t addr1;
        struct in_addr in;
-       isc_socket_t *s1 = NULL, *s2 = NULL, *s3 = NULL;
-       isc_task_t *task = NULL;
        char sendbuf[BUFSIZ], recvbuf[BUFSIZ];
        completion_t completion, completion2;
        isc_region_t r;
@@ -549,15 +532,16 @@ tcp_dscp_v4_test(void **state) {
        result = isc_socket_create(socketmgr, PF_INET, isc_sockettype_tcp, &s2);
        assert_int_equal(result, ISC_R_SUCCESS);
 
-       result = isc_task_create(taskmgr, 0, &task);
+       result = isc_task_create(taskmgr, 0, &test_task);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        completion_init(&completion2);
-       result = isc_socket_accept(s1, task, accept_done, &completion2);
+       result = isc_socket_accept(s1, test_task, accept_done, &completion2);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        completion_init(&completion);
-       result = isc_socket_connect(s2, &addr1, task, event_done, &completion);
+       result = isc_socket_connect(s2, &addr1, test_task, event_done,
+                                   &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor2(&completion, &completion2);
        assert_true(completion.done);
@@ -576,7 +560,7 @@ tcp_dscp_v4_test(void **state) {
        recv_dscp_value = 0;
 
        completion_init(&completion);
-       result = isc_socket_sendto(s2, &r, task, event_done, &completion,
+       result = isc_socket_sendto(s2, &r, test_task, event_done, &completion,
                                   NULL, NULL);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
@@ -586,7 +570,7 @@ tcp_dscp_v4_test(void **state) {
        r.base = (void *) recvbuf;
        r.length = BUFSIZ;
        completion_init(&completion);
-       result = isc_socket_recv(s3, &r, 1, task, event_done, &completion);
+       result = isc_socket_recv(s3, &r, 1, test_task, event_done, &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -600,13 +584,6 @@ tcp_dscp_v4_test(void **state) {
        } else {
                assert_false(recv_dscp);
        }
-
-       isc_task_detach(&task);
-
-       isc_socket_detach(&s1);
-       isc_socket_detach(&s2);
-       isc_socket_detach(&s3);
-
 }
 
 #if defined(ISC_PLATFORM_HAVEIPV6) && defined(WANT_IPV6)
@@ -616,8 +593,6 @@ tcp_dscp_v6_test(void **state) {
        isc_result_t result;
        isc_sockaddr_t addr1;
        struct in6_addr in6;
-       isc_socket_t *s1 = NULL, *s2 = NULL, *s3 = NULL;
-       isc_task_t *task = NULL;
        char sendbuf[BUFSIZ], recvbuf[BUFSIZ];
        completion_t completion, completion2;
        isc_region_t r;
@@ -647,15 +622,16 @@ tcp_dscp_v6_test(void **state) {
                                   &s2);
        assert_int_equal(result, ISC_R_SUCCESS);
 
-       result = isc_task_create(taskmgr, 0, &task);
+       result = isc_task_create(taskmgr, 0, &test_task);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        completion_init(&completion2);
-       result = isc_socket_accept(s1, task, accept_done, &completion2);
+       result = isc_socket_accept(s1, test_task, accept_done, &completion2);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        completion_init(&completion);
-       result = isc_socket_connect(s2, &addr1, task, event_done, &completion);
+       result = isc_socket_connect(s2, &addr1, test_task, event_done,
+                                   &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor2(&completion, &completion2);
        assert_true(completion.done);
@@ -674,7 +650,7 @@ tcp_dscp_v6_test(void **state) {
        recv_dscp_value = 0;
 
        completion_init(&completion);
-       result = isc_socket_sendto(s2, &r, task, event_done, &completion,
+       result = isc_socket_sendto(s2, &r, test_task, event_done, &completion,
                                   NULL, NULL);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
@@ -684,7 +660,7 @@ tcp_dscp_v6_test(void **state) {
        r.base = (void *) recvbuf;
        r.length = BUFSIZ;
        completion_init(&completion);
-       result = isc_socket_recv(s3, &r, 1, task, event_done, &completion);
+       result = isc_socket_recv(s3, &r, 1, test_task, event_done, &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -702,13 +678,6 @@ tcp_dscp_v6_test(void **state) {
        } else {
                assert_false(recv_dscp);
        }
-
-       isc_task_detach(&task);
-
-       isc_socket_detach(&s1);
-       isc_socket_detach(&s2);
-       isc_socket_detach(&s3);
-
 }
 #endif
 
@@ -751,9 +720,7 @@ udp_trunc_test(void **state) {
        isc_result_t result;
        isc_sockaddr_t addr1, addr2;
        struct in_addr in;
-       isc_socket_t *s1 = NULL, *s2 = NULL;
-       isc_task_t *task = NULL;
-       char sendbuf[BUFSIZ*2], recvbuf[BUFSIZ];
+       char sendbuf[BUFSIZ * 2], recvbuf[BUFSIZ];
        completion_t completion;
        isc_region_t r;
        isc_socketevent_t *socketevent;
@@ -779,7 +746,7 @@ udp_trunc_test(void **state) {
        assert_int_equal(result, ISC_R_SUCCESS);
        assert_true(isc_sockaddr_getport(&addr2) != 0);
 
-       result = isc_task_create(taskmgr, 0, &task);
+       result = isc_task_create(taskmgr, 0, &test_task);
        assert_int_equal(result, ISC_R_SUCCESS);
 
        /*
@@ -796,7 +763,8 @@ udp_trunc_test(void **state) {
                                             event_done, &completion);
        assert_non_null(socketevent);
 
-       result = isc_socket_sendto2(s1, &r, task, &addr2, NULL, socketevent, 0);
+       result = isc_socket_sendto2(s1, &r, test_task, &addr2, NULL,
+                                   socketevent, 0);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -806,7 +774,7 @@ udp_trunc_test(void **state) {
        r.length = BUFSIZ;
        completion_init(&completion);
        recv_trunc = false;
-       result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
+       result = isc_socket_recv(s2, &r, 1, test_task, event_done, &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -828,7 +796,8 @@ udp_trunc_test(void **state) {
                                             event_done, &completion);
        assert_non_null(socketevent);
 
-       result = isc_socket_sendto2(s1, &r, task, &addr2, NULL, socketevent, 0);
+       result = isc_socket_sendto2(s1, &r, test_task, &addr2, NULL,
+                                   socketevent, 0);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
@@ -838,19 +807,13 @@ udp_trunc_test(void **state) {
        r.length = BUFSIZ;
        completion_init(&completion);
        recv_trunc = false;
-       result = isc_socket_recv(s2, &r, 1, task, event_done, &completion);
+       result = isc_socket_recv(s2, &r, 1, test_task, event_done, &completion);
        assert_int_equal(result, ISC_R_SUCCESS);
        waitfor(&completion);
        assert_true(completion.done);
        assert_int_equal(completion.result, ISC_R_SUCCESS);
        assert_string_equal(recvbuf, "Hello");
        assert_true(recv_trunc);
-
-       isc_task_detach(&task);
-
-       isc_socket_detach(&s1);
-       isc_socket_detach(&s2);
-
 }
 
 /*