test_disconnect_inproc.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 #define ZMQ_PREPARE_STRING(msg, data, size) \
12  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_init (&msg)); \
13  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_init_size (&msg, size + 1)); \
14  memcpy (zmq_msg_data (&msg), data, size + 1);
15 
16 static int publicationsReceived = 0;
17 static bool isSubscribed = false;
18 
20 {
21  void *pub_socket = test_context_socket (ZMQ_XPUB);
22  void *sub_socket = test_context_socket (ZMQ_SUB);
24  zmq_setsockopt (sub_socket, ZMQ_SUBSCRIBE, "foo", 3));
25 
27  zmq_bind (pub_socket, "inproc://someInProcDescriptor"));
28 
29  int more;
30  size_t more_size = sizeof (more);
31 
32  for (int iteration = 0;; ++iteration) {
33  zmq_pollitem_t items[] = {
34  {sub_socket, 0, ZMQ_POLLIN, 0}, // read publications
35  {pub_socket, 0, ZMQ_POLLIN, 0}, // read subscriptions
36  };
37  int rc = zmq_poll (items, 2, 100);
38 
39  if (items[1].revents & ZMQ_POLLIN) {
40  for (more = 1; more;) {
41  zmq_msg_t msg;
42  zmq_msg_init (&msg);
43  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_recv (&msg, pub_socket, 0));
44  const char *const buffer =
45  static_cast<const char *> (zmq_msg_data (&msg));
46 
47  if (buffer[0] == 0) {
49  isSubscribed = false;
50  } else {
52  isSubscribed = true;
53  }
54 
56  zmq_getsockopt (pub_socket, ZMQ_RCVMORE, &more, &more_size));
58  }
59  }
60 
61  if (items[0].revents & ZMQ_POLLIN) {
62  more = 1;
63  for (more = 1; more;) {
64  zmq_msg_t msg;
66  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_recv (&msg, sub_socket, 0));
68  zmq_getsockopt (sub_socket, ZMQ_RCVMORE, &more, &more_size));
70  }
72  }
73  if (iteration == 1) {
75  zmq_connect (sub_socket, "inproc://someInProcDescriptor"));
77  }
78  if (iteration == 4) {
80  zmq_disconnect (sub_socket, "inproc://someInProcDescriptor"));
81  }
82  if (iteration > 4 && rc == 0)
83  break;
84 
85  zmq_msg_t channel_envlp;
86  ZMQ_PREPARE_STRING (channel_envlp, "foo", 3);
88  zmq_msg_send (&channel_envlp, pub_socket, ZMQ_SNDMORE));
89  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_close (&channel_envlp));
90 
92  ZMQ_PREPARE_STRING (message, "this is foo!", 12);
95  }
98 
99  test_context_socket_close (pub_socket);
100  test_context_socket_close (sub_socket);
101 }
102 
103 int main (int, char **)
104 {
106 
107  UNITY_BEGIN ();
109  return UNITY_END ();
110 }
UNITY_END
return UNITY_END()
ZMQ_XPUB
#define ZMQ_XPUB
Definition: zmq.h:267
msleep
void msleep(int milliseconds_)
Definition: testutil.cpp:227
TEST_ASSERT_TRUE
#define TEST_ASSERT_TRUE(condition)
Definition: unity.h:121
zmq_msg_send
ZMQ_EXPORT int zmq_msg_send(zmq_msg_t *msg_, void *s_, int flags_)
Definition: zmq.cpp:609
zmq_poll
ZMQ_EXPORT int zmq_poll(zmq_pollitem_t *items_, int nitems_, long timeout_)
Definition: zmq.cpp:827
RUN_TEST
#define RUN_TEST(func)
Definition: unity_internals.h:615
SETUP_TEARDOWN_TESTCONTEXT
#define SETUP_TEARDOWN_TESTCONTEXT
Definition: testutil_unity.hpp:172
ZMQ_SUBSCRIBE
#define ZMQ_SUBSCRIBE
Definition: zmq.h:278
zmq_pollitem_t
Definition: zmq.h:487
ZMQ_SUB
#define ZMQ_SUB
Definition: zmq.h:260
TEST_ASSERT_FALSE
#define TEST_ASSERT_FALSE(condition)
Definition: unity.h:123
zmq_msg_data
ZMQ_EXPORT void * zmq_msg_data(zmq_msg_t *msg_)
Definition: zmq.cpp:642
zmq_connect
ZMQ_EXPORT int zmq_connect(void *s_, const char *addr_)
Definition: zmq.cpp:307
ZMQ_POLLIN
#define ZMQ_POLLIN
Definition: zmq.h:482
testutil_unity.hpp
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
testutil.hpp
zmq_msg_t
Definition: zmq.h:218
zmq_bind
ZMQ_EXPORT int zmq_bind(void *s_, const char *addr_)
Definition: zmq.cpp:299
zmq_msg_recv
ZMQ_EXPORT int zmq_msg_recv(zmq_msg_t *msg_, void *s_, int flags_)
Definition: zmq.cpp:617
buffer
Definition: buffer_processor.h:43
test_context_socket
void * test_context_socket(int type_)
Definition: testutil_unity.cpp:200
isSubscribed
static bool isSubscribed
Definition: test_disconnect_inproc.cpp:17
SETTLE_TIME
#define SETTLE_TIME
Definition: libzmq/tests/testutil.hpp:31
TEST_ASSERT_EQUAL_INT
#define TEST_ASSERT_EQUAL_INT(expected, actual)
Definition: unity.h:128
zmq_msg_init
ZMQ_EXPORT int zmq_msg_init(zmq_msg_t *msg_)
Definition: zmq.cpp:587
test_disconnect_inproc
void test_disconnect_inproc()
Definition: test_disconnect_inproc.cpp:19
setup_test_environment
void setup_test_environment(int timeout_seconds_)
Definition: testutil.cpp:201
UNITY_BEGIN
UNITY_BEGIN()
ZMQ_SNDMORE
#define ZMQ_SNDMORE
Definition: zmq.h:359
ZMQ_PREPARE_STRING
#define ZMQ_PREPARE_STRING(msg, data, size)
Initialize a zeromq message with a given null-terminated string.
Definition: test_disconnect_inproc.cpp:11
publicationsReceived
static int publicationsReceived
Definition: test_disconnect_inproc.cpp:16
test_context_socket_close
void * test_context_socket_close(void *socket_)
Definition: testutil_unity.cpp:208
main
int main(int, char **)
Definition: test_disconnect_inproc.cpp:103
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
message
GLenum GLuint GLenum GLsizei const GLchar * message
Definition: glcorearb.h:2695
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