| 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 |