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 |