Index: net/websockets/websocket_frame_unittest.cc |
diff --git a/net/websockets/websocket_frame_unittest.cc b/net/websockets/websocket_frame_unittest.cc |
index 59f4719e31ab08ebf038a718ba607025cdc937b1..a790af8c476f47b52b55b680ad2b734f513ee87c 100644 |
--- a/net/websockets/websocket_frame_unittest.cc |
+++ b/net/websockets/websocket_frame_unittest.cc |
@@ -45,13 +45,8 @@ TEST(WebSocketFrameHeaderTest, FrameLengths) { |
static const int kNumTests = ARRAYSIZE_UNSAFE(kTests); |
for (int i = 0; i < kNumTests; ++i) { |
- WebSocketFrameHeader header; |
+ WebSocketFrameHeader header(WebSocketFrameHeader::kOpCodeText); |
header.final = true; |
- header.reserved1 = false; |
- header.reserved2 = false; |
- header.reserved3 = false; |
- header.opcode = WebSocketFrameHeader::kOpCodeText; |
- header.masked = false; |
header.payload_length = kTests[i].frame_length; |
std::vector<char> expected_output( |
@@ -93,12 +88,8 @@ TEST(WebSocketFrameHeaderTest, FrameLengthsWithMasking) { |
masking_key.key); |
for (int i = 0; i < kNumTests; ++i) { |
- WebSocketFrameHeader header; |
+ WebSocketFrameHeader header(WebSocketFrameHeader::kOpCodeText); |
header.final = true; |
- header.reserved1 = false; |
- header.reserved2 = false; |
- header.reserved3 = false; |
- header.opcode = WebSocketFrameHeader::kOpCodeText; |
header.masked = true; |
header.payload_length = kTests[i].frame_length; |
@@ -141,13 +132,8 @@ TEST(WebSocketFrameHeaderTest, FrameOpCodes) { |
static const int kNumTests = ARRAYSIZE_UNSAFE(kTests); |
for (int i = 0; i < kNumTests; ++i) { |
- WebSocketFrameHeader header; |
+ WebSocketFrameHeader header(kTests[i].opcode); |
header.final = true; |
- header.reserved1 = false; |
- header.reserved2 = false; |
- header.reserved3 = false; |
- header.opcode = kTests[i].opcode; |
- header.masked = false; |
header.payload_length = 0; |
std::vector<char> expected_output( |
@@ -182,13 +168,11 @@ TEST(WebSocketFrameHeaderTest, FinalBitAndReservedBits) { |
static const int kNumTests = ARRAYSIZE_UNSAFE(kTests); |
for (int i = 0; i < kNumTests; ++i) { |
- WebSocketFrameHeader header; |
+ WebSocketFrameHeader header(WebSocketFrameHeader::kOpCodeText); |
header.final = kTests[i].final; |
header.reserved1 = kTests[i].reserved1; |
header.reserved2 = kTests[i].reserved2; |
header.reserved3 = kTests[i].reserved3; |
- header.opcode = WebSocketFrameHeader::kOpCodeText; |
- header.masked = false; |
header.payload_length = 0; |
std::vector<char> expected_output( |
@@ -225,11 +209,8 @@ TEST(WebSocketFrameHeaderTest, InsufficientBufferSize) { |
static const int kNumTests = ARRAYSIZE_UNSAFE(kTests); |
for (int i = 0; i < kNumTests; ++i) { |
- WebSocketFrameHeader header; |
+ WebSocketFrameHeader header(WebSocketFrameHeader::kOpCodeText); |
header.final = true; |
- header.reserved1 = false; |
- header.reserved2 = false; |
- header.reserved3 = false; |
header.opcode = WebSocketFrameHeader::kOpCodeText; |
header.masked = kTests[i].masked; |
header.payload_length = kTests[i].payload_length; |
@@ -423,4 +404,62 @@ TEST_F(WebSocketFrameTestMaskBenchmark, BenchmarkMaskLongPayload) { |
Benchmark(payload.get(), kLongPayloadSize); |
} |
+// "IsKnownDataOpCode" is implemented using bit-mangling for efficiency, so we |
+// need to check that the results match the actual op-codes defined. |
+TEST(WebSocketFrameHeaderTest, IsKnownDataOpCode) { |
+ // Make the test less verbose. |
+ typedef WebSocketFrameHeader Frame; |
+ |
+ // Known opcode, is used for data frames |
+ EXPECT_TRUE(Frame::IsKnownDataOpCode(Frame::kOpCodeContinuation)); |
+ EXPECT_TRUE(Frame::IsKnownDataOpCode(Frame::kOpCodeText)); |
+ EXPECT_TRUE(Frame::IsKnownDataOpCode(Frame::kOpCodeBinary)); |
+ |
+ // Known opcode, is used for control frames |
+ EXPECT_FALSE(Frame::IsKnownDataOpCode(Frame::kOpCodeClose)); |
+ EXPECT_FALSE(Frame::IsKnownDataOpCode(Frame::kOpCodePing)); |
+ EXPECT_FALSE(Frame::IsKnownDataOpCode(Frame::kOpCodePong)); |
+ |
+ // Check that unused opcodes return false |
+ EXPECT_FALSE(Frame::IsKnownDataOpCode(Frame::kOpCodeDataUnused)); |
+ EXPECT_FALSE(Frame::IsKnownDataOpCode(Frame::kOpCodeControlUnused)); |
+ |
+ // Check that opcodes with the 4 bit set return false |
+ EXPECT_FALSE(Frame::IsKnownDataOpCode(0x6)); |
+ EXPECT_FALSE(Frame::IsKnownDataOpCode(0xF)); |
+ |
+ // Check that out-of-range opcodes return false |
+ EXPECT_FALSE(Frame::IsKnownDataOpCode(-1)); |
+ EXPECT_FALSE(Frame::IsKnownDataOpCode(0xFF)); |
+} |
+ |
+// "IsKnownControlOpCode" is implemented using bit-mangling as with |
+// "IsKnownDataOpCode". |
+TEST(WebSocketFrameHeaderTest, IsKnownControlOpCode) { |
+ // Make the test less verbose. |
+ typedef WebSocketFrameHeader Frame; |
+ |
+ // Known opcode, is used for data frames |
+ EXPECT_FALSE(Frame::IsKnownControlOpCode(Frame::kOpCodeContinuation)); |
+ EXPECT_FALSE(Frame::IsKnownControlOpCode(Frame::kOpCodeText)); |
+ EXPECT_FALSE(Frame::IsKnownControlOpCode(Frame::kOpCodeBinary)); |
+ |
+ // Known opcode, is used for control frames |
+ EXPECT_TRUE(Frame::IsKnownControlOpCode(Frame::kOpCodeClose)); |
+ EXPECT_TRUE(Frame::IsKnownControlOpCode(Frame::kOpCodePing)); |
+ EXPECT_TRUE(Frame::IsKnownControlOpCode(Frame::kOpCodePong)); |
+ |
+ // Check that unused opcodes return false |
+ EXPECT_FALSE(Frame::IsKnownControlOpCode(Frame::kOpCodeDataUnused)); |
+ EXPECT_FALSE(Frame::IsKnownControlOpCode(Frame::kOpCodeControlUnused)); |
+ |
+ // Check that opcodes with the 4 bit set return false |
+ EXPECT_FALSE(Frame::IsKnownControlOpCode(0x6)); |
+ EXPECT_FALSE(Frame::IsKnownControlOpCode(0xF)); |
+ |
+ // Check that out-of-range opcodes return false |
+ EXPECT_FALSE(Frame::IsKnownControlOpCode(-1)); |
+ EXPECT_FALSE(Frame::IsKnownControlOpCode(0xFF)); |
+} |
+ |
} // namespace net |