| 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 |