| 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 #include "net/websockets/websocket_frame.h" | 5 #include "net/websockets/websocket_frame.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 44 std::vector<char> output(expected_output.size()); | 44 std::vector<char> output(expected_output.size()); |
| 45 EXPECT_EQ(static_cast<int>(expected_output.size()), | 45 EXPECT_EQ(static_cast<int>(expected_output.size()), |
| 46 WriteWebSocketFrameHeader( | 46 WriteWebSocketFrameHeader( |
| 47 header, NULL, &output.front(), output.size())); | 47 header, NULL, &output.front(), output.size())); |
| 48 EXPECT_EQ(expected_output, output); | 48 EXPECT_EQ(expected_output, output); |
| 49 } | 49 } |
| 50 } | 50 } |
| 51 | 51 |
| 52 TEST(WebSocketFrameHeaderTest, FrameLengthsWithMasking) { | 52 TEST(WebSocketFrameHeaderTest, FrameLengthsWithMasking) { |
| 53 static const char kMaskingKey[] = "\xDE\xAD\xBE\xEF"; | 53 static const char kMaskingKey[] = "\xDE\xAD\xBE\xEF"; |
| 54 COMPILE_ASSERT(arraysize(kMaskingKey) - 1 == | 54 static_assert( |
| 55 WebSocketFrameHeader::kMaskingKeyLength, | 55 arraysize(kMaskingKey) - 1 == WebSocketFrameHeader::kMaskingKeyLength, |
| 56 incorrect_masking_key_size); | 56 "incorrect masking key size"); |
| 57 | 57 |
| 58 struct TestCase { | 58 struct TestCase { |
| 59 const char* frame_header; | 59 const char* frame_header; |
| 60 size_t frame_header_length; | 60 size_t frame_header_length; |
| 61 uint64 frame_length; | 61 uint64 frame_length; |
| 62 }; | 62 }; |
| 63 static const TestCase kTests[] = { | 63 static const TestCase kTests[] = { |
| 64 { "\x81\x80\xDE\xAD\xBE\xEF", 6, GG_UINT64_C(0) }, | 64 { "\x81\x80\xDE\xAD\xBE\xEF", 6, GG_UINT64_C(0) }, |
| 65 { "\x81\xFD\xDE\xAD\xBE\xEF", 6, GG_UINT64_C(125) }, | 65 { "\x81\xFD\xDE\xAD\xBE\xEF", 6, GG_UINT64_C(125) }, |
| 66 { "\x81\xFE\x00\x7E\xDE\xAD\xBE\xEF", 8, GG_UINT64_C(126) }, | 66 { "\x81\xFE\x00\x7E\xDE\xAD\xBE\xEF", 8, GG_UINT64_C(126) }, |
| (...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 287 }; | 287 }; |
| 288 static const size_t kTestInputSize = arraysize(kTestInput) - 1; | 288 static const size_t kTestInputSize = arraysize(kTestInput) - 1; |
| 289 static const char kTestOutput[] = { | 289 static const char kTestOutput[] = { |
| 290 "\xef\xcd\x47\xa5\xcb\x36\x12\x1d\xcb\xd7\xad\x72\xeb\x5d\x0d\xb5" | 290 "\xef\xcd\x47\xa5\xcb\x36\x12\x1d\xcb\xd7\xad\x72\xeb\x5d\x0d\xb5" |
| 291 "\xbb\x36\x80\xf5\x2e\x16\x76\x6d\x9b\x2c\x34\x34\xa9\xe0\x68\xc8" | 291 "\xbb\x36\x80\xf5\x2e\x16\x76\x6d\x9b\x2c\x34\x34\xa9\xe0\x68\xc8" |
| 292 "\x02\xab\x19\x1e\x5b\x46\x2c\x95\xc2\x95\x16\xc5\x9d\x1c\x87\x5a" | 292 "\x02\xab\x19\x1e\x5b\x46\x2c\x95\xc2\x95\x16\xc5\x9d\x1c\x87\x5a" |
| 293 "\x2e\x34\x82\xcc\x1d\xc4\x6d\x73\xe3\x77\x9b\x7e\x5b\xb6\xfd\xf2" | 293 "\x2e\x34\x82\xcc\x1d\xc4\x6d\x73\xe3\x77\x9b\x7e\x5b\xb6\xfd\xf2" |
| 294 "\x08\x12\x11\xcb\x73\x71\xf3\xc9\xcb\xf7\x34\x61\x1a\xb2\x46\x08" | 294 "\x08\x12\x11\xcb\x73\x71\xf3\xc9\xcb\xf7\x34\x61\x1a\xb2\x46\x08" |
| 295 "\xbf\x41\x62\xba\x96\x6f\xe0\xe9\x4d\xcc\xea\x90\xd5\x2b\xbc\x16" | 295 "\xbf\x41\x62\xba\x96\x6f\xe0\xe9\x4d\xcc\xea\x90\xd5\x2b\xbc\x16" |
| 296 }; | 296 }; |
| 297 COMPILE_ASSERT(arraysize(kTestInput) == arraysize(kTestOutput), | 297 static_assert(arraysize(kTestInput) == arraysize(kTestOutput), |
| 298 output_and_input_arrays_have_the_same_length); | 298 "output and input arrays should have the same length"); |
| 299 scoped_ptr<char, base::AlignedFreeDeleter> scratch( | 299 scoped_ptr<char, base::AlignedFreeDeleter> scratch( |
| 300 static_cast<char*>( | 300 static_cast<char*>( |
| 301 base::AlignedAlloc(kScratchBufferSize, kMaxVectorAlignment))); | 301 base::AlignedAlloc(kScratchBufferSize, kMaxVectorAlignment))); |
| 302 WebSocketMaskingKey masking_key; | 302 WebSocketMaskingKey masking_key; |
| 303 std::copy(kTestMask, kTestMask + kMaskingKeyLength, masking_key.key); | 303 std::copy(kTestMask, kTestMask + kMaskingKeyLength, masking_key.key); |
| 304 for (size_t frame_offset = 0; frame_offset < kMaskingKeyLength; | 304 for (size_t frame_offset = 0; frame_offset < kMaskingKeyLength; |
| 305 ++frame_offset) { | 305 ++frame_offset) { |
| 306 for (size_t alignment = 0; alignment < kMaxVectorAlignment; ++alignment) { | 306 for (size_t alignment = 0; alignment < kMaxVectorAlignment; ++alignment) { |
| 307 char* const aligned_scratch = scratch.get() + alignment; | 307 char* const aligned_scratch = scratch.get() + alignment; |
| 308 const size_t aligned_len = std::min(kScratchBufferSize - alignment, | 308 const size_t aligned_len = std::min(kScratchBufferSize - alignment, |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 385 EXPECT_FALSE(Frame::IsKnownControlOpCode(0xF)); | 385 EXPECT_FALSE(Frame::IsKnownControlOpCode(0xF)); |
| 386 | 386 |
| 387 // Check that out-of-range opcodes return false | 387 // Check that out-of-range opcodes return false |
| 388 EXPECT_FALSE(Frame::IsKnownControlOpCode(-1)); | 388 EXPECT_FALSE(Frame::IsKnownControlOpCode(-1)); |
| 389 EXPECT_FALSE(Frame::IsKnownControlOpCode(0xFF)); | 389 EXPECT_FALSE(Frame::IsKnownControlOpCode(0xFF)); |
| 390 } | 390 } |
| 391 | 391 |
| 392 } // namespace | 392 } // namespace |
| 393 | 393 |
| 394 } // namespace net | 394 } // namespace net |
| OLD | NEW |