Browse Source

inspector: wait for both sides closing

Removes race condition when test relied on both sides of the socket
to be closed on the same UV event loop iteration.

Fixes: nodejs/node#8498
PR-URL: https://github.com/nodejs/node/pull/8505
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl>
Reviewed-By: Saúl Ibarra Corretgé <saghul@gmail.com>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-by: Fedor Indutny <fedor@indutny.com>
v6.x
Eugene Ostroukhov 8 years ago
committed by Myles Borins
parent
commit
f817875235
  1. 14
      test/cctest/test_inspector_socket.cc

14
test/cctest/test_inspector_socket.cc

@ -330,6 +330,11 @@ static void manual_inspector_socket_cleanup() {
inspector.buffer.clear(); inspector.buffer.clear();
} }
static void assert_both_sockets_closed() {
SPIN_WHILE(uv_is_active(reinterpret_cast<uv_handle_t*>(&client_socket)));
SPIN_WHILE(uv_is_active(reinterpret_cast<uv_handle_t*>(&inspector.client)));
}
static void on_connection(uv_connect_t* connect, int status) { static void on_connection(uv_connect_t* connect, int status) {
GTEST_ASSERT_EQ(0, status); GTEST_ASSERT_EQ(0, status);
connect->data = connect; connect->data = connect;
@ -503,8 +508,7 @@ TEST_F(InspectorSocketTest, ExtraTextBeforeRequest) {
do_write(const_cast<char*>(HANDSHAKE_REQ), sizeof(HANDSHAKE_REQ) - 1); do_write(const_cast<char*>(HANDSHAKE_REQ), sizeof(HANDSHAKE_REQ) - 1);
SPIN_WHILE(last_event != kInspectorHandshakeFailed); SPIN_WHILE(last_event != kInspectorHandshakeFailed);
expect_handshake_failure(); expect_handshake_failure();
EXPECT_EQ(uv_is_active(reinterpret_cast<uv_handle_t*>(&client_socket)), 0); assert_both_sockets_closed();
EXPECT_EQ(uv_is_active(reinterpret_cast<uv_handle_t*>(&socket)), 0);
} }
TEST_F(InspectorSocketTest, ExtraLettersBeforeRequest) { TEST_F(InspectorSocketTest, ExtraLettersBeforeRequest) {
@ -515,8 +519,7 @@ TEST_F(InspectorSocketTest, ExtraLettersBeforeRequest) {
do_write(const_cast<char*>(HANDSHAKE_REQ), sizeof(HANDSHAKE_REQ) - 1); do_write(const_cast<char*>(HANDSHAKE_REQ), sizeof(HANDSHAKE_REQ) - 1);
SPIN_WHILE(last_event != kInspectorHandshakeFailed); SPIN_WHILE(last_event != kInspectorHandshakeFailed);
expect_handshake_failure(); expect_handshake_failure();
EXPECT_EQ(uv_is_active(reinterpret_cast<uv_handle_t*>(&client_socket)), 0); assert_both_sockets_closed();
EXPECT_EQ(uv_is_active(reinterpret_cast<uv_handle_t*>(&socket)), 0);
} }
TEST_F(InspectorSocketTest, RequestWithoutKey) { TEST_F(InspectorSocketTest, RequestWithoutKey) {
@ -530,8 +533,7 @@ TEST_F(InspectorSocketTest, RequestWithoutKey) {
do_write(const_cast<char*>(BROKEN_REQUEST), sizeof(BROKEN_REQUEST) - 1); do_write(const_cast<char*>(BROKEN_REQUEST), sizeof(BROKEN_REQUEST) - 1);
SPIN_WHILE(last_event != kInspectorHandshakeFailed); SPIN_WHILE(last_event != kInspectorHandshakeFailed);
expect_handshake_failure(); expect_handshake_failure();
EXPECT_EQ(uv_is_active(reinterpret_cast<uv_handle_t*>(&client_socket)), 0); assert_both_sockets_closed();
EXPECT_EQ(uv_is_active(reinterpret_cast<uv_handle_t*>(&socket)), 0);
} }
TEST_F(InspectorSocketTest, KillsConnectionOnProtocolViolation) { TEST_F(InspectorSocketTest, KillsConnectionOnProtocolViolation) {

Loading…
Cancel
Save