OLD | NEW |
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 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/spdy_write_queue.h" | 5 #include "net/spdy/spdy_write_queue.h" |
6 | 6 |
7 #include <cstddef> | 7 #include <cstddef> |
8 #include <cstring> | 8 #include <cstring> |
9 #include <string> | 9 #include <string> |
10 | 10 |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
87 write_queue.Enqueue( | 87 write_queue.Enqueue( |
88 HIGHEST, RST_STREAM, producer_highest.Pass(), | 88 HIGHEST, RST_STREAM, producer_highest.Pass(), |
89 stream_highest->GetWeakPtr()); | 89 stream_highest->GetWeakPtr()); |
90 | 90 |
91 SpdyFrameType frame_type = DATA; | 91 SpdyFrameType frame_type = DATA; |
92 scoped_ptr<SpdyBufferProducer> frame_producer; | 92 scoped_ptr<SpdyBufferProducer> frame_producer; |
93 base::WeakPtr<SpdyStream> stream; | 93 base::WeakPtr<SpdyStream> stream; |
94 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 94 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
95 EXPECT_EQ(RST_STREAM, frame_type); | 95 EXPECT_EQ(RST_STREAM, frame_type); |
96 EXPECT_EQ("HIGHEST", ProducerToString(frame_producer.Pass())); | 96 EXPECT_EQ("HIGHEST", ProducerToString(frame_producer.Pass())); |
97 EXPECT_EQ(stream_highest, stream); | 97 EXPECT_EQ(stream_highest, stream.get()); |
98 | 98 |
99 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 99 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
100 EXPECT_EQ(SYN_REPLY, frame_type); | 100 EXPECT_EQ(SYN_REPLY, frame_type); |
101 EXPECT_EQ("MEDIUM", ProducerToString(frame_producer.Pass())); | 101 EXPECT_EQ("MEDIUM", ProducerToString(frame_producer.Pass())); |
102 EXPECT_EQ(stream_medium, stream); | 102 EXPECT_EQ(stream_medium, stream.get()); |
103 | 103 |
104 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 104 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
105 EXPECT_EQ(SYN_STREAM, frame_type); | 105 EXPECT_EQ(SYN_STREAM, frame_type); |
106 EXPECT_EQ("LOW", ProducerToString(frame_producer.Pass())); | 106 EXPECT_EQ("LOW", ProducerToString(frame_producer.Pass())); |
107 EXPECT_EQ(NULL, stream.get()); | 107 EXPECT_EQ(NULL, stream.get()); |
108 | 108 |
109 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 109 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
110 } | 110 } |
111 | 111 |
112 // Add some frame producers with the same priority. The producers | 112 // Add some frame producers with the same priority. The producers |
(...skipping 15 matching lines...) Expand all Loading... |
128 stream2->GetWeakPtr()); | 128 stream2->GetWeakPtr()); |
129 write_queue.Enqueue(DEFAULT_PRIORITY, RST_STREAM, producer3.Pass(), | 129 write_queue.Enqueue(DEFAULT_PRIORITY, RST_STREAM, producer3.Pass(), |
130 stream3->GetWeakPtr()); | 130 stream3->GetWeakPtr()); |
131 | 131 |
132 SpdyFrameType frame_type = DATA; | 132 SpdyFrameType frame_type = DATA; |
133 scoped_ptr<SpdyBufferProducer> frame_producer; | 133 scoped_ptr<SpdyBufferProducer> frame_producer; |
134 base::WeakPtr<SpdyStream> stream; | 134 base::WeakPtr<SpdyStream> stream; |
135 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 135 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
136 EXPECT_EQ(SYN_STREAM, frame_type); | 136 EXPECT_EQ(SYN_STREAM, frame_type); |
137 EXPECT_EQ(1, ProducerToInt(frame_producer.Pass())); | 137 EXPECT_EQ(1, ProducerToInt(frame_producer.Pass())); |
138 EXPECT_EQ(stream1, stream); | 138 EXPECT_EQ(stream1, stream.get()); |
139 | 139 |
140 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 140 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
141 EXPECT_EQ(SYN_REPLY, frame_type); | 141 EXPECT_EQ(SYN_REPLY, frame_type); |
142 EXPECT_EQ(2, ProducerToInt(frame_producer.Pass())); | 142 EXPECT_EQ(2, ProducerToInt(frame_producer.Pass())); |
143 EXPECT_EQ(stream2, stream); | 143 EXPECT_EQ(stream2, stream.get()); |
144 | 144 |
145 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 145 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
146 EXPECT_EQ(RST_STREAM, frame_type); | 146 EXPECT_EQ(RST_STREAM, frame_type); |
147 EXPECT_EQ(3, ProducerToInt(frame_producer.Pass())); | 147 EXPECT_EQ(3, ProducerToInt(frame_producer.Pass())); |
148 EXPECT_EQ(stream3, stream); | 148 EXPECT_EQ(stream3, stream.get()); |
149 | 149 |
150 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 150 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
151 } | 151 } |
152 | 152 |
153 // Enqueue a bunch of writes and then call | 153 // Enqueue a bunch of writes and then call |
154 // RemovePendingWritesForStream() on one of the streams. No dequeued | 154 // RemovePendingWritesForStream() on one of the streams. No dequeued |
155 // write should be for that stream. | 155 // write should be for that stream. |
156 TEST_F(SpdyWriteQueueTest, RemovePendingWritesForStream) { | 156 TEST_F(SpdyWriteQueueTest, RemovePendingWritesForStream) { |
157 SpdyWriteQueue write_queue; | 157 SpdyWriteQueue write_queue; |
158 | 158 |
159 scoped_ptr<SpdyStream> stream1(MakeTestStream(DEFAULT_PRIORITY)); | 159 scoped_ptr<SpdyStream> stream1(MakeTestStream(DEFAULT_PRIORITY)); |
160 scoped_ptr<SpdyStream> stream2(MakeTestStream(DEFAULT_PRIORITY)); | 160 scoped_ptr<SpdyStream> stream2(MakeTestStream(DEFAULT_PRIORITY)); |
161 | 161 |
162 for (int i = 0; i < 100; ++i) { | 162 for (int i = 0; i < 100; ++i) { |
163 base::WeakPtr<SpdyStream> stream = | 163 base::WeakPtr<SpdyStream> stream = |
164 (((i % 3) == 0) ? stream1 : stream2)->GetWeakPtr(); | 164 (((i % 3) == 0) ? stream1 : stream2)->GetWeakPtr(); |
165 write_queue.Enqueue(DEFAULT_PRIORITY, SYN_STREAM, IntToProducer(i), stream); | 165 write_queue.Enqueue(DEFAULT_PRIORITY, SYN_STREAM, IntToProducer(i), stream); |
166 } | 166 } |
167 | 167 |
168 write_queue.RemovePendingWritesForStream(stream2->GetWeakPtr()); | 168 write_queue.RemovePendingWritesForStream(stream2->GetWeakPtr()); |
169 | 169 |
170 for (int i = 0; i < 100; i += 3) { | 170 for (int i = 0; i < 100; i += 3) { |
171 SpdyFrameType frame_type = DATA; | 171 SpdyFrameType frame_type = DATA; |
172 scoped_ptr<SpdyBufferProducer> frame_producer; | 172 scoped_ptr<SpdyBufferProducer> frame_producer; |
173 base::WeakPtr<SpdyStream> stream; | 173 base::WeakPtr<SpdyStream> stream; |
174 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 174 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
175 EXPECT_EQ(SYN_STREAM, frame_type); | 175 EXPECT_EQ(SYN_STREAM, frame_type); |
176 EXPECT_EQ(i, ProducerToInt(frame_producer.Pass())); | 176 EXPECT_EQ(i, ProducerToInt(frame_producer.Pass())); |
177 EXPECT_EQ(stream1, stream); | 177 EXPECT_EQ(stream1, stream.get()); |
178 } | 178 } |
179 | 179 |
180 SpdyFrameType frame_type = DATA; | 180 SpdyFrameType frame_type = DATA; |
181 scoped_ptr<SpdyBufferProducer> frame_producer; | 181 scoped_ptr<SpdyBufferProducer> frame_producer; |
182 base::WeakPtr<SpdyStream> stream; | 182 base::WeakPtr<SpdyStream> stream; |
183 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 183 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
184 } | 184 } |
185 | 185 |
186 // Enqueue a bunch of writes and then call | 186 // Enqueue a bunch of writes and then call |
187 // RemovePendingWritesForStreamsAfter(). No dequeued write should be for | 187 // RemovePendingWritesForStreamsAfter(). No dequeued write should be for |
(...skipping 23 matching lines...) Expand all Loading... |
211 write_queue.RemovePendingWritesForStreamsAfter(stream1->stream_id()); | 211 write_queue.RemovePendingWritesForStreamsAfter(stream1->stream_id()); |
212 | 212 |
213 for (int i = 0; i < 100; i += arraysize(streams)) { | 213 for (int i = 0; i < 100; i += arraysize(streams)) { |
214 SpdyFrameType frame_type = DATA; | 214 SpdyFrameType frame_type = DATA; |
215 scoped_ptr<SpdyBufferProducer> frame_producer; | 215 scoped_ptr<SpdyBufferProducer> frame_producer; |
216 base::WeakPtr<SpdyStream> stream; | 216 base::WeakPtr<SpdyStream> stream; |
217 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)) | 217 ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)) |
218 << "Unable to Dequeue i: " << i; | 218 << "Unable to Dequeue i: " << i; |
219 EXPECT_EQ(SYN_STREAM, frame_type); | 219 EXPECT_EQ(SYN_STREAM, frame_type); |
220 EXPECT_EQ(i, ProducerToInt(frame_producer.Pass())); | 220 EXPECT_EQ(i, ProducerToInt(frame_producer.Pass())); |
221 EXPECT_EQ(stream1, stream); | 221 EXPECT_EQ(stream1, stream.get()); |
222 } | 222 } |
223 | 223 |
224 SpdyFrameType frame_type = DATA; | 224 SpdyFrameType frame_type = DATA; |
225 scoped_ptr<SpdyBufferProducer> frame_producer; | 225 scoped_ptr<SpdyBufferProducer> frame_producer; |
226 base::WeakPtr<SpdyStream> stream; | 226 base::WeakPtr<SpdyStream> stream; |
227 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 227 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
228 } | 228 } |
229 | 229 |
230 // Enqueue a bunch of writes and then call Clear(). The write queue | 230 // Enqueue a bunch of writes and then call Clear(). The write queue |
231 // should clean up the memory properly, and Dequeue() should return | 231 // should clean up the memory properly, and Dequeue() should return |
(...skipping 10 matching lines...) Expand all Loading... |
242 | 242 |
243 SpdyFrameType frame_type = DATA; | 243 SpdyFrameType frame_type = DATA; |
244 scoped_ptr<SpdyBufferProducer> frame_producer; | 244 scoped_ptr<SpdyBufferProducer> frame_producer; |
245 base::WeakPtr<SpdyStream> stream; | 245 base::WeakPtr<SpdyStream> stream; |
246 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); | 246 EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream)); |
247 } | 247 } |
248 | 248 |
249 } // namespace | 249 } // namespace |
250 | 250 |
251 } // namespace net | 251 } // namespace net |
OLD | NEW |