MCPcopy Create free account
hub / github.com/ceph/ceph / TEST_P

Function TEST_P

src/test/msgr/test_async_networkstack.cc:161–263  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

159};
160
161TEST_P(NetworkWorkerTest, SimpleTest) {
162 entity_addr_t bind_addr;
163 ASSERT_TRUE(bind_addr.parse(get_addr().c_str()));
164 std::atomic_bool accepted(false);
165 std::atomic_bool *accepted_p = &accepted;
166
167 exec_events([this, accepted_p, bind_addr](Worker *worker) mutable {
168 entity_addr_t cli_addr;
169 SocketOptions options;
170 ServerSocket bind_socket;
171 EventCenter *center = &worker->center;
172 ssize_t r = 0;
173 if (stack->support_local_listen_table() || worker->id == 0)
174 r = worker->listen(bind_addr, 0, options, &bind_socket);
175 ASSERT_EQ(0, r);
176
177 ConnectedSocket cli_socket, srv_socket;
178 if (worker->id == 0) {
179 r = worker->connect(bind_addr, options, &cli_socket);
180 ASSERT_EQ(0, r);
181 }
182
183 bool is_my_accept = false;
184 if (bind_socket) {
185 C_poll cb(center);
186 center->create_file_event(bind_socket.fd(), EVENT_READABLE, &cb);
187 if (cb.poll(500)) {
188 *accepted_p = true;
189 is_my_accept = true;
190 }
191 ASSERT_TRUE(*accepted_p);
192 center->delete_file_event(bind_socket.fd(), EVENT_READABLE);
193 }
194
195 if (is_my_accept) {
196 r = bind_socket.accept(&srv_socket, options, &cli_addr, worker);
197 ASSERT_EQ(0, r);
198 ASSERT_TRUE(srv_socket.fd() > 0);
199 }
200
201 if (worker->id == 0) {
202 C_poll cb(center);
203 center->create_file_event(cli_socket.fd(), EVENT_READABLE, &cb);
204 r = cli_socket.is_connected();
205 if (r == 0) {
206 ASSERT_EQ(true, cb.poll(500));
207 r = cli_socket.is_connected();
208 }
209 ASSERT_EQ(1, r);
210 center->delete_file_event(cli_socket.fd(), EVENT_READABLE);
211 }
212
213 const char *message = "this is a new message";
214 int len = strlen(message);
215 bufferlist bl;
216 bl.append(message, len);
217 if (worker->id == 0) {
218 r = cli_socket.send(bl, false);

Callers

nothing calls this directly

Calls 15

create_file_eventMethod · 0.80
delete_file_eventMethod · 0.80
get_num_workerMethod · 0.80
bufferptrClass · 0.50
parseMethod · 0.45
c_strMethod · 0.45
listenMethod · 0.45
connectMethod · 0.45
fdMethod · 0.45
pollMethod · 0.45
acceptMethod · 0.45

Tested by

no test coverage detected