mirror of
https://github.com/zeromq/cppzmq.git
synced 2025-03-02 20:30:14 +01:00
Problem: no tests for monitor_t::abort
Solution: add a test and fix implementation of monitor_t::abort to make it usable
This commit is contained in:
parent
ec63fb3485
commit
58ffef7190
@ -2,6 +2,10 @@
|
|||||||
#include <gmock/gmock.h>
|
#include <gmock/gmock.h>
|
||||||
#include <zmq.hpp>
|
#include <zmq.hpp>
|
||||||
|
|
||||||
|
#ifdef ZMQ_CPP11
|
||||||
|
#include <thread>
|
||||||
|
#endif
|
||||||
|
|
||||||
class mock_monitor_t : public zmq::monitor_t
|
class mock_monitor_t : public zmq::monitor_t
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -40,3 +44,39 @@ TEST(monitor, init_check)
|
|||||||
while (monitor.check_event(100)) {
|
while (monitor.check_event(100)) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ZMQ_CPP11
|
||||||
|
TEST(monitor, init_abort)
|
||||||
|
{
|
||||||
|
zmq::context_t ctx;
|
||||||
|
zmq::socket_t bind_socket(ctx, zmq::socket_type::dealer);
|
||||||
|
|
||||||
|
bind_socket.bind("tcp://127.0.0.1:*");
|
||||||
|
char endpoint[255];
|
||||||
|
size_t endpoint_len = sizeof(endpoint);
|
||||||
|
bind_socket.getsockopt(ZMQ_LAST_ENDPOINT, &endpoint, &endpoint_len);
|
||||||
|
|
||||||
|
zmq::socket_t connect_socket(ctx, zmq::socket_type::dealer);
|
||||||
|
|
||||||
|
mock_monitor_t monitor;
|
||||||
|
monitor.init(connect_socket, "inproc://foo");
|
||||||
|
EXPECT_CALL(monitor, on_event_connect_delayed(testing::_, testing::_))
|
||||||
|
.Times(testing::AtLeast(1));
|
||||||
|
EXPECT_CALL(monitor, on_event_connected(testing::_, testing::_))
|
||||||
|
.Times(testing::AtLeast(1));
|
||||||
|
|
||||||
|
auto thread = std::thread([&monitor] {
|
||||||
|
while (monitor.check_event(-1)) {
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
connect_socket.connect(endpoint);
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(250));
|
||||||
|
// TODO instead of sleeping an arbitrary amount of time, we should better
|
||||||
|
// wait until the expectations have met. How can this be done with
|
||||||
|
// googlemock?
|
||||||
|
|
||||||
|
monitor.abort();
|
||||||
|
thread.join();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
6
zmq.hpp
6
zmq.hpp
@ -849,7 +849,7 @@ class monitor_t
|
|||||||
#ifdef ZMQ_EVENT_MONITOR_STOPPED
|
#ifdef ZMQ_EVENT_MONITOR_STOPPED
|
||||||
if (event->event == ZMQ_EVENT_MONITOR_STOPPED) {
|
if (event->event == ZMQ_EVENT_MONITOR_STOPPED) {
|
||||||
zmq_msg_close(&eventMsg);
|
zmq_msg_close(&eventMsg);
|
||||||
return true;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@ -923,11 +923,7 @@ class monitor_t
|
|||||||
if (socketPtr)
|
if (socketPtr)
|
||||||
zmq_socket_monitor(socketPtr, NULL, 0);
|
zmq_socket_monitor(socketPtr, NULL, 0);
|
||||||
|
|
||||||
if (monitor_socket)
|
|
||||||
zmq_close(monitor_socket);
|
|
||||||
|
|
||||||
socketPtr = NULL;
|
socketPtr = NULL;
|
||||||
monitor_socket = NULL;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
virtual void on_monitor_started() {}
|
virtual void on_monitor_started() {}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user