test_req_correlate.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 
9 {
11  void *router = test_context_socket (ZMQ_ROUTER);
12 
13  int enabled = 1;
15  zmq_setsockopt (req, ZMQ_REQ_CORRELATE, &enabled, sizeof (int)));
16 
18  bind_loopback_ipv4 (router, my_endpoint, sizeof my_endpoint);
19 
21 
22  // Send a multi-part request.
23  s_send_seq (req, "ABC", "DEF", SEQ_END);
24 
25  zmq_msg_t msg;
26  zmq_msg_init (&msg);
27 
28  // Receive peer routing id
29  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_recv (&msg, router, 0));
31  zmq_msg_t peer_id_msg;
32  zmq_msg_init (&peer_id_msg);
33  zmq_msg_copy (&peer_id_msg, &msg);
34 
35  int more = 0;
36  size_t more_size = sizeof (more);
38  zmq_getsockopt (router, ZMQ_RCVMORE, &more, &more_size));
39  TEST_ASSERT_TRUE (more);
40 
41  // Receive request id 1
42  TEST_ASSERT_SUCCESS_ERRNO (zmq_msg_recv (&msg, router, 0));
43  TEST_ASSERT_EQUAL_UINT (sizeof (uint32_t), zmq_msg_size (&msg));
44  const uint32_t req_id = *static_cast<uint32_t *> (zmq_msg_data (&msg));
45  zmq_msg_t req_id_msg;
46  zmq_msg_init (&req_id_msg);
47  zmq_msg_copy (&req_id_msg, &msg);
48 
49  more = 0;
50  more_size = sizeof (more);
52  zmq_getsockopt (router, ZMQ_RCVMORE, &more, &more_size));
53  TEST_ASSERT_TRUE (more);
54 
55  // Receive the rest.
56  s_recv_seq (router, 0, "ABC", "DEF", SEQ_END);
57 
58  uint32_t bad_req_id = req_id + 1;
59 
60  // Send back a bad reply: wrong req id, 0, data
61  zmq_msg_copy (&msg, &peer_id_msg);
63  zmq_msg_init_data (&msg, &bad_req_id, sizeof (uint32_t), NULL, NULL);
65  s_send_seq (router, 0, "DATA", SEQ_END);
66 
67  // Send back a good reply: good req id, 0, data
68  zmq_msg_copy (&msg, &peer_id_msg);
70  zmq_msg_copy (&msg, &req_id_msg);
72  s_send_seq (router, 0, "GHI", SEQ_END);
73 
74  // Receive reply. If bad reply got through, we wouldn't see
75  // this particular data.
76  s_recv_seq (req, "GHI", SEQ_END);
77 
81 
84 }
85 
86 int main ()
87 {
89 
90  UNITY_BEGIN ();
92  return UNITY_END ();
93 }
NULL
NULL
Definition: test_security_zap.cpp:405
UNITY_END
return UNITY_END()
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
TEST_ASSERT_EQUAL_UINT
#define TEST_ASSERT_EQUAL_UINT(expected, actual)
Definition: unity.h:135
SETUP_TEARDOWN_TESTCONTEXT
#define SETUP_TEARDOWN_TESTCONTEXT
Definition: testutil_unity.hpp:172
main
int main()
Definition: test_req_correlate.cpp:86
bind_loopback_ipv4
void bind_loopback_ipv4(void *socket_, char *my_endpoint_, size_t len_)
Definition: testutil_unity.cpp:246
test_context_socket_close_zero_linger
void * test_context_socket_close_zero_linger(void *socket_)
Definition: testutil_unity.cpp:215
ZMQ_REQ
#define ZMQ_REQ
Definition: zmq.h:261
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_msg_init_data
ZMQ_EXPORT int zmq_msg_init_data(zmq_msg_t *msg_, void *data_, size_t size_, zmq_free_fn *ffn_, void *hint_)
Definition: zmq.cpp:602
zmq_msg_size
ZMQ_EXPORT size_t zmq_msg_size(const zmq_msg_t *msg_)
Definition: zmq.cpp:647
enabled
GLenum GLenum GLsizei const GLuint GLboolean enabled
Definition: glcorearb.h:4174
TEST_ASSERT_GREATER_THAN_INT
#define TEST_ASSERT_GREATER_THAN_INT(threshold, actual)
Definition: unity.h:153
testutil_unity.hpp
zmq_setsockopt
ZMQ_EXPORT int zmq_setsockopt(void *s_, int option_, const void *optval_, size_t optvallen_)
Definition: zmq.cpp:250
testutil.hpp
ZMQ_ROUTER
#define ZMQ_ROUTER
Definition: zmq.h:264
zmq_msg_t
Definition: zmq.h:218
my_endpoint
char my_endpoint[MAX_SOCKET_STRING]
Definition: test_security_curve.cpp:31
MAX_SOCKET_STRING
#define MAX_SOCKET_STRING
Definition: libzmq/tests/testutil.hpp:35
zmq_msg_recv
ZMQ_EXPORT int zmq_msg_recv(zmq_msg_t *msg_, void *s_, int flags_)
Definition: zmq.cpp:617
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
SEQ_END
const char * SEQ_END
Definition: testutil.cpp:47
req
void * req
Definition: test_req_relaxed.cpp:10
s_send_seq
void s_send_seq(void *socket_,...)
Definition: testutil.cpp:135
setup_test_environment
void setup_test_environment(int timeout_seconds_)
Definition: testutil.cpp:201
UNITY_BEGIN
UNITY_BEGIN()
s_recv_seq
void s_recv_seq(void *socket_,...)
Definition: testutil.cpp:158
zmq_msg_copy
ZMQ_EXPORT int zmq_msg_copy(zmq_msg_t *dest_, zmq_msg_t *src_)
Definition: zmq.cpp:636
ZMQ_SNDMORE
#define ZMQ_SNDMORE
Definition: zmq.h:359
ZMQ_REQ_CORRELATE
#define ZMQ_REQ_CORRELATE
Definition: zmq.h:317
test_req_correlate
SETUP_TEARDOWN_TESTCONTEXT void test_req_correlate()
Definition: test_req_correlate.cpp:8
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
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