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

Unified Diff: net/spdy/spdy_write_queue_unittest.cc

Issue 2832973003: Split net/spdy into core and chromium subdirectories. (Closed)
Patch Set: Fix some more build rules. Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_write_queue.cc ('k') | net/spdy/write_scheduler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_write_queue_unittest.cc
diff --git a/net/spdy/spdy_write_queue_unittest.cc b/net/spdy/spdy_write_queue_unittest.cc
deleted file mode 100644
index 53f52f113f5aa449fdc7b7563b2558291e2c3da3..0000000000000000000000000000000000000000
--- a/net/spdy/spdy_write_queue_unittest.cc
+++ /dev/null
@@ -1,381 +0,0 @@
-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "net/spdy/spdy_write_queue.h"
-
-#include <cstddef>
-#include <cstring>
-#include <memory>
-#include <utility>
-
-#include "base/logging.h"
-#include "base/memory/ref_counted.h"
-#include "base/strings/string_number_conversions.h"
-#include "net/base/request_priority.h"
-#include "net/log/net_log_with_source.h"
-#include "net/spdy/platform/api/spdy_string.h"
-#include "net/spdy/spdy_buffer_producer.h"
-#include "net/spdy/spdy_stream.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-namespace net {
-
-namespace {
-
-const char kOriginal[] = "original";
-const char kRequeued[] = "requeued";
-
-class SpdyWriteQueueTest : public ::testing::Test {};
-
-// Makes a SpdyFrameProducer producing a frame with the data in the
-// given string.
-std::unique_ptr<SpdyBufferProducer> StringToProducer(const SpdyString& s) {
- std::unique_ptr<char[]> data(new char[s.size()]);
- std::memcpy(data.get(), s.data(), s.size());
- return std::unique_ptr<SpdyBufferProducer>(
- new SimpleBufferProducer(std::unique_ptr<SpdyBuffer>(
- new SpdyBuffer(std::unique_ptr<SpdySerializedFrame>(
- new SpdySerializedFrame(data.release(), s.size(), true))))));
-}
-
-// Makes a SpdyBufferProducer producing a frame with the data in the
-// given int (converted to a string).
-std::unique_ptr<SpdyBufferProducer> IntToProducer(int i) {
- return StringToProducer(base::IntToString(i));
-}
-
-// Producer whose produced buffer will enqueue yet another buffer into the
-// SpdyWriteQueue upon destruction.
-class RequeingBufferProducer : public SpdyBufferProducer {
- public:
- explicit RequeingBufferProducer(SpdyWriteQueue* queue) {
- buffer_.reset(new SpdyBuffer(kOriginal, arraysize(kOriginal)));
- buffer_->AddConsumeCallback(
- base::Bind(RequeingBufferProducer::ConsumeCallback, queue));
- }
-
- std::unique_ptr<SpdyBuffer> ProduceBuffer() override {
- return std::move(buffer_);
- }
-
- size_t EstimateMemoryUsage() const override {
- NOTREACHED();
- return 0;
- }
-
- static void ConsumeCallback(SpdyWriteQueue* queue,
- size_t size,
- SpdyBuffer::ConsumeSource source) {
- std::unique_ptr<SpdyBufferProducer> producer(
- new SimpleBufferProducer(std::unique_ptr<SpdyBuffer>(
- new SpdyBuffer(kRequeued, arraysize(kRequeued)))));
-
- queue->Enqueue(MEDIUM, SpdyFrameType::RST_STREAM, std::move(producer),
- base::WeakPtr<SpdyStream>());
- }
-
- private:
- std::unique_ptr<SpdyBuffer> buffer_;
-};
-
-// Produces a frame with the given producer and returns a copy of its
-// data as a string.
-SpdyString ProducerToString(std::unique_ptr<SpdyBufferProducer> producer) {
- std::unique_ptr<SpdyBuffer> buffer = producer->ProduceBuffer();
- return SpdyString(buffer->GetRemainingData(), buffer->GetRemainingSize());
-}
-
-// Produces a frame with the given producer and returns a copy of its
-// data as an int (converted from a string).
-int ProducerToInt(std::unique_ptr<SpdyBufferProducer> producer) {
- int i = 0;
- EXPECT_TRUE(base::StringToInt(ProducerToString(std::move(producer)), &i));
- return i;
-}
-
-// Makes a SpdyStream with the given priority and a NULL SpdySession
-// -- be careful to not call any functions that expect the session to
-// be there.
-SpdyStream* MakeTestStream(RequestPriority priority) {
- return new SpdyStream(SPDY_BIDIRECTIONAL_STREAM, base::WeakPtr<SpdySession>(),
- GURL(), priority, 0, 0, NetLogWithSource());
-}
-
-// Add some frame producers of different priority. The producers
-// should be dequeued in priority order with their associated stream.
-TEST_F(SpdyWriteQueueTest, DequeuesByPriority) {
- SpdyWriteQueue write_queue;
-
- std::unique_ptr<SpdyBufferProducer> producer_low = StringToProducer("LOW");
- std::unique_ptr<SpdyBufferProducer> producer_medium =
- StringToProducer("MEDIUM");
- std::unique_ptr<SpdyBufferProducer> producer_highest =
- StringToProducer("HIGHEST");
-
- std::unique_ptr<SpdyStream> stream_medium(MakeTestStream(MEDIUM));
- std::unique_ptr<SpdyStream> stream_highest(MakeTestStream(HIGHEST));
-
- // A NULL stream should still work.
- write_queue.Enqueue(LOW, SpdyFrameType::HEADERS, std::move(producer_low),
- base::WeakPtr<SpdyStream>());
- write_queue.Enqueue(MEDIUM, SpdyFrameType::HEADERS,
- std::move(producer_medium), stream_medium->GetWeakPtr());
- write_queue.Enqueue(HIGHEST, SpdyFrameType::RST_STREAM,
- std::move(producer_highest),
- stream_highest->GetWeakPtr());
-
- SpdyFrameType frame_type = SpdyFrameType::DATA;
- std::unique_ptr<SpdyBufferProducer> frame_producer;
- base::WeakPtr<SpdyStream> stream;
- ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
- EXPECT_EQ(SpdyFrameType::RST_STREAM, frame_type);
- EXPECT_EQ("HIGHEST", ProducerToString(std::move(frame_producer)));
- EXPECT_EQ(stream_highest.get(), stream.get());
-
- ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
- EXPECT_EQ(SpdyFrameType::HEADERS, frame_type);
- EXPECT_EQ("MEDIUM", ProducerToString(std::move(frame_producer)));
- EXPECT_EQ(stream_medium.get(), stream.get());
-
- ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
- EXPECT_EQ(SpdyFrameType::HEADERS, frame_type);
- EXPECT_EQ("LOW", ProducerToString(std::move(frame_producer)));
- EXPECT_EQ(nullptr, stream.get());
-
- EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
-}
-
-// Add some frame producers with the same priority. The producers
-// should be dequeued in FIFO order with their associated stream.
-TEST_F(SpdyWriteQueueTest, DequeuesFIFO) {
- SpdyWriteQueue write_queue;
-
- std::unique_ptr<SpdyBufferProducer> producer1 = IntToProducer(1);
- std::unique_ptr<SpdyBufferProducer> producer2 = IntToProducer(2);
- std::unique_ptr<SpdyBufferProducer> producer3 = IntToProducer(3);
-
- std::unique_ptr<SpdyStream> stream1(MakeTestStream(DEFAULT_PRIORITY));
- std::unique_ptr<SpdyStream> stream2(MakeTestStream(DEFAULT_PRIORITY));
- std::unique_ptr<SpdyStream> stream3(MakeTestStream(DEFAULT_PRIORITY));
-
- write_queue.Enqueue(DEFAULT_PRIORITY, SpdyFrameType::HEADERS,
- std::move(producer1), stream1->GetWeakPtr());
- write_queue.Enqueue(DEFAULT_PRIORITY, SpdyFrameType::HEADERS,
- std::move(producer2), stream2->GetWeakPtr());
- write_queue.Enqueue(DEFAULT_PRIORITY, SpdyFrameType::RST_STREAM,
- std::move(producer3), stream3->GetWeakPtr());
-
- SpdyFrameType frame_type = SpdyFrameType::DATA;
- std::unique_ptr<SpdyBufferProducer> frame_producer;
- base::WeakPtr<SpdyStream> stream;
- ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
- EXPECT_EQ(SpdyFrameType::HEADERS, frame_type);
- EXPECT_EQ(1, ProducerToInt(std::move(frame_producer)));
- EXPECT_EQ(stream1.get(), stream.get());
-
- ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
- EXPECT_EQ(SpdyFrameType::HEADERS, frame_type);
- EXPECT_EQ(2, ProducerToInt(std::move(frame_producer)));
- EXPECT_EQ(stream2.get(), stream.get());
-
- ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
- EXPECT_EQ(SpdyFrameType::RST_STREAM, frame_type);
- EXPECT_EQ(3, ProducerToInt(std::move(frame_producer)));
- EXPECT_EQ(stream3.get(), stream.get());
-
- EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
-}
-
-// Enqueue a bunch of writes and then call
-// RemovePendingWritesForStream() on one of the streams. No dequeued
-// write should be for that stream.
-TEST_F(SpdyWriteQueueTest, RemovePendingWritesForStream) {
- SpdyWriteQueue write_queue;
-
- std::unique_ptr<SpdyStream> stream1(MakeTestStream(DEFAULT_PRIORITY));
- std::unique_ptr<SpdyStream> stream2(MakeTestStream(DEFAULT_PRIORITY));
-
- for (int i = 0; i < 100; ++i) {
- base::WeakPtr<SpdyStream> stream =
- (((i % 3) == 0) ? stream1 : stream2)->GetWeakPtr();
- write_queue.Enqueue(DEFAULT_PRIORITY, SpdyFrameType::HEADERS,
- IntToProducer(i), stream);
- }
-
- write_queue.RemovePendingWritesForStream(stream2->GetWeakPtr());
-
- for (int i = 0; i < 100; i += 3) {
- SpdyFrameType frame_type = SpdyFrameType::DATA;
- std::unique_ptr<SpdyBufferProducer> frame_producer;
- base::WeakPtr<SpdyStream> stream;
- ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
- EXPECT_EQ(SpdyFrameType::HEADERS, frame_type);
- EXPECT_EQ(i, ProducerToInt(std::move(frame_producer)));
- EXPECT_EQ(stream1.get(), stream.get());
- }
-
- SpdyFrameType frame_type = SpdyFrameType::DATA;
- std::unique_ptr<SpdyBufferProducer> frame_producer;
- base::WeakPtr<SpdyStream> stream;
- EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
-}
-
-// Enqueue a bunch of writes and then call
-// RemovePendingWritesForStreamsAfter(). No dequeued write should be for
-// those streams without a stream id, or with a stream_id after that
-// argument.
-TEST_F(SpdyWriteQueueTest, RemovePendingWritesForStreamsAfter) {
- SpdyWriteQueue write_queue;
-
- std::unique_ptr<SpdyStream> stream1(MakeTestStream(DEFAULT_PRIORITY));
- stream1->set_stream_id(1);
- std::unique_ptr<SpdyStream> stream2(MakeTestStream(DEFAULT_PRIORITY));
- stream2->set_stream_id(3);
- std::unique_ptr<SpdyStream> stream3(MakeTestStream(DEFAULT_PRIORITY));
- stream3->set_stream_id(5);
- // No stream id assigned.
- std::unique_ptr<SpdyStream> stream4(MakeTestStream(DEFAULT_PRIORITY));
- base::WeakPtr<SpdyStream> streams[] = {
- stream1->GetWeakPtr(), stream2->GetWeakPtr(),
- stream3->GetWeakPtr(), stream4->GetWeakPtr()
- };
-
- for (int i = 0; i < 100; ++i) {
- write_queue.Enqueue(DEFAULT_PRIORITY, SpdyFrameType::HEADERS,
- IntToProducer(i), streams[i % arraysize(streams)]);
- }
-
- write_queue.RemovePendingWritesForStreamsAfter(stream1->stream_id());
-
- for (int i = 0; i < 100; i += arraysize(streams)) {
- SpdyFrameType frame_type = SpdyFrameType::DATA;
- std::unique_ptr<SpdyBufferProducer> frame_producer;
- base::WeakPtr<SpdyStream> stream;
- ASSERT_TRUE(write_queue.Dequeue(&frame_type, &frame_producer, &stream))
- << "Unable to Dequeue i: " << i;
- EXPECT_EQ(SpdyFrameType::HEADERS, frame_type);
- EXPECT_EQ(i, ProducerToInt(std::move(frame_producer)));
- EXPECT_EQ(stream1.get(), stream.get());
- }
-
- SpdyFrameType frame_type = SpdyFrameType::DATA;
- std::unique_ptr<SpdyBufferProducer> frame_producer;
- base::WeakPtr<SpdyStream> stream;
- EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
-}
-
-// Enqueue a bunch of writes and then call Clear(). The write queue
-// should clean up the memory properly, and Dequeue() should return
-// false.
-TEST_F(SpdyWriteQueueTest, Clear) {
- SpdyWriteQueue write_queue;
-
- for (int i = 0; i < 100; ++i) {
- write_queue.Enqueue(DEFAULT_PRIORITY, SpdyFrameType::HEADERS,
- IntToProducer(i), base::WeakPtr<SpdyStream>());
- }
-
- write_queue.Clear();
-
- SpdyFrameType frame_type = SpdyFrameType::DATA;
- std::unique_ptr<SpdyBufferProducer> frame_producer;
- base::WeakPtr<SpdyStream> stream;
- EXPECT_FALSE(write_queue.Dequeue(&frame_type, &frame_producer, &stream));
-}
-
-TEST_F(SpdyWriteQueueTest, RequeingProducerWithoutReentrance) {
- SpdyWriteQueue queue;
- queue.Enqueue(
- DEFAULT_PRIORITY, SpdyFrameType::HEADERS,
- std::unique_ptr<SpdyBufferProducer>(new RequeingBufferProducer(&queue)),
- base::WeakPtr<SpdyStream>());
- {
- SpdyFrameType frame_type;
- std::unique_ptr<SpdyBufferProducer> producer;
- base::WeakPtr<SpdyStream> stream;
-
- EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &stream));
- EXPECT_TRUE(queue.IsEmpty());
- EXPECT_EQ(SpdyString(kOriginal),
- producer->ProduceBuffer()->GetRemainingData());
- }
- // |producer| was destroyed, and a buffer is re-queued.
- EXPECT_FALSE(queue.IsEmpty());
-
- SpdyFrameType frame_type;
- std::unique_ptr<SpdyBufferProducer> producer;
- base::WeakPtr<SpdyStream> stream;
-
- EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &stream));
- EXPECT_EQ(SpdyString(kRequeued),
- producer->ProduceBuffer()->GetRemainingData());
-}
-
-TEST_F(SpdyWriteQueueTest, ReentranceOnClear) {
- SpdyWriteQueue queue;
- queue.Enqueue(
- DEFAULT_PRIORITY, SpdyFrameType::HEADERS,
- std::unique_ptr<SpdyBufferProducer>(new RequeingBufferProducer(&queue)),
- base::WeakPtr<SpdyStream>());
-
- queue.Clear();
- EXPECT_FALSE(queue.IsEmpty());
-
- SpdyFrameType frame_type;
- std::unique_ptr<SpdyBufferProducer> producer;
- base::WeakPtr<SpdyStream> stream;
-
- EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &stream));
- EXPECT_EQ(SpdyString(kRequeued),
- producer->ProduceBuffer()->GetRemainingData());
-}
-
-TEST_F(SpdyWriteQueueTest, ReentranceOnRemovePendingWritesAfter) {
- std::unique_ptr<SpdyStream> stream(MakeTestStream(DEFAULT_PRIORITY));
- stream->set_stream_id(2);
-
- SpdyWriteQueue queue;
- queue.Enqueue(
- DEFAULT_PRIORITY, SpdyFrameType::HEADERS,
- std::unique_ptr<SpdyBufferProducer>(new RequeingBufferProducer(&queue)),
- stream->GetWeakPtr());
-
- queue.RemovePendingWritesForStreamsAfter(1);
- EXPECT_FALSE(queue.IsEmpty());
-
- SpdyFrameType frame_type;
- std::unique_ptr<SpdyBufferProducer> producer;
- base::WeakPtr<SpdyStream> weak_stream;
-
- EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &weak_stream));
- EXPECT_EQ(SpdyString(kRequeued),
- producer->ProduceBuffer()->GetRemainingData());
-}
-
-TEST_F(SpdyWriteQueueTest, ReentranceOnRemovePendingWritesForStream) {
- std::unique_ptr<SpdyStream> stream(MakeTestStream(DEFAULT_PRIORITY));
- stream->set_stream_id(2);
-
- SpdyWriteQueue queue;
- queue.Enqueue(
- DEFAULT_PRIORITY, SpdyFrameType::HEADERS,
- std::unique_ptr<SpdyBufferProducer>(new RequeingBufferProducer(&queue)),
- stream->GetWeakPtr());
-
- queue.RemovePendingWritesForStream(stream->GetWeakPtr());
- EXPECT_FALSE(queue.IsEmpty());
-
- SpdyFrameType frame_type;
- std::unique_ptr<SpdyBufferProducer> producer;
- base::WeakPtr<SpdyStream> weak_stream;
-
- EXPECT_TRUE(queue.Dequeue(&frame_type, &producer, &weak_stream));
- EXPECT_EQ(SpdyString(kRequeued),
- producer->ProduceBuffer()->GetRemainingData());
-}
-
-} // namespace
-
-} // namespace net
« no previous file with comments | « net/spdy/spdy_write_queue.cc ('k') | net/spdy/write_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698