Skip to content

Commit c77078f

Browse files
Eugene Ostroukhovitaloacasas
Eugene Ostroukhov
authored andcommitted
test: have inspector test pick an open port
This ensures that cctest can be ran concurrently with other instances of cctest or while the node is ran with --inspect. Ref: #10858 PR-URL: #10861 Reviewed-By: James M Snell <[email protected]> Reviewed-By: Colin Ihrig <[email protected]>
1 parent d24491c commit c77078f

File tree

3 files changed

+44
-19
lines changed

3 files changed

+44
-19
lines changed

src/inspector_socket_server.cc

+19
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,23 @@ void SendProtocolJson(InspectorSocket* socket) {
137137
SendHttpResponse(socket, data);
138138
}
139139

140+
int GetPort(uv_tcp_t* socket, int* out_port) {
141+
sockaddr_storage addr;
142+
int len = sizeof(addr);
143+
int err = uv_tcp_getsockname(socket,
144+
reinterpret_cast<struct sockaddr*>(&addr),
145+
&len);
146+
if (err != 0)
147+
return err;
148+
int port;
149+
if (addr.ss_family == AF_INET6)
150+
port = reinterpret_cast<const sockaddr_in6*>(&addr)->sin6_port;
151+
else
152+
port = reinterpret_cast<const sockaddr_in*>(&addr)->sin_port;
153+
*out_port = ntohs(port);
154+
return err;
155+
}
156+
140157
} // namespace
141158

142159

