Index: net/url_request/url_request_file_job_unittest.cc |
diff --git a/net/url_request/url_request_file_job_unittest.cc b/net/url_request/url_request_file_job_unittest.cc |
deleted file mode 100644 |
index 23ded74576470dd28d704281b29aaced0cc801e5..0000000000000000000000000000000000000000 |
--- a/net/url_request/url_request_file_job_unittest.cc |
+++ /dev/null |
@@ -1,269 +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 "net/url_request/url_request_file_job.h" |
- |
-#include "base/files/file_util.h" |
-#include "base/files/scoped_temp_dir.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/run_loop.h" |
-#include "base/strings/stringprintf.h" |
-#include "base/threading/sequenced_worker_pool.h" |
-#include "net/base/filename_util.h" |
-#include "net/base/net_util.h" |
-#include "net/url_request/url_request.h" |
-#include "net/url_request/url_request_test_util.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace net { |
- |
-namespace { |
- |
-// A URLRequestFileJob for testing OnSeekComplete / OnReadComplete callbacks. |
-class URLRequestFileJobWithCallbacks : public URLRequestFileJob { |
- public: |
- URLRequestFileJobWithCallbacks( |
- URLRequest* request, |
- NetworkDelegate* network_delegate, |
- const base::FilePath& file_path, |
- const scoped_refptr<base::TaskRunner>& file_task_runner) |
- : URLRequestFileJob(request, |
- network_delegate, |
- file_path, |
- file_task_runner), |
- seek_position_(0) { |
- } |
- |
- int64 seek_position() { return seek_position_; } |
- const std::vector<std::string>& data_chunks() { return data_chunks_; } |
- |
- protected: |
- ~URLRequestFileJobWithCallbacks() override {} |
- |
- void OnSeekComplete(int64 result) override { |
- ASSERT_EQ(seek_position_, 0); |
- seek_position_ = result; |
- } |
- |
- void OnReadComplete(IOBuffer* buf, int result) override { |
- data_chunks_.push_back(std::string(buf->data(), result)); |
- } |
- |
- int64 seek_position_; |
- std::vector<std::string> data_chunks_; |
-}; |
- |
-// A URLRequestJobFactory that will return URLRequestFileJobWithCallbacks |
-// instances for file:// scheme URLs. |
-class CallbacksJobFactory : public URLRequestJobFactory { |
- public: |
- class JobObserver { |
- public: |
- virtual void OnJobCreated(URLRequestFileJobWithCallbacks* job) = 0; |
- }; |
- |
- CallbacksJobFactory(const base::FilePath& path, JobObserver* observer) |
- : path_(path), observer_(observer) { |
- } |
- |
- ~CallbacksJobFactory() override {} |
- |
- URLRequestJob* MaybeCreateJobWithProtocolHandler( |
- const std::string& scheme, |
- URLRequest* request, |
- NetworkDelegate* network_delegate) const override { |
- URLRequestFileJobWithCallbacks* job = new URLRequestFileJobWithCallbacks( |
- request, |
- network_delegate, |
- path_, |
- base::MessageLoop::current()->message_loop_proxy()); |
- observer_->OnJobCreated(job); |
- return job; |
- } |
- |
- net::URLRequestJob* MaybeInterceptRedirect( |
- net::URLRequest* request, |
- net::NetworkDelegate* network_delegate, |
- const GURL& location) const override { |
- return nullptr; |
- } |
- |
- net::URLRequestJob* MaybeInterceptResponse( |
- net::URLRequest* request, |
- net::NetworkDelegate* network_delegate) const override { |
- return nullptr; |
- } |
- |
- bool IsHandledProtocol(const std::string& scheme) const override { |
- return scheme == "file"; |
- } |
- |
- bool IsHandledURL(const GURL& url) const override { |
- return IsHandledProtocol(url.scheme()); |
- } |
- |
- bool IsSafeRedirectTarget(const GURL& location) const override { |
- return false; |
- } |
- |
- private: |
- base::FilePath path_; |
- JobObserver* observer_; |
-}; |
- |
-// Helper function to create a file in |directory| filled with |
-// |content|. Returns true on succes and fills in |path| with the full path to |
-// the file. |
-bool CreateTempFileWithContent(const std::string& content, |
- const base::ScopedTempDir& directory, |
- base::FilePath* path) { |
- if (!directory.IsValid()) |
- return false; |
- |
- if (!base::CreateTemporaryFileInDir(directory.path(), path)) |
- return false; |
- |
- return base::WriteFile(*path, content.c_str(), content.length()); |
-} |
- |
-class JobObserverImpl : public CallbacksJobFactory::JobObserver { |
- public: |
- void OnJobCreated(URLRequestFileJobWithCallbacks* job) override { |
- jobs_.push_back(job); |
- } |
- |
- typedef std::vector<scoped_refptr<URLRequestFileJobWithCallbacks> > JobList; |
- |
- const JobList& jobs() { return jobs_; } |
- |
- protected: |
- JobList jobs_; |
-}; |
- |
-// A simple holder for start/end used in http range requests. |
-struct Range { |
- int start; |
- int end; |
- |
- Range() { |
- start = 0; |
- end = 0; |
- } |
- |
- Range(int start, int end) { |
- this->start = start; |
- this->end = end; |
- } |
-}; |
- |
-// A superclass for tests of the OnSeekComplete / OnReadComplete functions of |
-// URLRequestFileJob. |
-class URLRequestFileJobEventsTest : public testing::Test { |
- public: |
- URLRequestFileJobEventsTest(); |
- |
- protected: |
- // This creates a file with |content| as the contents, and then creates and |
- // runs a URLRequestFileJobWithCallbacks job to get the contents out of it, |
- // and makes sure that the callbacks observed the correct bytes. If a Range |
- // is provided, this function will add the appropriate Range http header to |
- // the request and verify that only the bytes in that range (inclusive) were |
- // observed. |
- void RunRequest(const std::string& content, const Range* range); |
- |
- JobObserverImpl observer_; |
- TestURLRequestContext context_; |
- TestDelegate delegate_; |
-}; |
- |
-URLRequestFileJobEventsTest::URLRequestFileJobEventsTest() {} |
- |
-void URLRequestFileJobEventsTest::RunRequest(const std::string& content, |
- const Range* range) { |
- base::ScopedTempDir directory; |
- ASSERT_TRUE(directory.CreateUniqueTempDir()); |
- base::FilePath path; |
- ASSERT_TRUE(CreateTempFileWithContent(content, directory, &path)); |
- CallbacksJobFactory factory(path, &observer_); |
- context_.set_job_factory(&factory); |
- |
- scoped_ptr<URLRequest> request(context_.CreateRequest( |
- FilePathToFileURL(path), DEFAULT_PRIORITY, &delegate_, NULL)); |
- if (range) { |
- ASSERT_GE(range->start, 0); |
- ASSERT_GE(range->end, 0); |
- ASSERT_LE(range->start, range->end); |
- ASSERT_LT(static_cast<unsigned int>(range->end), content.length()); |
- std::string range_value = |
- base::StringPrintf("bytes=%d-%d", range->start, range->end); |
- request->SetExtraRequestHeaderByName( |
- HttpRequestHeaders::kRange, range_value, true /*overwrite*/); |
- } |
- request->Start(); |
- |
- base::RunLoop loop; |
- loop.Run(); |
- |
- EXPECT_FALSE(delegate_.request_failed()); |
- int expected_length = |
- range ? (range->end - range->start + 1) : content.length(); |
- EXPECT_EQ(delegate_.bytes_received(), expected_length); |
- |
- std::string expected_content; |
- if (range) { |
- expected_content.insert(0, content, range->start, expected_length); |
- } else { |
- expected_content = content; |
- } |
- EXPECT_TRUE(delegate_.data_received() == expected_content); |
- |
- ASSERT_EQ(observer_.jobs().size(), 1u); |
- ASSERT_EQ(observer_.jobs().at(0)->seek_position(), range ? range->start : 0); |
- |
- std::string observed_content; |
- const std::vector<std::string>& chunks = |
- observer_.jobs().at(0)->data_chunks(); |
- for (std::vector<std::string>::const_iterator i = chunks.begin(); |
- i != chunks.end(); |
- ++i) { |
- observed_content.append(*i); |
- } |
- EXPECT_EQ(expected_content, observed_content); |
-} |
- |
-// Helper function to make a character array filled with |size| bytes of |
-// test content. |
-std::string MakeContentOfSize(int size) { |
- EXPECT_GE(size, 0); |
- std::string result; |
- result.reserve(size); |
- for (int i = 0; i < size; i++) { |
- result.append(1, static_cast<char>(i % 256)); |
- } |
- return result; |
-} |
- |
-TEST_F(URLRequestFileJobEventsTest, TinyFile) { |
- RunRequest(std::string("hello world"), NULL); |
-} |
- |
-TEST_F(URLRequestFileJobEventsTest, SmallFile) { |
- RunRequest(MakeContentOfSize(17 * 1024), NULL); |
-} |
- |
-TEST_F(URLRequestFileJobEventsTest, BigFile) { |
- RunRequest(MakeContentOfSize(3 * 1024 * 1024), NULL); |
-} |
- |
-TEST_F(URLRequestFileJobEventsTest, Range) { |
- // Use a 15KB content file and read a range chosen somewhat arbitrarily but |
- // not aligned on any likely page boundaries. |
- int size = 15 * 1024; |
- Range range(1701, (6 * 1024) + 3); |
- RunRequest(MakeContentOfSize(size), &range); |
-} |
- |
-} // namespace |
- |
-} // namespace net |