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

Side by Side Diff: storage/browser/blob/blob_url_request_job_unittest.cc

Issue 2815743002: Move a couple of blob tests next to the files they cover. (Closed)
Patch Set: Fix gn check, take 2. 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include <limits> 7 #include <limits>
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/files/file_path.h" 11 #include "base/files/file_path.h"
12 #include "base/files/file_util.h" 12 #include "base/files/file_util.h"
13 #include "base/files/scoped_temp_dir.h" 13 #include "base/files/scoped_temp_dir.h"
14 #include "base/macros.h" 14 #include "base/macros.h"
15 #include "base/memory/ptr_util.h" 15 #include "base/memory/ptr_util.h"
16 #include "base/memory/ref_counted.h" 16 #include "base/memory/ref_counted.h"
17 #include "base/numerics/safe_conversions.h" 17 #include "base/numerics/safe_conversions.h"
18 #include "base/run_loop.h" 18 #include "base/run_loop.h"
19 #include "base/threading/thread_task_runner_handle.h" 19 #include "base/threading/thread_task_runner_handle.h"
20 #include "base/time/time.h" 20 #include "base/time/time.h"
21 #include "content/public/test/async_file_test_helper.h"
22 #include "content/public/test/test_file_system_context.h"
23 #include "net/base/net_errors.h" 21 #include "net/base/net_errors.h"
24 #include "net/base/request_priority.h" 22 #include "net/base/request_priority.h"
25 #include "net/base/test_completion_callback.h" 23 #include "net/base/test_completion_callback.h"
26 #include "net/disk_cache/disk_cache.h" 24 #include "net/disk_cache/disk_cache.h"
27 #include "net/http/http_byte_range.h" 25 #include "net/http/http_byte_range.h"
28 #include "net/http/http_request_headers.h" 26 #include "net/http/http_request_headers.h"
29 #include "net/http/http_response_headers.h" 27 #include "net/http/http_response_headers.h"
30 #include "net/url_request/url_request.h" 28 #include "net/url_request/url_request.h"
31 #include "net/url_request/url_request_context.h" 29 #include "net/url_request/url_request_context.h"
32 #include "net/url_request/url_request_job_factory_impl.h" 30 #include "net/url_request/url_request_job_factory_impl.h"
33 #include "net/url_request/url_request_test_util.h" 31 #include "net/url_request/url_request_test_util.h"
34 #include "storage/browser/blob/blob_data_builder.h" 32 #include "storage/browser/blob/blob_data_builder.h"
35 #include "storage/browser/blob/blob_data_handle.h" 33 #include "storage/browser/blob/blob_data_handle.h"
36 #include "storage/browser/blob/blob_data_snapshot.h" 34 #include "storage/browser/blob/blob_data_snapshot.h"
37 #include "storage/browser/blob/blob_storage_context.h" 35 #include "storage/browser/blob/blob_storage_context.h"
38 #include "storage/browser/blob/blob_url_request_job.h" 36 #include "storage/browser/blob/blob_url_request_job.h"
39 #include "storage/browser/fileapi/file_system_context.h" 37 #include "storage/browser/fileapi/file_system_context.h"
40 #include "storage/browser/fileapi/file_system_operation_context.h" 38 #include "storage/browser/fileapi/file_system_operation_context.h"
41 #include "storage/browser/fileapi/file_system_url.h" 39 #include "storage/browser/fileapi/file_system_url.h"
40 #include "storage/browser/test/async_file_test_helper.h"
41 #include "storage/browser/test/test_file_system_context.h"
42 #include "testing/gtest/include/gtest/gtest.h" 42 #include "testing/gtest/include/gtest/gtest.h"
43 43
44 using storage::BlobDataSnapshot; 44 using storage::BlobDataSnapshot;
45 using storage::BlobDataBuilder; 45 using storage::BlobDataBuilder;
46 using storage::BlobURLRequestJob; 46 using storage::BlobURLRequestJob;
47 47
48 namespace content { 48 namespace content {
49 49
50 namespace { 50 namespace {
51 51
(...skipping 22 matching lines...) Expand all
74 // Our disk cache tests don't need a real data handle since the tests themselves 74 // Our disk cache tests don't need a real data handle since the tests themselves
75 // scope the disk cache and entries. 75 // scope the disk cache and entries.
76 class EmptyDataHandle : public storage::BlobDataBuilder::DataHandle { 76 class EmptyDataHandle : public storage::BlobDataBuilder::DataHandle {
77 private: 77 private:
78 ~EmptyDataHandle() override {} 78 ~EmptyDataHandle() override {}
79 }; 79 };
80 80
81 std::unique_ptr<disk_cache::Backend> CreateInMemoryDiskCache() { 81 std::unique_ptr<disk_cache::Backend> CreateInMemoryDiskCache() {
82 std::unique_ptr<disk_cache::Backend> cache; 82 std::unique_ptr<disk_cache::Backend> cache;
83 net::TestCompletionCallback callback; 83 net::TestCompletionCallback callback;
84 int rv = disk_cache::CreateCacheBackend(net::MEMORY_CACHE, 84 int rv = disk_cache::CreateCacheBackend(
85 net::CACHE_BACKEND_DEFAULT, 85 net::MEMORY_CACHE, net::CACHE_BACKEND_DEFAULT, base::FilePath(), 0, false,
86 base::FilePath(), 0, 86 nullptr, nullptr, &cache, callback.callback());
87 false, nullptr, nullptr, &cache,
88 callback.callback());
89 EXPECT_EQ(net::OK, callback.GetResult(rv)); 87 EXPECT_EQ(net::OK, callback.GetResult(rv));
90 88
91 return cache; 89 return cache;
92 } 90 }
93 91
94 disk_cache::ScopedEntryPtr CreateDiskCacheEntry(disk_cache::Backend* cache, 92 disk_cache::ScopedEntryPtr CreateDiskCacheEntry(disk_cache::Backend* cache,
95 const char* key, 93 const char* key,
96 const std::string& data) { 94 const std::string& data) {
97 disk_cache::Entry* temp_entry = nullptr; 95 disk_cache::Entry* temp_entry = nullptr;
98 net::TestCompletionCallback callback; 96 net::TestCompletionCallback callback;
(...skipping 22 matching lines...) Expand all
121 iobuffer->size(), callback.callback(), false); 119 iobuffer->size(), callback.callback(), false);
122 EXPECT_EQ(static_cast<int>(side_data.size()), callback.GetResult(rv)); 120 EXPECT_EQ(static_cast<int>(side_data.size()), callback.GetResult(rv));
123 return entry; 121 return entry;
124 } 122 }
125 123
126 } // namespace 124 } // namespace
127 125
128 class BlobURLRequestJobTest : public testing::Test { 126 class BlobURLRequestJobTest : public testing::Test {
129 public: 127 public:
130 // A simple ProtocolHandler implementation to create BlobURLRequestJob. 128 // A simple ProtocolHandler implementation to create BlobURLRequestJob.
131 class MockProtocolHandler : 129 class MockProtocolHandler
132 public net::URLRequestJobFactory::ProtocolHandler { 130 : public net::URLRequestJobFactory::ProtocolHandler {
133 public: 131 public:
134 MockProtocolHandler(BlobURLRequestJobTest* test) : test_(test) {} 132 MockProtocolHandler(BlobURLRequestJobTest* test) : test_(test) {}
135 133
136 // net::URLRequestJobFactory::ProtocolHandler override. 134 // net::URLRequestJobFactory::ProtocolHandler override.
137 net::URLRequestJob* MaybeCreateJob( 135 net::URLRequestJob* MaybeCreateJob(
138 net::URLRequest* request, 136 net::URLRequest* request,
139 net::NetworkDelegate* network_delegate) const override { 137 net::NetworkDelegate* network_delegate) const override {
140 return new BlobURLRequestJob(request, network_delegate, 138 return new BlobURLRequestJob(request, network_delegate,
141 test_->GetHandleFromBuilder(), 139 test_->GetHandleFromBuilder(),
142 test_->file_system_context_.get(), 140 test_->file_system_context_.get(),
143 base::ThreadTaskRunnerHandle::Get().get()); 141 base::ThreadTaskRunnerHandle::Get().get());
144 } 142 }
145 143
146 private: 144 private:
147 BlobURLRequestJobTest* test_; 145 BlobURLRequestJobTest* test_;
148 }; 146 };
149 147
150 BlobURLRequestJobTest() 148 BlobURLRequestJobTest()
151 : blob_data_(new BlobDataBuilder("uuid")), expected_status_code_(0) {} 149 : blob_data_(new BlobDataBuilder("uuid")), expected_status_code_(0) {}
152 150
153 void SetUp() override { 151 void SetUp() override {
154 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 152 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
155 153
156 temp_file1_ = temp_dir_.GetPath().AppendASCII("BlobFile1.dat"); 154 temp_file1_ = temp_dir_.GetPath().AppendASCII("BlobFile1.dat");
157 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData1) - 1), 155 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData1) - 1),
158 base::WriteFile(temp_file1_, kTestFileData1, 156 base::WriteFile(temp_file1_, kTestFileData1,
159 arraysize(kTestFileData1) - 1)); 157 arraysize(kTestFileData1) - 1));
160 base::File::Info file_info1; 158 base::File::Info file_info1;
161 base::GetFileInfo(temp_file1_, &file_info1); 159 base::GetFileInfo(temp_file1_, &file_info1);
162 temp_file_modification_time1_ = file_info1.last_modified; 160 temp_file_modification_time1_ = file_info1.last_modified;
163 161
164 temp_file2_ = temp_dir_.GetPath().AppendASCII("BlobFile2.dat"); 162 temp_file2_ = temp_dir_.GetPath().AppendASCII("BlobFile2.dat");
165 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData2) - 1), 163 ASSERT_EQ(static_cast<int>(arraysize(kTestFileData2) - 1),
166 base::WriteFile(temp_file2_, kTestFileData2, 164 base::WriteFile(temp_file2_, kTestFileData2,
167 arraysize(kTestFileData2) - 1)); 165 arraysize(kTestFileData2) - 1));
168 base::File::Info file_info2; 166 base::File::Info file_info2;
169 base::GetFileInfo(temp_file2_, &file_info2); 167 base::GetFileInfo(temp_file2_, &file_info2);
170 temp_file_modification_time2_ = file_info2.last_modified; 168 temp_file_modification_time2_ = file_info2.last_modified;
171 169
172 disk_cache_backend_ = CreateInMemoryDiskCache(); 170 disk_cache_backend_ = CreateInMemoryDiskCache();
173 disk_cache_entry_ = CreateDiskCacheEntry( 171 disk_cache_entry_ = CreateDiskCacheEntry(
174 disk_cache_backend_.get(), kTestDiskCacheKey1, kTestDiskCacheData1); 172 disk_cache_backend_.get(), kTestDiskCacheKey1, kTestDiskCacheData1);
175 173
176 url_request_job_factory_.SetProtocolHandler( 174 url_request_job_factory_.SetProtocolHandler(
177 "blob", base::MakeUnique<MockProtocolHandler>(this)); 175 "blob", base::MakeUnique<MockProtocolHandler>(this));
178 url_request_context_.set_job_factory(&url_request_job_factory_); 176 url_request_context_.set_job_factory(&url_request_job_factory_);
179 } 177 }
180 178
181 void TearDown() override { 179 void TearDown() override {
182 blob_handle_.reset(); 180 blob_handle_.reset();
183 request_.reset(); 181 request_.reset();
184 // Clean up for ASAN 182 // Clean up for ASAN
185 base::RunLoop run_loop; 183 base::RunLoop run_loop;
186 run_loop.RunUntilIdle(); 184 run_loop.RunUntilIdle();
187 } 185 }
188 186
189 void SetUpFileSystem() { 187 void SetUpFileSystem() {
190 // Prepare file system. 188 // Prepare file system.
191 file_system_context_ = 189 file_system_context_ =
192 CreateFileSystemContextForTesting(NULL, temp_dir_.GetPath()); 190 CreateFileSystemContextForTesting(NULL, temp_dir_.GetPath());
193 191
194 file_system_context_->OpenFileSystem( 192 file_system_context_->OpenFileSystem(
195 GURL(kFileSystemURLOrigin), 193 GURL(kFileSystemURLOrigin), kFileSystemType,
196 kFileSystemType,
197 storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT, 194 storage::OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
198 base::Bind(&BlobURLRequestJobTest::OnValidateFileSystem, 195 base::Bind(&BlobURLRequestJobTest::OnValidateFileSystem,
199 base::Unretained(this))); 196 base::Unretained(this)));
200 base::RunLoop().RunUntilIdle(); 197 base::RunLoop().RunUntilIdle();
201 ASSERT_TRUE(file_system_root_url_.is_valid()); 198 ASSERT_TRUE(file_system_root_url_.is_valid());
202 199
203 // Prepare files on file system. 200 // Prepare files on file system.
204 const char kFilename1[] = "FileSystemFile1.dat"; 201 const char kFilename1[] = "FileSystemFile1.dat";
205 temp_file_system_file1_ = GetFileSystemURL(kFilename1); 202 temp_file_system_file1_ = GetFileSystemURL(kFilename1);
206 WriteFileSystemFile(kFilename1, kTestFileSystemFileData1, 203 WriteFileSystemFile(kFilename1, kTestFileSystemFileData1,
207 arraysize(kTestFileSystemFileData1) - 1, 204 arraysize(kTestFileSystemFileData1) - 1,
208 &temp_file_system_file_modification_time1_); 205 &temp_file_system_file_modification_time1_);
209 const char kFilename2[] = "FileSystemFile2.dat"; 206 const char kFilename2[] = "FileSystemFile2.dat";
210 temp_file_system_file2_ = GetFileSystemURL(kFilename2); 207 temp_file_system_file2_ = GetFileSystemURL(kFilename2);
211 WriteFileSystemFile(kFilename2, kTestFileSystemFileData2, 208 WriteFileSystemFile(kFilename2, kTestFileSystemFileData2,
212 arraysize(kTestFileSystemFileData2) - 1, 209 arraysize(kTestFileSystemFileData2) - 1,
213 &temp_file_system_file_modification_time2_); 210 &temp_file_system_file_modification_time2_);
214 } 211 }
215 212
216 GURL GetFileSystemURL(const std::string& filename) { 213 GURL GetFileSystemURL(const std::string& filename) {
217 return GURL(file_system_root_url_.spec() + filename); 214 return GURL(file_system_root_url_.spec() + filename);
218 } 215 }
219 216
220 void WriteFileSystemFile(const std::string& filename, 217 void WriteFileSystemFile(const std::string& filename,
221 const char* buf, int buf_size, 218 const char* buf,
219 int buf_size,
222 base::Time* modification_time) { 220 base::Time* modification_time) {
223 storage::FileSystemURL url = 221 storage::FileSystemURL url =
224 file_system_context_->CreateCrackedFileSystemURL( 222 file_system_context_->CreateCrackedFileSystemURL(
225 GURL(kFileSystemURLOrigin), 223 GURL(kFileSystemURLOrigin), kFileSystemType,
226 kFileSystemType,
227 base::FilePath().AppendASCII(filename)); 224 base::FilePath().AppendASCII(filename));
228 225
229 ASSERT_EQ(base::File::FILE_OK, 226 ASSERT_EQ(base::File::FILE_OK,
230 content::AsyncFileTestHelper::CreateFileWithData( 227 content::AsyncFileTestHelper::CreateFileWithData(
231 file_system_context_.get(), url, buf, buf_size)); 228 file_system_context_.get(), url, buf, buf_size));
232 229
233 base::File::Info file_info; 230 base::File::Info file_info;
234 ASSERT_EQ(base::File::FILE_OK, 231 ASSERT_EQ(base::File::FILE_OK,
235 content::AsyncFileTestHelper::GetMetadata( 232 content::AsyncFileTestHelper::GetMetadata(
236 file_system_context_.get(), url, &file_info)); 233 file_system_context_.get(), url, &file_info));
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
371 TestSuccessNonrangeRequest(kTestFileData1, arraysize(kTestFileData1) - 1); 368 TestSuccessNonrangeRequest(kTestFileData1, arraysize(kTestFileData1) - 1);
372 } 369 }
373 370
374 TEST_F(BlobURLRequestJobTest, TestGetLargeFileRequest) { 371 TEST_F(BlobURLRequestJobTest, TestGetLargeFileRequest) {
375 base::FilePath large_temp_file = 372 base::FilePath large_temp_file =
376 temp_dir_.GetPath().AppendASCII("LargeBlob.dat"); 373 temp_dir_.GetPath().AppendASCII("LargeBlob.dat");
377 std::string large_data; 374 std::string large_data;
378 large_data.reserve(kBufferSize * 5); 375 large_data.reserve(kBufferSize * 5);
379 for (int i = 0; i < kBufferSize * 5; ++i) 376 for (int i = 0; i < kBufferSize * 5; ++i)
380 large_data.append(1, static_cast<char>(i % 256)); 377 large_data.append(1, static_cast<char>(i % 256));
381 ASSERT_EQ(static_cast<int>(large_data.size()), 378 ASSERT_EQ(
382 base::WriteFile(large_temp_file, large_data.data(), 379 static_cast<int>(large_data.size()),
383 large_data.size())); 380 base::WriteFile(large_temp_file, large_data.data(), large_data.size()));
384 blob_data_->AppendFile(large_temp_file, 0, 381 blob_data_->AppendFile(large_temp_file, 0,
385 std::numeric_limits<uint64_t>::max(), base::Time()); 382 std::numeric_limits<uint64_t>::max(), base::Time());
386 TestSuccessNonrangeRequest(large_data, large_data.size()); 383 TestSuccessNonrangeRequest(large_data, large_data.size());
387 } 384 }
388 385
389 TEST_F(BlobURLRequestJobTest, TestGetNonExistentFileRequest) { 386 TEST_F(BlobURLRequestJobTest, TestGetNonExistentFileRequest) {
390 base::FilePath non_existent_file = 387 base::FilePath non_existent_file =
391 temp_file1_.InsertBeforeExtension(FILE_PATH_LITERAL("-na")); 388 temp_file1_.InsertBeforeExtension(FILE_PATH_LITERAL("-na"));
392 blob_data_->AppendFile(non_existent_file, 0, 389 blob_data_->AppendFile(non_existent_file, 0,
393 std::numeric_limits<uint64_t>::max(), base::Time()); 390 std::numeric_limits<uint64_t>::max(), base::Time());
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
443 TEST_F(BlobURLRequestJobTest, TestGetInvalidFileSystemFileRequest) { 440 TEST_F(BlobURLRequestJobTest, TestGetInvalidFileSystemFileRequest) {
444 SetUpFileSystem(); 441 SetUpFileSystem();
445 GURL invalid_file; 442 GURL invalid_file;
446 blob_data_->AppendFileSystemFile( 443 blob_data_->AppendFileSystemFile(
447 invalid_file, 0, std::numeric_limits<uint64_t>::max(), base::Time()); 444 invalid_file, 0, std::numeric_limits<uint64_t>::max(), base::Time());
448 TestErrorRequest(500); 445 TestErrorRequest(500);
449 } 446 }
450 447
451 TEST_F(BlobURLRequestJobTest, TestGetChangedFileSystemFileRequest) { 448 TEST_F(BlobURLRequestJobTest, TestGetChangedFileSystemFileRequest) {
452 SetUpFileSystem(); 449 SetUpFileSystem();
453 base::Time old_time = 450 base::Time old_time = temp_file_system_file_modification_time1_ -
454 temp_file_system_file_modification_time1_ - 451 base::TimeDelta::FromSeconds(10);
455 base::TimeDelta::FromSeconds(10);
456 blob_data_->AppendFileSystemFile(temp_file_system_file1_, 0, 3, old_time); 452 blob_data_->AppendFileSystemFile(temp_file_system_file1_, 0, 3, old_time);
457 TestErrorRequest(404); 453 TestErrorRequest(404);
458 } 454 }
459 455
460 TEST_F(BlobURLRequestJobTest, TestGetSlicedFileSystemFileRequest) { 456 TEST_F(BlobURLRequestJobTest, TestGetSlicedFileSystemFileRequest) {
461 SetUpFileSystem(); 457 SetUpFileSystem();
462 blob_data_->AppendFileSystemFile(temp_file_system_file1_, 2, 4, 458 blob_data_->AppendFileSystemFile(temp_file_system_file1_, 2, 4,
463 temp_file_system_file_modification_time1_); 459 temp_file_system_file_modification_time1_);
464 std::string result(kTestFileSystemFileData1 + 2, 4); 460 std::string result(kTestFileSystemFileData1 + 2, 4);
465 TestSuccessNonrangeRequest(result, 4); 461 TestSuccessNonrangeRequest(result, 4);
466 } 462 }
467 463
468 TEST_F(BlobURLRequestJobTest, TestGetSimpleDiskCacheRequest) { 464 TEST_F(BlobURLRequestJobTest, TestGetSimpleDiskCacheRequest) {
469 blob_data_->AppendDiskCacheEntry(new EmptyDataHandle(), 465 blob_data_->AppendDiskCacheEntry(new EmptyDataHandle(),
470 disk_cache_entry_.get(), 466 disk_cache_entry_.get(),
471 kTestDiskCacheStreamIndex); 467 kTestDiskCacheStreamIndex);
472 TestSuccessNonrangeRequest(kTestDiskCacheData1, 468 TestSuccessNonrangeRequest(kTestDiskCacheData1,
473 arraysize(kTestDiskCacheData1) - 1); 469 arraysize(kTestDiskCacheData1) - 1);
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 EXPECT_FALSE(request_->response_info().metadata); 599 EXPECT_FALSE(request_->response_info().metadata);
604 } 600 }
605 601
606 TEST_F(BlobURLRequestJobTest, BrokenBlob) { 602 TEST_F(BlobURLRequestJobTest, BrokenBlob) {
607 blob_handle_ = blob_context_.AddBrokenBlob( 603 blob_handle_ = blob_context_.AddBrokenBlob(
608 "uuid", "", "", storage::BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS); 604 "uuid", "", "", storage::BlobStatus::ERR_INVALID_CONSTRUCTION_ARGUMENTS);
609 TestErrorRequest(500); 605 TestErrorRequest(500);
610 } 606 }
611 607
612 } // namespace content 608 } // namespace content
OLDNEW
« no previous file with comments | « storage/browser/blob/blob_reader_unittest.cc ('k') | storage/browser/test/async_file_test_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698