Skip to content

Commit bf39928

Browse files
authored
Merge pull request #196 from kurdybacha/master
Problem: poller_t does not have great test coverage
2 parents 9c1b785 + 18f8035 commit bf39928

File tree

2 files changed

+104
-5
lines changed

2 files changed

+104
-5
lines changed

tests/poller.cpp

Lines changed: 101 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,107 @@
22
#include <zmq.hpp>
33

44
#if defined(ZMQ_CPP11) && defined(ZMQ_BUILD_DRAFT_API)
5-
TEST(poller, create_destroy)
5+
6+
TEST(poller, create_destroy)
7+
{
8+
zmq::poller_t poller;
9+
}
10+
11+
TEST(poller, move_contruct)
12+
{
13+
zmq::poller_t poller;
14+
zmq::poller_t poller_move {std::move (poller)};
15+
}
16+
17+
TEST(poller, move_assign)
18+
{
19+
zmq::poller_t poller;
20+
zmq::poller_t poller_assign;
21+
poller_assign = std::move (poller);
22+
}
23+
24+
TEST(poller, add_handler)
625
{
7-
zmq::poller_t context;
26+
zmq::context_t context;
27+
zmq::socket_t socket{context, zmq::socket_type::router};
28+
zmq::poller_t poller;
29+
std::function<void()> handler = [](){};
30+
ASSERT_NO_THROW(poller.add(socket, ZMQ_POLLIN, handler));
831
}
32+
33+
TEST(poller, add_handler_invalid_events_type)
34+
{
35+
zmq::context_t context;
36+
zmq::socket_t socket{context, zmq::socket_type::router};
37+
zmq::poller_t poller;
38+
std::function<void()> handler = [](){};
39+
short invalid_events_type = 2 << 10;
40+
ASSERT_NO_THROW(poller.add(socket, invalid_events_type, handler));
41+
}
42+
43+
TEST(poller, add_handler_twice_throws)
44+
{
45+
zmq::context_t context;
46+
zmq::socket_t socket{context, zmq::socket_type::router};
47+
zmq::poller_t poller;
48+
std::function<void()> handler = [](){};
49+
poller.add(socket, ZMQ_POLLIN, handler);
50+
ASSERT_THROW(poller.add(socket, ZMQ_POLLIN, handler), zmq::error_t);
51+
}
52+
53+
TEST(poller, wait_with_no_handlers_throws)
54+
{
55+
zmq::poller_t poller;
56+
ASSERT_THROW(poller.wait(std::chrono::milliseconds{10}), zmq::error_t);
57+
}
58+
59+
TEST(poller, remove_unregistered_throws)
60+
{
61+
zmq::context_t context;
62+
zmq::socket_t socket{context, zmq::socket_type::router};
63+
zmq::poller_t poller;
64+
ASSERT_THROW(poller.remove(socket), zmq::error_t);
65+
}
66+
67+
TEST(poller, remove_registered)
68+
{
69+
zmq::context_t context;
70+
zmq::socket_t socket{context, zmq::socket_type::router};
71+
zmq::poller_t poller;
72+
std::function<void()> handler = [](){};
73+
poller.add(socket, ZMQ_POLLIN, handler);
74+
ASSERT_NO_THROW(poller.remove(socket));
75+
}
76+
77+
TEST(poller, poll_basic)
78+
{
79+
zmq::context_t context;
80+
81+
zmq::socket_t vent{context, zmq::socket_type::push};
82+
ASSERT_NO_THROW(vent.bind("tcp://127.0.0.1:*"));
83+
84+
zmq::socket_t sink{context, zmq::socket_type::pull};
85+
// TODO: this should be simpler...
86+
std::array<char, 100> endpoint{};
87+
size_t endpoint_size = endpoint.size();
88+
ASSERT_NO_THROW(vent.getsockopt(ZMQ_LAST_ENDPOINT, endpoint.data(),
89+
&endpoint_size));
90+
ASSERT_TRUE(endpoint_size < endpoint.size());
91+
ASSERT_NO_THROW(sink.connect(endpoint.data()));
92+
93+
std::string message = "H";
94+
95+
// TODO: send overload for string would be handy.
96+
ASSERT_NO_THROW(vent.send(std::begin(message), std::end(message)));
97+
98+
zmq::poller_t poller;
99+
bool message_received = false;
100+
std::function<void()> handler = [&message_received]() {
101+
message_received = true;
102+
};
103+
ASSERT_NO_THROW(poller.add(sink, ZMQ_POLLIN, handler));
104+
ASSERT_NO_THROW(poller.wait(std::chrono::milliseconds{-1}));
105+
ASSERT_TRUE(message_received);
106+
}
107+
9108
#endif

zmq.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,10 +1003,10 @@ namespace zmq
10031003
assert(rc == 0);
10041004
}
10051005
}
1006-
1006+
10071007
poller_t(const poller_t&) = delete;
10081008
poller_t &operator=(const poller_t&) = delete;
1009-
poller_t(poller_t&& src)
1009+
poller_t(poller_t&& src)
10101010
: poller_ptr(src.poller_ptr)
10111011
, poller_events(std::move (src.poller_events))
10121012
{
@@ -1018,7 +1018,7 @@ namespace zmq
10181018
poller_events = std::move (src.poller_events);
10191019
src.poller_ptr = NULL;
10201020
return *this;
1021-
}
1021+
}
10221022

10231023
void add (zmq::socket_t &socket, short events, std::function<void(void)> &handler)
10241024
{

0 commit comments

Comments
 (0)