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 <algorithm> | 5 #include <algorithm> |
6 #include <iostream> | 6 #include <iostream> |
7 #include <limits> | 7 #include <limits> |
8 | 8 |
9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 821 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
832 if (spdy_version_ <= SPDY3) { | 832 if (spdy_version_ <= SPDY3) { |
833 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); | 833 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE); |
834 frame.WriteUInt32(3); // stream_id | 834 frame.WriteUInt32(3); // stream_id |
835 frame.WriteUInt32(0); // associated stream id | 835 frame.WriteUInt32(0); // associated stream id |
836 frame.WriteUInt16(0); // Priority. | 836 frame.WriteUInt16(0); // Priority. |
837 } else { | 837 } else { |
838 frame.BeginNewFrame(framer, | 838 frame.BeginNewFrame(framer, |
839 HEADERS, | 839 HEADERS, |
840 HEADERS_FLAG_PRIORITY | HEADERS_FLAG_END_HEADERS, | 840 HEADERS_FLAG_PRIORITY | HEADERS_FLAG_END_HEADERS, |
841 3); | 841 3); |
842 frame.WriteUInt32(framer.GetHighestPriority()); | 842 frame.WriteUInt32(0); // Priority exclusivity and dependent stream. |
| 843 frame.WriteUInt8(255); // Priority weight. |
843 } | 844 } |
844 | 845 |
845 string value("value1\0value2", 13); | 846 string value("value1\0value2", 13); |
846 if (IsSpdy2()) { | 847 if (IsSpdy2()) { |
847 frame.WriteUInt16(1); // Number of headers. | 848 frame.WriteUInt16(1); // Number of headers. |
848 frame.WriteString("name"); | 849 frame.WriteString("name"); |
849 frame.WriteString(value); | 850 frame.WriteString(value); |
850 } else if (spdy_version_ > SPDY3) { | 851 } else if (spdy_version_ > SPDY3) { |
851 // TODO(jgraettinger): If this pattern appears again, move to test class. | 852 // TODO(jgraettinger): If this pattern appears again, move to test class. |
852 std::map<string, string> header_set; | 853 std::map<string, string> header_set; |
(...skipping 1016 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1869 0x00, 0x02, 0x00, 0x00, | 1870 0x00, 0x02, 0x00, 0x00, |
1870 0x00, 0x03, 'b', 'a', | 1871 0x00, 0x03, 'b', 'a', |
1871 'r', 0x00, 0x00, 0x00, | 1872 'r', 0x00, 0x00, 0x00, |
1872 0x03, 'f', 'o', 'o', | 1873 0x03, 'f', 'o', 'o', |
1873 0x00, 0x00, 0x00, 0x03, | 1874 0x00, 0x00, 0x00, 0x03, |
1874 'f', 'o', 'o', 0x00, | 1875 'f', 'o', 'o', 0x00, |
1875 0x00, 0x00, 0x03, 'b', | 1876 0x00, 0x00, 0x03, 'b', |
1876 'a', 'r' | 1877 'a', 'r' |
1877 }; | 1878 }; |
1878 const unsigned char kV4FrameData[] = { | 1879 const unsigned char kV4FrameData[] = { |
1879 0x00, 0x16, 0x01, 0x24, // HEADERS: PRIORITY | END_HEADERS | 1880 0x00, 0x17, 0x01, 0x24, // HEADERS: PRIORITY | END_HEADERS |
1880 0x00, 0x00, 0x00, 0x01, // Stream 1 | 1881 0x00, 0x00, 0x00, 0x01, // Stream 1 |
1881 0x00, 0x00, 0x00, 0x07, // Priority 7 | 1882 0x00, 0x00, 0x00, 0x00, // Non-exclusive dependency 0. Weight 0. |
1882 0x00, 0x03, 0x62, 0x61, // @.ba | 1883 0x00, 0x00, 0x03, 0x62, |
1883 0x72, 0x03, 0x66, 0x6f, // r.fo | 1884 0x61, 0x72, 0x03, 0x66, |
1884 0x6f, 0x00, 0x03, 0x66, // o@.f | 1885 0x6f, 0x6f, 0x00, 0x03, |
1885 0x6f, 0x6f, 0x03, 0x62, // oo.b | 1886 0x66, 0x6f, 0x6f, 0x03, |
1886 0x61, 0x72, // ar | 1887 0x62, 0x61, 0x72, |
1887 }; | 1888 }; |
1888 SpdySynStreamIR syn_stream(1); | 1889 SpdySynStreamIR syn_stream(1); |
1889 syn_stream.set_priority(framer.GetLowestPriority()); | 1890 syn_stream.set_priority(framer.GetLowestPriority()); |
1890 syn_stream.SetHeader("bar", "foo"); | 1891 syn_stream.SetHeader("bar", "foo"); |
1891 syn_stream.SetHeader("foo", "bar"); | 1892 syn_stream.SetHeader("foo", "bar"); |
1892 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 1893 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
1893 if (IsSpdy2()) { | 1894 if (IsSpdy2()) { |
1894 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 1895 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
1895 } else if (IsSpdy3()) { | 1896 } else if (IsSpdy3()) { |
1896 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 1897 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); |
(...skipping 27 matching lines...) Expand all Loading... |
1924 0x00, 0x00, 0x00, 0x00, | 1925 0x00, 0x00, 0x00, 0x00, |
1925 0x00, 0x02, 0x00, 0x00, | 1926 0x00, 0x02, 0x00, 0x00, |
1926 0x00, 0x00, 0x00, 0x00, | 1927 0x00, 0x00, 0x00, 0x00, |
1927 0x00, 0x03, 'f', 'o', | 1928 0x00, 0x03, 'f', 'o', |
1928 'o', 0x00, 0x00, 0x00, | 1929 'o', 0x00, 0x00, 0x00, |
1929 0x03, 'f', 'o', 'o', | 1930 0x03, 'f', 'o', 'o', |
1930 0x00, 0x00, 0x00, 0x03, | 1931 0x00, 0x00, 0x00, 0x03, |
1931 'b', 'a', 'r' | 1932 'b', 'a', 'r' |
1932 }; | 1933 }; |
1933 const unsigned char kV4FrameData[] = { | 1934 const unsigned char kV4FrameData[] = { |
1934 0x00, 0x13, 0x01, 0x25, // HEADERS: PRIORITY | FIN | END_HEADERS | 1935 0x00, 0x14, 0x01, 0x25, // HEADERS: PRIORITY | FIN | END_HEADERS |
1935 0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff | 1936 0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
1936 0x00, 0x00, 0x00, 0x00, // Priority 0 | 1937 0x00, 0x00, 0x00, 0x00, // Non-exclusive dependency 0. Weight 255. |
1937 0x00, 0x00, 0x03, 0x66, // @..f | 1938 0xff, 0x00, 0x00, 0x03, |
1938 0x6f, 0x6f, 0x00, 0x03, // oo@. | 1939 0x66, 0x6f, 0x6f, 0x00, |
1939 0x66, 0x6f, 0x6f, 0x03, // foo. | 1940 0x03, 0x66, 0x6f, 0x6f, |
1940 0x62, 0x61, 0x72, // bar | 1941 0x03, 0x62, 0x61, 0x72, |
1941 }; | 1942 }; |
1942 SpdySynStreamIR syn_stream(0x7fffffff); | 1943 SpdySynStreamIR syn_stream(0x7fffffff); |
1943 syn_stream.set_associated_to_stream_id(0x7fffffff); | 1944 syn_stream.set_associated_to_stream_id(0x7fffffff); |
1944 syn_stream.set_priority(framer.GetHighestPriority()); | 1945 syn_stream.set_priority(framer.GetHighestPriority()); |
1945 syn_stream.set_fin(true); | 1946 syn_stream.set_fin(true); |
1946 syn_stream.SetHeader("", "foo"); | 1947 syn_stream.SetHeader("", "foo"); |
1947 syn_stream.SetHeader("foo", "bar"); | 1948 syn_stream.SetHeader("foo", "bar"); |
1948 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 1949 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
1949 if (IsSpdy2()) { | 1950 if (IsSpdy2()) { |
1950 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 1951 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
(...skipping 30 matching lines...) Expand all Loading... |
1981 kPri, 0x00, 0x00, 0x00, | 1982 kPri, 0x00, 0x00, 0x00, |
1982 0x00, 0x02, 0x00, 0x00, | 1983 0x00, 0x02, 0x00, 0x00, |
1983 0x00, 0x03, 'b', 'a', | 1984 0x00, 0x03, 'b', 'a', |
1984 'r', 0x00, 0x00, 0x00, | 1985 'r', 0x00, 0x00, 0x00, |
1985 0x03, 'f', 'o', 'o', | 1986 0x03, 'f', 'o', 'o', |
1986 0x00, 0x00, 0x00, 0x03, | 1987 0x00, 0x00, 0x00, 0x03, |
1987 'f', 'o', 'o', 0x00, | 1988 'f', 'o', 'o', 0x00, |
1988 0x00, 0x00, 0x00 | 1989 0x00, 0x00, 0x00 |
1989 }; | 1990 }; |
1990 const unsigned char kV4FrameData[] = { | 1991 const unsigned char kV4FrameData[] = { |
1991 0x00, 0x13, 0x01, 0x25, // HEADERS: PRIORITY | FIN | END_HEADERS | 1992 0x00, 0x14, 0x01, 0x25, // HEADERS: PRIORITY | FIN | END_HEADERS |
1992 0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff | 1993 0x7f, 0xff, 0xff, 0xff, // Stream 0x7fffffff |
1993 0x00, 0x00, 0x00, 0x01, // Priority 1 | 1994 0x00, 0x00, 0x00, 0x00, // Non-exclusive dependency 0. Weight 219. |
1994 0x00, 0x03, 0x62, 0x61, // @.ba | 1995 0xdb, 0x00, 0x03, 0x62, |
1995 0x72, 0x03, 0x66, 0x6f, // r.fo | 1996 0x61, 0x72, 0x03, 0x66, |
1996 0x6f, 0x00, 0x03, 0x66, // o@.f | 1997 0x6f, 0x6f, 0x00, 0x03, |
1997 0x6f, 0x6f, 0x00, // oo. | 1998 0x66, 0x6f, 0x6f, 0x00, |
1998 }; | 1999 }; |
1999 SpdySynStreamIR syn_stream(0x7fffffff); | 2000 SpdySynStreamIR syn_stream(0x7fffffff); |
2000 syn_stream.set_associated_to_stream_id(0x7fffffff); | 2001 syn_stream.set_associated_to_stream_id(0x7fffffff); |
2001 syn_stream.set_priority(1); | 2002 syn_stream.set_priority(1); |
2002 syn_stream.set_fin(true); | 2003 syn_stream.set_fin(true); |
2003 syn_stream.SetHeader("bar", "foo"); | 2004 syn_stream.SetHeader("bar", "foo"); |
2004 syn_stream.SetHeader("foo", ""); | 2005 syn_stream.SetHeader("foo", ""); |
2005 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 2006 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
2006 if (IsSpdy2()) { | 2007 if (IsSpdy2()) { |
2007 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 2008 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); |
(...skipping 3381 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5389 | 5390 |
5390 TestSpdyVisitor visitor(spdy_version_); | 5391 TestSpdyVisitor visitor(spdy_version_); |
5391 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); | 5392 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); |
5392 | 5393 |
5393 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); | 5394 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); |
5394 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, | 5395 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, |
5395 visitor.framer_.error_code()) | 5396 visitor.framer_.error_code()) |
5396 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); | 5397 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); |
5397 } | 5398 } |
5398 | 5399 |
| 5400 TEST_P(SpdyFramerTest, PriorityWeightMapping) { |
| 5401 if (spdy_version_ <= SPDY3) { |
| 5402 return; |
| 5403 } |
| 5404 SpdyFramer framer(spdy_version_); |
| 5405 |
| 5406 EXPECT_EQ(255u, framer.MapPriorityToWeight(0)); |
| 5407 EXPECT_EQ(219u, framer.MapPriorityToWeight(1)); |
| 5408 EXPECT_EQ(182u, framer.MapPriorityToWeight(2)); |
| 5409 EXPECT_EQ(146u, framer.MapPriorityToWeight(3)); |
| 5410 EXPECT_EQ(109u, framer.MapPriorityToWeight(4)); |
| 5411 EXPECT_EQ(73u, framer.MapPriorityToWeight(5)); |
| 5412 EXPECT_EQ(36u, framer.MapPriorityToWeight(6)); |
| 5413 EXPECT_EQ(0u, framer.MapPriorityToWeight(7)); |
| 5414 |
| 5415 EXPECT_EQ(0u, framer.MapWeightToPriority(255)); |
| 5416 EXPECT_EQ(0u, framer.MapWeightToPriority(220)); |
| 5417 EXPECT_EQ(1u, framer.MapWeightToPriority(219)); |
| 5418 EXPECT_EQ(1u, framer.MapWeightToPriority(183)); |
| 5419 EXPECT_EQ(2u, framer.MapWeightToPriority(182)); |
| 5420 EXPECT_EQ(2u, framer.MapWeightToPriority(147)); |
| 5421 EXPECT_EQ(3u, framer.MapWeightToPriority(146)); |
| 5422 EXPECT_EQ(3u, framer.MapWeightToPriority(110)); |
| 5423 EXPECT_EQ(4u, framer.MapWeightToPriority(109)); |
| 5424 EXPECT_EQ(4u, framer.MapWeightToPriority(74)); |
| 5425 EXPECT_EQ(5u, framer.MapWeightToPriority(73)); |
| 5426 EXPECT_EQ(5u, framer.MapWeightToPriority(37)); |
| 5427 EXPECT_EQ(6u, framer.MapWeightToPriority(36)); |
| 5428 EXPECT_EQ(6u, framer.MapWeightToPriority(1)); |
| 5429 EXPECT_EQ(7u, framer.MapWeightToPriority(0)); |
| 5430 } |
| 5431 |
5399 } // namespace net | 5432 } // namespace net |
OLD | NEW |