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

Side by Side Diff: net/quic/quic_write_blocked_list_test.cc

Issue 1468773002: Changing from QuicPriority to SpdyPriority. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@107610692
Patch Set: Created 5 years 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/quic/quic_write_blocked_list.h ('k') | net/quic/reliable_quic_stream.h » ('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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/quic/quic_write_blocked_list.h" 5 #include "net/quic/quic_write_blocked_list.h"
6 6
7 #include "net/quic/test_tools/quic_test_utils.h" 7 #include "net/quic/test_tools/quic_test_utils.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 using net::kLowestPriority;
11 using net::kHighestPriority;
12
13 using net::kLowestPriority;
14 using net::kHighestPriority;
15
10 namespace net { 16 namespace net {
11 namespace test { 17 namespace test {
12 namespace { 18 namespace {
13 19
14 TEST(QuicWriteBlockedListTest, PriorityOrder) { 20 TEST(QuicWriteBlockedListTest, PriorityOrder) {
15 QuicWriteBlockedList write_blocked_list; 21 QuicWriteBlockedList write_blocked_list;
16 22
17 // Mark streams blocked in roughly reverse priority order, and 23 // Mark streams blocked in roughly reverse priority order, and
18 // verify that streams are sorted. 24 // verify that streams are sorted.
19 write_blocked_list.AddStream(40, 25 write_blocked_list.AddStream(40, net::kLowestPriority);
20 QuicWriteBlockedList::kLowestPriority); 26 write_blocked_list.AddStream(23, net::kHighestPriority);
21 write_blocked_list.AddStream(23, 27 write_blocked_list.AddStream(17, net::kHighestPriority);
22 QuicWriteBlockedList::kHighestPriority); 28 write_blocked_list.AddStream(kHeadersStreamId, net::kHighestPriority);
23 write_blocked_list.AddStream(17, 29 write_blocked_list.AddStream(kCryptoStreamId, net::kHighestPriority);
24 QuicWriteBlockedList::kHighestPriority);
25 write_blocked_list.AddStream(kHeadersStreamId,
26 QuicWriteBlockedList::kHighestPriority);
27 write_blocked_list.AddStream(kCryptoStreamId,
28 QuicWriteBlockedList::kHighestPriority);
29 30
30 EXPECT_EQ(5u, write_blocked_list.NumBlockedStreams()); 31 EXPECT_EQ(5u, write_blocked_list.NumBlockedStreams());
31 EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream()); 32 EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
32 EXPECT_TRUE(write_blocked_list.HasWriteBlockedDataStreams()); 33 EXPECT_TRUE(write_blocked_list.HasWriteBlockedDataStreams());
33 // The Crypto stream is highest priority. 34 // The Crypto stream is highest priority.
34 EXPECT_EQ(kCryptoStreamId, write_blocked_list.PopFront()); 35 EXPECT_EQ(kCryptoStreamId, write_blocked_list.PopFront());
35 // Followed by the Headers stream. 36 // Followed by the Headers stream.
36 EXPECT_EQ(kHeadersStreamId, write_blocked_list.PopFront()); 37 EXPECT_EQ(kHeadersStreamId, write_blocked_list.PopFront());
37 // Streams with same priority are popped in the order they were inserted. 38 // Streams with same priority are popped in the order they were inserted.
38 EXPECT_EQ(23u, write_blocked_list.PopFront()); 39 EXPECT_EQ(23u, write_blocked_list.PopFront());
39 EXPECT_EQ(17u, write_blocked_list.PopFront()); 40 EXPECT_EQ(17u, write_blocked_list.PopFront());
40 // Low priority stream appears last. 41 // Low priority stream appears last.
41 EXPECT_EQ(40u, write_blocked_list.PopFront()); 42 EXPECT_EQ(40u, write_blocked_list.PopFront());
42 43
43 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams()); 44 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams());
44 EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream()); 45 EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
45 EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams()); 46 EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams());
46 } 47 }
47 48
48 TEST(QuicWriteBlockedListTest, CryptoStream) { 49 TEST(QuicWriteBlockedListTest, CryptoStream) {
49 QuicWriteBlockedList write_blocked_list; 50 QuicWriteBlockedList write_blocked_list;
50 write_blocked_list.AddStream(kCryptoStreamId, 51 write_blocked_list.AddStream(kCryptoStreamId, net::kHighestPriority);
51 QuicWriteBlockedList::kHighestPriority);
52 52
53 EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams()); 53 EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams());
54 EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream()); 54 EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
55 EXPECT_EQ(kCryptoStreamId, write_blocked_list.PopFront()); 55 EXPECT_EQ(kCryptoStreamId, write_blocked_list.PopFront());
56 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams()); 56 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams());
57 EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream()); 57 EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
58 } 58 }
59 59
60 TEST(QuicWriteBlockedListTest, HeadersStream) { 60 TEST(QuicWriteBlockedListTest, HeadersStream) {
61 QuicWriteBlockedList write_blocked_list; 61 QuicWriteBlockedList write_blocked_list;
62 write_blocked_list.AddStream(kHeadersStreamId, 62 write_blocked_list.AddStream(kHeadersStreamId, net::kHighestPriority);
63 QuicWriteBlockedList::kHighestPriority);
64 63
65 EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams()); 64 EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams());
66 EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream()); 65 EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
67 EXPECT_EQ(kHeadersStreamId, write_blocked_list.PopFront()); 66 EXPECT_EQ(kHeadersStreamId, write_blocked_list.PopFront());
68 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams()); 67 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams());
69 EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream()); 68 EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
70 } 69 }
71 70
72 TEST(QuicWriteBlockedListTest, VerifyHeadersStream) { 71 TEST(QuicWriteBlockedListTest, VerifyHeadersStream) {
73 QuicWriteBlockedList write_blocked_list; 72 QuicWriteBlockedList write_blocked_list;
74 write_blocked_list.AddStream(5, 73 write_blocked_list.AddStream(5, net::kHighestPriority);
75 QuicWriteBlockedList::kHighestPriority); 74 write_blocked_list.AddStream(kHeadersStreamId, net::kHighestPriority);
76 write_blocked_list.AddStream(kHeadersStreamId,
77 QuicWriteBlockedList::kHighestPriority);
78 75
79 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams()); 76 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
80 EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream()); 77 EXPECT_TRUE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
81 EXPECT_TRUE(write_blocked_list.HasWriteBlockedDataStreams()); 78 EXPECT_TRUE(write_blocked_list.HasWriteBlockedDataStreams());
82 // In newer QUIC versions, there is a headers stream which is 79 // In newer QUIC versions, there is a headers stream which is
83 // higher priority than data streams. 80 // higher priority than data streams.
84 EXPECT_EQ(kHeadersStreamId, write_blocked_list.PopFront()); 81 EXPECT_EQ(kHeadersStreamId, write_blocked_list.PopFront());
85 EXPECT_EQ(5u, write_blocked_list.PopFront()); 82 EXPECT_EQ(5u, write_blocked_list.PopFront());
86 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams()); 83 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams());
87 EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream()); 84 EXPECT_FALSE(write_blocked_list.HasWriteBlockedCryptoOrHeadersStream());
88 EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams()); 85 EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams());
89 } 86 }
90 87
91 TEST(QuicWriteBlockedListTest, NoDuplicateEntries) { 88 TEST(QuicWriteBlockedListTest, NoDuplicateEntries) {
92 // Test that QuicWriteBlockedList doesn't allow duplicate entries. 89 // Test that QuicWriteBlockedList doesn't allow duplicate entries.
93 QuicWriteBlockedList write_blocked_list; 90 QuicWriteBlockedList write_blocked_list;
94 91
95 // Try to add a stream to the write blocked list multiple times at the same 92 // Try to add a stream to the write blocked list multiple times at the same
96 // priority. 93 // priority.
97 const QuicStreamId kBlockedId = kClientDataStreamId1; 94 const QuicStreamId kBlockedId = kClientDataStreamId1;
98 write_blocked_list.AddStream(kBlockedId, 95 write_blocked_list.AddStream(kBlockedId, net::kHighestPriority);
99 QuicWriteBlockedList::kHighestPriority); 96 write_blocked_list.AddStream(kBlockedId, net::kHighestPriority);
100 write_blocked_list.AddStream(kBlockedId, 97 write_blocked_list.AddStream(kBlockedId, net::kHighestPriority);
101 QuicWriteBlockedList::kHighestPriority);
102 write_blocked_list.AddStream(kBlockedId,
103 QuicWriteBlockedList::kHighestPriority);
104 98
105 // This should only result in one blocked stream being added. 99 // This should only result in one blocked stream being added.
106 EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams()); 100 EXPECT_EQ(1u, write_blocked_list.NumBlockedStreams());
107 EXPECT_TRUE(write_blocked_list.HasWriteBlockedDataStreams()); 101 EXPECT_TRUE(write_blocked_list.HasWriteBlockedDataStreams());
108 102
109 // There should only be one stream to pop off the front. 103 // There should only be one stream to pop off the front.
110 EXPECT_EQ(kBlockedId, write_blocked_list.PopFront()); 104 EXPECT_EQ(kBlockedId, write_blocked_list.PopFront());
111 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams()); 105 EXPECT_EQ(0u, write_blocked_list.NumBlockedStreams());
112 EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams()); 106 EXPECT_FALSE(write_blocked_list.HasWriteBlockedDataStreams());
113 } 107 }
114 108
115 TEST(QuicWriteBlockedListTest, BatchingWrites) { 109 TEST(QuicWriteBlockedListTest, BatchingWrites) {
116 FLAGS_quic_batch_writes = true; 110 FLAGS_quic_batch_writes = true;
117 QuicWriteBlockedList write_blocked_list; 111 QuicWriteBlockedList write_blocked_list;
118 112
119 const QuicStreamId id1 = kClientDataStreamId1; 113 const QuicStreamId id1 = kClientDataStreamId1;
120 const QuicStreamId id2 = kClientDataStreamId2; 114 const QuicStreamId id2 = kClientDataStreamId2;
121 115
122 write_blocked_list.AddStream(id1, QuicWriteBlockedList::kLowestPriority); 116 write_blocked_list.AddStream(id1, net::kLowestPriority);
123 write_blocked_list.AddStream(id2, QuicWriteBlockedList::kLowestPriority); 117 write_blocked_list.AddStream(id2, net::kLowestPriority);
124 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams()); 118 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
125 119
126 // The first stream we push back should stay at the front until 16k is 120 // The first stream we push back should stay at the front until 16k is
127 // written. 121 // written.
128 EXPECT_EQ(id1, write_blocked_list.PopFront()); 122 EXPECT_EQ(id1, write_blocked_list.PopFront());
123 write_blocked_list.AddStream(id1, net::kHighestPriority);
129 write_blocked_list.UpdateBytesForStream(id1, 15999); 124 write_blocked_list.UpdateBytesForStream(id1, 15999);
130 write_blocked_list.AddStream(id1, QuicWriteBlockedList::kLowestPriority); 125 write_blocked_list.AddStream(id1, net::kLowestPriority);
131 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams()); 126 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
132 EXPECT_EQ(id1, write_blocked_list.PopFront()); 127 EXPECT_EQ(id1, write_blocked_list.PopFront());
133 128
134 // Once 16k is written the first stream will cede to the next. 129 // Once 16k is written the first stream will cede to the next.
130 write_blocked_list.AddStream(id1, net::kHighestPriority);
135 write_blocked_list.UpdateBytesForStream(id1, 1); 131 write_blocked_list.UpdateBytesForStream(id1, 1);
136 write_blocked_list.AddStream(id1, QuicWriteBlockedList::kLowestPriority); 132 write_blocked_list.AddStream(id1, net::kLowestPriority);
137 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams()); 133 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
138 EXPECT_EQ(id2, write_blocked_list.PopFront()); 134 EXPECT_EQ(id2, write_blocked_list.PopFront());
139 135
140 // Set the new stream to have written all but one byte. 136 // Set the new stream to have written all but one byte.
137 write_blocked_list.AddStream(id2, net::kHighestPriority);
141 write_blocked_list.UpdateBytesForStream(id2, 15999); 138 write_blocked_list.UpdateBytesForStream(id2, 15999);
142 write_blocked_list.AddStream(id2, QuicWriteBlockedList::kLowestPriority); 139 write_blocked_list.AddStream(id2, net::kLowestPriority);
143 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams()); 140 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
144 141
145 // Ensure higher priority streams are popped first. 142 // Ensure higher priority streams are popped first.
146 const QuicStreamId id3 = kClientDataStreamId2 + 2; 143 const QuicStreamId id3 = kClientDataStreamId2 + 2;
147 write_blocked_list.AddStream(id3, QuicWriteBlockedList::kHighestPriority); 144 write_blocked_list.AddStream(id3, net::kHighestPriority);
148 EXPECT_EQ(id3, write_blocked_list.PopFront()); 145 EXPECT_EQ(id3, write_blocked_list.PopFront());
149 146
150 // Higher priority streams will always be popped first, even if using their 147 // Higher priority streams will always be popped first, even if using their
151 // byte quota 148 // byte quota
149 write_blocked_list.AddStream(id3, net::kHighestPriority);
152 write_blocked_list.UpdateBytesForStream(id1, 20000); 150 write_blocked_list.UpdateBytesForStream(id1, 20000);
153 write_blocked_list.AddStream(id3, QuicWriteBlockedList::kHighestPriority); 151 write_blocked_list.AddStream(id3, net::kHighestPriority);
154 EXPECT_EQ(id3, write_blocked_list.PopFront()); 152 EXPECT_EQ(id3, write_blocked_list.PopFront());
155 153
156 // Once the higher priority stream is out of the way, id2 will resume its 16k 154 // Once the higher priority stream is out of the way, id2 will resume its 16k
157 // write, with only 1 byte remaining of its guaranteed write allocation. 155 // write, with only 1 byte remaining of its guaranteed write allocation.
158 EXPECT_EQ(id2, write_blocked_list.PopFront()); 156 EXPECT_EQ(id2, write_blocked_list.PopFront());
157 write_blocked_list.AddStream(id2, net::kHighestPriority);
159 write_blocked_list.UpdateBytesForStream(id2, 1); 158 write_blocked_list.UpdateBytesForStream(id2, 1);
160 write_blocked_list.AddStream(id2, QuicWriteBlockedList::kLowestPriority); 159 write_blocked_list.AddStream(id2, net::kLowestPriority);
161 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams()); 160 EXPECT_EQ(2u, write_blocked_list.NumBlockedStreams());
162 EXPECT_EQ(id1, write_blocked_list.PopFront()); 161 EXPECT_EQ(id1, write_blocked_list.PopFront());
163 } 162 }
164 163
165 } // namespace 164 } // namespace
166 } // namespace test 165 } // namespace test
167 } // namespace net 166 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_write_blocked_list.h ('k') | net/quic/reliable_quic_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698