test_unbind_wildcard.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #include "testutil.hpp"
4 #include "testutil_unity.hpp"
5 
6 #include <string.h>
7 
9 
11 {
12  /* Address wildcard, IPv6 disabled */
13  void *sb = test_context_socket (ZMQ_REP);
14  void *sc = test_context_socket (ZMQ_REQ);
15 
16  TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb, "tcp://*:*"));
17 
18  char bind_endpoint[256];
19  char connect_endpoint[256];
20  size_t endpoint_len = sizeof (bind_endpoint);
22  zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, bind_endpoint, &endpoint_len));
23 
24  // Apparently Windows can't connect to 0.0.0.0. A better fix would be welcome.
25 #ifdef ZMQ_HAVE_WINDOWS
26  snprintf (connect_endpoint, 256 * sizeof (char), "tcp://127.0.0.1:%s",
27  strrchr (bind_endpoint, ':') + 1);
28 #else
29  strcpy (connect_endpoint, bind_endpoint);
30 #endif
31 
32  TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (sc, connect_endpoint));
33 
34  bounce (sb, sc);
35 
36  TEST_ASSERT_SUCCESS_ERRNO (zmq_disconnect (sc, connect_endpoint));
37  TEST_ASSERT_SUCCESS_ERRNO (zmq_unbind (sb, bind_endpoint));
38 
41 }
42 
44 {
45  int ipv6 = is_ipv6_available ();
46 
47  /* Address wildcard, IPv6 enabled */
48  void *sb = test_context_socket (ZMQ_REP);
49  void *sc = test_context_socket (ZMQ_REQ);
50 
52  zmq_setsockopt (sb, ZMQ_IPV6, &ipv6, sizeof (int)));
54  zmq_setsockopt (sc, ZMQ_IPV6, &ipv6, sizeof (int)));
55 
56  TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb, "tcp://*:*"));
57 
58  char bind_endpoint[256];
59  char connect_endpoint[256];
60  size_t endpoint_len = sizeof (bind_endpoint);
61  memset (bind_endpoint, 0, endpoint_len);
63  zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, bind_endpoint, &endpoint_len));
64 
65 #ifdef ZMQ_HAVE_WINDOWS
66  if (ipv6)
67  snprintf (connect_endpoint, 256 * sizeof (char), "tcp://[::1]:%s",
68  strrchr (bind_endpoint, ':') + 1);
69  else
70  snprintf (connect_endpoint, 256 * sizeof (char), "tcp://127.0.0.1:%s",
71  strrchr (bind_endpoint, ':') + 1);
72 #else
73  strcpy (connect_endpoint, bind_endpoint);
74 #endif
75 
76  TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (sc, connect_endpoint));
77 
78  bounce (sb, sc);
79 
80  TEST_ASSERT_SUCCESS_ERRNO (zmq_disconnect (sc, connect_endpoint));
81  TEST_ASSERT_SUCCESS_ERRNO (zmq_unbind (sb, bind_endpoint));
82 
85 }
86 
88 {
89  /* Port wildcard, IPv4 address, IPv6 disabled */
90  void *sb = test_context_socket (ZMQ_REP);
91  void *sc = test_context_socket (ZMQ_REQ);
92 
93  TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb, "tcp://127.0.0.1:*"));
94 
95  char endpoint[256];
96  size_t endpoint_len = sizeof (endpoint);
97  memset (endpoint, 0, endpoint_len);
99  zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, endpoint, &endpoint_len));
100 
102 
103  bounce (sb, sc);
104 
107 
110 }
111 
113 {
114  /* Port wildcard, IPv4 address, IPv6 enabled */
115  void *sb = test_context_socket (ZMQ_REP);
116  void *sc = test_context_socket (ZMQ_REQ);
117 
118  const int ipv6 = is_ipv6_available ();
120  zmq_setsockopt (sb, ZMQ_IPV6, &ipv6, sizeof (int)));
122  zmq_setsockopt (sc, ZMQ_IPV6, &ipv6, sizeof (int)));
123 
124  TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb, "tcp://127.0.0.1:*"));
125 
126  char endpoint[256];
127  size_t endpoint_len = sizeof (endpoint);
128  memset (endpoint, 0, endpoint_len);
130  zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, endpoint, &endpoint_len));
131 
133 
134  bounce (sb, sc);
135 
138 
141 }
142 
144 {
145  const int ipv6 = is_ipv6_available ();
146  if (!ipv6)
147  TEST_IGNORE_MESSAGE ("ipv6 is not available");
148 
149  /* Port wildcard, IPv6 address, IPv6 enabled */
150  void *sb = test_context_socket (ZMQ_REP);
151  void *sc = test_context_socket (ZMQ_REQ);
152 
154  zmq_setsockopt (sb, ZMQ_IPV6, &ipv6, sizeof (int)));
156  zmq_setsockopt (sc, ZMQ_IPV6, &ipv6, sizeof (int)));
157 
158  TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (sb, "tcp://[::1]:*"));
159 
160  char endpoint[256];
161  size_t endpoint_len = sizeof (endpoint);
162  memset (endpoint, 0, endpoint_len);
164  zmq_getsockopt (sb, ZMQ_LAST_ENDPOINT, endpoint, &endpoint_len));
165 
167 
168  bounce (sb, sc);
169 
172 
175 }
176 
177 int main ()
178 {
180 
181  UNITY_BEGIN ();
187  return UNITY_END ();
188 }
test_port_wildcard_ipv4_address
void test_port_wildcard_ipv4_address()
Definition: test_unbind_wildcard.cpp:87
bounce
static void bounce(void *socket_)
Definition: test_req_relaxed.cpp:50
UNITY_END
return UNITY_END()
test_address_wildcard_ipv6
void test_address_wildcard_ipv6()
Definition: test_unbind_wildcard.cpp:43
zmq_unbind
ZMQ_EXPORT int zmq_unbind(void *s_, const char *addr_)
Definition: zmq.cpp:337
is_ipv6_available
int is_ipv6_available()
Definition: testutil.cpp:236
RUN_TEST
#define RUN_TEST(func)
Definition: unity_internals.h:615
ZMQ_LAST_ENDPOINT
#define ZMQ_LAST_ENDPOINT
Definition: zmq.h:298
SETUP_TEARDOWN_TESTCONTEXT
#define SETUP_TEARDOWN_TESTCONTEXT
Definition: testutil_unity.hpp:172
test_port_wildcard_ipv6_address
void test_port_wildcard_ipv6_address()
Definition: test_unbind_wildcard.cpp:143
ZMQ_REQ
#define ZMQ_REQ
Definition: zmq.h:261
zmq_connect
ZMQ_EXPORT int zmq_connect(void *s_, const char *addr_)
Definition: zmq.cpp:307
testutil_unity.hpp
snprintf
int snprintf(char *str, size_t size, const char *format,...)
Definition: port.cc:64
zmq_setsockopt
ZMQ_EXPORT int zmq_setsockopt(void *s_, int option_, const void *optval_, size_t optvallen_)
Definition: zmq.cpp:250
zmq_disconnect
ZMQ_EXPORT int zmq_disconnect(void *s_, const char *addr_)
Definition: zmq.cpp:345
sb
void * sb
Definition: test_channel.cpp:8
testutil.hpp
ZMQ_REP
#define ZMQ_REP
Definition: zmq.h:262
test_port_wildcard_ipv4_address_ipv6
void test_port_wildcard_ipv4_address_ipv6()
Definition: test_unbind_wildcard.cpp:112
zmq_bind
ZMQ_EXPORT int zmq_bind(void *s_, const char *addr_)
Definition: zmq.cpp:299
test_address_wildcard_ipv4
SETUP_TEARDOWN_TESTCONTEXT void test_address_wildcard_ipv4()
Definition: test_unbind_wildcard.cpp:10
sc
void * sc
Definition: test_channel.cpp:9
test_context_socket
void * test_context_socket(int type_)
Definition: testutil_unity.cpp:200
TEST_IGNORE_MESSAGE
#define TEST_IGNORE_MESSAGE(message)
Definition: unity.h:103
ZMQ_IPV6
#define ZMQ_IPV6
Definition: zmq.h:307
setup_test_environment
void setup_test_environment(int timeout_seconds_)
Definition: testutil.cpp:201
UNITY_BEGIN
UNITY_BEGIN()
test_context_socket_close
void * test_context_socket_close(void *socket_)
Definition: testutil_unity.cpp:208
main
int main()
Definition: test_unbind_wildcard.cpp:177
TEST_ASSERT_SUCCESS_ERRNO
#define TEST_ASSERT_SUCCESS_ERRNO(expr)
Definition: proxy_thr.cpp:47
zmq_getsockopt
ZMQ_EXPORT int zmq_getsockopt(void *s_, int option_, void *optval_, size_t *optvallen_)
Definition: zmq.cpp:261


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:59