Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(747)

Side by Side Diff: net/websockets/websocket_frame_parser_unittest.cc

Issue 14850012: Add missing status codes to WebSocketError enum. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Remove other mux status codes. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/websockets/websocket_frame_parser.cc ('k') | net/websockets/websocket_frame_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_parser.h" 5 #include "net/websockets/websocket_frame_parser.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 17 matching lines...) Expand all
28 const uint64 kMaskedHelloFrameLength = arraysize(kMaskedHelloFrame) - 1; 28 const uint64 kMaskedHelloFrameLength = arraysize(kMaskedHelloFrame) - 1;
29 29
30 struct FrameHeaderTestCase { 30 struct FrameHeaderTestCase {
31 const char* frame_header; 31 const char* frame_header;
32 size_t frame_header_length; 32 size_t frame_header_length;
33 uint64 frame_length; 33 uint64 frame_length;
34 WebSocketError error_code; 34 WebSocketError error_code;
35 }; 35 };
36 36
37 const FrameHeaderTestCase kFrameHeaderTests[] = { 37 const FrameHeaderTestCase kFrameHeaderTests[] = {
38 { "\x81\x00", 2, GG_UINT64_C(0), WEB_SOCKET_OK }, 38 { "\x81\x00", 2, GG_UINT64_C(0), kWebSocketNormalClosure },
39 { "\x81\x7D", 2, GG_UINT64_C(125), WEB_SOCKET_OK }, 39 { "\x81\x7D", 2, GG_UINT64_C(125), kWebSocketNormalClosure },
40 { "\x81\x7E\x00\x7E", 4, GG_UINT64_C(126), WEB_SOCKET_OK }, 40 { "\x81\x7E\x00\x7E", 4, GG_UINT64_C(126), kWebSocketNormalClosure },
41 { "\x81\x7E\xFF\xFF", 4, GG_UINT64_C(0xFFFF), WEB_SOCKET_OK }, 41 { "\x81\x7E\xFF\xFF", 4, GG_UINT64_C(0xFFFF), kWebSocketNormalClosure },
42 { "\x81\x7F\x00\x00\x00\x00\x00\x01\x00\x00", 10, GG_UINT64_C(0x10000), 42 { "\x81\x7F\x00\x00\x00\x00\x00\x01\x00\x00", 10, GG_UINT64_C(0x10000),
43 WEB_SOCKET_OK }, 43 kWebSocketNormalClosure },
44 { "\x81\x7F\x00\x00\x00\x00\x7F\xFF\xFF\xFF", 10, GG_UINT64_C(0x7FFFFFFF), 44 { "\x81\x7F\x00\x00\x00\x00\x7F\xFF\xFF\xFF", 10, GG_UINT64_C(0x7FFFFFFF),
45 WEB_SOCKET_OK }, 45 kWebSocketNormalClosure },
46 { "\x81\x7F\x00\x00\x00\x00\x80\x00\x00\x00", 10, GG_UINT64_C(0x80000000), 46 { "\x81\x7F\x00\x00\x00\x00\x80\x00\x00\x00", 10, GG_UINT64_C(0x80000000),
47 WEB_SOCKET_ERR_MESSAGE_TOO_BIG }, 47 kWebSocketErrorMessageTooBig },
48 { "\x81\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 10, 48 { "\x81\x7F\x7F\xFF\xFF\xFF\xFF\xFF\xFF\xFF", 10,
49 GG_UINT64_C(0x7FFFFFFFFFFFFFFF), WEB_SOCKET_ERR_MESSAGE_TOO_BIG } 49 GG_UINT64_C(0x7FFFFFFFFFFFFFFF), kWebSocketErrorMessageTooBig }
50 }; 50 };
51 const int kNumFrameHeaderTests = arraysize(kFrameHeaderTests); 51 const int kNumFrameHeaderTests = arraysize(kFrameHeaderTests);
52 52
53 TEST(WebSocketFrameParserTest, DecodeNormalFrame) { 53 TEST(WebSocketFrameParserTest, DecodeNormalFrame) {
54 WebSocketFrameParser parser; 54 WebSocketFrameParser parser;
55 55
56 ScopedVector<WebSocketFrameChunk> frames; 56 ScopedVector<WebSocketFrameChunk> frames;
57 EXPECT_TRUE(parser.Decode(kHelloFrame, kHelloFrameLength, &frames)); 57 EXPECT_TRUE(parser.Decode(kHelloFrame, kHelloFrameLength, &frames));
58 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 58 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
59 ASSERT_EQ(1u, frames.size()); 59 ASSERT_EQ(1u, frames.size());
60 WebSocketFrameChunk* frame = frames[0]; 60 WebSocketFrameChunk* frame = frames[0];
61 ASSERT_TRUE(frame != NULL); 61 ASSERT_TRUE(frame != NULL);
62 const WebSocketFrameHeader* header = frame->header.get(); 62 const WebSocketFrameHeader* header = frame->header.get();
63 EXPECT_TRUE(header != NULL); 63 EXPECT_TRUE(header != NULL);
64 if (header) { 64 if (header) {
65 EXPECT_TRUE(header->final); 65 EXPECT_TRUE(header->final);
66 EXPECT_FALSE(header->reserved1); 66 EXPECT_FALSE(header->reserved1);
67 EXPECT_FALSE(header->reserved2); 67 EXPECT_FALSE(header->reserved2);
68 EXPECT_FALSE(header->reserved3); 68 EXPECT_FALSE(header->reserved3);
69 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header->opcode); 69 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header->opcode);
70 EXPECT_FALSE(header->masked); 70 EXPECT_FALSE(header->masked);
71 EXPECT_EQ(kHelloLength, header->payload_length); 71 EXPECT_EQ(kHelloLength, header->payload_length);
72 } 72 }
73 EXPECT_TRUE(frame->final_chunk); 73 EXPECT_TRUE(frame->final_chunk);
74 74
75 ASSERT_EQ(static_cast<int>(kHelloLength), frame->data->size()); 75 ASSERT_EQ(static_cast<int>(kHelloLength), frame->data->size());
76 EXPECT_TRUE(std::equal(kHello, kHello + kHelloLength, frame->data->data())); 76 EXPECT_TRUE(std::equal(kHello, kHello + kHelloLength, frame->data->data()));
77 } 77 }
78 78
79 TEST(WebSocketFrameParserTest, DecodeMaskedFrame) { 79 TEST(WebSocketFrameParserTest, DecodeMaskedFrame) {
80 WebSocketFrameParser parser; 80 WebSocketFrameParser parser;
81 81
82 ScopedVector<WebSocketFrameChunk> frames; 82 ScopedVector<WebSocketFrameChunk> frames;
83 EXPECT_TRUE(parser.Decode(kMaskedHelloFrame, kMaskedHelloFrameLength, 83 EXPECT_TRUE(parser.Decode(kMaskedHelloFrame, kMaskedHelloFrameLength,
84 &frames)); 84 &frames));
85 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 85 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
86 ASSERT_EQ(1u, frames.size()); 86 ASSERT_EQ(1u, frames.size());
87 WebSocketFrameChunk* frame = frames[0]; 87 WebSocketFrameChunk* frame = frames[0];
88 ASSERT_TRUE(frame != NULL); 88 ASSERT_TRUE(frame != NULL);
89 const WebSocketFrameHeader* header = frame->header.get(); 89 const WebSocketFrameHeader* header = frame->header.get();
90 EXPECT_TRUE(header != NULL); 90 EXPECT_TRUE(header != NULL);
91 if (header) { 91 if (header) {
92 EXPECT_TRUE(header->final); 92 EXPECT_TRUE(header->final);
93 EXPECT_FALSE(header->reserved1); 93 EXPECT_FALSE(header->reserved1);
94 EXPECT_FALSE(header->reserved2); 94 EXPECT_FALSE(header->reserved2);
95 EXPECT_FALSE(header->reserved3); 95 EXPECT_FALSE(header->reserved3);
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 for (int i = 0; i < kNumInputs; ++i) { 133 for (int i = 0; i < kNumInputs; ++i) {
134 input.insert(input.end(), 134 input.insert(input.end(),
135 kInputs[i].frame, 135 kInputs[i].frame,
136 kInputs[i].frame + kInputs[i].frame_length); 136 kInputs[i].frame + kInputs[i].frame_length);
137 } 137 }
138 138
139 WebSocketFrameParser parser; 139 WebSocketFrameParser parser;
140 140
141 ScopedVector<WebSocketFrameChunk> frames; 141 ScopedVector<WebSocketFrameChunk> frames;
142 EXPECT_TRUE(parser.Decode(&input.front(), input.size(), &frames)); 142 EXPECT_TRUE(parser.Decode(&input.front(), input.size(), &frames));
143 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 143 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
144 ASSERT_EQ(static_cast<size_t>(kNumInputs), frames.size()); 144 ASSERT_EQ(static_cast<size_t>(kNumInputs), frames.size());
145 145
146 for (int i = 0; i < kNumInputs; ++i) { 146 for (int i = 0; i < kNumInputs; ++i) {
147 WebSocketFrameChunk* frame = frames[i]; 147 WebSocketFrameChunk* frame = frames[i];
148 EXPECT_TRUE(frame != NULL); 148 EXPECT_TRUE(frame != NULL);
149 if (!frame) 149 if (!frame)
150 continue; 150 continue;
151 EXPECT_TRUE(frame->final_chunk); 151 EXPECT_TRUE(frame->final_chunk);
152 ASSERT_EQ(kInputs[i].expected_payload_length, 152 ASSERT_EQ(kInputs[i].expected_payload_length,
153 static_cast<uint64>(frame->data->size())); 153 static_cast<uint64>(frame->data->size()));
(...skipping 25 matching lines...) Expand all
179 std::vector<char> input2(kHelloFrame + input1.size(), 179 std::vector<char> input2(kHelloFrame + input1.size(),
180 kHelloFrame + kHelloFrameLength); 180 kHelloFrame + kHelloFrameLength);
181 181
182 std::vector<char> expected1(kHello, kHello + cutting_pos); 182 std::vector<char> expected1(kHello, kHello + cutting_pos);
183 std::vector<char> expected2(kHello + cutting_pos, kHello + kHelloLength); 183 std::vector<char> expected2(kHello + cutting_pos, kHello + kHelloLength);
184 184
185 WebSocketFrameParser parser; 185 WebSocketFrameParser parser;
186 186
187 ScopedVector<WebSocketFrameChunk> frames1; 187 ScopedVector<WebSocketFrameChunk> frames1;
188 EXPECT_TRUE(parser.Decode(&input1.front(), input1.size(), &frames1)); 188 EXPECT_TRUE(parser.Decode(&input1.front(), input1.size(), &frames1));
189 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 189 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
190 EXPECT_EQ(1u, frames1.size()); 190 EXPECT_EQ(1u, frames1.size());
191 if (frames1.size() != 1u) 191 if (frames1.size() != 1u)
192 continue; 192 continue;
193 WebSocketFrameChunk* frame1 = frames1[0]; 193 WebSocketFrameChunk* frame1 = frames1[0];
194 EXPECT_TRUE(frame1 != NULL); 194 EXPECT_TRUE(frame1 != NULL);
195 if (!frame1) 195 if (!frame1)
196 continue; 196 continue;
197 EXPECT_FALSE(frame1->final_chunk); 197 EXPECT_FALSE(frame1->final_chunk);
198 if (expected1.size() == 0) { 198 if (expected1.size() == 0) {
199 EXPECT_EQ(NULL, frame1->data.get()); 199 EXPECT_EQ(NULL, frame1->data.get());
(...skipping 10 matching lines...) Expand all
210 EXPECT_TRUE(header1->final); 210 EXPECT_TRUE(header1->final);
211 EXPECT_FALSE(header1->reserved1); 211 EXPECT_FALSE(header1->reserved1);
212 EXPECT_FALSE(header1->reserved2); 212 EXPECT_FALSE(header1->reserved2);
213 EXPECT_FALSE(header1->reserved3); 213 EXPECT_FALSE(header1->reserved3);
214 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header1->opcode); 214 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header1->opcode);
215 EXPECT_FALSE(header1->masked); 215 EXPECT_FALSE(header1->masked);
216 EXPECT_EQ(kHelloLength, header1->payload_length); 216 EXPECT_EQ(kHelloLength, header1->payload_length);
217 217
218 ScopedVector<WebSocketFrameChunk> frames2; 218 ScopedVector<WebSocketFrameChunk> frames2;
219 EXPECT_TRUE(parser.Decode(&input2.front(), input2.size(), &frames2)); 219 EXPECT_TRUE(parser.Decode(&input2.front(), input2.size(), &frames2));
220 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 220 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
221 EXPECT_EQ(1u, frames2.size()); 221 EXPECT_EQ(1u, frames2.size());
222 if (frames2.size() != 1u) 222 if (frames2.size() != 1u)
223 continue; 223 continue;
224 WebSocketFrameChunk* frame2 = frames2[0]; 224 WebSocketFrameChunk* frame2 = frames2[0];
225 EXPECT_TRUE(frame2 != NULL); 225 EXPECT_TRUE(frame2 != NULL);
226 if (!frame2) 226 if (!frame2)
227 continue; 227 continue;
228 EXPECT_TRUE(frame2->final_chunk); 228 EXPECT_TRUE(frame2->final_chunk);
229 if (expected2.size() == 0) { 229 if (expected2.size() == 0) {
230 EXPECT_EQ(NULL, frame2->data.get()); 230 EXPECT_EQ(NULL, frame2->data.get());
(...skipping 18 matching lines...) Expand all
249 std::vector<char> input2(kMaskedHelloFrame + input1.size(), 249 std::vector<char> input2(kMaskedHelloFrame + input1.size(),
250 kMaskedHelloFrame + kMaskedHelloFrameLength); 250 kMaskedHelloFrame + kMaskedHelloFrameLength);
251 251
252 std::vector<char> expected1(kHello, kHello + cutting_pos); 252 std::vector<char> expected1(kHello, kHello + cutting_pos);
253 std::vector<char> expected2(kHello + cutting_pos, kHello + kHelloLength); 253 std::vector<char> expected2(kHello + cutting_pos, kHello + kHelloLength);
254 254
255 WebSocketFrameParser parser; 255 WebSocketFrameParser parser;
256 256
257 ScopedVector<WebSocketFrameChunk> frames1; 257 ScopedVector<WebSocketFrameChunk> frames1;
258 EXPECT_TRUE(parser.Decode(&input1.front(), input1.size(), &frames1)); 258 EXPECT_TRUE(parser.Decode(&input1.front(), input1.size(), &frames1));
259 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 259 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
260 EXPECT_EQ(1u, frames1.size()); 260 EXPECT_EQ(1u, frames1.size());
261 if (frames1.size() != 1u) 261 if (frames1.size() != 1u)
262 continue; 262 continue;
263 WebSocketFrameChunk* frame1 = frames1[0]; 263 WebSocketFrameChunk* frame1 = frames1[0];
264 EXPECT_TRUE(frame1 != NULL); 264 EXPECT_TRUE(frame1 != NULL);
265 if (!frame1) 265 if (!frame1)
266 continue; 266 continue;
267 EXPECT_FALSE(frame1->final_chunk); 267 EXPECT_FALSE(frame1->final_chunk);
268 if (expected1.size() == 0) { 268 if (expected1.size() == 0) {
269 EXPECT_EQ(NULL, frame1->data.get()); 269 EXPECT_EQ(NULL, frame1->data.get());
(...skipping 10 matching lines...) Expand all
280 EXPECT_TRUE(header1->final); 280 EXPECT_TRUE(header1->final);
281 EXPECT_FALSE(header1->reserved1); 281 EXPECT_FALSE(header1->reserved1);
282 EXPECT_FALSE(header1->reserved2); 282 EXPECT_FALSE(header1->reserved2);
283 EXPECT_FALSE(header1->reserved3); 283 EXPECT_FALSE(header1->reserved3);
284 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header1->opcode); 284 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header1->opcode);
285 EXPECT_TRUE(header1->masked); 285 EXPECT_TRUE(header1->masked);
286 EXPECT_EQ(kHelloLength, header1->payload_length); 286 EXPECT_EQ(kHelloLength, header1->payload_length);
287 287
288 ScopedVector<WebSocketFrameChunk> frames2; 288 ScopedVector<WebSocketFrameChunk> frames2;
289 EXPECT_TRUE(parser.Decode(&input2.front(), input2.size(), &frames2)); 289 EXPECT_TRUE(parser.Decode(&input2.front(), input2.size(), &frames2));
290 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 290 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
291 EXPECT_EQ(1u, frames2.size()); 291 EXPECT_EQ(1u, frames2.size());
292 if (frames2.size() != 1u) 292 if (frames2.size() != 1u)
293 continue; 293 continue;
294 WebSocketFrameChunk* frame2 = frames2[0]; 294 WebSocketFrameChunk* frame2 = frames2[0];
295 EXPECT_TRUE(frame2 != NULL); 295 EXPECT_TRUE(frame2 != NULL);
296 if (!frame2) 296 if (!frame2)
297 continue; 297 continue;
298 EXPECT_TRUE(frame2->final_chunk); 298 EXPECT_TRUE(frame2->final_chunk);
299 if (expected2.size() == 0) { 299 if (expected2.size() == 0) {
300 EXPECT_EQ(NULL, frame2->data.get()); 300 EXPECT_EQ(NULL, frame2->data.get());
(...skipping 16 matching lines...) Expand all
317 317
318 std::vector<char> input(frame_header, frame_header + frame_header_length); 318 std::vector<char> input(frame_header, frame_header + frame_header_length);
319 // Limit the payload size not to flood the console on failure. 319 // Limit the payload size not to flood the console on failure.
320 static const uint64 kMaxPayloadSize = 200; 320 static const uint64 kMaxPayloadSize = 200;
321 uint64 input_payload_size = std::min(frame_length, kMaxPayloadSize); 321 uint64 input_payload_size = std::min(frame_length, kMaxPayloadSize);
322 input.insert(input.end(), input_payload_size, 'a'); 322 input.insert(input.end(), input_payload_size, 'a');
323 323
324 WebSocketFrameParser parser; 324 WebSocketFrameParser parser;
325 325
326 ScopedVector<WebSocketFrameChunk> frames; 326 ScopedVector<WebSocketFrameChunk> frames;
327 EXPECT_EQ(kFrameHeaderTests[i].error_code == WEB_SOCKET_OK, 327 EXPECT_EQ(kFrameHeaderTests[i].error_code == kWebSocketNormalClosure,
328 parser.Decode(&input.front(), input.size(), &frames)); 328 parser.Decode(&input.front(), input.size(), &frames));
329 EXPECT_EQ(kFrameHeaderTests[i].error_code, parser.websocket_error()); 329 EXPECT_EQ(kFrameHeaderTests[i].error_code, parser.websocket_error());
330 if (kFrameHeaderTests[i].error_code != WEB_SOCKET_OK) { 330 if (kFrameHeaderTests[i].error_code != kWebSocketNormalClosure) {
331 EXPECT_EQ(0u, frames.size()); 331 EXPECT_EQ(0u, frames.size());
332 } else { 332 } else {
333 EXPECT_EQ(1u, frames.size()); 333 EXPECT_EQ(1u, frames.size());
334 } 334 }
335 if (frames.size() != 1u) 335 if (frames.size() != 1u)
336 continue; 336 continue;
337 WebSocketFrameChunk* frame = frames[0]; 337 WebSocketFrameChunk* frame = frames[0];
338 EXPECT_TRUE(frame != NULL); 338 EXPECT_TRUE(frame != NULL);
339 if (!frame) 339 if (!frame)
340 continue; 340 continue;
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
374 size_t frame_header_length = kFrameHeaderTests[i].frame_header_length; 374 size_t frame_header_length = kFrameHeaderTests[i].frame_header_length;
375 uint64 frame_length = kFrameHeaderTests[i].frame_length; 375 uint64 frame_length = kFrameHeaderTests[i].frame_length;
376 376
377 WebSocketFrameParser parser; 377 WebSocketFrameParser parser;
378 378
379 ScopedVector<WebSocketFrameChunk> frames; 379 ScopedVector<WebSocketFrameChunk> frames;
380 // Feed each byte to the parser to see if the parser behaves correctly 380 // Feed each byte to the parser to see if the parser behaves correctly
381 // when it receives partial frame header. 381 // when it receives partial frame header.
382 size_t last_byte_offset = frame_header_length - 1; 382 size_t last_byte_offset = frame_header_length - 1;
383 for (size_t j = 0; j < frame_header_length; ++j) { 383 for (size_t j = 0; j < frame_header_length; ++j) {
384 bool failed = kFrameHeaderTests[i].error_code != WEB_SOCKET_OK && 384 bool failed =
385 kFrameHeaderTests[i].error_code != kWebSocketNormalClosure &&
385 j == last_byte_offset; 386 j == last_byte_offset;
386 EXPECT_EQ(!failed, parser.Decode(frame_header + j, 1, &frames)); 387 EXPECT_EQ(!failed, parser.Decode(frame_header + j, 1, &frames));
387 if (failed) { 388 if (failed) {
388 EXPECT_EQ(kFrameHeaderTests[i].error_code, parser.websocket_error()); 389 EXPECT_EQ(kFrameHeaderTests[i].error_code, parser.websocket_error());
389 } else { 390 } else {
390 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 391 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
391 } 392 }
392 if (kFrameHeaderTests[i].error_code == WEB_SOCKET_OK && 393 if (kFrameHeaderTests[i].error_code == kWebSocketNormalClosure &&
393 j == last_byte_offset) { 394 j == last_byte_offset) {
394 EXPECT_EQ(1u, frames.size()); 395 EXPECT_EQ(1u, frames.size());
395 } else { 396 } else {
396 EXPECT_EQ(0u, frames.size()); 397 EXPECT_EQ(0u, frames.size());
397 } 398 }
398 } 399 }
399 if (frames.size() != 1u) 400 if (frames.size() != 1u)
400 continue; 401 continue;
401 WebSocketFrameChunk* frame = frames[0]; 402 WebSocketFrameChunk* frame = frames[0];
402 EXPECT_TRUE(frame != NULL); 403 EXPECT_TRUE(frame != NULL);
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
439 }; 440 };
440 static const int kNumTests = ARRAYSIZE_UNSAFE(kTests); 441 static const int kNumTests = ARRAYSIZE_UNSAFE(kTests);
441 442
442 for (int i = 0; i < kNumTests; ++i) { 443 for (int i = 0; i < kNumTests; ++i) {
443 const char* frame_header = kTests[i].frame_header; 444 const char* frame_header = kTests[i].frame_header;
444 size_t frame_header_length = kTests[i].frame_header_length; 445 size_t frame_header_length = kTests[i].frame_header_length;
445 446
446 WebSocketFrameParser parser; 447 WebSocketFrameParser parser;
447 448
448 ScopedVector<WebSocketFrameChunk> frames; 449 ScopedVector<WebSocketFrameChunk> frames;
449 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 450 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
450 EXPECT_FALSE(parser.Decode(frame_header, frame_header_length, &frames)); 451 EXPECT_FALSE(parser.Decode(frame_header, frame_header_length, &frames));
451 EXPECT_EQ(WEB_SOCKET_ERR_PROTOCOL_ERROR, parser.websocket_error()); 452 EXPECT_EQ(kWebSocketErrorProtocolError, parser.websocket_error());
452 EXPECT_EQ(0u, frames.size()); 453 EXPECT_EQ(0u, frames.size());
453 454
454 // Once the parser has failed, it no longer accepts any input (even if 455 // Once the parser has failed, it no longer accepts any input (even if
455 // the input is empty). 456 // the input is empty).
456 EXPECT_FALSE(parser.Decode("", 0, &frames)); 457 EXPECT_FALSE(parser.Decode("", 0, &frames));
457 EXPECT_EQ(WEB_SOCKET_ERR_PROTOCOL_ERROR, parser.websocket_error()); 458 EXPECT_EQ(kWebSocketErrorProtocolError, parser.websocket_error());
458 EXPECT_EQ(0u, frames.size()); 459 EXPECT_EQ(0u, frames.size());
459 } 460 }
460 } 461 }
461 462
462 TEST(WebSocketFrameParserTest, FrameTypes) { 463 TEST(WebSocketFrameParserTest, FrameTypes) {
463 struct TestCase { 464 struct TestCase {
464 const char* frame_header; 465 const char* frame_header;
465 size_t frame_header_length; 466 size_t frame_header_length;
466 WebSocketFrameHeader::OpCode opcode; 467 WebSocketFrameHeader::OpCode opcode;
467 }; 468 };
(...skipping 21 matching lines...) Expand all
489 490
490 for (int i = 0; i < kNumTests; ++i) { 491 for (int i = 0; i < kNumTests; ++i) {
491 const char* frame_header = kTests[i].frame_header; 492 const char* frame_header = kTests[i].frame_header;
492 size_t frame_header_length = kTests[i].frame_header_length; 493 size_t frame_header_length = kTests[i].frame_header_length;
493 WebSocketFrameHeader::OpCode opcode = kTests[i].opcode; 494 WebSocketFrameHeader::OpCode opcode = kTests[i].opcode;
494 495
495 WebSocketFrameParser parser; 496 WebSocketFrameParser parser;
496 497
497 ScopedVector<WebSocketFrameChunk> frames; 498 ScopedVector<WebSocketFrameChunk> frames;
498 EXPECT_TRUE(parser.Decode(frame_header, frame_header_length, &frames)); 499 EXPECT_TRUE(parser.Decode(frame_header, frame_header_length, &frames));
499 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 500 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
500 EXPECT_EQ(1u, frames.size()); 501 EXPECT_EQ(1u, frames.size());
501 if (frames.size() != 1u) 502 if (frames.size() != 1u)
502 continue; 503 continue;
503 WebSocketFrameChunk* frame = frames[0]; 504 WebSocketFrameChunk* frame = frames[0];
504 EXPECT_TRUE(frame != NULL); 505 EXPECT_TRUE(frame != NULL);
505 if (!frame) 506 if (!frame)
506 continue; 507 continue;
507 EXPECT_TRUE(frame->final_chunk); 508 EXPECT_TRUE(frame->final_chunk);
508 EXPECT_EQ(NULL, frame->data.get()); 509 EXPECT_EQ(NULL, frame->data.get());
509 const WebSocketFrameHeader* header = frame->header.get(); 510 const WebSocketFrameHeader* header = frame->header.get();
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 size_t frame_header_length = kTests[i].frame_header_length; 546 size_t frame_header_length = kTests[i].frame_header_length;
546 bool final = kTests[i].final; 547 bool final = kTests[i].final;
547 bool reserved1 = kTests[i].reserved1; 548 bool reserved1 = kTests[i].reserved1;
548 bool reserved2 = kTests[i].reserved2; 549 bool reserved2 = kTests[i].reserved2;
549 bool reserved3 = kTests[i].reserved3; 550 bool reserved3 = kTests[i].reserved3;
550 551
551 WebSocketFrameParser parser; 552 WebSocketFrameParser parser;
552 553
553 ScopedVector<WebSocketFrameChunk> frames; 554 ScopedVector<WebSocketFrameChunk> frames;
554 EXPECT_TRUE(parser.Decode(frame_header, frame_header_length, &frames)); 555 EXPECT_TRUE(parser.Decode(frame_header, frame_header_length, &frames));
555 EXPECT_EQ(WEB_SOCKET_OK, parser.websocket_error()); 556 EXPECT_EQ(kWebSocketNormalClosure, parser.websocket_error());
556 EXPECT_EQ(1u, frames.size()); 557 EXPECT_EQ(1u, frames.size());
557 if (frames.size() != 1u) 558 if (frames.size() != 1u)
558 continue; 559 continue;
559 WebSocketFrameChunk* frame = frames[0]; 560 WebSocketFrameChunk* frame = frames[0];
560 EXPECT_TRUE(frame != NULL); 561 EXPECT_TRUE(frame != NULL);
561 if (!frame) 562 if (!frame)
562 continue; 563 continue;
563 EXPECT_TRUE(frame->final_chunk); 564 EXPECT_TRUE(frame->final_chunk);
564 EXPECT_EQ(NULL, frame->data.get()); 565 EXPECT_EQ(NULL, frame->data.get());
565 const WebSocketFrameHeader* header = frame->header.get(); 566 const WebSocketFrameHeader* header = frame->header.get();
566 EXPECT_TRUE(header != NULL); 567 EXPECT_TRUE(header != NULL);
567 if (!header) 568 if (!header)
568 continue; 569 continue;
569 EXPECT_EQ(final, header->final); 570 EXPECT_EQ(final, header->final);
570 EXPECT_EQ(reserved1, header->reserved1); 571 EXPECT_EQ(reserved1, header->reserved1);
571 EXPECT_EQ(reserved2, header->reserved2); 572 EXPECT_EQ(reserved2, header->reserved2);
572 EXPECT_EQ(reserved3, header->reserved3); 573 EXPECT_EQ(reserved3, header->reserved3);
573 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header->opcode); 574 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, header->opcode);
574 EXPECT_FALSE(header->masked); 575 EXPECT_FALSE(header->masked);
575 EXPECT_EQ(0u, header->payload_length); 576 EXPECT_EQ(0u, header->payload_length);
576 } 577 }
577 } 578 }
578 579
579 } // Unnamed namespace 580 } // Unnamed namespace
580 581
581 } // namespace net 582 } // namespace net
OLDNEW
« no previous file with comments | « net/websockets/websocket_frame_parser.cc ('k') | net/websockets/websocket_frame_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698