OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 // | 4 // |
5 // Tests for WebSocketBasicStream. Note that we do not attempt to verify that | 5 // Tests for WebSocketBasicStream. Note that we do not attempt to verify that |
6 // frame parsing itself functions correctly, as that is covered by the | 6 // frame parsing itself functions correctly, as that is covered by the |
7 // WebSocketFrameParser tests. | 7 // WebSocketFrameParser tests. |
8 | 8 |
9 #include "net/websockets/websocket_basic_stream.h" | 9 #include "net/websockets/websocket_basic_stream.h" |
10 | 10 |
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
246 kWriteFrameSize - (WebSocketFrameHeader::kBaseHeaderSize + | 246 kWriteFrameSize - (WebSocketFrameHeader::kBaseHeaderSize + |
247 WebSocketFrameHeader::kMaskingKeyLength); | 247 WebSocketFrameHeader::kMaskingKeyLength); |
248 frame->data = new IOBuffer(payload_size); | 248 frame->data = new IOBuffer(payload_size); |
249 memcpy(frame->data->data(), | 249 memcpy(frame->data->data(), |
250 kWriteFrame + kWriteFrameSize - payload_size, | 250 kWriteFrame + kWriteFrameSize - payload_size, |
251 payload_size); | 251 payload_size); |
252 WebSocketFrameHeader& header = frame->header; | 252 WebSocketFrameHeader& header = frame->header; |
253 header.final = true; | 253 header.final = true; |
254 header.masked = true; | 254 header.masked = true; |
255 header.payload_length = payload_size; | 255 header.payload_length = payload_size; |
256 frames_.push_back(frame.release()); | 256 frames_.push_back(frame.Pass()); |
257 } | 257 } |
258 | 258 |
259 // Creates a stream that expects the listed writes. | 259 // Creates a stream that expects the listed writes. |
260 template <size_t N> | 260 template <size_t N> |
261 void CreateWriteOnly(MockWrite (&writes)[N]) { | 261 void CreateWriteOnly(MockWrite (&writes)[N]) { |
262 CreateStream(NULL, 0, writes, N); | 262 CreateStream(NULL, 0, writes, N); |
263 } | 263 } |
264 }; | 264 }; |
265 | 265 |
266 TEST_F(WebSocketBasicStreamSocketTest, ConstructionWorks) { | 266 TEST_F(WebSocketBasicStreamSocketTest, ConstructionWorks) { |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
889 MockWrite(SYNCHRONOUS, kMaskedEmptyPong, kMaskedEmptyPongSize)}; | 889 MockWrite(SYNCHRONOUS, kMaskedEmptyPong, kMaskedEmptyPongSize)}; |
890 CreateWriteOnly(writes); | 890 CreateWriteOnly(writes); |
891 | 891 |
892 scoped_ptr<WebSocketFrame> frame( | 892 scoped_ptr<WebSocketFrame> frame( |
893 new WebSocketFrame(WebSocketFrameHeader::kOpCodePong)); | 893 new WebSocketFrame(WebSocketFrameHeader::kOpCodePong)); |
894 WebSocketFrameHeader& header = frame->header; | 894 WebSocketFrameHeader& header = frame->header; |
895 header.final = true; | 895 header.final = true; |
896 header.masked = true; | 896 header.masked = true; |
897 header.payload_length = 0; | 897 header.payload_length = 0; |
898 ScopedVector<WebSocketFrame> frames; | 898 ScopedVector<WebSocketFrame> frames; |
899 frames.push_back(frame.release()); | 899 frames.push_back(frame.Pass()); |
900 EXPECT_EQ(OK, stream_->WriteFrames(&frames, cb_.callback())); | 900 EXPECT_EQ(OK, stream_->WriteFrames(&frames, cb_.callback())); |
901 } | 901 } |
902 | 902 |
903 // Check that writing with a non-NULL mask works correctly. | 903 // Check that writing with a non-NULL mask works correctly. |
904 TEST_F(WebSocketBasicStreamSocketTest, WriteNonNulMask) { | 904 TEST_F(WebSocketBasicStreamSocketTest, WriteNonNulMask) { |
905 std::string masked_frame = std::string("\x81\x88"); | 905 std::string masked_frame = std::string("\x81\x88"); |
906 masked_frame += std::string(kNonNulMaskingKey.key, 4); | 906 masked_frame += std::string(kNonNulMaskingKey.key, 4); |
907 masked_frame += "jiggered"; | 907 masked_frame += "jiggered"; |
908 MockWrite writes[] = { | 908 MockWrite writes[] = { |
909 MockWrite(SYNCHRONOUS, masked_frame.data(), masked_frame.size())}; | 909 MockWrite(SYNCHRONOUS, masked_frame.data(), masked_frame.size())}; |
910 generator_ = &GenerateNonNulMaskingKey; | 910 generator_ = &GenerateNonNulMaskingKey; |
911 CreateStream(NULL, 0, writes, arraysize(writes)); | 911 CreateStream(NULL, 0, writes, arraysize(writes)); |
912 | 912 |
913 scoped_ptr<WebSocketFrame> frame( | 913 scoped_ptr<WebSocketFrame> frame( |
914 new WebSocketFrame(WebSocketFrameHeader::kOpCodeText)); | 914 new WebSocketFrame(WebSocketFrameHeader::kOpCodeText)); |
915 const std::string unmasked_payload = "graphics"; | 915 const std::string unmasked_payload = "graphics"; |
916 const size_t payload_size = unmasked_payload.size(); | 916 const size_t payload_size = unmasked_payload.size(); |
917 frame->data = new IOBuffer(payload_size); | 917 frame->data = new IOBuffer(payload_size); |
918 memcpy(frame->data->data(), unmasked_payload.data(), payload_size); | 918 memcpy(frame->data->data(), unmasked_payload.data(), payload_size); |
919 WebSocketFrameHeader& header = frame->header; | 919 WebSocketFrameHeader& header = frame->header; |
920 header.final = true; | 920 header.final = true; |
921 header.masked = true; | 921 header.masked = true; |
922 header.payload_length = payload_size; | 922 header.payload_length = payload_size; |
923 frames_.push_back(frame.release()); | 923 frames_.push_back(frame.Pass()); |
924 | 924 |
925 EXPECT_EQ(OK, stream_->WriteFrames(&frames_, cb_.callback())); | 925 EXPECT_EQ(OK, stream_->WriteFrames(&frames_, cb_.callback())); |
926 } | 926 } |
927 | 927 |
928 TEST_F(WebSocketBasicStreamSocketTest, GetExtensionsWorks) { | 928 TEST_F(WebSocketBasicStreamSocketTest, GetExtensionsWorks) { |
929 extensions_ = "inflate-uuencode"; | 929 extensions_ = "inflate-uuencode"; |
930 CreateNullStream(); | 930 CreateNullStream(); |
931 | 931 |
932 EXPECT_EQ("inflate-uuencode", stream_->GetExtensions()); | 932 EXPECT_EQ("inflate-uuencode", stream_->GetExtensions()); |
933 } | 933 } |
934 | 934 |
935 TEST_F(WebSocketBasicStreamSocketTest, GetSubProtocolWorks) { | 935 TEST_F(WebSocketBasicStreamSocketTest, GetSubProtocolWorks) { |
936 sub_protocol_ = "cyberchat"; | 936 sub_protocol_ = "cyberchat"; |
937 CreateNullStream(); | 937 CreateNullStream(); |
938 | 938 |
939 EXPECT_EQ("cyberchat", stream_->GetSubProtocol()); | 939 EXPECT_EQ("cyberchat", stream_->GetSubProtocol()); |
940 } | 940 } |
941 | 941 |
942 } // namespace | 942 } // namespace |
943 } // namespace net | 943 } // namespace net |
OLD | NEW |