@@ -84,15 +84,15 @@ static void do_write(const char* data, int len) {
84
84
bool done = false ;
85
85
req.data = &done;
86
86
uv_buf_t buf[1 ];
87
- buf[0 ].base = const_cast <char *>(data);
87
+ buf[0 ].base = const_cast <char *>(data);
88
88
buf[0 ].len = len;
89
89
uv_write (&req, reinterpret_cast <uv_stream_t *>(&client_socket), buf, 1 ,
90
90
write_done);
91
91
SPIN_WHILE (req.data );
92
92
}
93
93
94
94
static void buffer_alloc_cb (uv_handle_t * stream, size_t len, uv_buf_t * buf) {
95
- buf->base = static_cast <char *>(malloc (len));
95
+ buf->base = static_cast <char *>(malloc (len));
96
96
buf->len = len;
97
97
}
98
98
@@ -369,7 +369,7 @@ class InspectorSocketTest : public ::testing::Test {
369
369
TEST_F (InspectorSocketTest, ReadsAndWritesInspectorMessage) {
370
370
ASSERT_TRUE (connected);
371
371
ASSERT_FALSE (inspector_ready);
372
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
372
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
373
373
SPIN_WHILE (!inspector_ready);
374
374
expect_handshake ();
375
375
@@ -397,7 +397,7 @@ TEST_F(InspectorSocketTest, ReadsAndWritesInspectorMessage) {
397
397
398
398
TEST_F (InspectorSocketTest, BufferEdgeCases) {
399
399
400
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
400
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
401
401
expect_handshake ();
402
402
403
403
const char MULTIPLE_REQUESTS[] = {
@@ -466,11 +466,11 @@ TEST_F(InspectorSocketTest, AcceptsRequestInSeveralWrites) {
466
466
const int write1 = 95 ;
467
467
const int write2 = 5 ;
468
468
const int write3 = sizeof (HANDSHAKE_REQ) - write1 - write2 - 1 ;
469
- do_write (const_cast <char *>(HANDSHAKE_REQ), write1);
469
+ do_write (const_cast <char *>(HANDSHAKE_REQ), write1);
470
470
ASSERT_FALSE (inspector_ready);
471
- do_write (const_cast <char *>(HANDSHAKE_REQ) + write1, write2);
471
+ do_write (const_cast <char *>(HANDSHAKE_REQ) + write1, write2);
472
472
ASSERT_FALSE (inspector_ready);
473
- do_write (const_cast <char *>(HANDSHAKE_REQ) + write1 + write2, write3);
473
+ do_write (const_cast <char *>(HANDSHAKE_REQ) + write1 + write2, write3);
474
474
SPIN_WHILE (!inspector_ready);
475
475
expect_handshake ();
476
476
inspector_read_stop (&inspector);
@@ -481,10 +481,10 @@ TEST_F(InspectorSocketTest, AcceptsRequestInSeveralWrites) {
481
481
TEST_F (InspectorSocketTest, ExtraTextBeforeRequest) {
482
482
last_event = kInspectorHandshakeUpgraded ;
483
483
char UNCOOL_BRO[] = " Uncool, bro: Text before the first req\r\n " ;
484
- do_write (const_cast <char *>(UNCOOL_BRO), sizeof (UNCOOL_BRO) - 1 );
484
+ do_write (const_cast <char *>(UNCOOL_BRO), sizeof (UNCOOL_BRO) - 1 );
485
485
486
486
ASSERT_FALSE (inspector_ready);
487
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
487
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
488
488
SPIN_WHILE (last_event != kInspectorHandshakeFailed );
489
489
expect_handshake_failure ();
490
490
EXPECT_EQ (uv_is_active (reinterpret_cast <uv_handle_t *>(&client_socket)), 0 );
@@ -493,10 +493,10 @@ TEST_F(InspectorSocketTest, ExtraTextBeforeRequest) {
493
493
494
494
TEST_F (InspectorSocketTest, ExtraLettersBeforeRequest) {
495
495
char UNCOOL_BRO[] = " Uncool!!" ;
496
- do_write (const_cast <char *>(UNCOOL_BRO), sizeof (UNCOOL_BRO) - 1 );
496
+ do_write (const_cast <char *>(UNCOOL_BRO), sizeof (UNCOOL_BRO) - 1 );
497
497
498
498
ASSERT_FALSE (inspector_ready);
499
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
499
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
500
500
SPIN_WHILE (last_event != kInspectorHandshakeFailed );
501
501
expect_handshake_failure ();
502
502
EXPECT_EQ (uv_is_active (reinterpret_cast <uv_handle_t *>(&client_socket)), 0 );
@@ -511,7 +511,7 @@ TEST_F(InspectorSocketTest, RequestWithoutKey) {
511
511
" Sec-WebSocket-Version: 13\r\n\r\n " ;
512
512
;
513
513
514
- do_write (const_cast <char *>(BROKEN_REQUEST), sizeof (BROKEN_REQUEST) - 1 );
514
+ do_write (const_cast <char *>(BROKEN_REQUEST), sizeof (BROKEN_REQUEST) - 1 );
515
515
SPIN_WHILE (last_event != kInspectorHandshakeFailed );
516
516
expect_handshake_failure ();
517
517
EXPECT_EQ (uv_is_active (reinterpret_cast <uv_handle_t *>(&client_socket)), 0 );
@@ -521,7 +521,7 @@ TEST_F(InspectorSocketTest, RequestWithoutKey) {
521
521
TEST_F (InspectorSocketTest, KillsConnectionOnProtocolViolation) {
522
522
ASSERT_TRUE (connected);
523
523
ASSERT_FALSE (inspector_ready);
524
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
524
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
525
525
SPIN_WHILE (!inspector_ready);
526
526
ASSERT_TRUE (inspector_ready);
527
527
expect_handshake ();
@@ -534,7 +534,7 @@ TEST_F(InspectorSocketTest, KillsConnectionOnProtocolViolation) {
534
534
TEST_F (InspectorSocketTest, CanStopReadingFromInspector) {
535
535
ASSERT_TRUE (connected);
536
536
ASSERT_FALSE (inspector_ready);
537
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
537
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
538
538
expect_handshake ();
539
539
ASSERT_TRUE (inspector_ready);
540
540
@@ -552,15 +552,15 @@ TEST_F(InspectorSocketTest, CanStopReadingFromInspector) {
552
552
manual_inspector_socket_cleanup ();
553
553
}
554
554
555
- static bool inspector_closed;
555
+ static int inspector_closed = 0 ;
556
556
557
557
void inspector_closed_cb (inspector_socket_t *inspector, int code) {
558
- inspector_closed = true ;
558
+ inspector_closed++ ;
559
559
}
560
560
561
561
TEST_F (InspectorSocketTest, CloseDoesNotNotifyReadCallback) {
562
- inspector_closed = false ;
563
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
562
+ inspector_closed = 0 ;
563
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
564
564
expect_handshake ();
565
565
566
566
int error_code = 0 ;
@@ -570,27 +570,29 @@ TEST_F(InspectorSocketTest, CloseDoesNotNotifyReadCallback) {
570
570
inspector_close (&inspector, inspector_closed_cb);
571
571
char CLOSE_FRAME[] = {' \x88 ' , ' \x00 ' };
572
572
expect_on_client (CLOSE_FRAME, sizeof (CLOSE_FRAME));
573
- ASSERT_FALSE ( inspector_closed);
573
+ EXPECT_EQ ( 0 , inspector_closed);
574
574
const char CLIENT_CLOSE_FRAME[] = {' \x88 ' , ' \x80 ' , ' \x2D ' ,
575
575
' \x0E ' , ' \x1E ' , ' \xFA ' };
576
576
do_write (CLIENT_CLOSE_FRAME, sizeof (CLIENT_CLOSE_FRAME));
577
577
EXPECT_NE (UV_EOF, error_code);
578
- SPIN_WHILE (!inspector_closed);
578
+ SPIN_WHILE (inspector_closed == 0 );
579
+ EXPECT_EQ (1 , inspector_closed);
579
580
inspector.data = nullptr ;
580
581
}
581
582
582
583
TEST_F (InspectorSocketTest, CloseWorksWithoutReadEnabled) {
583
- inspector_closed = false ;
584
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
584
+ inspector_closed = 0 ;
585
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
585
586
expect_handshake ();
586
587
inspector_close (&inspector, inspector_closed_cb);
587
588
char CLOSE_FRAME[] = {' \x88 ' , ' \x00 ' };
588
589
expect_on_client (CLOSE_FRAME, sizeof (CLOSE_FRAME));
589
- ASSERT_FALSE ( inspector_closed);
590
+ EXPECT_EQ ( 0 , inspector_closed);
590
591
const char CLIENT_CLOSE_FRAME[] = {' \x88 ' , ' \x80 ' , ' \x2D ' ,
591
592
' \x0E ' , ' \x1E ' , ' \xFA ' };
592
593
do_write (CLIENT_CLOSE_FRAME, sizeof (CLIENT_CLOSE_FRAME));
593
- SPIN_WHILE (!inspector_closed);
594
+ SPIN_WHILE (inspector_closed == 0 );
595
+ EXPECT_EQ (1 , inspector_closed);
594
596
}
595
597
596
598
// Make sure buffering works
@@ -690,7 +692,7 @@ HandshakeCanBeCanceled_handshake(enum inspector_handshake_event state,
690
692
TEST_F (InspectorSocketTest, HandshakeCanBeCanceled) {
691
693
handshake_delegate = HandshakeCanBeCanceled_handshake;
692
694
693
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
695
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
694
696
695
697
expect_handshake_failure ();
696
698
EXPECT_EQ (2 , handshake_events);
@@ -727,7 +729,7 @@ TEST_F(InspectorSocketTest, GetThenHandshake) {
727
729
728
730
expect_on_client (TEST_SUCCESS, sizeof (TEST_SUCCESS) - 1 );
729
731
730
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
732
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
731
733
expect_handshake ();
732
734
EXPECT_EQ (3 , handshake_events);
733
735
manual_inspector_socket_cleanup ();
@@ -766,7 +768,7 @@ static void CleanupSocketAfterEOF_read_cb(uv_stream_t* stream, ssize_t nread,
766
768
}
767
769
768
770
TEST_F (InspectorSocketTest, CleanupSocketAfterEOF) {
769
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
771
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
770
772
expect_handshake ();
771
773
772
774
inspector_read_start (&inspector, buffer_alloc_cb,
@@ -810,7 +812,7 @@ static void mask_message(const char* message,
810
812
TEST_F (InspectorSocketTest, Send1Mb) {
811
813
ASSERT_TRUE (connected);
812
814
ASSERT_FALSE (inspector_ready);
813
- do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
815
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
814
816
SPIN_WHILE (!inspector_ready);
815
817
expect_handshake ();
816
818
@@ -862,3 +864,23 @@ TEST_F(InspectorSocketTest, Send1Mb) {
862
864
free (expected);
863
865
free (message);
864
866
}
867
+
868
+ static ssize_t err;
869
+
870
+ void ErrorCleansUpTheSocket_cb (uv_stream_t * stream, ssize_t read,
871
+ const uv_buf_t * buf) {
872
+ err = read;
873
+ }
874
+
875
+ TEST_F (InspectorSocketTest, ErrorCleansUpTheSocket) {
876
+ inspector_closed = 0 ;
877
+ do_write (const_cast <char *>(HANDSHAKE_REQ), sizeof (HANDSHAKE_REQ) - 1 );
878
+ expect_handshake ();
879
+ const char NOT_A_GOOD_FRAME[] = {' H' , ' e' , ' l' , ' l' , ' o' };
880
+ err = 42 ;
881
+ inspector_read_start (&inspector, buffer_alloc_cb,
882
+ ErrorCleansUpTheSocket_cb);
883
+ do_write (NOT_A_GOOD_FRAME, sizeof (NOT_A_GOOD_FRAME));
884
+ SPIN_WHILE (err > 0 );
885
+ EXPECT_EQ (UV_EPROTO, err);
886
+ }
0 commit comments