| 159 | }; |
| 160 | |
| 161 | TEST_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); |
nothing calls this directly
no test coverage detected