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>
pull/8672/head
Eugene Ostroukhov 2016-09-12 14:49:07 -07:00
parent 078bf68d94
commit a67f11d9f4
1 changed files with 8 additions and 6 deletions

View File

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