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

Side by Side Diff: content/browser/appcache/appcache_response_unittest.cc

Issue 932643002: Introduce AppCacheResponseMetadataWriter to support metadata caching. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: incorporated michaeln's comment Created 5 years, 10 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 <stack> 5 #include <stack>
6 #include <string> 6 #include <string>
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 void WriteResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { 184 void WriteResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) {
185 EXPECT_FALSE(writer_->IsWritePending()); 185 EXPECT_FALSE(writer_->IsWritePending());
186 write_buffer_ = io_buffer; 186 write_buffer_ = io_buffer;
187 expected_write_result_ = buf_len; 187 expected_write_result_ = buf_len;
188 writer_->WriteData(write_buffer_.get(), 188 writer_->WriteData(write_buffer_.get(),
189 buf_len, 189 buf_len,
190 base::Bind(&AppCacheResponseTest::OnWriteComplete, 190 base::Bind(&AppCacheResponseTest::OnWriteComplete,
191 base::Unretained(this))); 191 base::Unretained(this)));
192 } 192 }
193 193
194 void WriteResponseMetadata(scoped_refptr<IOBuffer> io_buffer, int buf_len) {
195 EXPECT_FALSE(metadata_writer_->IsWritePending());
196 write_buffer_ = io_buffer;
197 expected_write_result_ = buf_len;
198 metadata_writer_->WriteMetadata(
199 write_buffer_.get(), buf_len,
200 base::Bind(&AppCacheResponseTest::OnMetadataWriteComplete,
201 base::Unretained(this)));
202 }
203
194 void ReadResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) { 204 void ReadResponseBody(scoped_refptr<IOBuffer> io_buffer, int buf_len) {
195 EXPECT_FALSE(reader_->IsReadPending()); 205 EXPECT_FALSE(reader_->IsReadPending());
196 read_buffer_ = io_buffer; 206 read_buffer_ = io_buffer;
197 expected_read_result_ = buf_len; 207 expected_read_result_ = buf_len;
198 reader_->ReadData(read_buffer_.get(), 208 reader_->ReadData(read_buffer_.get(),
199 buf_len, 209 buf_len,
200 base::Bind(&AppCacheResponseTest::OnReadComplete, 210 base::Bind(&AppCacheResponseTest::OnReadComplete,
201 base::Unretained(this))); 211 base::Unretained(this)));
202 } 212 }
203 213
204 // AppCacheResponseReader / Writer completion callbacks 214 // AppCacheResponseReader / Writer completion callbacks
205 215
206 void OnWriteInfoComplete(int result) { 216 void OnWriteInfoComplete(int result) {
207 EXPECT_FALSE(writer_->IsWritePending()); 217 EXPECT_FALSE(writer_->IsWritePending());
208 EXPECT_EQ(expected_write_result_, result); 218 EXPECT_EQ(expected_write_result_, result);
209 ScheduleNextTask(); 219 ScheduleNextTask();
210 } 220 }
211 221
212 void OnWriteComplete(int result) { 222 void OnWriteComplete(int result) {
213 EXPECT_FALSE(writer_->IsWritePending()); 223 EXPECT_FALSE(writer_->IsWritePending());
214 write_callback_was_called_ = true; 224 write_callback_was_called_ = true;
215 EXPECT_EQ(expected_write_result_, result); 225 EXPECT_EQ(expected_write_result_, result);
216 if (should_delete_writer_in_completion_callback_ && 226 if (should_delete_writer_in_completion_callback_ &&
217 --writer_deletion_count_down_ == 0) { 227 --writer_deletion_count_down_ == 0) {
218 writer_.reset(); 228 writer_.reset();
219 } 229 }
220 ScheduleNextTask(); 230 ScheduleNextTask();
221 } 231 }
222 232
233 void OnMetadataWriteComplete(int result) {
234 EXPECT_FALSE(metadata_writer_->IsWritePending());
235 EXPECT_EQ(expected_write_result_, result);
236 ScheduleNextTask();
237 }
238
223 void OnReadInfoComplete(int result) { 239 void OnReadInfoComplete(int result) {
224 EXPECT_FALSE(reader_->IsReadPending()); 240 EXPECT_FALSE(reader_->IsReadPending());
225 EXPECT_EQ(expected_read_result_, result); 241 EXPECT_EQ(expected_read_result_, result);
226 ScheduleNextTask(); 242 ScheduleNextTask();
227 } 243 }
228 244
229 void OnReadComplete(int result) { 245 void OnReadComplete(int result) {
230 EXPECT_FALSE(reader_->IsReadPending()); 246 EXPECT_FALSE(reader_->IsReadPending());
231 read_callback_was_called_ = true; 247 read_callback_was_called_ = true;
232 EXPECT_EQ(expected_read_result_, result); 248 EXPECT_EQ(expected_read_result_, result);
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_); 382 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_);
367 EXPECT_TRUE(storage_delegate_->loaded_info_.get()); 383 EXPECT_TRUE(storage_delegate_->loaded_info_.get());
368 EXPECT_TRUE(CompareHttpResponseInfos( 384 EXPECT_TRUE(CompareHttpResponseInfos(
369 write_info_buffer_->http_info.get(), 385 write_info_buffer_->http_info.get(),
370 storage_delegate_->loaded_info_->http_response_info())); 386 storage_delegate_->loaded_info_->http_response_info()));
371 EXPECT_EQ(basic_response_size(), 387 EXPECT_EQ(basic_response_size(),
372 storage_delegate_->loaded_info_->response_data_size()); 388 storage_delegate_->loaded_info_->response_data_size());
373 TestFinished(); 389 TestFinished();
374 } 390 }
375 391
392 // Metadata -------------------------------------------------
393 void Metadata() {
394 // This tests involves multiple async steps.
395 // 1. Write a response headers and body to storage
396 // a. headers
397 // b. body
398 // 2. Write metadata "Metadata First" using AppCacheResponseMetadataWriter.
399 // 3. Check metadata was written.
400 // 4. Write metadata "Second".
401 // 5. Check metadata was written and was truncated .
402 // 6. Write metadata "".
403 // 7. Check metadata was deleted.
404
405 // Push tasks in reverse order.
406 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata,
407 base::Unretained(this), ""));
408 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo,
409 base::Unretained(this)));
410 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata,
411 base::Unretained(this), ""));
412 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata,
413 base::Unretained(this), "Second"));
414 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo,
415 base::Unretained(this)));
416 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata,
417 base::Unretained(this), "Second"));
418 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_VerifyMetadata,
419 base::Unretained(this), "Metadata First"));
420 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_LoadResponseInfo,
421 base::Unretained(this)));
422 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_WriteMetadata,
423 base::Unretained(this), "Metadata First"));
424 PushNextTask(base::Bind(&AppCacheResponseTest::Metadata_ResetWriter,
425 base::Unretained(this)));
426 writer_.reset(service_->storage()->CreateResponseWriter(GURL(), 0));
427 written_response_id_ = writer_->response_id();
428 WriteBasicResponse();
429 }
430
431 void Metadata_ResetWriter() {
432 writer_.reset();
433 ScheduleNextTask();
434 }
435
436 void Metadata_WriteMetadata(const char* metadata) {
437 metadata_writer_.reset(service_->storage()->CreateResponseMetadataWriter(
438 0, written_response_id_));
439 scoped_refptr<IOBuffer> buffer(new WrappedIOBuffer(metadata));
440 WriteResponseMetadata(buffer.get(), strlen(metadata));
441 }
442
443 void Metadata_LoadResponseInfo() {
444 metadata_writer_.reset();
445 storage_delegate_.reset(new MockStorageDelegate(this));
446 service_->storage()->LoadResponseInfo(GURL(), 0, written_response_id_,
447 storage_delegate_.get());
448 }
449
450 void Metadata_VerifyMetadata(const char* metadata) {
451 EXPECT_EQ(written_response_id_, storage_delegate_->loaded_info_id_);
452 EXPECT_TRUE(storage_delegate_->loaded_info_.get());
453 const net::HttpResponseInfo* read_head =
454 storage_delegate_->loaded_info_->http_response_info();
455 EXPECT_TRUE(read_head);
456 const int metadata_size = strlen(metadata);
457 if (metadata_size) {
458 EXPECT_TRUE(read_head->metadata.get());
459 EXPECT_EQ(metadata_size, read_head->metadata->size());
460 EXPECT_EQ(0,
461 memcmp(metadata, read_head->metadata->data(), metadata_size));
462 } else {
463 EXPECT_FALSE(read_head->metadata.get());
464 }
465 EXPECT_TRUE(CompareHttpResponseInfos(
466 write_info_buffer_->http_info.get(),
467 storage_delegate_->loaded_info_->http_response_info()));
468 EXPECT_EQ(basic_response_size(),
469 storage_delegate_->loaded_info_->response_data_size());
470 ScheduleNextTask();
471 }
472
376 // AmountWritten ---------------------------------------------------- 473 // AmountWritten ----------------------------------------------------
377 474
378 void AmountWritten() { 475 void AmountWritten() {
379 static const char kHttpHeaders[] = "HTTP/1.0 200 OK\0\0"; 476 static const char kHttpHeaders[] = "HTTP/1.0 200 OK\0\0";
380 std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders)); 477 std::string raw_headers(kHttpHeaders, arraysize(kHttpHeaders));
381 net::HttpResponseInfo* head = MakeHttpResponseInfo(raw_headers); 478 net::HttpResponseInfo* head = MakeHttpResponseInfo(raw_headers);
382 int expected_amount_written = 479 int expected_amount_written =
383 GetHttpResponseInfoSize(head) + kNumBlocks * kBlockSize; 480 GetHttpResponseInfoSize(head) + kNumBlocks * kBlockSize;
384 481
385 // Push tasks in reverse order. 482 // Push tasks in reverse order.
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
660 scoped_ptr<AppCacheResponseReader> reader_; 757 scoped_ptr<AppCacheResponseReader> reader_;
661 scoped_refptr<HttpResponseInfoIOBuffer> read_info_buffer_; 758 scoped_refptr<HttpResponseInfoIOBuffer> read_info_buffer_;
662 scoped_refptr<IOBuffer> read_buffer_; 759 scoped_refptr<IOBuffer> read_buffer_;
663 int expected_read_result_; 760 int expected_read_result_;
664 bool should_delete_reader_in_completion_callback_; 761 bool should_delete_reader_in_completion_callback_;
665 int reader_deletion_count_down_; 762 int reader_deletion_count_down_;
666 bool read_callback_was_called_; 763 bool read_callback_was_called_;
667 764
668 int64 written_response_id_; 765 int64 written_response_id_;
669 scoped_ptr<AppCacheResponseWriter> writer_; 766 scoped_ptr<AppCacheResponseWriter> writer_;
767 scoped_ptr<AppCacheResponseMetadataWriter> metadata_writer_;
670 scoped_refptr<HttpResponseInfoIOBuffer> write_info_buffer_; 768 scoped_refptr<HttpResponseInfoIOBuffer> write_info_buffer_;
671 scoped_refptr<IOBuffer> write_buffer_; 769 scoped_refptr<IOBuffer> write_buffer_;
672 int expected_write_result_; 770 int expected_write_result_;
673 bool should_delete_writer_in_completion_callback_; 771 bool should_delete_writer_in_completion_callback_;
674 int writer_deletion_count_down_; 772 int writer_deletion_count_down_;
675 bool write_callback_was_called_; 773 bool write_callback_was_called_;
676 774
677 static scoped_ptr<base::Thread> io_thread_; 775 static scoped_ptr<base::Thread> io_thread_;
678 }; 776 };
679 777
680 // static 778 // static
681 scoped_ptr<base::Thread> AppCacheResponseTest::io_thread_; 779 scoped_ptr<base::Thread> AppCacheResponseTest::io_thread_;
682 780
683 TEST_F(AppCacheResponseTest, ReadNonExistentResponse) { 781 TEST_F(AppCacheResponseTest, ReadNonExistentResponse) {
684 RunTestOnIOThread(&AppCacheResponseTest::ReadNonExistentResponse); 782 RunTestOnIOThread(&AppCacheResponseTest::ReadNonExistentResponse);
685 } 783 }
686 784
687 TEST_F(AppCacheResponseTest, LoadResponseInfo_Miss) { 785 TEST_F(AppCacheResponseTest, LoadResponseInfo_Miss) {
688 RunTestOnIOThread(&AppCacheResponseTest::LoadResponseInfo_Miss); 786 RunTestOnIOThread(&AppCacheResponseTest::LoadResponseInfo_Miss);
689 } 787 }
690 788
691 TEST_F(AppCacheResponseTest, LoadResponseInfo_Hit) { 789 TEST_F(AppCacheResponseTest, LoadResponseInfo_Hit) {
692 RunTestOnIOThread(&AppCacheResponseTest::LoadResponseInfo_Hit); 790 RunTestOnIOThread(&AppCacheResponseTest::LoadResponseInfo_Hit);
693 } 791 }
694 792
793 TEST_F(AppCacheResponseTest, Metadata) {
794 RunTestOnIOThread(&AppCacheResponseTest::Metadata);
795 }
796
695 TEST_F(AppCacheResponseTest, AmountWritten) { 797 TEST_F(AppCacheResponseTest, AmountWritten) {
696 RunTestOnIOThread(&AppCacheResponseTest::AmountWritten); 798 RunTestOnIOThread(&AppCacheResponseTest::AmountWritten);
697 } 799 }
698 800
699 TEST_F(AppCacheResponseTest, WriteThenVariouslyReadResponse) { 801 TEST_F(AppCacheResponseTest, WriteThenVariouslyReadResponse) {
700 RunTestOnIOThread(&AppCacheResponseTest::WriteThenVariouslyReadResponse); 802 RunTestOnIOThread(&AppCacheResponseTest::WriteThenVariouslyReadResponse);
701 } 803 }
702 804
703 TEST_F(AppCacheResponseTest, IOChaining) { 805 TEST_F(AppCacheResponseTest, IOChaining) {
704 RunTestOnIOThread(&AppCacheResponseTest::IOChaining); 806 RunTestOnIOThread(&AppCacheResponseTest::IOChaining);
705 } 807 }
706 808
707 TEST_F(AppCacheResponseTest, DeleteWithinCallbacks) { 809 TEST_F(AppCacheResponseTest, DeleteWithinCallbacks) {
708 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithinCallbacks); 810 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithinCallbacks);
709 } 811 }
710 812
711 TEST_F(AppCacheResponseTest, DeleteWithIOPending) { 813 TEST_F(AppCacheResponseTest, DeleteWithIOPending) {
712 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithIOPending); 814 RunTestOnIOThread(&AppCacheResponseTest::DeleteWithIOPending);
713 } 815 }
714 816
715 } // namespace content 817 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/appcache/appcache_response.cc ('k') | content/browser/appcache/appcache_storage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698