test_reqrep_device_tipc.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 // TODO this is heavily duplicated with test_reqrep_device.cpp
10 {
11  // Create a req/rep device.
12  void *dealer = test_context_socket (ZMQ_DEALER);
13  TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (dealer, "tipc://{5560,0,0}"));
14  void *router = test_context_socket (ZMQ_ROUTER);
15  TEST_ASSERT_SUCCESS_ERRNO (zmq_bind (router, "tipc://{5561,0,0}"));
16 
17  // Create a worker.
19  TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (rep, "tipc://{5560,0}@0.0.0"));
20 
21  // Create a client.
23  TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (req, "tipc://{5561,0}@0.0.0"));
24 
25  // Send a request.
27  send_string_expect_success (req, "DEF", 0);
28 
29  // Pass the request through the device.
30  for (int i = 0; i != 4; i++) {
31  zmq_msg_t msg;
33  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_recv (&msg, router, 0));
34  int rcvmore;
35  size_t sz = sizeof (rcvmore);
37  zmq_getsockopt (router, ZMQ_RCVMORE, &rcvmore, &sz));
39  zmq_msg_send (&msg, dealer, rcvmore ? ZMQ_SNDMORE : 0));
40  }
41 
42  // Receive the request.
43  recv_string_expect_success (rep, "ABC", 0);
44  int rcvmore;
45  size_t sz = sizeof (rcvmore);
47  zmq_getsockopt (rep, ZMQ_RCVMORE, &rcvmore, &sz));
48  TEST_ASSERT_TRUE (rcvmore);
49  recv_string_expect_success (rep, "DEF", 0);
51  zmq_getsockopt (rep, ZMQ_RCVMORE, &rcvmore, &sz));
52  TEST_ASSERT_FALSE (rcvmore);
53 
54  // Send the reply.
56  send_string_expect_success (rep, "JKL", 0);
57 
58  // Pass the reply through the device.
59  for (int i = 0; i != 4; i++) {
60  zmq_msg_t msg;
62  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_recv (&msg, dealer, 0));
63  int rcvmore;
64  size_t sz = sizeof (rcvmore);
66  zmq_getsockopt (dealer, ZMQ_RCVMORE, &rcvmore, &sz));
68  zmq_msg_send (&msg, router, rcvmore ? ZMQ_SNDMORE : 0));
69  }
70 
71  // Receive the reply.
72  recv_string_expect_success (req, "GHI", 0);
74  zmq_getsockopt (req, ZMQ_RCVMORE, &rcvmore, &sz));
75  TEST_ASSERT_TRUE (rcvmore);
76  recv_string_expect_success (req, "JKL", 0);
78  zmq_getsockopt (req, ZMQ_RCVMORE, &rcvmore, &sz));
79  TEST_ASSERT_FALSE (rcvmore);
80 
81  // Clean up.
86 }
87 
88 int main ()
89 {
90  if (!is_tipc_available ()) {
91  printf ("TIPC environment unavailable, skipping test\n");
92  return 77;
93  }
94 
95  UNITY_BEGIN ();
97  return UNITY_END ();
98 }
UNITY_END
return UNITY_END()
main
int main()
Definition: test_reqrep_device_tipc.cpp:88
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
RUN_TEST
#define RUN_TEST(func)
Definition: unity_internals.h:615
SETUP_TEARDOWN_TESTCONTEXT
#define SETUP_TEARDOWN_TESTCONTEXT
Definition: testutil_unity.hpp:172
rep
void * rep[services]
Definition: test_req_relaxed.cpp:11
TEST_ASSERT_FALSE
#define TEST_ASSERT_FALSE(condition)
Definition: unity.h:123
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
ZMQ_DEALER
#define ZMQ_DEALER
Definition: zmq.h:263
testutil.hpp
ZMQ_ROUTER
#define ZMQ_ROUTER
Definition: zmq.h:264
zmq_msg_t
Definition: zmq.h:218
ZMQ_REP
#define ZMQ_REP
Definition: zmq.h:262
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
is_tipc_available
int is_tipc_available()
Definition: testutil.cpp:283
test_context_socket
void * test_context_socket(int type_)
Definition: testutil_unity.cpp:200
zmq_msg_init
ZMQ_EXPORT int zmq_msg_init(zmq_msg_t *msg_)
Definition: zmq.cpp:587
test_roundtrip
SETUP_TEARDOWN_TESTCONTEXT void test_roundtrip()
Definition: test_reqrep_device_tipc.cpp:9
i
int i
Definition: gmock-matchers_test.cc:764
send_string_expect_success
void send_string_expect_success(void *socket_, const char *str_, int flags_)
Definition: testutil_unity.cpp:94
req
void * req
Definition: test_req_relaxed.cpp:10
recv_string_expect_success
void recv_string_expect_success(void *socket_, const char *str_, int flags_)
Definition: testutil_unity.cpp:101
UNITY_BEGIN
UNITY_BEGIN()
ZMQ_SNDMORE
#define ZMQ_SNDMORE
Definition: zmq.h:359
test_context_socket_close
void * test_context_socket_close(void *socket_)
Definition: testutil_unity.cpp:208
ZMQ_RCVMORE
#define ZMQ_RCVMORE
Definition: zmq.h:284
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