@@ -56,4 +56,89 @@ TEST_CASE("recv_multipart test", "[recv_multipart]")
56
56
CHECK_THROWS_AS (zmq::recv_multipart (zmq::socket_ref (), std::back_inserter (msgs)), const zmq::error_t &);
57
57
}
58
58
}
59
+
60
+ TEST_CASE (" recv_multipart_n test" , " [recv_multipart]" )
61
+ {
62
+ zmq::context_t context (1 );
63
+ zmq::socket_t output (context, ZMQ_PAIR);
64
+ zmq::socket_t input (context, ZMQ_PAIR);
65
+ output.bind (" inproc://multipart.test" );
66
+ input.connect (" inproc://multipart.test" );
67
+
68
+ SECTION (" send 1 message" )
69
+ {
70
+ input.send (zmq::str_buffer (" hello" ));
71
+
72
+ std::array<zmq::message_t , 1 > msgs;
73
+ auto ret = zmq::recv_multipart_n (output, msgs.data (), msgs.size ());
74
+ REQUIRE (ret);
75
+ CHECK (*ret == 1 );
76
+ CHECK (msgs[0 ].size () == 5 );
77
+ }
78
+ SECTION (" send 1 message 2" )
79
+ {
80
+ input.send (zmq::str_buffer (" hello" ));
81
+
82
+ std::array<zmq::message_t , 2 > msgs;
83
+ auto ret = zmq::recv_multipart_n (output, msgs.data (), msgs.size ());
84
+ REQUIRE (ret);
85
+ CHECK (*ret == 1 );
86
+ CHECK (msgs[0 ].size () == 5 );
87
+ CHECK (msgs[1 ].size () == 0 );
88
+ }
89
+ SECTION (" send 2 messages, recv 1" )
90
+ {
91
+ input.send (zmq::str_buffer (" hello" ), zmq::send_flags::sndmore);
92
+ input.send (zmq::str_buffer (" world!" ));
93
+
94
+ std::array<zmq::message_t , 1 > msgs;
95
+ CHECK_THROWS_AS (
96
+ zmq::recv_multipart_n (output, msgs.data (), msgs.size ()),
97
+ const std::runtime_error&);
98
+ }
99
+ SECTION (" recv 0" )
100
+ {
101
+ input.send (zmq::str_buffer (" hello" ), zmq::send_flags::sndmore);
102
+ input.send (zmq::str_buffer (" world!" ));
103
+
104
+ std::array<zmq::message_t , 1 > msgs;
105
+ CHECK_THROWS_AS (
106
+ zmq::recv_multipart_n (output, msgs.data (), 0 ),
107
+ const std::runtime_error&);
108
+ }
109
+ SECTION (" send 2 messages" )
110
+ {
111
+ input.send (zmq::str_buffer (" hello" ), zmq::send_flags::sndmore);
112
+ input.send (zmq::str_buffer (" world!" ));
113
+
114
+ std::array<zmq::message_t , 2 > msgs;
115
+ auto ret = zmq::recv_multipart_n (output, msgs.data (), msgs.size ());
116
+ REQUIRE (ret);
117
+ CHECK (*ret == 2 );
118
+ CHECK (msgs[0 ].size () == 5 );
119
+ CHECK (msgs[1 ].size () == 6 );
120
+ }
121
+ SECTION (" send no messages, dontwait" )
122
+ {
123
+ std::array<zmq::message_t , 1 > msgs;
124
+ auto ret = zmq::recv_multipart_n (output, msgs.data (), msgs.size (), zmq::recv_flags::dontwait);
125
+ CHECK_FALSE (ret);
126
+ REQUIRE (msgs[0 ].size () == 0 );
127
+ }
128
+ SECTION (" send 1 partial message, dontwait" )
129
+ {
130
+ input.send (zmq::str_buffer (" hello" ), zmq::send_flags::sndmore);
131
+
132
+ std::array<zmq::message_t , 1 > msgs;
133
+ auto ret = zmq::recv_multipart_n (output, msgs.data (), msgs.size (), zmq::recv_flags::dontwait);
134
+ CHECK_FALSE (ret);
135
+ REQUIRE (msgs[0 ].size () == 0 );
136
+ }
137
+ SECTION (" recv with invalid socket" )
138
+ {
139
+ std::array<zmq::message_t , 1 > msgs;
140
+ CHECK_THROWS_AS (zmq::recv_multipart_n (zmq::socket_ref (), msgs.data (), msgs.size ()), const zmq::error_t &);
141
+ }
142
+ }
143
+
59
144
#endif
0 commit comments