Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "base/files/file_util.h" | 5 #include "base/files/file_util.h" |
| 6 #include "base/rand_util.h" | 6 #include "base/rand_util.h" |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "base/strings/stringprintf.h" | 8 #include "base/strings/stringprintf.h" |
| 9 #include "mojo/public/cpp/application/application_impl.h" | 9 #include "mojo/public/cpp/application/application_impl.h" |
| 10 #include "mojo/public/cpp/application/application_test_base.h" | 10 #include "mojo/public/cpp/application/application_test_base.h" |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 44 | 44 |
| 45 HttpHeaderPtr RandomEtagHeader() { | 45 HttpHeaderPtr RandomEtagHeader() { |
| 46 auto etag_header = HttpHeader::New(); | 46 auto etag_header = HttpHeader::New(); |
| 47 etag_header->name = "ETag"; | 47 etag_header->name = "ETag"; |
| 48 etag_header->value = base::StringPrintf("%f", base::RandDouble()); | 48 etag_header->value = base::StringPrintf("%f", base::RandDouble()); |
| 49 return etag_header; | 49 return etag_header; |
| 50 } | 50 } |
| 51 | 51 |
| 52 } // namespace | 52 } // namespace |
| 53 | 53 |
| 54 TEST_F(URLResponseDiskCacheAppTest, GetFile) { | 54 TEST_F(URLResponseDiskCacheAppTest, UpdateAndGet) { |
|
ppi
2015/09/08 15:46:26
Should we have some tests for the new methods too?
qsr
2015/09/11 15:47:57
It is extremely hard to do. Update is completely a
| |
| 55 URLResponsePtr url_response = mojo::URLResponse::New(); | 55 URLResponsePtr url_response = mojo::URLResponse::New(); |
| 56 url_response->url = "http://www.example.com/1"; | 56 url_response->url = "http://www.example.com/1"; |
| 57 url_response->headers.push_back(RandomEtagHeader()); | 57 url_response->headers.push_back(RandomEtagHeader()); |
| 58 DataPipe pipe; | 58 DataPipe pipe; |
| 59 std::string content = base::RandBytesAsString(32); | 59 std::string content = base::RandBytesAsString(32); |
| 60 uint32_t num_bytes = content.size(); | 60 uint32_t num_bytes = content.size(); |
| 61 ASSERT_EQ(MOJO_RESULT_OK, | 61 ASSERT_EQ(MOJO_RESULT_OK, |
| 62 WriteDataRaw(pipe.producer_handle.get(), content.c_str(), | 62 WriteDataRaw(pipe.producer_handle.get(), content.c_str(), |
| 63 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 63 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 64 ASSERT_EQ(content.size(), num_bytes); | 64 ASSERT_EQ(content.size(), num_bytes); |
| 65 pipe.producer_handle.reset(); | 65 pipe.producer_handle.reset(); |
| 66 url_response->body = pipe.consumer_handle.Pass(); | 66 url_response->body = pipe.consumer_handle.Pass(); |
| 67 base::FilePath file; | 67 base::FilePath file; |
| 68 base::FilePath cache_dir; | 68 base::FilePath cache_dir; |
| 69 url_response_disk_cache_->GetFile( | 69 url_response_disk_cache_->UpdateAndGet( |
| 70 url_response.Pass(), | 70 url_response.Pass(), |
| 71 [&file, &cache_dir](Array<uint8_t> received_file_path, | 71 [&file, &cache_dir](Array<uint8_t> received_file_path, |
| 72 Array<uint8_t> received_cache_dir_path) { | 72 Array<uint8_t> received_cache_dir_path) { |
| 73 file = toPath(received_file_path.Pass()); | 73 file = toPath(received_file_path.Pass()); |
| 74 cache_dir = toPath(received_cache_dir_path.Pass()); | 74 cache_dir = toPath(received_cache_dir_path.Pass()); |
| 75 }); | 75 }); |
| 76 url_response_disk_cache_.WaitForIncomingResponse(); | 76 url_response_disk_cache_.WaitForIncomingResponse(); |
| 77 ASSERT_FALSE(file.empty()); | 77 ASSERT_FALSE(file.empty()); |
| 78 std::string received_content; | 78 std::string received_content; |
| 79 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); | 79 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); |
| 80 EXPECT_EQ(content, received_content); | 80 EXPECT_EQ(content, received_content); |
| 81 } | 81 } |
| 82 | 82 |
| 83 TEST_F(URLResponseDiskCacheAppTest, GetExtractedContent) { | 83 TEST_F(URLResponseDiskCacheAppTest, UpdateAndGetExtracted) { |
| 84 URLResponsePtr url_response = mojo::URLResponse::New(); | 84 URLResponsePtr url_response = mojo::URLResponse::New(); |
| 85 url_response->url = "http://www.example.com/2"; | 85 url_response->url = "http://www.example.com/2"; |
| 86 url_response->headers.push_back(RandomEtagHeader()); | 86 url_response->headers.push_back(RandomEtagHeader()); |
| 87 DataPipe pipe; | 87 DataPipe pipe; |
| 88 std::string content = base::RandBytesAsString(32); | 88 std::string content = base::RandBytesAsString(32); |
| 89 uint32_t num_bytes = kTestData.size; | 89 uint32_t num_bytes = kTestData.size; |
| 90 ASSERT_EQ(MOJO_RESULT_OK, | 90 ASSERT_EQ(MOJO_RESULT_OK, |
| 91 WriteDataRaw(pipe.producer_handle.get(), kTestData.data, &num_bytes, | 91 WriteDataRaw(pipe.producer_handle.get(), kTestData.data, &num_bytes, |
| 92 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 92 MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 93 ASSERT_EQ(kTestData.size, num_bytes); | 93 ASSERT_EQ(kTestData.size, num_bytes); |
| 94 pipe.producer_handle.reset(); | 94 pipe.producer_handle.reset(); |
| 95 url_response->body = pipe.consumer_handle.Pass(); | 95 url_response->body = pipe.consumer_handle.Pass(); |
| 96 base::FilePath extracted_dir; | 96 base::FilePath extracted_dir; |
| 97 base::FilePath cache_dir; | 97 base::FilePath cache_dir; |
| 98 url_response_disk_cache_->GetExtractedContent( | 98 url_response_disk_cache_->UpdateAndGetExtracted( |
| 99 url_response.Pass(), | 99 url_response.Pass(), |
| 100 [&extracted_dir, &cache_dir](Array<uint8_t> received_extracted_dir, | 100 [&extracted_dir, &cache_dir](Array<uint8_t> received_extracted_dir, |
| 101 Array<uint8_t> received_cache_dir_path) { | 101 Array<uint8_t> received_cache_dir_path) { |
| 102 extracted_dir = toPath(received_extracted_dir.Pass()); | 102 extracted_dir = toPath(received_extracted_dir.Pass()); |
| 103 cache_dir = toPath(received_cache_dir_path.Pass()); | 103 cache_dir = toPath(received_cache_dir_path.Pass()); |
| 104 }); | 104 }); |
| 105 url_response_disk_cache_.WaitForIncomingResponse(); | 105 url_response_disk_cache_.WaitForIncomingResponse(); |
| 106 ASSERT_FALSE(extracted_dir.empty()); | 106 ASSERT_FALSE(extracted_dir.empty()); |
| 107 base::FilePath file1 = extracted_dir.Append("file1"); | 107 base::FilePath file1 = extracted_dir.Append("file1"); |
| 108 std::string file_content; | 108 std::string file_content; |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 127 std::string content = base::RandBytesAsString(32); | 127 std::string content = base::RandBytesAsString(32); |
| 128 uint32_t num_bytes = content.size(); | 128 uint32_t num_bytes = content.size(); |
| 129 ASSERT_EQ(MOJO_RESULT_OK, | 129 ASSERT_EQ(MOJO_RESULT_OK, |
| 130 WriteDataRaw(pipe1.producer_handle.get(), content.c_str(), | 130 WriteDataRaw(pipe1.producer_handle.get(), content.c_str(), |
| 131 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 131 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 132 ASSERT_EQ(content.size(), num_bytes); | 132 ASSERT_EQ(content.size(), num_bytes); |
| 133 pipe1.producer_handle.reset(); | 133 pipe1.producer_handle.reset(); |
| 134 url_response->body = pipe1.consumer_handle.Pass(); | 134 url_response->body = pipe1.consumer_handle.Pass(); |
| 135 base::FilePath file; | 135 base::FilePath file; |
| 136 base::FilePath cache_dir; | 136 base::FilePath cache_dir; |
| 137 url_response_disk_cache_->GetFile( | 137 url_response_disk_cache_->UpdateAndGet( |
| 138 url_response.Pass(), | 138 url_response.Pass(), |
| 139 [&file, &cache_dir](Array<uint8_t> received_file_path, | 139 [&file, &cache_dir](Array<uint8_t> received_file_path, |
| 140 Array<uint8_t> received_cache_dir_path) { | 140 Array<uint8_t> received_cache_dir_path) { |
| 141 file = toPath(received_file_path.Pass()); | 141 file = toPath(received_file_path.Pass()); |
| 142 cache_dir = toPath(received_cache_dir_path.Pass()); | 142 cache_dir = toPath(received_cache_dir_path.Pass()); |
| 143 }); | 143 }); |
| 144 url_response_disk_cache_.WaitForIncomingResponse(); | 144 url_response_disk_cache_.WaitForIncomingResponse(); |
| 145 ASSERT_FALSE(file.empty()); | 145 ASSERT_FALSE(file.empty()); |
| 146 std::string received_content; | 146 std::string received_content; |
| 147 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); | 147 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 164 } | 164 } |
| 165 DataPipe pipe2; | 165 DataPipe pipe2; |
| 166 std::string new_content = base::RandBytesAsString(32); | 166 std::string new_content = base::RandBytesAsString(32); |
| 167 num_bytes = new_content.size(); | 167 num_bytes = new_content.size(); |
| 168 ASSERT_EQ(MOJO_RESULT_OK, | 168 ASSERT_EQ(MOJO_RESULT_OK, |
| 169 WriteDataRaw(pipe2.producer_handle.get(), new_content.c_str(), | 169 WriteDataRaw(pipe2.producer_handle.get(), new_content.c_str(), |
| 170 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 170 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 171 ASSERT_EQ(new_content.size(), num_bytes); | 171 ASSERT_EQ(new_content.size(), num_bytes); |
| 172 pipe2.producer_handle.reset(); | 172 pipe2.producer_handle.reset(); |
| 173 url_response->body = pipe2.consumer_handle.Pass(); | 173 url_response->body = pipe2.consumer_handle.Pass(); |
| 174 url_response_disk_cache_->GetFile( | 174 url_response_disk_cache_->UpdateAndGet( |
| 175 url_response.Pass(), | 175 url_response.Pass(), |
| 176 [&file, &cache_dir](Array<uint8_t> received_file_path, | 176 [&file, &cache_dir](Array<uint8_t> received_file_path, |
| 177 Array<uint8_t> received_cache_dir_path) { | 177 Array<uint8_t> received_cache_dir_path) { |
| 178 file = toPath(received_file_path.Pass()); | 178 file = toPath(received_file_path.Pass()); |
| 179 cache_dir = toPath(received_cache_dir_path.Pass()); | 179 cache_dir = toPath(received_cache_dir_path.Pass()); |
| 180 }); | 180 }); |
| 181 url_response_disk_cache_.WaitForIncomingResponse(); | 181 url_response_disk_cache_.WaitForIncomingResponse(); |
| 182 ASSERT_FALSE(file.empty()); | 182 ASSERT_FALSE(file.empty()); |
| 183 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); | 183 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); |
| 184 EXPECT_EQ(content, received_content); | 184 EXPECT_EQ(content, received_content); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 195 url_response->headers.push_back(RandomEtagHeader()); | 195 url_response->headers.push_back(RandomEtagHeader()); |
| 196 DataPipe pipe3; | 196 DataPipe pipe3; |
| 197 new_content = base::RandBytesAsString(32); | 197 new_content = base::RandBytesAsString(32); |
| 198 num_bytes = new_content.size(); | 198 num_bytes = new_content.size(); |
| 199 ASSERT_EQ(MOJO_RESULT_OK, | 199 ASSERT_EQ(MOJO_RESULT_OK, |
| 200 WriteDataRaw(pipe3.producer_handle.get(), new_content.c_str(), | 200 WriteDataRaw(pipe3.producer_handle.get(), new_content.c_str(), |
| 201 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 201 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 202 ASSERT_EQ(new_content.size(), num_bytes); | 202 ASSERT_EQ(new_content.size(), num_bytes); |
| 203 pipe3.producer_handle.reset(); | 203 pipe3.producer_handle.reset(); |
| 204 url_response->body = pipe3.consumer_handle.Pass(); | 204 url_response->body = pipe3.consumer_handle.Pass(); |
| 205 url_response_disk_cache_->GetFile( | 205 url_response_disk_cache_->UpdateAndGet( |
| 206 url_response.Pass(), | 206 url_response.Pass(), |
| 207 [&file, &cache_dir](Array<uint8_t> received_file_path, | 207 [&file, &cache_dir](Array<uint8_t> received_file_path, |
| 208 Array<uint8_t> received_cache_dir_path) { | 208 Array<uint8_t> received_cache_dir_path) { |
| 209 file = toPath(received_file_path.Pass()); | 209 file = toPath(received_file_path.Pass()); |
| 210 cache_dir = toPath(received_cache_dir_path.Pass()); | 210 cache_dir = toPath(received_cache_dir_path.Pass()); |
| 211 }); | 211 }); |
| 212 url_response_disk_cache_.WaitForIncomingResponse(); | 212 url_response_disk_cache_.WaitForIncomingResponse(); |
| 213 ASSERT_FALSE(file.empty()); | 213 ASSERT_FALSE(file.empty()); |
| 214 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); | 214 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); |
| 215 EXPECT_EQ(new_content, received_content); | 215 EXPECT_EQ(new_content, received_content); |
| 216 saved_file = cache_dir.Append("file"); | 216 saved_file = cache_dir.Append("file"); |
| 217 EXPECT_FALSE(base::PathExists(saved_file)); | 217 EXPECT_FALSE(base::PathExists(saved_file)); |
| 218 ASSERT_TRUE(base::WriteFile(saved_file, cached_content.data(), | 218 ASSERT_TRUE(base::WriteFile(saved_file, cached_content.data(), |
| 219 cached_content.size())); | 219 cached_content.size())); |
| 220 | 220 |
| 221 // Request using a response without an etag header. Check that the new | 221 // Request using a response without an etag header. Check that the new |
| 222 // content is returned, and the cached files is deleted. | 222 // content is returned, and the cached files is deleted. |
| 223 url_response = mojo::URLResponse::New(); | 223 url_response = mojo::URLResponse::New(); |
| 224 url_response->url = "http://www.example.com/3"; | 224 url_response->url = "http://www.example.com/3"; |
| 225 DataPipe pipe4; | 225 DataPipe pipe4; |
| 226 new_content = base::RandBytesAsString(32); | 226 new_content = base::RandBytesAsString(32); |
| 227 num_bytes = new_content.size(); | 227 num_bytes = new_content.size(); |
| 228 ASSERT_EQ(MOJO_RESULT_OK, | 228 ASSERT_EQ(MOJO_RESULT_OK, |
| 229 WriteDataRaw(pipe4.producer_handle.get(), new_content.c_str(), | 229 WriteDataRaw(pipe4.producer_handle.get(), new_content.c_str(), |
| 230 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 230 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 231 ASSERT_EQ(new_content.size(), num_bytes); | 231 ASSERT_EQ(new_content.size(), num_bytes); |
| 232 pipe4.producer_handle.reset(); | 232 pipe4.producer_handle.reset(); |
| 233 url_response->body = pipe4.consumer_handle.Pass(); | 233 url_response->body = pipe4.consumer_handle.Pass(); |
| 234 url_response_disk_cache_->GetFile( | 234 url_response_disk_cache_->UpdateAndGet( |
| 235 url_response.Pass(), | 235 url_response.Pass(), |
| 236 [&file, &cache_dir](Array<uint8_t> received_file_path, | 236 [&file, &cache_dir](Array<uint8_t> received_file_path, |
| 237 Array<uint8_t> received_cache_dir_path) { | 237 Array<uint8_t> received_cache_dir_path) { |
| 238 file = toPath(received_file_path.Pass()); | 238 file = toPath(received_file_path.Pass()); |
| 239 cache_dir = toPath(received_cache_dir_path.Pass()); | 239 cache_dir = toPath(received_cache_dir_path.Pass()); |
| 240 }); | 240 }); |
| 241 url_response_disk_cache_.WaitForIncomingResponse(); | 241 url_response_disk_cache_.WaitForIncomingResponse(); |
| 242 ASSERT_FALSE(file.empty()); | 242 ASSERT_FALSE(file.empty()); |
| 243 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); | 243 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); |
| 244 EXPECT_EQ(new_content, received_content); | 244 EXPECT_EQ(new_content, received_content); |
| 245 saved_file = cache_dir.Append("file"); | 245 saved_file = cache_dir.Append("file"); |
| 246 EXPECT_FALSE(base::PathExists(saved_file)); | 246 EXPECT_FALSE(base::PathExists(saved_file)); |
| 247 ASSERT_TRUE(base::WriteFile(saved_file, cached_content.data(), | 247 ASSERT_TRUE(base::WriteFile(saved_file, cached_content.data(), |
| 248 cached_content.size())); | 248 cached_content.size())); |
| 249 | 249 |
| 250 // Request using a response with an etag header while the cache version | 250 // Request using a response with an etag header while the cache version |
| 251 // doesn't have one. Check that the new content is returned, and the cached | 251 // doesn't have one. Check that the new content is returned, and the cached |
| 252 // files is deleted. | 252 // files is deleted. |
| 253 url_response = mojo::URLResponse::New(); | 253 url_response = mojo::URLResponse::New(); |
| 254 url_response->url = "http://www.example.com/3"; | 254 url_response->url = "http://www.example.com/3"; |
| 255 DataPipe pipe5; | 255 DataPipe pipe5; |
| 256 new_content = base::RandBytesAsString(32); | 256 new_content = base::RandBytesAsString(32); |
| 257 num_bytes = new_content.size(); | 257 num_bytes = new_content.size(); |
| 258 ASSERT_EQ(MOJO_RESULT_OK, | 258 ASSERT_EQ(MOJO_RESULT_OK, |
| 259 WriteDataRaw(pipe5.producer_handle.get(), new_content.c_str(), | 259 WriteDataRaw(pipe5.producer_handle.get(), new_content.c_str(), |
| 260 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); | 260 &num_bytes, MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); |
| 261 ASSERT_EQ(new_content.size(), num_bytes); | 261 ASSERT_EQ(new_content.size(), num_bytes); |
| 262 pipe5.producer_handle.reset(); | 262 pipe5.producer_handle.reset(); |
| 263 url_response->body = pipe5.consumer_handle.Pass(); | 263 url_response->body = pipe5.consumer_handle.Pass(); |
| 264 url_response_disk_cache_->GetFile( | 264 url_response_disk_cache_->UpdateAndGet( |
| 265 url_response.Pass(), | 265 url_response.Pass(), |
| 266 [&file, &cache_dir](Array<uint8_t> received_file_path, | 266 [&file, &cache_dir](Array<uint8_t> received_file_path, |
| 267 Array<uint8_t> received_cache_dir_path) { | 267 Array<uint8_t> received_cache_dir_path) { |
| 268 file = toPath(received_file_path.Pass()); | 268 file = toPath(received_file_path.Pass()); |
| 269 cache_dir = toPath(received_cache_dir_path.Pass()); | 269 cache_dir = toPath(received_cache_dir_path.Pass()); |
| 270 }); | 270 }); |
| 271 url_response_disk_cache_.WaitForIncomingResponse(); | 271 url_response_disk_cache_.WaitForIncomingResponse(); |
| 272 ASSERT_FALSE(file.empty()); | 272 ASSERT_FALSE(file.empty()); |
| 273 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); | 273 ASSERT_TRUE(base::ReadFileToString(file, &received_content)); |
| 274 EXPECT_EQ(new_content, received_content); | 274 EXPECT_EQ(new_content, received_content); |
| 275 saved_file = cache_dir.Append("file"); | 275 saved_file = cache_dir.Append("file"); |
| 276 EXPECT_FALSE(base::PathExists(saved_file)); | 276 EXPECT_FALSE(base::PathExists(saved_file)); |
| 277 } | 277 } |
| 278 | 278 |
| 279 } // namespace mojo | 279 } // namespace mojo |
| OLD | NEW |