| Index: net/url_request/url_request_simple_job_unittest.cc
|
| diff --git a/net/url_request/url_request_simple_job_unittest.cc b/net/url_request/url_request_simple_job_unittest.cc
|
| deleted file mode 100644
|
| index 4be4c428912b37996fcf377aa79e663575fc86b4..0000000000000000000000000000000000000000
|
| --- a/net/url_request/url_request_simple_job_unittest.cc
|
| +++ /dev/null
|
| @@ -1,230 +0,0 @@
|
| -// Copyright 2014 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 "base/memory/scoped_ptr.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/strings/stringprintf.h"
|
| -#include "base/threading/sequenced_worker_pool.h"
|
| -#include "base/threading/worker_pool.h"
|
| -#include "net/base/request_priority.h"
|
| -#include "net/url_request/url_request_job.h"
|
| -#include "net/url_request/url_request_job_factory.h"
|
| -#include "net/url_request/url_request_job_factory_impl.h"
|
| -#include "net/url_request/url_request_simple_job.h"
|
| -#include "net/url_request/url_request_test_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -namespace net {
|
| -
|
| -namespace {
|
| -
|
| -const char kTestData[] = "Huge data array";
|
| -const int kRangeFirstPosition = 5;
|
| -const int kRangeLastPosition = 8;
|
| -static_assert(kRangeFirstPosition > 0 &&
|
| - kRangeFirstPosition < kRangeLastPosition &&
|
| - kRangeLastPosition <
|
| - static_cast<int>(arraysize(kTestData) - 1),
|
| - "invalid range");
|
| -
|
| -// This function does nothing.
|
| -void DoNothing() {
|
| -}
|
| -
|
| -class MockSimpleJob : public URLRequestSimpleJob {
|
| - public:
|
| - MockSimpleJob(URLRequest* request,
|
| - NetworkDelegate* network_delegate,
|
| - scoped_refptr<base::TaskRunner> task_runner,
|
| - std::string data)
|
| - : URLRequestSimpleJob(request, network_delegate),
|
| - data_(data),
|
| - task_runner_(task_runner) {}
|
| -
|
| - protected:
|
| - // URLRequestSimpleJob implementation:
|
| - int GetData(std::string* mime_type,
|
| - std::string* charset,
|
| - std::string* data,
|
| - const CompletionCallback& callback) const override {
|
| - mime_type->assign("text/plain");
|
| - charset->assign("US-ASCII");
|
| - data->assign(data_);
|
| - return OK;
|
| - }
|
| -
|
| - base::TaskRunner* GetTaskRunner() const override {
|
| - return task_runner_.get();
|
| - }
|
| -
|
| - private:
|
| - ~MockSimpleJob() override {}
|
| -
|
| - const std::string data_;
|
| -
|
| - scoped_refptr<base::TaskRunner> task_runner_;
|
| -
|
| - DISALLOW_COPY_AND_ASSIGN(MockSimpleJob);
|
| -};
|
| -
|
| -class CancelURLRequestDelegate : public net::URLRequest::Delegate {
|
| - public:
|
| - explicit CancelURLRequestDelegate()
|
| - : buf_(new IOBuffer(kBufferSize)), run_loop_(new base::RunLoop) {}
|
| -
|
| - void OnResponseStarted(net::URLRequest* request) override {
|
| - int bytes_read = 0;
|
| - EXPECT_FALSE(request->Read(buf_.get(), kBufferSize, &bytes_read));
|
| - EXPECT_TRUE(request->status().is_io_pending());
|
| - request->Cancel();
|
| - run_loop_->Quit();
|
| - }
|
| -
|
| - void OnReadCompleted(URLRequest* request, int bytes_read) override {}
|
| -
|
| - void WaitUntilHeadersReceived() const { run_loop_->Run(); }
|
| -
|
| - private:
|
| - static const int kBufferSize = 4096;
|
| - scoped_refptr<IOBuffer> buf_;
|
| - scoped_ptr<base::RunLoop> run_loop_;
|
| -};
|
| -
|
| -class SimpleJobProtocolHandler :
|
| - public URLRequestJobFactory::ProtocolHandler {
|
| - public:
|
| - SimpleJobProtocolHandler(scoped_refptr<base::TaskRunner> task_runner)
|
| - : task_runner_(task_runner) {}
|
| - URLRequestJob* MaybeCreateJob(
|
| - URLRequest* request,
|
| - NetworkDelegate* network_delegate) const override {
|
| - if (request->url().spec() == "data:empty")
|
| - return new MockSimpleJob(request, network_delegate, task_runner_, "");
|
| - return new MockSimpleJob(request, network_delegate, task_runner_,
|
| - kTestData);
|
| - }
|
| -
|
| - private:
|
| - scoped_refptr<base::TaskRunner> task_runner_;
|
| -
|
| - ~SimpleJobProtocolHandler() override {}
|
| -};
|
| -
|
| -class URLRequestSimpleJobTest : public ::testing::Test {
|
| - public:
|
| - URLRequestSimpleJobTest()
|
| - : worker_pool_(
|
| - new base::SequencedWorkerPool(1, "URLRequestSimpleJobTest")),
|
| - task_runner_(worker_pool_->GetSequencedTaskRunnerWithShutdownBehavior(
|
| - worker_pool_->GetSequenceToken(),
|
| - base::SequencedWorkerPool::SKIP_ON_SHUTDOWN)),
|
| - context_(true) {
|
| - job_factory_.SetProtocolHandler("data",
|
| - new SimpleJobProtocolHandler(task_runner_));
|
| - context_.set_job_factory(&job_factory_);
|
| - context_.Init();
|
| -
|
| - request_ = context_.CreateRequest(
|
| - GURL("data:test"), DEFAULT_PRIORITY, &delegate_, NULL);
|
| - }
|
| -
|
| - ~URLRequestSimpleJobTest() override { worker_pool_->Shutdown(); }
|
| -
|
| - void StartRequest(const HttpRequestHeaders* headers) {
|
| - if (headers)
|
| - request_->SetExtraRequestHeaders(*headers);
|
| - request_->Start();
|
| -
|
| - EXPECT_TRUE(request_->is_pending());
|
| - base::RunLoop().Run();
|
| - EXPECT_FALSE(request_->is_pending());
|
| - }
|
| -
|
| - void TearDown() override { worker_pool_->Shutdown(); }
|
| -
|
| - protected:
|
| - scoped_refptr<base::SequencedWorkerPool> worker_pool_;
|
| - scoped_refptr<base::SequencedTaskRunner> task_runner_;
|
| - TestURLRequestContext context_;
|
| - URLRequestJobFactoryImpl job_factory_;
|
| - TestDelegate delegate_;
|
| - scoped_ptr<URLRequest> request_;
|
| -};
|
| -
|
| -} // namespace
|
| -
|
| -TEST_F(URLRequestSimpleJobTest, SimpleRequest) {
|
| - StartRequest(NULL);
|
| - ASSERT_TRUE(request_->status().is_success());
|
| - EXPECT_EQ(kTestData, delegate_.data_received());
|
| -}
|
| -
|
| -TEST_F(URLRequestSimpleJobTest, RangeRequest) {
|
| - const std::string kExpectedBody = std::string(
|
| - kTestData + kRangeFirstPosition, kTestData + kRangeLastPosition + 1);
|
| - HttpRequestHeaders headers;
|
| - headers.SetHeader(
|
| - HttpRequestHeaders::kRange,
|
| - HttpByteRange::Bounded(kRangeFirstPosition, kRangeLastPosition)
|
| - .GetHeaderValue());
|
| -
|
| - StartRequest(&headers);
|
| -
|
| - ASSERT_TRUE(request_->status().is_success());
|
| - EXPECT_EQ(kExpectedBody, delegate_.data_received());
|
| -}
|
| -
|
| -TEST_F(URLRequestSimpleJobTest, MultipleRangeRequest) {
|
| - HttpRequestHeaders headers;
|
| - int middle_pos = (kRangeFirstPosition + kRangeLastPosition)/2;
|
| - std::string range = base::StringPrintf("bytes=%d-%d,%d-%d",
|
| - kRangeFirstPosition,
|
| - middle_pos,
|
| - middle_pos + 1,
|
| - kRangeLastPosition);
|
| - headers.SetHeader(HttpRequestHeaders::kRange, range);
|
| -
|
| - StartRequest(&headers);
|
| -
|
| - EXPECT_TRUE(delegate_.request_failed());
|
| - EXPECT_EQ(ERR_REQUEST_RANGE_NOT_SATISFIABLE, request_->status().error());
|
| -}
|
| -
|
| -TEST_F(URLRequestSimpleJobTest, InvalidRangeRequest) {
|
| - HttpRequestHeaders headers;
|
| - std::string range = base::StringPrintf(
|
| - "bytes=%d-%d", kRangeLastPosition, kRangeFirstPosition);
|
| - headers.SetHeader(HttpRequestHeaders::kRange, range);
|
| -
|
| - StartRequest(&headers);
|
| -
|
| - ASSERT_TRUE(request_->status().is_success());
|
| - EXPECT_EQ(kTestData, delegate_.data_received());
|
| -}
|
| -
|
| -TEST_F(URLRequestSimpleJobTest, EmptyDataRequest) {
|
| - request_ = context_.CreateRequest(GURL("data:empty"), DEFAULT_PRIORITY,
|
| - &delegate_, NULL);
|
| - StartRequest(nullptr);
|
| - ASSERT_TRUE(request_->status().is_success());
|
| - EXPECT_EQ("", delegate_.data_received());
|
| -}
|
| -
|
| -TEST_F(URLRequestSimpleJobTest, CancelAfterFirstRead) {
|
| - scoped_ptr<CancelURLRequestDelegate> cancel_delegate(
|
| - new CancelURLRequestDelegate());
|
| - request_ = context_.CreateRequest(GURL("data:cancel"), DEFAULT_PRIORITY,
|
| - cancel_delegate.get(), NULL);
|
| - request_->Start();
|
| - cancel_delegate->WaitUntilHeadersReceived();
|
| -
|
| - // Feed a dummy task to the SequencedTaskRunner to make sure that the
|
| - // callbacks which are invoked in ReadRawData have completed safely.
|
| - base::RunLoop run_loop;
|
| - EXPECT_TRUE(task_runner_->PostTaskAndReply(FROM_HERE, base::Bind(&DoNothing),
|
| - run_loop.QuitClosure()));
|
| - run_loop.Run();
|
| -}
|
| -
|
| -} // namespace net
|
|
|