Skip to content

Commit 8372797

Browse files
committed
Problem: code duplication in test_reqrep_tcp
Solution: extracted bind_loopback
1 parent c84c3a5 commit 8372797

2 files changed

Lines changed: 23 additions & 53 deletions

File tree

tests/test_reqrep_tcp.cpp

Lines changed: 9 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -40,31 +40,13 @@ void tearDown ()
4040
teardown_test_context ();
4141
}
4242

43-
const char *bind_address_loopback_ipv4 = "tcp://127.0.0.1:*";
44-
const char *bind_address_loopback_ipv6 = "tcp://[::1]:*";
45-
46-
const char *get_loopback_bin_address (bool ipv6)
47-
{
48-
if (ipv6 && !is_ipv6_available ()) {
49-
TEST_IGNORE_MESSAGE ("ipv6 is not available");
50-
}
51-
52-
return ipv6 ? bind_address_loopback_ipv6 : bind_address_loopback_ipv4;
53-
}
54-
5543
void test_single_connect (int ipv6)
5644
{
5745
size_t len = MAX_SOCKET_STRING;
5846
char my_endpoint[MAX_SOCKET_STRING];
5947

60-
const char *address = get_loopback_bin_address (ipv6);
61-
6248
void *sb = test_context_socket (ZMQ_REP);
63-
TEST_ASSERT_SUCCESS_ERRNO (
64-
zmq_setsockopt (sb, ZMQ_IPV6, &ipv6, sizeof (int)));
65-
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb, address));
66-
TEST_ASSERT_SUCCESS_ERRNO (
67-
zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, my_endpoint, &len));
49+
bind_loopback (sb, ipv6, my_endpoint, len);
6850

6951
void *sc = test_context_socket (ZMQ_REQ);
7052
TEST_ASSERT_SUCCESS_ERRNO (
@@ -73,6 +55,9 @@ void test_single_connect (int ipv6)
7355

7456
bounce (sb, sc);
7557

58+
// TODO is explicit disconnect/unbind essential for the test? if not,
59+
// these calls should probably be left out, for clarity/readability
60+
7661
TEST_ASSERT_SUCCESS_ERRNO (zmq_disconnect (sc, my_endpoint));
7762

7863
TEST_ASSERT_SUCCESS_ERRNO (zmq_unbind (sb, my_endpoint));
@@ -89,30 +74,14 @@ void test_multi_connect (int ipv6)
8974
char my_endpoint_2[MAX_SOCKET_STRING];
9075
char my_endpoint_3[MAX_SOCKET_STRING * 2];
9176

92-
const char *address = get_loopback_bin_address (ipv6);
93-
9477
void *sb0 = test_context_socket (ZMQ_REP);
95-
TEST_ASSERT_SUCCESS_ERRNO (
96-
zmq_setsockopt (sb0, ZMQ_IPV6, &ipv6, sizeof (int)));
97-
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb0, address));
98-
TEST_ASSERT_SUCCESS_ERRNO (
99-
zmq_getsockopt (sb0, ZMQ_LAST_ENDPOINT, my_endpoint_0, &len));
78+
bind_loopback (sb0, ipv6, my_endpoint_0, len);
10079

10180
void *sb1 = test_context_socket (ZMQ_REP);
102-
TEST_ASSERT_SUCCESS_ERRNO (
103-
zmq_setsockopt (sb1, ZMQ_IPV6, &ipv6, sizeof (int)));
104-
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb1, address));
105-
len = MAX_SOCKET_STRING;
106-
TEST_ASSERT_SUCCESS_ERRNO (
107-
zmq_getsockopt (sb1, ZMQ_LAST_ENDPOINT, my_endpoint_1, &len));
81+
bind_loopback (sb1, ipv6, my_endpoint_1, len);
10882

10983
void *sb2 = test_context_socket (ZMQ_REP);
110-
TEST_ASSERT_SUCCESS_ERRNO (
111-
zmq_setsockopt (sb2, ZMQ_IPV6, &ipv6, sizeof (int)));
112-
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb2, address));
113-
len = MAX_SOCKET_STRING;
114-
TEST_ASSERT_SUCCESS_ERRNO (
115-
zmq_getsockopt (sb2, ZMQ_LAST_ENDPOINT, my_endpoint_2, &len));
84+
bind_loopback (sb2, ipv6, my_endpoint_2, len);
11685

11786
void *sc = test_context_socket (ZMQ_REQ);
11887
TEST_ASSERT_SUCCESS_ERRNO (
@@ -159,22 +128,11 @@ void test_multi_connect_same_port (int ipv6)
159128
char my_endpoint_4[MAX_SOCKET_STRING * 2];
160129
char my_endpoint_5[MAX_SOCKET_STRING * 2];
161130

162-
const char *address = get_loopback_bin_address (ipv6);
163-
164131
void *sb0 = test_context_socket (ZMQ_REP);
165-
TEST_ASSERT_SUCCESS_ERRNO (
166-
zmq_setsockopt (sb0, ZMQ_IPV6, &ipv6, sizeof (int)));
167-
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb0, address));
168-
TEST_ASSERT_SUCCESS_ERRNO (
169-
zmq_getsockopt (sb0, ZMQ_LAST_ENDPOINT, my_endpoint_0, &len));
132+
bind_loopback (sb0, ipv6, my_endpoint_0, len);
170133

171134
void *sb1 = test_context_socket (ZMQ_REP);
172-
TEST_ASSERT_SUCCESS_ERRNO (
173-
zmq_setsockopt (sb1, ZMQ_IPV6, &ipv6, sizeof (int)));
174-
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb1, address));
175-
len = MAX_SOCKET_STRING;
176-
TEST_ASSERT_SUCCESS_ERRNO (
177-
zmq_getsockopt (sb1, ZMQ_LAST_ENDPOINT, my_endpoint_1, &len));
135+
bind_loopback (sb1, ipv6, my_endpoint_1, len);
178136

179137
void *sc0 = test_context_socket (ZMQ_REQ);
180138
TEST_ASSERT_SUCCESS_ERRNO (

tests/testutil_unity.hpp

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -192,9 +192,21 @@ void *test_context_socket_close (void *socket)
192192
return socket;
193193
}
194194

195-
void bind_loopback_ipv4 (void *socket, char *my_endpoint, size_t len)
195+
void bind_loopback (void *socket, int ipv6, char *my_endpoint, size_t len)
196196
{
197-
TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (socket, "tcp://127.0.0.1:*"));
197+
if (ipv6 && !is_ipv6_available ()) {
198+
TEST_IGNORE_MESSAGE ("ipv6 is not available");
199+
}
200+
201+
TEST_ASSERT_SUCCESS_ERRNO (
202+
zmq_setsockopt (socket, ZMQ_IPV6, &ipv6, sizeof (int)));
203+
TEST_ASSERT_SUCCESS_ERRNO (
204+
zmq_bind (socket, ipv6 ? "tcp://[::1]:*" : "tcp://127.0.0.1:*"));
198205
TEST_ASSERT_SUCCESS_ERRNO (
199206
zmq_getsockopt (socket, ZMQ_LAST_ENDPOINT, my_endpoint, &len));
200207
}
208+
209+
void bind_loopback_ipv4 (void *socket, char *my_endpoint, size_t len)
210+
{
211+
bind_loopback (socket, false, my_endpoint, len);
212+
}

0 commit comments

Comments
 (0)