test_use_fd.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 <stdlib.h>
7 #include <string.h>
8 #include <unistd.h>
9 
11 
12 #if !defined(ZMQ_HAVE_WINDOWS)
13 
14 void pre_allocate_sock_tcp (void *socket_, char *my_endpoint_)
15 {
16  fd_t s = bind_socket_resolve_port ("127.0.0.1", "0", my_endpoint_);
18  zmq_setsockopt (socket_, ZMQ_USE_FD, &s, sizeof (s)));
19 }
20 
21 typedef void (*pre_allocate_sock_fun_t) (void *, char *);
22 
23 void setup_socket_pair (pre_allocate_sock_fun_t pre_allocate_sock_fun_,
24  int bind_socket_type_,
25  int connect_socket_type_,
26  void **out_sb_,
27  void **out_sc_)
28 {
29  *out_sb_ = test_context_socket (bind_socket_type_);
30 
32  pre_allocate_sock_fun_ (*out_sb_, my_endpoint);
33 
35 
36  *out_sc_ = test_context_socket (connect_socket_type_);
38 }
39 
40 void test_socket_pair (pre_allocate_sock_fun_t pre_allocate_sock_fun_,
41  int bind_socket_type_,
42  int connect_socket_type_)
43 {
44  void *sb, *sc;
45  setup_socket_pair (pre_allocate_sock_fun_, bind_socket_type_,
46  connect_socket_type_, &sb, &sc);
47 
48  bounce (sb, sc);
49 
52 }
53 
54 void test_req_rep (pre_allocate_sock_fun_t pre_allocate_sock_fun_)
55 {
56  test_socket_pair (pre_allocate_sock_fun_, ZMQ_REP, ZMQ_REQ);
57 }
58 
59 void test_pair (pre_allocate_sock_fun_t pre_allocate_sock_fun_)
60 {
61  test_socket_pair (pre_allocate_sock_fun_, ZMQ_PAIR, ZMQ_PAIR);
62 }
63 
64 void test_client_server (pre_allocate_sock_fun_t pre_allocate_sock_fun_)
65 {
66 #if defined(ZMQ_SERVER) && defined(ZMQ_CLIENT)
67  void *sb, *sc;
68  setup_socket_pair (pre_allocate_sock_fun_, ZMQ_SERVER, ZMQ_CLIENT, &sb,
69  &sc);
70 
71  zmq_msg_t msg;
73 
74  char *data = static_cast<char *> (zmq_msg_data (&msg));
75  data[0] = 1;
76 
77  int rc = zmq_msg_send (&msg, sc, ZMQ_SNDMORE);
78  // TODO which error code is expected?
79  TEST_ASSERT_EQUAL_INT (-1, rc);
80 
81  rc = zmq_msg_send (&msg, sc, 0);
82  TEST_ASSERT_EQUAL_INT (1, rc);
83 
85 
86  rc = zmq_msg_recv (&msg, sb, 0);
87  TEST_ASSERT_EQUAL_INT (1, rc);
88 
89  uint32_t routing_id = zmq_msg_routing_id (&msg);
90  TEST_ASSERT_NOT_EQUAL (0, routing_id);
91 
93 
95 
96  data = static_cast<char *> (zmq_msg_data (&msg));
97  data[0] = 2;
98 
100 
101  rc = zmq_msg_send (&msg, sb, ZMQ_SNDMORE);
102  // TODO which error code is expected?
103  TEST_ASSERT_EQUAL_INT (-1, rc);
104 
105  rc = zmq_msg_send (&msg, sb, 0);
106  TEST_ASSERT_EQUAL_INT (1, rc);
107 
108  rc = zmq_msg_recv (&msg, sc, 0);
109  TEST_ASSERT_EQUAL_INT (1, rc);
110 
111  routing_id = zmq_msg_routing_id (&msg);
112  TEST_ASSERT_EQUAL_INT (0, routing_id);
113 
115 
118 #endif
119 }
120 
122 {
124 }
125 
127 {
129 }
130 
132 {
133 #if defined(ZMQ_SERVER) && defined(ZMQ_CLIENT)
135 #endif
136 }
137 
139 
140 void pre_allocate_sock_ipc (void *sb_, char *my_endpoint_)
141 {
142  fd_t s = bind_socket_resolve_port ("", "", my_endpoint_, AF_UNIX, 0);
144  zmq_setsockopt (sb_, ZMQ_USE_FD, &s, sizeof (s)));
145  strcpy (ipc_endpoint, strchr (my_endpoint_, '/') + 2);
146 }
147 
149 {
151 
153 }
154 
156 {
158 
160 }
161 
163 {
164 #if defined(ZMQ_SERVER) && defined(ZMQ_CLIENT)
166 
168 #endif
169 }
170 
171 int main ()
172 {
174 
175  UNITY_BEGIN ();
179 
183 
184  return UNITY_END ();
185 }
186 #else
187 int main ()
188 {
189  return 0;
190 }
191 #endif
bounce
static void bounce(void *socket_)
Definition: test_req_relaxed.cpp:50
test_client_server_tcp
void test_client_server_tcp()
Definition: test_use_fd.cpp:131
test_client_server_ipc
void test_client_server_ipc()
Definition: test_use_fd.cpp:162
ZMQ_SERVER
#define ZMQ_SERVER
Definition: zmq_draft.h:14
UNITY_END
return UNITY_END()
ZMQ_USE_FD
#define ZMQ_USE_FD
Definition: zmq.h:348
s
XmlRpcServer s
zmq_msg_send
ZMQ_EXPORT int zmq_msg_send(zmq_msg_t *msg_, void *s_, int flags_)
Definition: zmq.cpp:609
ZMQ_CLIENT
#define ZMQ_CLIENT
Definition: zmq_draft.h:15
RUN_TEST
#define RUN_TEST(func)
Definition: unity_internals.h:615
test_req_rep
void test_req_rep(pre_allocate_sock_fun_t pre_allocate_sock_fun_)
Definition: test_use_fd.cpp:54
test_socket_pair
void test_socket_pair(pre_allocate_sock_fun_t pre_allocate_sock_fun_, int bind_socket_type_, int connect_socket_type_)
Definition: test_use_fd.cpp:40
SETUP_TEARDOWN_TESTCONTEXT
#define SETUP_TEARDOWN_TESTCONTEXT
Definition: testutil_unity.hpp:172
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
TEST_ASSERT_NOT_EQUAL
#define TEST_ASSERT_NOT_EQUAL(expected, actual)
Definition: unity.h:134
testutil_unity.hpp
test_req_rep_ipc
void test_req_rep_ipc()
Definition: test_use_fd.cpp:148
test_pair
void test_pair(pre_allocate_sock_fun_t pre_allocate_sock_fun_)
Definition: test_use_fd.cpp:59
zmq_setsockopt
ZMQ_EXPORT int zmq_setsockopt(void *s_, int option_, const void *optval_, size_t optvallen_)
Definition: zmq.cpp:250
main
int main()
Definition: test_use_fd.cpp:171
sb
void * sb
Definition: test_channel.cpp:8
testutil.hpp
zmq_msg_t
Definition: zmq.h:218
ZMQ_REP
#define ZMQ_REP
Definition: zmq.h:262
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_bind
ZMQ_EXPORT int zmq_bind(void *s_, const char *addr_)
Definition: zmq.cpp:299
pre_allocate_sock_ipc
void pre_allocate_sock_ipc(void *sb_, char *my_endpoint_)
Definition: test_use_fd.cpp:140
zmq_msg_recv
ZMQ_EXPORT int zmq_msg_recv(zmq_msg_t *msg_, void *s_, int flags_)
Definition: zmq.cpp:617
sc
void * sc
Definition: test_channel.cpp:9
test_context_socket
void * test_context_socket(int type_)
Definition: testutil_unity.cpp:200
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
void
typedef void(APIENTRY *GLDEBUGPROCARB)(GLenum source
zmq_msg_set_routing_id
int zmq_msg_set_routing_id(zmq_msg_t *msg_, uint32_t routing_id_)
Definition: zmq.cpp:688
pre_allocate_sock_fun_t
void(* pre_allocate_sock_fun_t)(void *, char *)
Definition: test_use_fd.cpp:21
test_pair_ipc
void test_pair_ipc()
Definition: test_use_fd.cpp:155
ZMQ_PAIR
#define ZMQ_PAIR
Definition: zmq.h:258
setup_socket_pair
void setup_socket_pair(pre_allocate_sock_fun_t pre_allocate_sock_fun_, int bind_socket_type_, int connect_socket_type_, void **out_sb_, void **out_sc_)
Definition: test_use_fd.cpp:23
test_client_server
void test_client_server(pre_allocate_sock_fun_t pre_allocate_sock_fun_)
Definition: test_use_fd.cpp:64
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()
ZMQ_SNDMORE
#define ZMQ_SNDMORE
Definition: zmq.h:359
fd_t
zmq_fd_t fd_t
Definition: libzmq/tests/testutil.hpp:98
zmq_msg_routing_id
uint32_t zmq_msg_routing_id(zmq_msg_t *msg_)
Definition: zmq.cpp:694
test_req_rep_tcp
void test_req_rep_tcp()
Definition: test_use_fd.cpp:121
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: glcorearb.h:2879
pre_allocate_sock_tcp
SETUP_TEARDOWN_TESTCONTEXT void pre_allocate_sock_tcp(void *socket_, char *my_endpoint_)
Definition: test_use_fd.cpp:14
test_context_socket_close
void * test_context_socket_close(void *socket_)
Definition: testutil_unity.cpp:208
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
bind_socket_resolve_port
fd_t bind_socket_resolve_port(const char *address_, const char *port_, char *my_endpoint_, const int af_, const int protocol_)
Definition: testutil.cpp:410
test_pair_tcp
void test_pair_tcp()
Definition: test_use_fd.cpp:126
ipc_endpoint
char ipc_endpoint[MAX_SOCKET_STRING]
Definition: test_use_fd.cpp:138


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