| OLD | NEW |
| 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/spdy/core/spdy_framer.h" | 5 #include "net/spdy/core/spdy_framer.h" |
| 6 | 6 |
| 7 #include <stdlib.h> | 7 #include <stdlib.h> |
| 8 #include <string.h> | 8 #include <string.h> |
| 9 | 9 |
| 10 #include <algorithm> | 10 #include <algorithm> |
| (...skipping 848 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 859 // Test that we treat incoming upper-case or mixed-case header values as | 859 // Test that we treat incoming upper-case or mixed-case header values as |
| 860 // malformed. | 860 // malformed. |
| 861 TEST_P(SpdyFramerTest, RejectUpperCaseHeaderBlockValue) { | 861 TEST_P(SpdyFramerTest, RejectUpperCaseHeaderBlockValue) { |
| 862 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); | 862 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); |
| 863 | 863 |
| 864 SpdyFrameBuilder frame(1024); | 864 SpdyFrameBuilder frame(1024); |
| 865 frame.BeginNewFrame(framer, SpdyFrameType::HEADERS, 0, 1); | 865 frame.BeginNewFrame(framer, SpdyFrameType::HEADERS, 0, 1); |
| 866 frame.WriteUInt32(1); | 866 frame.WriteUInt32(1); |
| 867 frame.WriteStringPiece32("Name1"); | 867 frame.WriteStringPiece32("Name1"); |
| 868 frame.WriteStringPiece32("value1"); | 868 frame.WriteStringPiece32("value1"); |
| 869 frame.OverwriteLength(framer, frame.length() - framer.GetFrameHeaderSize()); | |
| 870 | 869 |
| 871 SpdyFrameBuilder frame2(1024); | 870 SpdyFrameBuilder frame2(1024); |
| 872 frame2.BeginNewFrame(framer, SpdyFrameType::HEADERS, 0, 1); | 871 frame2.BeginNewFrame(framer, SpdyFrameType::HEADERS, 0, 1); |
| 873 frame2.WriteUInt32(2); | 872 frame2.WriteUInt32(2); |
| 874 frame2.WriteStringPiece32("name1"); | 873 frame2.WriteStringPiece32("name1"); |
| 875 frame2.WriteStringPiece32("value1"); | 874 frame2.WriteStringPiece32("value1"); |
| 876 frame2.WriteStringPiece32("nAmE2"); | 875 frame2.WriteStringPiece32("nAmE2"); |
| 877 frame2.WriteStringPiece32("value2"); | 876 frame2.WriteStringPiece32("value2"); |
| 878 frame.OverwriteLength(framer, frame2.length() - framer.GetFrameHeaderSize()); | |
| 879 | 877 |
| 880 SpdySerializedFrame control_frame(frame.take()); | 878 SpdySerializedFrame control_frame(frame.take()); |
| 881 SpdyStringPiece serialized_headers = | 879 SpdyStringPiece serialized_headers = |
| 882 GetSerializedHeaders(control_frame, framer); | 880 GetSerializedHeaders(control_frame, framer); |
| 883 SpdySerializedFrame control_frame2(frame2.take()); | 881 SpdySerializedFrame control_frame2(frame2.take()); |
| 884 SpdyStringPiece serialized_headers2 = | 882 SpdyStringPiece serialized_headers2 = |
| 885 GetSerializedHeaders(control_frame2, framer); | 883 GetSerializedHeaders(control_frame2, framer); |
| 886 | 884 |
| 887 SpdyHeaderBlock new_headers; | 885 SpdyHeaderBlock new_headers; |
| 888 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer( | 886 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer( |
| (...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1305 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); | 1303 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); |
| 1306 // Frame builder with plentiful buffer size. | 1304 // Frame builder with plentiful buffer size. |
| 1307 SpdyFrameBuilder frame(1024); | 1305 SpdyFrameBuilder frame(1024); |
| 1308 frame.BeginNewFrame(framer, SpdyFrameType::HEADERS, 0, 3); | 1306 frame.BeginNewFrame(framer, SpdyFrameType::HEADERS, 0, 3); |
| 1309 | 1307 |
| 1310 frame.WriteUInt32(2); // Number of headers. | 1308 frame.WriteUInt32(2); // Number of headers. |
| 1311 frame.WriteStringPiece32("name"); | 1309 frame.WriteStringPiece32("name"); |
| 1312 frame.WriteStringPiece32("value1"); | 1310 frame.WriteStringPiece32("value1"); |
| 1313 frame.WriteStringPiece32("name"); | 1311 frame.WriteStringPiece32("name"); |
| 1314 frame.WriteStringPiece32("value2"); | 1312 frame.WriteStringPiece32("value2"); |
| 1315 // write the length | |
| 1316 frame.OverwriteLength(framer, frame.length() - framer.GetFrameHeaderSize()); | |
| 1317 | 1313 |
| 1318 SpdyHeaderBlock new_headers; | 1314 SpdyHeaderBlock new_headers; |
| 1319 SpdySerializedFrame control_frame(frame.take()); | 1315 SpdySerializedFrame control_frame(frame.take()); |
| 1320 SpdyStringPiece serialized_headers = | 1316 SpdyStringPiece serialized_headers = |
| 1321 GetSerializedHeaders(control_frame, framer); | 1317 GetSerializedHeaders(control_frame, framer); |
| 1322 // This should fail because duplicate headers are verboten by the spec. | 1318 // This should fail because duplicate headers are verboten by the spec. |
| 1323 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer( | 1319 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer( |
| 1324 serialized_headers.data(), serialized_headers.size(), &new_headers)); | 1320 serialized_headers.data(), serialized_headers.size(), &new_headers)); |
| 1325 } | 1321 } |
| 1326 | 1322 |
| 1327 TEST_P(SpdyFramerTest, MultiValueHeader) { | 1323 TEST_P(SpdyFramerTest, MultiValueHeader) { |
| 1328 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); | 1324 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); |
| 1329 // Frame builder with plentiful buffer size. | |
| 1330 SpdyFrameBuilder frame(1024); | |
| 1331 frame.BeginNewFrame(framer, SpdyFrameType::HEADERS, | |
| 1332 HEADERS_FLAG_PRIORITY | HEADERS_FLAG_END_HEADERS, 3); | |
| 1333 frame.WriteUInt32(0); // Priority exclusivity and dependent stream. | |
| 1334 frame.WriteUInt8(255); // Priority weight. | |
| 1335 | |
| 1336 SpdyString value("value1\0value2", 13); | 1325 SpdyString value("value1\0value2", 13); |
| 1337 // TODO(jgraettinger): If this pattern appears again, move to test class. | 1326 // TODO(jgraettinger): If this pattern appears again, move to test class. |
| 1338 SpdyHeaderBlock header_set; | 1327 SpdyHeaderBlock header_set; |
| 1339 header_set["name"] = value; | 1328 header_set["name"] = value; |
| 1340 SpdyString buffer; | 1329 SpdyString buffer; |
| 1341 HpackEncoder encoder(ObtainHpackHuffmanTable()); | 1330 HpackEncoder encoder(ObtainHpackHuffmanTable()); |
| 1342 encoder.DisableCompression(); | 1331 encoder.DisableCompression(); |
| 1343 encoder.EncodeHeaderSet(header_set, &buffer); | 1332 encoder.EncodeHeaderSet(header_set, &buffer); |
| 1333 // Frame builder with plentiful buffer size. |
| 1334 SpdyFrameBuilder frame(1024); |
| 1335 frame.BeginNewFrame(framer, SpdyFrameType::HEADERS, |
| 1336 HEADERS_FLAG_PRIORITY | HEADERS_FLAG_END_HEADERS, 3, |
| 1337 buffer.size() + 5 /* priority */); |
| 1338 frame.WriteUInt32(0); // Priority exclusivity and dependent stream. |
| 1339 frame.WriteUInt8(255); // Priority weight. |
| 1344 frame.WriteBytes(&buffer[0], buffer.size()); | 1340 frame.WriteBytes(&buffer[0], buffer.size()); |
| 1345 // write the length | |
| 1346 frame.OverwriteLength(framer, frame.length() - framer.GetFrameHeaderSize()); | |
| 1347 | 1341 |
| 1348 SpdySerializedFrame control_frame(frame.take()); | 1342 SpdySerializedFrame control_frame(frame.take()); |
| 1349 | 1343 |
| 1350 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); | 1344 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); |
| 1351 visitor.SimulateInFramer( | 1345 visitor.SimulateInFramer( |
| 1352 reinterpret_cast<unsigned char*>(control_frame.data()), | 1346 reinterpret_cast<unsigned char*>(control_frame.data()), |
| 1353 control_frame.size()); | 1347 control_frame.size()); |
| 1354 | 1348 |
| 1355 EXPECT_THAT(visitor.headers_, testing::ElementsAre(testing::Pair( | 1349 EXPECT_THAT(visitor.headers_, testing::ElementsAre(testing::Pair( |
| 1356 "name", SpdyStringPiece(value)))); | 1350 "name", SpdyStringPiece(value)))); |
| (...skipping 3511 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4868 | 4862 |
| 4869 EXPECT_EQ(1, visitor->data_frame_count_); | 4863 EXPECT_EQ(1, visitor->data_frame_count_); |
| 4870 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); | 4864 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); |
| 4871 EXPECT_EQ(0, visitor->headers_frame_count_); | 4865 EXPECT_EQ(0, visitor->headers_frame_count_); |
| 4872 } | 4866 } |
| 4873 } | 4867 } |
| 4874 | 4868 |
| 4875 } // namespace test | 4869 } // namespace test |
| 4876 | 4870 |
| 4877 } // namespace net | 4871 } // namespace net |
| OLD | NEW |