9
9
TEST (poller, create_destroy)
10
10
{
11
11
zmq::poller_t poller;
12
+ ASSERT_TRUE (poller.empty ());
12
13
}
13
14
14
15
static_assert (!std::is_copy_constructible<zmq::poller_t >::value, " poller_t should not be copy-constructible" );
15
16
static_assert (!std::is_copy_assignable<zmq::poller_t >::value, " poller_t should not be copy-assignable" );
16
17
17
18
TEST (poller, move_construct_empty)
18
19
{
19
- std::unique_ptr<zmq::poller_t > a{new zmq::poller_t };
20
- zmq::poller_t b = std::move (*a);
21
-
20
+ std::unique_ptr<zmq::poller_t > a {new zmq::poller_t };
21
+ ASSERT_TRUE (a->empty ());
22
+ zmq::poller_t b = std::move (*a);
23
+ ASSERT_TRUE (b.empty ());
24
+ ASSERT_EQ (0u , a->size ());
25
+ ASSERT_EQ (0u , b.size ());
22
26
a.reset ();
23
27
}
24
28
25
29
TEST (poller, move_assign_empty)
26
30
{
27
31
std::unique_ptr<zmq::poller_t > a{new zmq::poller_t };
32
+ ASSERT_TRUE (a->empty ());
28
33
zmq::poller_t b;
29
-
34
+ ASSERT_TRUE (b. empty ());
30
35
b = std::move (*a);
31
-
36
+ ASSERT_EQ (0u , a->size ());
37
+ ASSERT_EQ (0u , b.size ());
38
+ ASSERT_TRUE (a->empty ());
39
+ ASSERT_TRUE (b.empty ());
32
40
a.reset ();
33
41
}
34
42
@@ -39,8 +47,13 @@ TEST(poller, move_construct_non_empty)
39
47
40
48
std::unique_ptr<zmq::poller_t > a{new zmq::poller_t };
41
49
a->add (socket, ZMQ_POLLIN, [](short ) {});
42
- zmq::poller_t b = std::move (*a);
43
-
50
+ ASSERT_FALSE (a->empty ());
51
+ ASSERT_EQ (1u , a->size ());
52
+ zmq::poller_t b = std::move (*a);
53
+ ASSERT_TRUE (a->empty ());
54
+ ASSERT_EQ (0u , a->size ());
55
+ ASSERT_FALSE (b.empty ());
56
+ ASSERT_EQ (1u , b.size ());
44
57
a.reset ();
45
58
}
46
59
@@ -51,10 +64,14 @@ TEST(poller, move_assign_non_empty)
51
64
52
65
std::unique_ptr<zmq::poller_t > a{new zmq::poller_t };
53
66
a->add (socket, ZMQ_POLLIN, [](short ) {});
67
+ ASSERT_FALSE (a->empty ());
68
+ ASSERT_EQ (1u , a->size ());
54
69
zmq::poller_t b;
55
-
56
70
b = std::move (*a);
57
-
71
+ ASSERT_TRUE (a->empty ());
72
+ ASSERT_EQ (0u , a->size ());
73
+ ASSERT_FALSE (b.empty ());
74
+ ASSERT_EQ (1u , b.size ());
58
75
a.reset ();
59
76
}
60
77
@@ -75,6 +92,8 @@ TEST(poller, add_handler_invalid_events_type)
75
92
zmq::poller_t ::handler_t handler;
76
93
short invalid_events_type = 2 << 10 ;
77
94
ASSERT_NO_THROW (poller.add (socket, invalid_events_type, handler));
95
+ ASSERT_FALSE (poller.empty ());
96
+ ASSERT_EQ (1u , poller.size ());
78
97
}
79
98
80
99
TEST (poller, add_handler_twice_throws)
@@ -229,7 +248,7 @@ TEST(poller, client_server)
229
248
ASSERT_EQ (events, ZMQ_POLLOUT);
230
249
}
231
250
232
- TEST (poller, poller_add_invalid_socket_throws )
251
+ TEST (poller, add_invalid_socket_throws )
233
252
{
234
253
zmq::context_t context;
235
254
zmq::poller_t poller;
@@ -239,15 +258,17 @@ TEST(poller, poller_add_invalid_socket_throws)
239
258
zmq::error_t );
240
259
}
241
260
242
- TEST (poller, poller_remove_invalid_socket_throws )
261
+ TEST (poller, remove_invalid_socket_throws )
243
262
{
244
263
zmq::context_t context;
245
264
zmq::socket_t socket {context, zmq::socket_type::router};
246
265
zmq::poller_t poller;
247
266
ASSERT_NO_THROW (poller.add (socket, ZMQ_POLLIN, zmq::poller_t ::handler_t {}));
267
+ ASSERT_EQ (1u , poller.size ());
248
268
std::vector<zmq::socket_t > sockets;
249
269
sockets.emplace_back (std::move (socket));
250
270
ASSERT_THROW (poller.remove (socket), zmq::error_t );
271
+ ASSERT_EQ (1u , poller.size ());
251
272
}
252
273
253
274
TEST (poller, wait_on_added_empty_handler)
@@ -340,6 +361,59 @@ TEST(poller, wait_one_return)
340
361
ASSERT_EQ (count, result);
341
362
}
342
363
364
+ TEST (poller, wait_on_move_constructed_poller)
365
+ {
366
+ server_client_setup s;
367
+ ASSERT_NO_THROW (s.client .send (" Hi" ));
368
+ zmq::poller_t a;
369
+ zmq::poller_t ::handler_t handler;
370
+ ASSERT_NO_THROW (a.add (s.server , ZMQ_POLLIN, handler));
371
+ ASSERT_EQ (1u , a.size ());
372
+ zmq::poller_t b {std::move (a)};
373
+ ASSERT_EQ (1u , b.size ());
374
+ ASSERT_NO_THROW (b.wait (std::chrono::milliseconds {-1 }));
375
+ }
376
+
377
+ TEST (poller, wait_on_move_assign_poller)
378
+ {
379
+ server_client_setup s;
380
+ ASSERT_NO_THROW (s.client .send (" Hi" ));
381
+ zmq::poller_t a;
382
+ zmq::poller_t ::handler_t handler;
383
+ ASSERT_NO_THROW (a.add (s.server , ZMQ_POLLIN, handler));
384
+ ASSERT_EQ (1u , a.size ());
385
+ zmq::poller_t b;
386
+ ASSERT_EQ (0u , b.size ());
387
+ b = {std::move (a)};
388
+ ASSERT_EQ (1u , b.size ());
389
+ ASSERT_NO_THROW (b.wait (std::chrono::milliseconds {-1 }));
390
+ }
391
+
392
+ TEST (poller, received_on_move_construced_poller)
393
+ {
394
+ // Setup server and client
395
+ server_client_setup s;
396
+ int count = 0 ;
397
+ // Setup poller a
398
+ zmq::poller_t a;
399
+ ASSERT_NO_THROW (a.add (s.server , ZMQ_POLLIN, [&count](short ) {
400
+ ++count;
401
+ }));
402
+ // client sends message
403
+ ASSERT_NO_THROW (s.client .send (" Hi" ));
404
+ // wait for message and verify it is received
405
+ a.wait (std::chrono::milliseconds{500 });
406
+ ASSERT_EQ (1u , count);
407
+ // Move construct poller b
408
+ zmq::poller_t b{std::move (a)};
409
+ // client sends message again
410
+ ASSERT_NO_THROW (s.client .send (" Hi" ));
411
+ // wait for message and verify it is received
412
+ b.wait (std::chrono::milliseconds{500 });
413
+ ASSERT_EQ (2u , count);
414
+ }
415
+
416
+
343
417
TEST (poller, remove_from_handler)
344
418
{
345
419
constexpr auto ITER_NO = 10 ;
@@ -354,9 +428,11 @@ TEST(poller, remove_from_handler)
354
428
for (auto i = 0 ; i < ITER_NO; ++i) {
355
429
ASSERT_NO_THROW (poller.add (setup_list[i].server , ZMQ_POLLIN, [&,i](short events) {
356
430
ASSERT_EQ (events, ZMQ_POLLIN);
357
- poller.remove (setup_list[ITER_NO - i -1 ].server );
431
+ poller.remove (setup_list[ITER_NO-i-1 ].server );
432
+ ASSERT_EQ (ITER_NO-i-1 , poller.size ());
358
433
}));
359
434
}
435
+ ASSERT_EQ (ITER_NO, poller.size ());
360
436
// Clients send messages
361
437
for (auto & s : setup_list) {
362
438
ASSERT_NO_THROW (s.client .send (" Hi" ));
0 commit comments