test_msg_ffn.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 <string.h>
7 
9 
10 void ffn (void *data_, void *hint_)
11 {
12  // Signal that ffn has been called by writing "freed" to hint
13  (void) data_; // Suppress 'unused' warnings at compile time
14  memcpy (hint_, (void *) "freed", 5);
15 }
16 
18 {
19  // Create the infrastructure
21 
22  void *router = test_context_socket (ZMQ_ROUTER);
23  bind_loopback_ipv4 (router, my_endpoint, sizeof my_endpoint);
24 
25  void *dealer = test_context_socket (ZMQ_DEALER);
27 
28  // Test that creating and closing a message triggers ffn
29  zmq_msg_t msg;
30  char hint[5];
31  char data[255];
32  memset (data, 0, 255);
33  memcpy (data, (void *) "data", 4);
34  memcpy (hint, (void *) "hint", 4);
36  zmq_msg_init_data (&msg, (void *) data, 255, ffn, (void *) hint));
38 
40  TEST_ASSERT_EQUAL_STRING_LEN ("freed", hint, 5);
41  memcpy (hint, (void *) "hint", 4);
42 
43  // Making and closing a copy triggers ffn
44  zmq_msg_t msg2;
45  zmq_msg_init (&msg2);
47  zmq_msg_init_data (&msg, (void *) data, 255, ffn, (void *) hint));
51 
53  TEST_ASSERT_EQUAL_STRING_LEN ("freed", hint, 5);
54  memcpy (hint, (void *) "hint", 4);
55 
56  // Test that sending a message triggers ffn
58  zmq_msg_init_data (&msg, (void *) data, 255, ffn, (void *) hint));
59 
60  zmq_msg_send (&msg, dealer, 0);
61  char buf[255];
62  TEST_ASSERT_SUCCESS_ERRNO (zmq_recv (router, buf, 255, 0));
63  TEST_ASSERT_EQUAL_INT (255, zmq_recv (router, buf, 255, 0));
65 
67  TEST_ASSERT_EQUAL_STRING_LEN ("freed", hint, 5);
68  memcpy (hint, (void *) "hint", 4);
70 
71  // Sending a copy of a message triggers ffn
74  zmq_msg_init_data (&msg, (void *) data, 255, ffn, (void *) hint));
76 
77  zmq_msg_send (&msg, dealer, 0);
78  TEST_ASSERT_SUCCESS_ERRNO (zmq_recv (router, buf, 255, 0));
79  TEST_ASSERT_EQUAL_INT (255, zmq_recv (router, buf, 255, 0));
83 
85  TEST_ASSERT_EQUAL_STRING_LEN ("freed", hint, 5);
86 
87  // Deallocate the infrastructure.
90 }
91 
92 int main (void)
93 {
95 
96  UNITY_BEGIN ();
98  return UNITY_END ();
99 }
data_
StringPiece data_
Definition: bytestream_unittest.cc:60
TEST_ASSERT_EQUAL_STRING_LEN
#define TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len)
Definition: unity.h:236
UNITY_END
return UNITY_END()
msleep
void msleep(int milliseconds_)
Definition: testutil.cpp:227
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
bind_loopback_ipv4
void bind_loopback_ipv4(void *socket_, char *my_endpoint_, size_t len_)
Definition: testutil_unity.cpp:246
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
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
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
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
buf
GLenum GLuint GLenum GLsizei const GLchar * buf
Definition: glcorearb.h:4175
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_recv
ZMQ_EXPORT int zmq_recv(void *s_, void *buf_, size_t len_, int flags_)
Definition: zmq.cpp:487
test_msg_init_ffn
void test_msg_init_ffn()
Definition: test_msg_ffn.cpp:17
setup_test_environment
void setup_test_environment(int timeout_seconds_)
Definition: testutil.cpp:201
UNITY_BEGIN
UNITY_BEGIN()
zmq_msg_copy
ZMQ_EXPORT int zmq_msg_copy(zmq_msg_t *dest_, zmq_msg_t *src_)
Definition: zmq.cpp:636
ffn
SETUP_TEARDOWN_TESTCONTEXT void ffn(void *data_, void *hint_)
Definition: test_msg_ffn.cpp:10
data
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: glcorearb.h:2879
main
int main(void)
Definition: test_msg_ffn.cpp:92
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


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