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

Side by Side Diff: net/spdy/spdy_framer_test.cc

Issue 287003011: Initial support for HTTP/2 dependencies and weights (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comment tweaks. Created 6 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 | Annotate | Revision Log
« net/spdy/spdy_framer.cc ('K') | « net/spdy/spdy_framer.cc ('k') | no next file » | 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 <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
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
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
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
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
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
OLDNEW
« net/spdy/spdy_framer.cc ('K') | « net/spdy/spdy_framer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698