test_sub_forward.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 
7 
8 void test ()
9 {
10  char endpoint1[MAX_SOCKET_STRING];
11  char endpoint2[MAX_SOCKET_STRING];
12 
13  // First, create an intermediate device
14  void *xpub = test_context_socket (ZMQ_XPUB);
15  bind_loopback_ipv4 (xpub, endpoint1, sizeof (endpoint1));
16 
17  void *xsub = test_context_socket (ZMQ_XSUB);
18  bind_loopback_ipv4 (xsub, endpoint2, sizeof (endpoint2));
19 
20  // Create a publisher
21  void *pub = test_context_socket (ZMQ_PUB);
22  TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (pub, endpoint2));
23 
24  // Create a subscriber
25  void *sub = test_context_socket (ZMQ_SUB);
26  TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (sub, endpoint1));
27 
28  // Subscribe for all messages.
30 
31  // Pass the subscription upstream through the device
32  char buff[32];
33  int size;
34  TEST_ASSERT_SUCCESS_ERRNO (size = zmq_recv (xpub, buff, sizeof (buff), 0));
35  TEST_ASSERT_SUCCESS_ERRNO (zmq_send (xsub, buff, size, 0));
36 
37  // Wait a bit till the subscription gets to the publisher
39 
40  // Send an empty message
41  send_string_expect_success (pub, "", 0);
42 
43  // Pass the message downstream through the device
44  TEST_ASSERT_SUCCESS_ERRNO (size = zmq_recv (xsub, buff, sizeof (buff), 0));
45  TEST_ASSERT_SUCCESS_ERRNO (zmq_send (xpub, buff, size, 0));
46 
47  // Receive the message in the subscriber
48  recv_string_expect_success (sub, "", 0);
49 
50  // Clean up.
55 }
56 
57 int main ()
58 {
60 
61  UNITY_BEGIN ();
62  RUN_TEST (test);
63  return UNITY_END ();
64 }
UNITY_END
return UNITY_END()
ZMQ_XPUB
#define ZMQ_XPUB
Definition: zmq.h:267
ZMQ_PUB
#define ZMQ_PUB
Definition: zmq.h:259
msleep
void msleep(int milliseconds_)
Definition: testutil.cpp:227
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
bind_loopback_ipv4
void bind_loopback_ipv4(void *socket_, char *my_endpoint_, size_t len_)
Definition: testutil_unity.cpp:246
ZMQ_XSUB
#define ZMQ_XSUB
Definition: zmq.h:268
ZMQ_SUB
#define ZMQ_SUB
Definition: zmq.h:260
zmq_connect
ZMQ_EXPORT int zmq_connect(void *s_, const char *addr_)
Definition: zmq.cpp:307
testutil_unity.hpp
main
int main()
Definition: test_sub_forward.cpp:57
zmq_setsockopt
ZMQ_EXPORT int zmq_setsockopt(void *s_, int option_, const void *optval_, size_t optvallen_)
Definition: zmq.cpp:250
testutil.hpp
MAX_SOCKET_STRING
#define MAX_SOCKET_STRING
Definition: libzmq/tests/testutil.hpp:35
size
#define size
Definition: glcorearb.h:2944
test_context_socket
void * test_context_socket(int type_)
Definition: testutil_unity.cpp:200
SETTLE_TIME
#define SETTLE_TIME
Definition: libzmq/tests/testutil.hpp:31
test
SETUP_TEARDOWN_TESTCONTEXT void test()
Definition: test_sub_forward.cpp:8
send_string_expect_success
void send_string_expect_success(void *socket_, const char *str_, int flags_)
Definition: testutil_unity.cpp:94
zmq_recv
ZMQ_EXPORT int zmq_recv(void *s_, void *buf_, size_t len_, int flags_)
Definition: zmq.cpp:487
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
setup_test_environment
void setup_test_environment(int timeout_seconds_)
Definition: testutil.cpp:201
UNITY_BEGIN
UNITY_BEGIN()
zmq_send
ZMQ_EXPORT int zmq_send(void *s_, const void *buf_, size_t len_, int flags_)
Definition: zmq.cpp:377
test_context_socket_close
void * test_context_socket_close(void *socket_)
Definition: testutil_unity.cpp:208
TEST_ASSERT_SUCCESS_ERRNO
#define TEST_ASSERT_SUCCESS_ERRNO(expr)
Definition: proxy_thr.cpp:47


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