test_app_meta.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 #include <unity.h>
6 
7 #include <string.h>
8 
9 void setUp ()
10 {
11 }
12 void tearDown ()
13 {
14 }
15 
17 {
18  void *ctx;
19  zmq_msg_t msg;
20  void *rep_sock, *req_sock;
22  const char *req_hello = "X-hello:hello";
23  const char *req_connection = "X-connection:primary";
24  const char *req_z85 = "X-bin:009c6";
25  const char *rep_hello = "X-hello:world";
26  const char *rep_connection = "X-connection:backup";
27  const char *bad_strings[] = {
28  ":",
29  "key:",
30  ":value",
31  "keyvalue",
32  "",
33  "X-"
34  "KeyTooLongKeyTooLongKeyTooLongKeyTooLongKeyTooLongKeyTooLongKeyTooLongKe"
35  "yTooLongKeyTooLongKeyTooLongKeyTooLongKeyTooLongKeyTooLongKeyTooLongKeyT"
36  "ooLongKeyTooLongKeyTooLongKeyTooLongKeyTooLongKeyTooLongKeyTooLongKeyToo"
37  "LongKeyTooLongKeyTooLongKeyTooLongKeyTooLong:value"};
38 
39  ctx = zmq_ctx_new ();
40  rep_sock = zmq_socket (ctx, ZMQ_REP);
41  TEST_ASSERT_NOT_NULL (rep_sock);
42  req_sock = zmq_socket (ctx, ZMQ_REQ);
43  TEST_ASSERT_NOT_NULL (req_sock);
44 
45  int rc =
46  zmq_setsockopt (rep_sock, ZMQ_METADATA, rep_hello, strlen (rep_hello));
47  TEST_ASSERT_EQUAL_INT (0, rc);
48 
49  int l = 0;
50  rc = zmq_setsockopt (rep_sock, ZMQ_LINGER, &l, sizeof (l));
51  TEST_ASSERT_EQUAL_INT (0, rc);
52 
53  rc = zmq_setsockopt (rep_sock, ZMQ_METADATA, rep_connection,
54  strlen (rep_connection));
55  TEST_ASSERT_EQUAL_INT (0, rc);
56 
57  for (int i = 0; i < 6; i++) {
58  rc = zmq_setsockopt (rep_sock, ZMQ_METADATA, bad_strings[i],
59  strlen (bad_strings[i]));
60  TEST_ASSERT_EQUAL_INT (-1, rc);
61  }
62 
64 
65  l = 0;
66  rc = zmq_setsockopt (req_sock, ZMQ_LINGER, &l, sizeof (l));
67  TEST_ASSERT_EQUAL_INT (0, rc);
68 
69  rc = zmq_setsockopt (req_sock, ZMQ_METADATA, req_hello, strlen (req_hello));
70  TEST_ASSERT_EQUAL_INT (0, rc);
71 
72  rc = zmq_setsockopt (req_sock, ZMQ_METADATA, req_connection,
73  strlen (req_connection));
74  TEST_ASSERT_EQUAL_INT (0, rc);
75 
76  rc = zmq_setsockopt (req_sock, ZMQ_METADATA, req_z85, strlen (req_z85));
77  TEST_ASSERT_EQUAL_INT (0, rc);
78 
79  rc = zmq_connect (req_sock, connect_address);
80  TEST_ASSERT_EQUAL_INT (0, rc);
81 
82  rc = zmq_msg_init_size (&msg, 1);
83  TEST_ASSERT_EQUAL_INT (0, rc);
84 
85  char *data = static_cast<char *> (zmq_msg_data (&msg));
86  data[0] = 1;
87 
88  rc = zmq_msg_send (&msg, req_sock, 0);
89  TEST_ASSERT_EQUAL_INT (1, rc);
90 
91  rc = zmq_msg_init (&msg);
92  TEST_ASSERT_EQUAL_INT (0, rc);
93 
94  rc = zmq_msg_recv (&msg, rep_sock, 0);
95  TEST_ASSERT_EQUAL_INT (1, rc);
96 
97  TEST_ASSERT_EQUAL_STRING ("hello", zmq_msg_gets (&msg, "X-hello"));
98  TEST_ASSERT_EQUAL_STRING ("primary", zmq_msg_gets (&msg, "X-connection"));
99  const char *const bindata = zmq_msg_gets (&msg, "X-bin");
100  TEST_ASSERT_NOT_NULL (bindata);
101  uint8_t rawdata[4];
102  const uint8_t *const ret = zmq_z85_decode (rawdata, bindata);
103  TEST_ASSERT_NOT_NULL (ret);
104  TEST_ASSERT_EQUAL_UINT8 (0, rawdata[0]);
105  TEST_ASSERT_EQUAL_UINT8 (1, rawdata[1]);
106  TEST_ASSERT_EQUAL_UINT8 (2, rawdata[2]);
107  TEST_ASSERT_EQUAL_UINT8 (3, rawdata[3]);
108 
109  TEST_ASSERT_NULL (zmq_msg_gets (&msg, "X-foobar"));
110  TEST_ASSERT_NULL (zmq_msg_gets (&msg, "foobar"));
111 
112  rc = zmq_msg_send (&msg, rep_sock, 0);
113  TEST_ASSERT_EQUAL_INT (1, rc);
114 
115  rc = zmq_msg_recv (&msg, req_sock, 0);
116  TEST_ASSERT_EQUAL_INT (1, rc);
117 
118  TEST_ASSERT_EQUAL_STRING ("world", zmq_msg_gets (&msg, "X-hello"));
119  TEST_ASSERT_EQUAL_STRING ("backup", zmq_msg_gets (&msg, "X-connection"));
120 
121  rc = zmq_msg_close (&msg);
122  TEST_ASSERT_EQUAL_INT (0, rc);
123 
124  rc = zmq_close (req_sock);
125  TEST_ASSERT_EQUAL_INT (0, rc);
126 
127  rc = zmq_close (rep_sock);
128  TEST_ASSERT_EQUAL_INT (0, rc);
129 
130  zmq_ctx_term (ctx);
131 }
132 
133 
134 int main ()
135 {
137 
138  UNITY_BEGIN ();
140 
141  return UNITY_END ();
142 }
ZMQ_METADATA
#define ZMQ_METADATA
Definition: zmq_draft.h:27
TEST_ASSERT_EQUAL_STRING
#define TEST_ASSERT_EQUAL_STRING(expected, actual)
Definition: unity.h:235
zmq_z85_decode
ZMQ_EXPORT uint8_t * zmq_z85_decode(uint8_t *dest_, const char *string_)
Definition: zmq_utils.cpp:135
UNITY_END
return UNITY_END()
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
zmq_ctx_new
ZMQ_EXPORT void * zmq_ctx_new(void)
Definition: zmq.cpp:109
test_app_meta_reqrep
void test_app_meta_reqrep()
Definition: test_app_meta.cpp:16
bind_loopback_ipv4
void bind_loopback_ipv4(void *socket_, char *my_endpoint_, size_t len_)
Definition: testutil_unity.cpp:246
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
testutil_unity.hpp
zmq_msg_gets
const ZMQ_EXPORT char * zmq_msg_gets(const zmq_msg_t *msg_, const char *property_)
Definition: zmq.cpp:711
zmq_setsockopt
ZMQ_EXPORT int zmq_setsockopt(void *s_, int option_, const void *optval_, size_t optvallen_)
Definition: zmq.cpp:250
testutil.hpp
zmq_msg_t
Definition: zmq.h:218
ZMQ_REP
#define ZMQ_REP
Definition: zmq.h:262
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
zmq_socket
ZMQ_EXPORT void * zmq_socket(void *, int type_)
Definition: zmq.cpp:230
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
zmq_close
ZMQ_EXPORT int zmq_close(void *s_)
Definition: zmq.cpp:241
i
int i
Definition: gmock-matchers_test.cc:764
unity.h
ZMQ_LINGER
#define ZMQ_LINGER
Definition: zmq.h:288
TEST_ASSERT_EQUAL_UINT8
#define TEST_ASSERT_EQUAL_UINT8(expected, actual)
Definition: unity.h:136
setUp
void setUp()
Definition: test_app_meta.cpp:9
setup_test_environment
void setup_test_environment(int timeout_seconds_)
Definition: testutil.cpp:201
zmq_msg_init_size
ZMQ_EXPORT int zmq_msg_init_size(zmq_msg_t *msg_, size_t size_)
Definition: zmq.cpp:592
UNITY_BEGIN
UNITY_BEGIN()
connect_address
SETUP_TEARDOWN_TESTCONTEXT char connect_address[MAX_SOCKET_STRING]
Definition: tests/test_fork.cpp:14
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: glcorearb.h:2879
tearDown
void tearDown()
Definition: test_app_meta.cpp:12
zmq_ctx_term
ZMQ_EXPORT int zmq_ctx_term(void *context_)
Definition: zmq.cpp:128
main
int main()
Definition: test_app_meta.cpp:134
TEST_ASSERT_NOT_NULL
#define TEST_ASSERT_NOT_NULL(pointer)
Definition: unity.h:125
zmq_msg_close
ZMQ_EXPORT int zmq_msg_close(zmq_msg_t *msg_)
Definition: zmq.cpp:625
TEST_ASSERT_NULL
#define TEST_ASSERT_NULL(pointer)
Definition: unity.h:124


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