@@ -339,6 +356,8 @@ bool InspectorSocketServer::Start(uv_loop_t* loop) {
339356
uv_ip4_addr("0.0.0.0", port_, &addr);
340357
int err = uv_tcp_bind(&server_,
341358
reinterpret_cast<const struct sockaddr*>(&addr), 0);
359+
if (err == 0)
360+
err = GetPort(&server_, &port_);
342361
if (err == 0) {
343362
err = uv_listen(reinterpret_cast<uv_stream_t*>(&server_), 1,
344363
SocketConnectedCallback);

src/inspector_socket_server.h

+4-1
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ class InspectorSocketServer {
3939
void Stop(ServerCallback callback);
4040
void Send(int session_id, const std::string& message);
4141
void TerminateConnections(ServerCallback callback);
42+
int port() {
43+
return port_;
44+
}
4245

4346
private:
4447
static bool HandshakeCallback(InspectorSocket* socket,
@@ -62,7 +65,7 @@ class InspectorSocketServer {
6265

6366
uv_loop_t* loop_;
6467
SocketServerDelegate* const delegate_;
65-
const int port_;
68+
int port_;
6669
std::string path_;
6770
uv_tcp_t server_;
6871
Closer* closer_;

test/cctest/test_inspector_socket_server.cc

+21-18
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
#include <algorithm>
77
#include <sstream>
88

9-
static const int PORT = 9229;
109
static uv_loop_t loop;
1110

1211
static const char CLIENT_CLOSE_FRAME[] = "\x88\x80\x2D\x0E\x1E\xFA";
@@ -165,7 +164,7 @@ class SocketWrapper {
165164
contents_.clear();
166165
uv_tcp_init(loop_, &socket_);
167166
sockaddr_in addr;
168-
uv_ip4_addr(host.c_str(), PORT, &addr);
167+
uv_ip4_addr(host.c_str(), port, &addr);
169168
int err = uv_tcp_connect(&connect_, &socket_,
170169
reinterpret_cast<const sockaddr*>(&addr),
171170
Connected_);
@@ -183,7 +182,7 @@ class SocketWrapper {
183182
contents_.clear();
184183
uv_tcp_init(loop_, &socket_);
185184
sockaddr_in addr;
186-
uv_ip4_addr(host.c_str(), PORT, &addr);
185+
uv_ip4_addr(host.c_str(), port, &addr);
187186
int err = uv_tcp_connect(&connect_, &socket_,
188187
reinterpret_cast<const sockaddr*>(&addr),
189188
ConnectionMustFail_);
@@ -310,6 +309,10 @@ class ServerHolder {
310309
return &server_;
311310
}
312311

312+
int port() {
313+
return server_.port();
314+
}
315+
313316
static void CloseCallback(InspectorSocketServer* server) {
314317
ServerHolder* holder = node::ContainerOf(&ServerHolder::server_, server);
315318
holder->closed = true;
@@ -377,12 +380,12 @@ static const std::string WsHandshakeRequest(const std::string& target_id) {
377380

378381
TEST_F(InspectorSocketServerTest, InspectorSessions) {
379382
TestInspectorServerDelegate delegate;
380-
ServerHolder server(&delegate, PORT);
383+
ServerHolder server(&delegate, 0);
381384
ASSERT_TRUE(server->Start(&loop));
382385

383386
SocketWrapper well_behaved_socket(&loop);
384387
// Regular connection
385-
well_behaved_socket.Connect("0.0.0.0", PORT);
388+
well_behaved_socket.Connect("0.0.0.0", server.port());
386389
well_behaved_socket.Write(WsHandshakeRequest(MAIN_TARGET_ID));
387390
well_behaved_socket.Expect(WS_HANDSHAKE_RESPONSE);
388391

@@ -405,7 +408,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
405408

406409
// Declined connection
407410
SocketWrapper declined_target_socket(&loop);
408-
declined_target_socket.Connect("127.0.0.1", PORT);
411+
declined_target_socket.Connect("127.0.0.1", server.port());
409412
declined_target_socket.Write(WsHandshakeRequest(UNCONNECTABLE_TARGET_ID));
410413
declined_target_socket.Expect("HTTP/1.0 400 Bad Request");
411414
declined_target_socket.ExpectEOF();
@@ -414,7 +417,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
414417

415418
// Bogus target - start session callback should not even be invoked
416419
SocketWrapper bogus_target_socket(&loop);
417-
bogus_target_socket.Connect("127.0.0.1", PORT);
420+
bogus_target_socket.Connect("127.0.0.1", server.port());
418421
bogus_target_socket.Write(WsHandshakeRequest("bogus_target"));
419422
bogus_target_socket.Expect("HTTP/1.0 400 Bad Request");
420423
bogus_target_socket.ExpectEOF();
@@ -423,7 +426,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
423426

424427
// Drop connection (no proper close frames)
425428
SocketWrapper dropped_connection_socket(&loop);
426-
dropped_connection_socket.Connect("127.0.0.1", PORT);
429+
dropped_connection_socket.Connect("127.0.0.1", server.port());
427430
dropped_connection_socket.Write(WsHandshakeRequest(MAIN_TARGET_ID));
428431
dropped_connection_socket.Expect(WS_HANDSHAKE_RESPONSE);
429432

@@ -437,7 +440,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
437440

438441
// Reconnect regular connection
439442
SocketWrapper stays_till_termination_socket(&loop);
440-
stays_till_termination_socket.Connect("127.0.0.1", PORT);
443+
stays_till_termination_socket.Connect("127.0.0.1", server.port());
441444
stays_till_termination_socket.Write(WsHandshakeRequest(MAIN_TARGET_ID));
442445
stays_till_termination_socket.Expect(WS_HANDSHAKE_RESPONSE);
443446

@@ -464,7 +467,7 @@ TEST_F(InspectorSocketServerTest, InspectorSessions) {
464467

465468
TEST_F(InspectorSocketServerTest, ServerDoesNothing) {
466469
TestInspectorServerDelegate delegate;
467-
ServerHolder server(&delegate, PORT);
470+
ServerHolder server(&delegate, 0);
468471
ASSERT_TRUE(server->Start(&loop));
469472

470473
server->Stop(ServerHolder::CloseCallback);
@@ -474,14 +477,14 @@ TEST_F(InspectorSocketServerTest, ServerDoesNothing) {
474477

475478
TEST_F(InspectorSocketServerTest, ServerWithoutTargets) {
476479
ServerDelegateNoTargets delegate;
477-
ServerHolder server(&delegate, PORT);
480+
ServerHolder server(&delegate, 0);
478481
ASSERT_TRUE(server->Start(&loop));
479-
TestHttpRequest(PORT, "/json/list", "[ ]");
480-
TestHttpRequest(PORT, "/json", "[ ]");
482+
TestHttpRequest(server.port(), "/json/list", "[ ]");
483+
TestHttpRequest(server.port(), "/json", "[ ]");
481484

482485
// Declined connection
483486
SocketWrapper socket(&loop);
484-
socket.Connect("0.0.0.0", PORT);
487+
socket.Connect("0.0.0.0", server.port());
485488
socket.Write(WsHandshakeRequest(UNCONNECTABLE_TARGET_ID));
486489
socket.Expect("HTTP/1.0 400 Bad Request");
487490
socket.ExpectEOF();
@@ -492,9 +495,9 @@ TEST_F(InspectorSocketServerTest, ServerWithoutTargets) {
492495

493496
TEST_F(InspectorSocketServerTest, ServerCannotStart) {
494497
ServerDelegateNoTargets delegate1, delegate2;
495-
ServerHolder server1(&delegate1, PORT);
498+
ServerHolder server1(&delegate1, 0);
496499
ASSERT_TRUE(server1->Start(&loop));
497-
ServerHolder server2(&delegate2, PORT);
500+
ServerHolder server2(&delegate2, server1.port());
498501
ASSERT_FALSE(server2->Start(&loop));
499502
server1->Stop(ServerHolder::CloseCallback);
500503
server1->TerminateConnections(ServerHolder::ConnectionsTerminated);
@@ -506,10 +509,10 @@ TEST_F(InspectorSocketServerTest, ServerCannotStart) {
506509

507510
TEST_F(InspectorSocketServerTest, StoppingServerDoesNotKillConnections) {
508511
ServerDelegateNoTargets delegate;
509-
ServerHolder server(&delegate, PORT);
512+
ServerHolder server(&delegate, 0);
510513
ASSERT_TRUE(server->Start(&loop));
511514
SocketWrapper socket1(&loop);
512-
socket1.Connect("0.0.0.0", PORT);
515+
socket1.Connect("0.0.0.0", server.port());
513516
socket1.TestHttpRequest("/json/list", "[ ]");
514517
server->Stop(ServerHolder::CloseCallback);
515518
SPIN_WHILE(!server.closed);

0 commit comments

Comments
 (0)