testutil.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 #include "testutil.hpp"
3 #include "testutil_unity.hpp"
4 
5 #include <stdarg.h>
6 #include <string.h>
7 
8 #if defined _WIN32
9 #include "../src/windows.hpp"
10 #if defined ZMQ_HAVE_WINDOWS
11 #if defined ZMQ_HAVE_IPC
12 #include <direct.h>
13 #include <afunix.h>
14 #endif
15 #include <crtdbg.h>
16 #pragma warning(disable : 4996)
17 // iphlpapi is needed for if_nametoindex (not on Windows XP)
18 #if _WIN32_WINNT > _WIN32_WINNT_WINXP
19 #pragma comment(lib, "iphlpapi")
20 #endif
21 #endif
22 #else
23 #include <pthread.h>
24 #include <unistd.h>
25 #include <signal.h>
26 #include <stdlib.h>
27 #include <grp.h>
28 #include <sys/wait.h>
29 #include <sys/socket.h>
30 #include <sys/types.h>
31 #include <netinet/in.h>
32 #include <arpa/inet.h>
33 #include <net/if.h>
34 #include <netdb.h>
35 #include <sys/un.h>
36 #include <dirent.h>
37 #if defined(ZMQ_HAVE_AIX)
38 #include <sys/types.h>
39 #include <sys/socketvar.h>
40 #endif
41 #endif
42 
43 #ifndef PATH_MAX
44 #define PATH_MAX 1024
45 #endif
46 
47 const char *SEQ_END = (const char *) 1;
48 
49 const char bounce_content[] = "12345678ABCDEFGH12345678abcdefgh";
50 
51 static void send_bounce_msg (void *socket_)
52 {
55 }
56 
57 static void recv_bounce_msg (void *socket_)
58 {
60  int rcvmore;
61  size_t sz = sizeof (rcvmore);
63  zmq_getsockopt (socket_, ZMQ_RCVMORE, &rcvmore, &sz));
64  TEST_ASSERT_TRUE (rcvmore);
67  zmq_getsockopt (socket_, ZMQ_RCVMORE, &rcvmore, &sz));
68  TEST_ASSERT_FALSE (rcvmore);
69 }
70 
71 void bounce (void *server_, void *client_)
72 {
73  // Send message from client to server
74  send_bounce_msg (client_);
75 
76  // Receive message at server side and
77  // check that message is still the same
78  recv_bounce_msg (server_);
79 
80  // Send two parts back to client
81  send_bounce_msg (server_);
82 
83  // Receive the two parts at the client side
84  recv_bounce_msg (client_);
85 }
86 
87 static void send_bounce_msg_may_fail (void *socket_)
88 {
89  int timeout = 250;
91  zmq_setsockopt (socket_, ZMQ_SNDTIMEO, &timeout, sizeof (int)));
92  int rc = zmq_send (socket_, bounce_content, 32, ZMQ_SNDMORE);
93  TEST_ASSERT_TRUE ((rc == 32) || ((rc == -1) && (errno == EAGAIN)));
94  rc = zmq_send (socket_, bounce_content, 32, 0);
95  TEST_ASSERT_TRUE ((rc == 32) || ((rc == -1) && (errno == EAGAIN)));
96 }
97 
98 static void recv_bounce_msg_fail (void *socket_)
99 {
100  int timeout = 250;
101  char buffer[32];
103  zmq_setsockopt (socket_, ZMQ_RCVTIMEO, &timeout, sizeof (int)));
104  TEST_ASSERT_FAILURE_ERRNO (EAGAIN, zmq_recv (socket_, buffer, 32, 0));
105 }
106 
107 void expect_bounce_fail (void *server_, void *client_)
108 {
109  // Send message from client to server
110  send_bounce_msg_may_fail (client_);
111 
112  // Receive message at server side (should not succeed)
113  recv_bounce_msg_fail (server_);
114 
115  // Send message from server to client to test other direction
116  // If connection failed, send may block, without a timeout
117  send_bounce_msg_may_fail (server_);
118 
119  // Receive message at client side (should not succeed)
120  recv_bounce_msg_fail (client_);
121 }
122 
123 char *s_recv (void *socket_)
124 {
125  char buffer[256];
126  int size = zmq_recv (socket_, buffer, 255, 0);
127  if (size == -1)
128  return NULL;
129  if (size > 255)
130  size = 255;
131  buffer[size] = 0;
132  return strdup (buffer);
133 }
134 
135 void s_send_seq (void *socket_, ...)
136 {
137  va_list ap;
138  va_start (ap, socket_);
139  const char *data = va_arg (ap, const char *);
140  while (true) {
141  const char *prev = data;
142  data = va_arg (ap, const char *);
143  bool end = data == SEQ_END;
144 
145  if (!prev) {
147  zmq_send (socket_, 0, 0, end ? 0 : ZMQ_SNDMORE));
148  } else {
150  socket_, prev, strlen (prev) + 1, end ? 0 : ZMQ_SNDMORE));
151  }
152  if (end)
153  break;
154  }
155  va_end (ap);
156 }
157 
158 void s_recv_seq (void *socket_, ...)
159 {
160  zmq_msg_t msg;
161  zmq_msg_init (&msg);
162 
163  int more;
164  size_t more_size = sizeof (more);
165 
166  va_list ap;
167  va_start (ap, socket_);
168  const char *data = va_arg (ap, const char *);
169 
170  while (true) {
171  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_recv (&msg, socket_, 0));
172 
173  if (!data)
175  else
176  TEST_ASSERT_EQUAL_STRING (data, (const char *) zmq_msg_data (&msg));
177 
178  data = va_arg (ap, const char *);
179  bool end = data == SEQ_END;
180 
182  zmq_getsockopt (socket_, ZMQ_RCVMORE, &more, &more_size));
183 
184  TEST_ASSERT_TRUE (!more == end);
185  if (end)
186  break;
187  }
188  va_end (ap);
189 
190  zmq_msg_close (&msg);
191 }
192 
193 void close_zero_linger (void *socket_)
194 {
195  int linger = 0;
196  int rc = zmq_setsockopt (socket_, ZMQ_LINGER, &linger, sizeof (linger));
197  TEST_ASSERT_TRUE (rc == 0 || errno == ETERM);
199 }
200 
201 void setup_test_environment (int timeout_seconds_)
202 {
203 #if defined _WIN32
204 #if defined _MSC_VER
205  _set_abort_behavior (0, _WRITE_ABORT_MSG);
206  _CrtSetReportMode (_CRT_ASSERT, _CRTDBG_MODE_FILE);
207  _CrtSetReportFile (_CRT_ASSERT, _CRTDBG_FILE_STDERR);
208 #endif
209 #else
210 #if defined ZMQ_HAVE_CYGWIN
211  // abort test after 121 seconds
212  alarm (121);
213 #else
214 #if !defined ZMQ_DISABLE_TEST_TIMEOUT
215  // abort test after timeout_seconds_ seconds
216  alarm (timeout_seconds_);
217 #endif
218 #endif
219 #endif
220 #if defined __MVS__
221  // z/OS UNIX System Services: Ignore SIGPIPE during test runs, as a
222  // workaround for no SO_NOGSIGPIPE socket option.
223  signal (SIGPIPE, SIG_IGN);
224 #endif
225 }
226 
227 void msleep (int milliseconds_)
228 {
229 #ifdef ZMQ_HAVE_WINDOWS
230  Sleep (milliseconds_);
231 #else
232  usleep (static_cast<useconds_t> (milliseconds_) * 1000);
233 #endif
234 }
235 
237 {
238 #if defined(ZMQ_HAVE_WINDOWS) && (_WIN32_WINNT < 0x0600)
239  return 0;
240 #else
241  int rc, ipv6 = 1;
242  struct sockaddr_in6 test_addr;
243 
244  memset (&test_addr, 0, sizeof (test_addr));
245  test_addr.sin6_family = AF_INET6;
246  inet_pton (AF_INET6, "::1", &(test_addr.sin6_addr));
247 
248  fd_t fd = socket (AF_INET6, SOCK_STREAM, IPPROTO_IP);
249  if (fd == retired_fd)
250  ipv6 = 0;
251  else {
252 #ifdef ZMQ_HAVE_WINDOWS
253  setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (const char *) &ipv6,
254  sizeof (int));
255  rc = setsockopt (fd, IPPROTO_IPV6, IPV6_V6ONLY, (const char *) &ipv6,
256  sizeof (int));
257  if (rc == SOCKET_ERROR)
258  ipv6 = 0;
259  else {
260  rc = bind (fd, (struct sockaddr *) &test_addr, sizeof (test_addr));
261  if (rc == SOCKET_ERROR)
262  ipv6 = 0;
263  }
264 #else
265  setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &ipv6, sizeof (int));
266  rc = setsockopt (fd, IPPROTO_IPV6, IPV6_V6ONLY, &ipv6, sizeof (int));
267  if (rc != 0)
268  ipv6 = 0;
269  else {
270  rc = bind (fd, reinterpret_cast<struct sockaddr *> (&test_addr),
271  sizeof (test_addr));
272  if (rc != 0)
273  ipv6 = 0;
274  }
275 #endif
276  close (fd);
277  }
278 
279  return ipv6;
280 #endif // _WIN32_WINNT < 0x0600
281 }
282 
284 {
285 #ifndef ZMQ_HAVE_TIPC
286  return 0;
287 #else
288  int tipc = 0;
289 
290  void *ctx = zmq_init (1);
291  TEST_ASSERT_NOT_NULL (ctx);
292  void *rep = zmq_socket (ctx, ZMQ_REP);
294  tipc = zmq_bind (rep, "tipc://{5560,0,0}");
295 
296  zmq_close (rep);
297  zmq_ctx_term (ctx);
298 
299  return tipc == 0;
300 #endif // ZMQ_HAVE_TIPC
301 }
302 
303 int test_inet_pton (int af_, const char *src_, void *dst_)
304 {
305 #if defined(ZMQ_HAVE_WINDOWS) && (_WIN32_WINNT < 0x0600)
306  if (af_ == AF_INET) {
307  struct in_addr *ip4addr = (struct in_addr *) dst_;
308 
309  ip4addr->s_addr = inet_addr (src_);
310 
311  // INADDR_NONE is -1 which is also a valid representation for IP
312  // 255.255.255.255
313  if (ip4addr->s_addr == INADDR_NONE
314  && strcmp (src_, "255.255.255.255") != 0) {
315  return 0;
316  }
317 
318  // Success
319  return 1;
320  } else {
321  // Not supported.
322  return 0;
323  }
324 #else
325  return inet_pton (af_, src_, dst_);
326 #endif
327 }
328 
329 sockaddr_in bind_bsd_socket (int socket_)
330 {
331  struct sockaddr_in saddr;
332  memset (&saddr, 0, sizeof (saddr));
333  saddr.sin_family = AF_INET;
334  saddr.sin_addr.s_addr = INADDR_ANY;
335 #if !defined(_WIN32_WINNT) || (_WIN32_WINNT >= 0x0600)
336  saddr.sin_port = 0;
337 #else
338  saddr.sin_port = htons (PORT_6);
339 #endif
340 
342  bind (socket_, (struct sockaddr *) &saddr, sizeof (saddr)));
343 
344 #if !defined(_WIN32_WINNT) || (_WIN32_WINNT >= 0x0600)
345  socklen_t saddr_len = sizeof (saddr);
347  getsockname (socket_, (struct sockaddr *) &saddr, &saddr_len));
348 #endif
349 
350  return saddr;
351 }
352 
353 fd_t connect_socket (const char *endpoint_, const int af_, const int protocol_)
354 {
355  struct sockaddr_storage addr;
356  // OSX is very opinionated and wants the size to match the AF family type
357  socklen_t addr_len;
358  const fd_t s_pre = socket (af_, SOCK_STREAM,
359  protocol_ == IPPROTO_UDP ? IPPROTO_UDP
360  : protocol_ == IPPROTO_TCP ? IPPROTO_TCP
361  : 0);
362 #ifdef ZMQ_HAVE_WINDOWS
363  TEST_ASSERT_NOT_EQUAL (INVALID_SOCKET, s_pre);
364 #else
365  TEST_ASSERT_NOT_EQUAL (-1, s_pre);
366 #endif
367 
368  if (af_ == AF_INET || af_ == AF_INET6) {
369  const char *port = strrchr (endpoint_, ':') + 1;
371  // getaddrinfo does not like [x:y::z]
372  if (*strchr (endpoint_, '/') + 2 == '[') {
373  strcpy (address, strchr (endpoint_, '[') + 1);
374  address[strlen (address) - strlen (port) - 2] = '\0';
375  } else {
376  strcpy (address, strchr (endpoint_, '/') + 2);
377  address[strlen (address) - strlen (port) - 1] = '\0';
378  }
379 
380  struct addrinfo *in, hint;
381  memset (&hint, 0, sizeof (struct addrinfo));
382  hint.ai_flags = AI_NUMERICSERV;
383  hint.ai_family = af_;
384  hint.ai_socktype = protocol_ == IPPROTO_UDP ? SOCK_DGRAM : SOCK_STREAM;
385  hint.ai_protocol = protocol_ == IPPROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP;
386 
388  getaddrinfo (address, port, &hint, &in));
390  memcpy (&addr, in->ai_addr, in->ai_addrlen);
391  addr_len = (socklen_t) in->ai_addrlen;
392  freeaddrinfo (in);
393  } else {
394 #if defined(ZMQ_HAVE_IPC)
395  // Cannot cast addr as gcc 4.4 will fail with strict aliasing errors
396  (*(struct sockaddr_un *) &addr).sun_family = AF_UNIX;
397  strcpy ((*(struct sockaddr_un *) &addr).sun_path, endpoint_);
398  addr_len = sizeof (struct sockaddr_un);
399 #else
400  return retired_fd;
401 #endif
402  }
403 
405  connect (s_pre, (struct sockaddr *) &addr, addr_len));
406 
407  return s_pre;
408 }
409 
410 fd_t bind_socket_resolve_port (const char *address_,
411  const char *port_,
412  char *my_endpoint_,
413  const int af_,
414  const int protocol_)
415 {
416  struct sockaddr_storage addr;
417  // OSX is very opinionated and wants the size to match the AF family type
418  socklen_t addr_len;
419  const fd_t s_pre = socket (af_, SOCK_STREAM,
420  protocol_ == IPPROTO_UDP ? IPPROTO_UDP
421  : protocol_ == IPPROTO_TCP ? IPPROTO_TCP
422  : 0);
423 #ifdef ZMQ_HAVE_WINDOWS
424  TEST_ASSERT_NOT_EQUAL (INVALID_SOCKET, s_pre);
425 #else
426  TEST_ASSERT_NOT_EQUAL (-1, s_pre);
427 #endif
428 
429  if (af_ == AF_INET || af_ == AF_INET6) {
430 #ifdef ZMQ_HAVE_WINDOWS
431  const char flag = '\1';
432 #elif defined ZMQ_HAVE_VXWORKS
433  char flag = '\1';
434 #else
435  int flag = 1;
436 #endif
437  struct addrinfo *in, hint;
438  memset (&hint, 0, sizeof (struct addrinfo));
439  hint.ai_flags = AI_NUMERICSERV;
440  hint.ai_family = af_;
441  hint.ai_socktype = protocol_ == IPPROTO_UDP ? SOCK_DGRAM : SOCK_STREAM;
442  hint.ai_protocol = protocol_ == IPPROTO_UDP ? IPPROTO_UDP : IPPROTO_TCP;
443 
445  setsockopt (s_pre, SOL_SOCKET, SO_REUSEADDR, &flag, sizeof (int)));
447  getaddrinfo (address_, port_, &hint, &in));
449  memcpy (&addr, in->ai_addr, in->ai_addrlen);
450  addr_len = (socklen_t) in->ai_addrlen;
451  freeaddrinfo (in);
452  } else {
453 #if defined(ZMQ_HAVE_IPC)
454  // Cannot cast addr as gcc 4.4 will fail with strict aliasing errors
455  (*(struct sockaddr_un *) &addr).sun_family = AF_UNIX;
456  addr_len = sizeof (struct sockaddr_un);
457 #if defined ZMQ_HAVE_WINDOWS
458  char buffer[MAX_PATH] = "";
459 
462  strcat (buffer, "/ipc");
463 #else
464  char buffer[PATH_MAX] = "";
465  strcpy (buffer, "tmpXXXXXX");
466 #ifdef HAVE_MKDTEMP
467  TEST_ASSERT_TRUE (mkdtemp (buffer));
468  strcat (buffer, "/socket");
469 #else
470  int fd = mkstemp (buffer);
471  TEST_ASSERT_TRUE (fd != -1);
472  close (fd);
473 #endif
474 #endif
475  strcpy ((*(struct sockaddr_un *) &addr).sun_path, buffer);
476  memcpy (my_endpoint_, "ipc://", 7);
477  strcat (my_endpoint_, buffer);
478 
479  // TODO check return value of unlink
480  unlink (buffer);
481 #else
482  return retired_fd;
483 #endif
484  }
485 
487  bind (s_pre, (struct sockaddr *) &addr, addr_len));
488  TEST_ASSERT_SUCCESS_RAW_ERRNO (listen (s_pre, SOMAXCONN));
489 
490  if (af_ == AF_INET || af_ == AF_INET6) {
491  addr_len = sizeof (struct sockaddr_storage);
493  getsockname (s_pre, (struct sockaddr *) &addr, &addr_len));
494  snprintf (
495  my_endpoint_, 6 + strlen (address_) + 7 * sizeof (char), "%s://%s:%u",
496  protocol_ == IPPROTO_TCP ? "tcp"
497  : protocol_ == IPPROTO_UDP ? "udp"
498  : protocol_ == IPPROTO_WSS ? "wss"
499  : "ws",
500  address_,
501  af_ == AF_INET ? ntohs ((*(struct sockaddr_in *) &addr).sin_port)
502  : ntohs ((*(struct sockaddr_in6 *) &addr).sin6_port));
503  }
504 
505  return s_pre;
506 }
507 
508 bool streq (const char *lhs_, const char *rhs_)
509 {
510  return strcmp (lhs_, rhs_) == 0;
511 }
512 
513 bool strneq (const char *lhs_, const char *rhs_)
514 {
515  return strcmp (lhs_, rhs_) != 0;
516 }
517 
518 #if defined _WIN32
519 int fuzzer_corpus_encode (const char *dirname,
520  uint8_t ***data,
521  size_t **len,
522  size_t *num_cases)
523 {
524  (void) dirname;
525  (void) data;
526  (void) len;
527  (void) num_cases;
528 
529  return -1;
530 }
531 
532 #else
533 
534 int fuzzer_corpus_encode (const char *dirname,
535  uint8_t ***data,
536  size_t **len,
537  size_t *num_cases)
538 {
539  TEST_ASSERT_NOT_NULL (dirname);
542 
543  struct dirent *ent;
544  DIR *dir = opendir (dirname);
545  if (!dir)
546  return -1;
547 
548  *len = NULL;
549  *data = NULL;
550  *num_cases = 0;
551 
552  while ((ent = readdir (dir)) != NULL) {
553  if (!strcmp (ent->d_name, ".") || !strcmp (ent->d_name, ".."))
554  continue;
555 
556  char *filename =
557  (char *) malloc (strlen (dirname) + strlen (ent->d_name) + 2);
558  TEST_ASSERT_NOT_NULL (filename);
559  strcpy (filename, dirname);
560  strcat (filename, "/");
561  strcat (filename, ent->d_name);
562  FILE *f = fopen (filename, "r");
563  free (filename);
564  if (!f)
565  continue;
566 
567  fseek (f, 0, SEEK_END);
568  size_t file_len = ftell (f);
569  fseek (f, 0, SEEK_SET);
570  if (file_len == 0) {
571  fclose (f);
572  continue;
573  }
574 
575  *len = (size_t *) realloc (*len, (*num_cases + 1) * sizeof (size_t));
577  *(*len + *num_cases) = file_len;
578  *data =
579  (uint8_t **) realloc (*data, (*num_cases + 1) * sizeof (uint8_t *));
581  *(*data + *num_cases) =
582  (uint8_t *) malloc (file_len * sizeof (uint8_t));
583  TEST_ASSERT_NOT_NULL (*(*data + *num_cases));
584  size_t read_bytes = 0;
585  read_bytes = fread (*(*data + *num_cases), 1, file_len, f);
586  TEST_ASSERT_EQUAL (file_len, read_bytes);
587  (*num_cases)++;
588 
589  fclose (f);
590  }
591 
592  closedir (dir);
593 
594  return 0;
595 }
596 #endif
TEST_ASSERT_EQUAL_STRING
#define TEST_ASSERT_EQUAL_STRING(expected, actual)
Definition: unity.h:235
end
GLuint GLuint end
Definition: glcorearb.h:2858
NULL
NULL
Definition: test_security_zap.cpp:405
recv_bounce_msg_fail
static void recv_bounce_msg_fail(void *socket_)
Definition: testutil.cpp:98
msleep
void msleep(int milliseconds_)
Definition: testutil.cpp:227
TEST_ASSERT_TRUE
#define TEST_ASSERT_TRUE(condition)
Definition: unity.h:121
is_ipv6_available
int is_ipv6_available()
Definition: testutil.cpp:236
readdir
static struct dirent * readdir(DIR *dirp)
Definition: dirent.h:732
EAGAIN
#define EAGAIN
Definition: errno.hpp:14
dirent::d_name
char d_name[PATH_MAX+1]
Definition: dirent.h:278
errno
int errno
IPPROTO_WSS
#define IPPROTO_WSS
Definition: libzmq/tests/testutil.hpp:195
address
const char * address
Definition: builds/zos/test_fork.cpp:6
rep
void * rep[services]
Definition: test_req_relaxed.cpp:11
TEST_ASSERT_FALSE
#define TEST_ASSERT_FALSE(condition)
Definition: unity.h:123
close_zero_linger
void close_zero_linger(void *socket_)
Definition: testutil.cpp:193
s_recv
char * s_recv(void *socket_)
Definition: testutil.cpp:123
zmq_msg_data
ZMQ_EXPORT void * zmq_msg_data(zmq_msg_t *msg_)
Definition: zmq.cpp:642
closedir
static int closedir(DIR *dirp)
Definition: dirent.h:843
TEST_ASSERT_NOT_EQUAL
#define TEST_ASSERT_NOT_EQUAL(expected, actual)
Definition: unity.h:134
bounce_content
const char bounce_content[]
Definition: testutil.cpp:49
retired_fd
@ retired_fd
Definition: libzmq/tests/testutil.hpp:117
zmq_msg_size
ZMQ_EXPORT size_t zmq_msg_size(const zmq_msg_t *msg_)
Definition: zmq.cpp:647
bind_bsd_socket
sockaddr_in bind_bsd_socket(int socket_)
Definition: testutil.cpp:329
testutil_unity.hpp
snprintf
int snprintf(char *str, size_t size, const char *format,...)
Definition: port.cc:64
dirent.h
fuzzer_corpus_encode
int fuzzer_corpus_encode(const char *dirname, uint8_t ***data, size_t **len, size_t *num_cases)
Definition: testutil.cpp:534
zmq_setsockopt
ZMQ_EXPORT int zmq_setsockopt(void *s_, int option_, const void *optval_, size_t optvallen_)
Definition: zmq.cpp:250
ZMQ_SNDTIMEO
#define ZMQ_SNDTIMEO
Definition: zmq.h:297
TEST_ASSERT_SUCCESS_RAW_ERRNO
#define TEST_ASSERT_SUCCESS_RAW_ERRNO(expr)
Definition: testutil_unity.hpp:69
testutil.hpp
ETERM
#define ETERM
Definition: zmq.h:161
zmq_msg_t
Definition: zmq.h:218
ZMQ_REP
#define ZMQ_REP
Definition: zmq.h:262
PORT_6
#define PORT_6
Definition: libzmq/tests/testutil.hpp:45
dirent
Definition: dirent.h:261
connect_socket
fd_t connect_socket(const char *endpoint_, const int af_, const int protocol_)
Definition: testutil.cpp:353
MAX_SOCKET_STRING
#define MAX_SOCKET_STRING
Definition: libzmq/tests/testutil.hpp:35
zmq_bind
ZMQ_EXPORT int zmq_bind(void *s_, const char *addr_)
Definition: zmq.cpp:299
size
#define size
Definition: glcorearb.h:2944
zmq_msg_recv
ZMQ_EXPORT int zmq_msg_recv(zmq_msg_t *msg_, void *s_, int flags_)
Definition: zmq.cpp:617
timeout
GLbitfield GLuint64 timeout
Definition: glcorearb.h:3588
zmq_socket
ZMQ_EXPORT void * zmq_socket(void *, int type_)
Definition: zmq.cpp:230
is_tipc_available
int is_tipc_available()
Definition: testutil.cpp:283
buffer
Definition: buffer_processor.h:43
send_bounce_msg
static void send_bounce_msg(void *socket_)
Definition: testutil.cpp:51
TEST_ASSERT_EQUAL
#define TEST_ASSERT_EQUAL(expected, actual)
Definition: unity.h:133
TEST_ASSERT_EQUAL_INT
#define TEST_ASSERT_EQUAL_INT(expected, actual)
Definition: unity.h:128
streq
bool streq(const char *lhs_, const char *rhs_)
Definition: testutil.cpp:508
zmq_msg_init
ZMQ_EXPORT int zmq_msg_init(zmq_msg_t *msg_)
Definition: zmq.cpp:587
void
typedef void(APIENTRY *GLDEBUGPROCARB)(GLenum source
zmq_close
ZMQ_EXPORT int zmq_close(void *s_)
Definition: zmq.cpp:241
expect_bounce_fail
void expect_bounce_fail(void *server_, void *client_)
Definition: testutil.cpp:107
ZMQ_LINGER
#define ZMQ_LINGER
Definition: zmq.h:288
send_string_expect_success
void send_string_expect_success(void *socket_, const char *str_, int flags_)
Definition: testutil_unity.cpp:94
SEQ_END
const char * SEQ_END
Definition: testutil.cpp:47
len
int len
Definition: php/ext/google/protobuf/map.c:206
s_send_seq
void s_send_seq(void *socket_,...)
Definition: testutil.cpp:135
ZMQ_RCVTIMEO
#define ZMQ_RCVTIMEO
Definition: zmq.h:296
DIR
Definition: dirent.h:282
zmq_recv
ZMQ_EXPORT int zmq_recv(void *s_, void *buf_, size_t len_, int flags_)
Definition: zmq.cpp:487
strneq
bool strneq(const char *lhs_, const char *rhs_)
Definition: testutil.cpp:513
size
GLsizeiptr size
Definition: glcorearb.h:2943
recv_string_expect_success
void recv_string_expect_success(void *socket_, const char *str_, int flags_)
Definition: testutil_unity.cpp:101
bounce
void bounce(void *server_, void *client_)
Definition: testutil.cpp:71
send_bounce_msg_may_fail
static void send_bounce_msg_may_fail(void *socket_)
Definition: testutil.cpp:87
setup_test_environment
void setup_test_environment(int timeout_seconds_)
Definition: testutil.cpp:201
test_inet_pton
int test_inet_pton(int af_, const char *src_, void *dst_)
Definition: testutil.cpp:303
s_recv_seq
void s_recv_seq(void *socket_,...)
Definition: testutil.cpp:158
ZMQ_SNDMORE
#define ZMQ_SNDMORE
Definition: zmq.h:359
zmq_init
ZMQ_EXPORT void * zmq_init(int io_threads_)
Definition: zmq.cpp:196
fd_t
zmq_fd_t fd_t
Definition: libzmq/tests/testutil.hpp:98
TEST_ASSERT_FAILURE_ERRNO
#define TEST_ASSERT_FAILURE_ERRNO(error_code, expr)
Definition: testutil_unity.hpp:95
test_addr
static void test_addr(int family_, const char *addr_, bool multicast_)
Definition: unittest_ip_resolver.cpp:785
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: glcorearb.h:2879
opendir
static DIR * opendir(const char *dirname)
Definition: dirent.h:676
TEST_ASSERT_SUCCESS_RAW_ZERO_ERRNO
#define TEST_ASSERT_SUCCESS_RAW_ZERO_ERRNO(expr)
Definition: testutil_unity.hpp:79
f
GLfloat f
Definition: glcorearb.h:3964
zmq_ctx_term
ZMQ_EXPORT int zmq_ctx_term(void *context_)
Definition: zmq.cpp:128
zmq_send
ZMQ_EXPORT int zmq_send(void *s_, const void *buf_, size_t len_, int flags_)
Definition: zmq.cpp:377
TEST_ASSERT_NOT_NULL
#define TEST_ASSERT_NOT_NULL(pointer)
Definition: unity.h:125
ZMQ_RCVMORE
#define ZMQ_RCVMORE
Definition: zmq.h:284
zmq_msg_close
ZMQ_EXPORT int zmq_msg_close(zmq_msg_t *msg_)
Definition: zmq.cpp:625
TEST_ASSERT_SUCCESS_ERRNO
#define TEST_ASSERT_SUCCESS_ERRNO(expr)
Definition: proxy_thr.cpp:47
recv_bounce_msg
static void recv_bounce_msg(void *socket_)
Definition: testutil.cpp:57
zmq_getsockopt
ZMQ_EXPORT int zmq_getsockopt(void *s_, int option_, void *optval_, size_t *optvallen_)
Definition: zmq.cpp:261
bind_socket_resolve_port
fd_t bind_socket_resolve_port(const char *address_, const char *port_, char *my_endpoint_, const int af_, const int protocol_)
Definition: testutil.cpp:410
rhs_
int rhs_
Definition: gmock-matchers_test.cc:131
PATH_MAX
#define PATH_MAX
Definition: testutil.cpp:44
AI_NUMERICSERV
#define AI_NUMERICSERV
Definition: windows.hpp:66


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