Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit c77078f

Browse filesBrowse files
Eugene OstroukhovItalo A. Casas
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 <jasnell@gmail.com> Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
1 parent d24491c commit c77078f
Copy full SHA for c77078f

File tree

Expand file treeCollapse file tree

3 files changed

+44
-19
lines changed
Open diff view settings
Filter options
Expand file treeCollapse file tree

3 files changed

+44
-19
lines changed
Open diff view settings
Collapse file

‎src/inspector_socket_server.cc‎

Copy file name to clipboardExpand all lines: src/inspector_socket_server.cc
+19Lines changed: 19 additions & 0 deletions
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);
Collapse file

‎src/inspector_socket_server.h‎

Copy file name to clipboardExpand all lines: src/inspector_socket_server.h
+4-1Lines changed: 4 additions & 1 deletion
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_;
Collapse file

‎test/cctest/test_inspector_socket_server.cc‎

Copy file name to clipboardExpand all lines: test/cctest/test_inspector_socket_server.cc
+21-18Lines changed: 21 additions & 18 deletions
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 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.