From 82227136ea2551b5fc8b49f68dbb7cc3fc625a58 Mon Sep 17 00:00:00 2001 From: Simon Giesecke Date: Sun, 20 Aug 2017 16:21:39 +0200 Subject: [PATCH] Problem: test_monitor sometimes fails due to a wrong event received, but not known which Solution: add diagnostic output --- tests/test_monitor.cpp | 51 +++++-------------------------------- tests/testutil_security.hpp | 16 ++++++++++++ 2 files changed, 22 insertions(+), 45 deletions(-) diff --git a/tests/test_monitor.cpp b/tests/test_monitor.cpp index c3e4d641..f5515239 100644 --- a/tests/test_monitor.cpp +++ b/tests/test_monitor.cpp @@ -28,41 +28,7 @@ */ #include "testutil.hpp" - -// Read one event off the monitor socket; return value and address -// by reference, if not null, and event number by value. Returns -1 -// in case of error. - -static int -get_monitor_event (void *monitor, int *value, char **address) -{ - // First frame in message contains event number and value - zmq_msg_t msg; - zmq_msg_init (&msg); - if (zmq_msg_recv (&msg, monitor, 0) == -1) - return -1; // Interruped, presumably - assert (zmq_msg_more (&msg)); - - uint8_t *data = (uint8_t *) zmq_msg_data (&msg); - uint16_t event = *(uint16_t *) (data); - if (value) - *value = *(uint32_t *) (data + 2); - - // Second frame in message contains event address - zmq_msg_init (&msg); - if (zmq_msg_recv (&msg, monitor, 0) == -1) - return -1; // Interruped, presumably - assert (!zmq_msg_more (&msg)); - - if (address) { - uint8_t *data = (uint8_t *) zmq_msg_data (&msg); - size_t size = zmq_msg_size (&msg); - *address = (char *) malloc (size + 1); - memcpy (*address, data, size); - *address [size] = 0; - } - return event; -} +#include "testutil_security.hpp" int main (void) { @@ -121,20 +87,15 @@ int main (void) event = get_monitor_event (client_mon, NULL, NULL); assert (event == ZMQ_EVENT_CONNECTED); #ifdef ZMQ_BUILD_DRAFT_API - event = get_monitor_event (client_mon, NULL, NULL); - assert (event == ZMQ_EVENT_HANDSHAKE_SUCCEEDED); + expect_monitor_event (client_mon, ZMQ_EVENT_HANDSHAKE_SUCCEEDED); #endif - event = get_monitor_event (client_mon, NULL, NULL); - assert (event == ZMQ_EVENT_MONITOR_STOPPED); + expect_monitor_event (client_mon, ZMQ_EVENT_MONITOR_STOPPED); // This is the flow of server events - event = get_monitor_event (server_mon, NULL, NULL); - assert (event == ZMQ_EVENT_LISTENING); - event = get_monitor_event (server_mon, NULL, NULL); - assert (event == ZMQ_EVENT_ACCEPTED); + expect_monitor_event (server_mon, ZMQ_EVENT_LISTENING); + expect_monitor_event (server_mon, ZMQ_EVENT_ACCEPTED); #ifdef ZMQ_BUILD_DRAFT_API - event = get_monitor_event (server_mon, NULL, NULL); - assert (event == ZMQ_EVENT_HANDSHAKE_SUCCEEDED); + expect_monitor_event (server_mon, ZMQ_EVENT_HANDSHAKE_SUCCEEDED); #endif event = get_monitor_event (server_mon, NULL, NULL); // Sometimes the server sees the client closing before it gets closed. diff --git a/tests/testutil_security.hpp b/tests/testutil_security.hpp index 8b9f32d9..ea27d724 100644 --- a/tests/testutil_security.hpp +++ b/tests/testutil_security.hpp @@ -499,6 +499,22 @@ int get_monitor_event_with_timeout (void *monitor, return res; } +int get_monitor_event (void *monitor, int *value, char **address) +{ + return get_monitor_event_with_timeout (monitor, value, address, -1); +} + +void expect_monitor_event (void *monitor, int expected_event) +{ + int event = get_monitor_event (monitor, NULL, NULL); + if (event != expected_event) + { + fprintf (stderr, "Expected monitor event %x but received %x\n", + expected_event, event); + assert (event == expected_event); + } +} + #ifdef ZMQ_BUILD_DRAFT_API void print_unexpected_event (int event,