diff options
Diffstat (limited to 'test/testsock.c')
-rw-r--r-- | test/testsock.c | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/test/testsock.c b/test/testsock.c index 50aef5c2b..41239d0e9 100644 --- a/test/testsock.c +++ b/test/testsock.c @@ -267,16 +267,20 @@ static void test_get_addr(abts_case *tc, void *data) apr_status_t rv; apr_socket_t *ld, *sd, *cd; apr_sockaddr_t *sa, *ca; + apr_pool_t *subp; char *a, *b; - ld = setup_socket(tc); + APR_ASSERT_SUCCESS(tc, "create subpool", apr_pool_create(&subp, p)); + + if ((ld = setup_socket(tc)) != APR_SUCCESS) + return; APR_ASSERT_SUCCESS(tc, "get local address of bound socket", apr_socket_addr_get(&sa, APR_LOCAL, ld)); rv = apr_socket_create(&cd, sa->family, SOCK_STREAM, - APR_PROTO_TCP, p); + APR_PROTO_TCP, subp); APR_ASSERT_SUCCESS(tc, "create client socket", rv); APR_ASSERT_SUCCESS(tc, "enable non-block mode", @@ -302,7 +306,7 @@ static void test_get_addr(abts_case *tc, void *data) } APR_ASSERT_SUCCESS(tc, "accept connection", - apr_socket_accept(&sd, ld, p)); + apr_socket_accept(&sd, ld, subp)); { /* wait for writability */ @@ -322,18 +326,38 @@ static void test_get_addr(abts_case *tc, void *data) APR_ASSERT_SUCCESS(tc, "get local address of server socket", apr_socket_addr_get(&sa, APR_LOCAL, sd)); - APR_ASSERT_SUCCESS(tc, "get remote address of client socket", apr_socket_addr_get(&ca, APR_REMOTE, cd)); - - a = apr_psprintf(p, "%pI", sa); - b = apr_psprintf(p, "%pI", ca); + /* Test that the pool of the returned sockaddr objects exactly + * match the socket. */ + ABTS_PTR_EQUAL(tc, subp, sa->pool); + ABTS_PTR_EQUAL(tc, subp, ca->pool); + + /* Check equivalence. */ + a = apr_psprintf(p, "%pI fam=%d", sa, sa->family); + b = apr_psprintf(p, "%pI fam=%d", ca, ca->family); ABTS_STR_EQUAL(tc, a, b); + + /* Check pool of returned sockaddr, as above. */ + APR_ASSERT_SUCCESS(tc, "get local address of client socket", + apr_socket_addr_get(&sa, APR_LOCAL, cd)); + APR_ASSERT_SUCCESS(tc, "get remote address of server socket", + apr_socket_addr_get(&ca, APR_REMOTE, sd)); + + /* Check equivalence. */ + a = apr_psprintf(p, "%pI fam=%d", sa, sa->family); + b = apr_psprintf(p, "%pI fam=%d", ca, ca->family); + ABTS_STR_EQUAL(tc, a, b); + + ABTS_PTR_EQUAL(tc, subp, sa->pool); + ABTS_PTR_EQUAL(tc, subp, ca->pool); apr_socket_close(cd); apr_socket_close(sd); apr_socket_close(ld); + + apr_pool_destroy(subp); } abts_suite *testsock(abts_suite *suite) |