From d9e5ba671bc53cabbbba14ddb984b85075dea29b Mon Sep 17 00:00:00 2001 From: Simon Giesecke Date: Fri, 10 Aug 2018 16:51:11 +0200 Subject: [PATCH 1/3] Problem: test_probe_router not yet using unity Solution: migrate to unity/testutil_unity --- Makefile.am | 3 +- tests/test_probe_router.cpp | 82 +++++++++++++++++++------------------ 2 files changed, 44 insertions(+), 41 deletions(-) diff --git a/Makefile.am b/Makefile.am index 4b7f08bd..fc38631e 100644 --- a/Makefile.am +++ b/Makefile.am @@ -538,7 +538,8 @@ tests_test_router_handover_LDADD = src/libzmq.la ${UNITY_LIBS} tests_test_router_handover_CPPFLAGS = ${UNITY_CPPFLAGS} tests_test_probe_router_SOURCES = tests/test_probe_router.cpp -tests_test_probe_router_LDADD = src/libzmq.la +tests_test_probe_router_LDADD = src/libzmq.la ${UNITY_LIBS} +tests_test_probe_router_CPPFLAGS = ${UNITY_CPPFLAGS} tests_test_stream_SOURCES = tests/test_stream.cpp tests_test_stream_LDADD = src/libzmq.la diff --git a/tests/test_probe_router.cpp b/tests/test_probe_router.cpp index ff924fc9..1884dee2 100644 --- a/tests/test_probe_router.cpp +++ b/tests/test_probe_router.cpp @@ -28,59 +28,61 @@ */ #include "testutil.hpp" +#include "testutil_unity.hpp" -int main (void) +void setUp () { - setup_test_environment (); - size_t len = MAX_SOCKET_STRING; - char my_endpoint[MAX_SOCKET_STRING]; - void *ctx = zmq_ctx_new (); - assert (ctx); + setup_test_context (); +} +void tearDown () +{ + teardown_test_context (); +} + +void test_probe_router_router () +{ // Create server and bind to endpoint - void *server = zmq_socket (ctx, ZMQ_ROUTER); - assert (server); - int rc = zmq_bind (server, "tcp://127.0.0.1:*"); - assert (rc == 0); - rc = zmq_getsockopt (server, ZMQ_LAST_ENDPOINT, my_endpoint, &len); - assert (rc == 0); + void *server = test_context_socket (ZMQ_ROUTER); + + char my_endpoint[MAX_SOCKET_STRING]; + bind_loopback_ipv4 (server, my_endpoint, sizeof (my_endpoint)); // Create client and connect to server, doing a probe - void *client = zmq_socket (ctx, ZMQ_ROUTER); - assert (client); - rc = zmq_setsockopt (client, ZMQ_ROUTING_ID, "X", 1); - assert (rc == 0); + void *client = test_context_socket (ZMQ_ROUTER); + TEST_ASSERT_SUCCESS_ERRNO (zmq_setsockopt (client, ZMQ_ROUTING_ID, "X", 1)); int probe = 1; - rc = zmq_setsockopt (client, ZMQ_PROBE_ROUTER, &probe, sizeof (probe)); - assert (rc == 0); - rc = zmq_connect (client, my_endpoint); - assert (rc == 0); + TEST_ASSERT_SUCCESS_ERRNO ( + zmq_setsockopt (client, ZMQ_PROBE_ROUTER, &probe, sizeof (probe))); + TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (client, my_endpoint)); // We expect a routing id=X + empty message from client + recv_string_expect_success (server, "X", 0); unsigned char buffer[255]; - rc = zmq_recv (server, buffer, 255, 0); - assert (rc == 1); - assert (buffer[0] == 'X'); - rc = zmq_recv (server, buffer, 255, 0); - assert (rc == 0); + TEST_ASSERT_EQUAL_INT ( + 0, TEST_ASSERT_SUCCESS_ERRNO (zmq_recv (server, buffer, 255, 0))); // Send a message to client now - rc = zmq_send (server, "X", 1, ZMQ_SNDMORE); - assert (rc == 1); - rc = zmq_send (server, "Hello", 5, 0); - assert (rc == 5); + send_string_expect_success (server, "X", ZMQ_SNDMORE); + send_string_expect_success (server, "Hello", 0); - rc = zmq_recv (client, buffer, 255, 0); - assert (rc == 5); + TEST_ASSERT_EQUAL_INT ( + 5, TEST_ASSERT_SUCCESS_ERRNO (zmq_recv (client, buffer, 255, 0))); - rc = zmq_close (server); - assert (rc == 0); + // TODO shouldn't this be the following? but that fails, since the content is different (but of length 5) + // recv_string_expect_success (client, "Hello", 0); - rc = zmq_close (client); - assert (rc == 0); - - rc = zmq_ctx_term (ctx); - assert (rc == 0); - - return 0; + test_context_socket_close (server); + test_context_socket_close (client); +} + +int main () +{ + setup_test_environment (); + + UNITY_BEGIN (); + + RUN_TEST (test_probe_router_router); + + return UNITY_END (); } From d78152bf830273b47d6b9f647c321818618ca71e Mon Sep 17 00:00:00 2001 From: Simon Giesecke Date: Fri, 10 Aug 2018 17:30:23 +0200 Subject: [PATCH 2/3] Problem: no test case for ZMQ_PROBE_ROUTER on ZMQ_DEALER socket Solution: add test case --- tests/test_probe_router.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/tests/test_probe_router.cpp b/tests/test_probe_router.cpp index 1884dee2..540220e3 100644 --- a/tests/test_probe_router.cpp +++ b/tests/test_probe_router.cpp @@ -76,6 +76,37 @@ void test_probe_router_router () test_context_socket_close (client); } +void test_probe_router_dealer () +{ + // Create server and bind to endpoint + void *server = test_context_socket (ZMQ_ROUTER); + + char my_endpoint[MAX_SOCKET_STRING]; + bind_loopback_ipv4 (server, my_endpoint, sizeof (my_endpoint)); + + // Create client and connect to server, doing a probe + void *client = test_context_socket (ZMQ_DEALER); + TEST_ASSERT_SUCCESS_ERRNO (zmq_setsockopt (client, ZMQ_ROUTING_ID, "X", 1)); + int probe = 1; + TEST_ASSERT_SUCCESS_ERRNO ( + zmq_setsockopt (client, ZMQ_PROBE_ROUTER, &probe, sizeof (probe))); + TEST_ASSERT_SUCCESS_ERRNO (zmq_connect (client, my_endpoint)); + + // We expect a routing id=X + empty message from client + recv_string_expect_success (server, "X", 0); + unsigned char buffer[255]; + TEST_ASSERT_SUCCESS_ERRNO (zmq_recv (server, buffer, 255, 0)); + + // Send a message to client now + send_string_expect_success (server, "X", ZMQ_SNDMORE); + send_string_expect_success (server, "Hello", 0); + + recv_string_expect_success (client, "Hello", 0); + + test_context_socket_close (server); + test_context_socket_close (client); +} + int main () { setup_test_environment (); @@ -83,6 +114,7 @@ int main () UNITY_BEGIN (); RUN_TEST (test_probe_router_router); + RUN_TEST (test_probe_router_dealer); return UNITY_END (); } From 062b510b5d446cbc58294ff8030e21cc7cdd9470 Mon Sep 17 00:00:00 2001 From: Simon Giesecke Date: Mon, 13 Aug 2018 13:26:50 +0200 Subject: [PATCH 3/3] Problem: test case test_probe_router_router does not receive auto-generated routing id Solution: add receive call for routing id --- tests/test_probe_router.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/test_probe_router.cpp b/tests/test_probe_router.cpp index 540220e3..aa31f52a 100644 --- a/tests/test_probe_router.cpp +++ b/tests/test_probe_router.cpp @@ -66,11 +66,12 @@ void test_probe_router_router () send_string_expect_success (server, "X", ZMQ_SNDMORE); send_string_expect_success (server, "Hello", 0); + // receive the routing ID, which is auto-generated in this case, since the + // peer did not set one explicitly TEST_ASSERT_EQUAL_INT ( 5, TEST_ASSERT_SUCCESS_ERRNO (zmq_recv (client, buffer, 255, 0))); - // TODO shouldn't this be the following? but that fails, since the content is different (but of length 5) - // recv_string_expect_success (client, "Hello", 0); + recv_string_expect_success (client, "Hello", 0); test_context_socket_close (server); test_context_socket_close (client);