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

Side by Side Diff: sync/internal_api/attachments/attachment_downloader_impl_unittest.cc

Issue 710073003: Store attachment crc in AttachmentStore (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 6 years, 1 month 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 "sync/internal_api/public/attachments/attachment_downloader_impl.h" 5 #include "sync/internal_api/public/attachments/attachment_downloader_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/weak_ptr.h" 8 #include "base/memory/weak_ptr.h"
9 #include "base/message_loop/message_loop.h" 9 #include "base/message_loop/message_loop.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "base/thread_task_runner_handle.h" 11 #include "base/thread_task_runner_handle.h"
12 #include "google_apis/gaia/fake_oauth2_token_service.h" 12 #include "google_apis/gaia/fake_oauth2_token_service.h"
13 #include "google_apis/gaia/gaia_constants.h" 13 #include "google_apis/gaia/gaia_constants.h"
14 #include "net/http/http_response_headers.h" 14 #include "net/http/http_response_headers.h"
15 #include "net/url_request/test_url_fetcher_factory.h" 15 #include "net/url_request/test_url_fetcher_factory.h"
16 #include "net/url_request/url_request_test_util.h" 16 #include "net/url_request/url_request_test_util.h"
17 #include "sync/api/attachments/attachment.h" 17 #include "sync/api/attachments/attachment.h"
18 #include "sync/internal_api/public/attachments/attachment_uploader_impl.h" 18 #include "sync/internal_api/public/attachments/attachment_uploader_impl.h"
19 #include "sync/internal_api/public/attachments/attachment_util.h"
19 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 #include "third_party/leveldatabase/src/util/crc32c.h"
20 22
21 namespace syncer { 23 namespace syncer {
22 24
23 namespace { 25 namespace {
24 26
25 const char kAccountId[] = "attachments@gmail.com"; 27 const char kAccountId[] = "attachments@gmail.com";
26 const char kAccessToken[] = "access.token"; 28 const char kAccessToken[] = "access.token";
27 const char kAttachmentServerUrl[] = "http://attachments.com/"; 29 const char kAttachmentServerUrl[] = "http://attachments.com/";
28 const char kAttachmentContent[] = "attachment.content"; 30 const char kAttachmentContent[] = "attachment.content";
29 31
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 void AttachmentDownloaderImplTest::AddHashHeader( 273 void AttachmentDownloaderImplTest::AddHashHeader(
272 HashHeaderType hash_header_type, 274 HashHeaderType hash_header_type,
273 net::TestURLFetcher* fetcher) { 275 net::TestURLFetcher* fetcher) {
274 std::string header = "X-Goog-Hash: crc32c="; 276 std::string header = "X-Goog-Hash: crc32c=";
275 scoped_refptr<net::HttpResponseHeaders> headers( 277 scoped_refptr<net::HttpResponseHeaders> headers(
276 new net::HttpResponseHeaders("")); 278 new net::HttpResponseHeaders(""));
277 switch (hash_header_type) { 279 switch (hash_header_type) {
278 case HASH_HEADER_NONE: 280 case HASH_HEADER_NONE:
279 break; 281 break;
280 case HASH_HEADER_VALID: 282 case HASH_HEADER_VALID:
281 header += AttachmentUploaderImpl::ComputeCrc32cHash( 283 header += AttachmentUploaderImpl::FormatCrc32cHash(leveldb::crc32c::Value(
282 kAttachmentContent, strlen(kAttachmentContent)); 284 kAttachmentContent, strlen(kAttachmentContent)));
283 headers->AddHeader(header); 285 headers->AddHeader(header);
284 break; 286 break;
285 case HASH_HEADER_INVALID: 287 case HASH_HEADER_INVALID:
286 header += "BOGUS1=="; 288 header += "BOGUS1==";
287 headers->AddHeader(header); 289 headers->AddHeader(header);
288 break; 290 break;
289 } 291 }
290 fetcher->set_response_headers(headers); 292 fetcher->set_response_headers(headers);
291 } 293 }
292 294
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 AttachmentId id1 = AttachmentId::Create(); 414 AttachmentId id1 = AttachmentId::Create();
413 downloader()->DownloadAttachment(id1, download_callback(id1)); 415 downloader()->DownloadAttachment(id1, download_callback(id1));
414 RunMessageLoop(); 416 RunMessageLoop();
415 token_service()->RespondToAccessTokenRequest( 417 token_service()->RespondToAccessTokenRequest(
416 GoogleServiceAuthError::AuthErrorNone()); 418 GoogleServiceAuthError::AuthErrorNone());
417 RunMessageLoop(); 419 RunMessageLoop();
418 CompleteDownload(net::HTTP_OK, HASH_HEADER_INVALID); 420 CompleteDownload(net::HTTP_OK, HASH_HEADER_INVALID);
419 VerifyDownloadResult(id1, AttachmentDownloader::DOWNLOAD_TRANSIENT_ERROR); 421 VerifyDownloadResult(id1, AttachmentDownloader::DOWNLOAD_TRANSIENT_ERROR);
420 } 422 }
421 423
424 // Verify that extract fails when there is no headers object.
425 TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_NoHeaders) {
426 uint32_t extracted;
427 ASSERT_FALSE(AttachmentDownloaderImpl::ExtractCrc32c(nullptr, &extracted));
428 }
422 429
423 // Verify that extract fails when there is no crc32c value. 430 // Verify that extract fails when there is no crc32c value.
424 TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_Empty) { 431 TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_Empty) {
425 std::string raw; 432 std::string raw;
426 raw += "HTTP/1.1 200 OK\n"; 433 raw += "HTTP/1.1 200 OK\n";
427 raw += "Foo: bar\n"; 434 raw += "Foo: bar\n";
428 raw += "X-Goog-HASH: crc32c=\n"; 435 raw += "X-Goog-HASH: crc32c=\n";
429 raw += "\n"; 436 raw += "\n";
430 std::replace(raw.begin(), raw.end(), '\n', '\0'); 437 std::replace(raw.begin(), raw.end(), '\n', '\0');
431 scoped_refptr<net::HttpResponseHeaders> headers( 438 scoped_refptr<net::HttpResponseHeaders> headers(
432 new net::HttpResponseHeaders(raw)); 439 new net::HttpResponseHeaders(raw));
433 std::string extracted; 440 uint32_t extracted;
434 ASSERT_FALSE(AttachmentDownloaderImpl::ExtractCrc32c(*headers, &extracted)); 441 ASSERT_FALSE(
442 AttachmentDownloaderImpl::ExtractCrc32c(headers.get(), &extracted));
435 } 443 }
436 444
437 // Verify that extract finds the first crc32c and ignores others. 445 // Verify that extract finds the first crc32c and ignores others.
438 TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_First) { 446 TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_First) {
439 const std::string expected = "z8SuHQ=="; 447 const std::string expected_encoded = "z8SuHQ==";
448 const uint32_t expected = 3485773341;
440 std::string raw; 449 std::string raw;
441 raw += "HTTP/1.1 200 OK\n"; 450 raw += "HTTP/1.1 200 OK\n";
442 raw += "Foo: bar\n"; 451 raw += "Foo: bar\n";
443 // Ignored because it's the wrong header. 452 // Ignored because it's the wrong header.
444 raw += "X-Goog-Hashes: crc32c=AAAAAA==\n"; 453 raw += "X-Goog-Hashes: crc32c=AAAAAA==\n";
445 // Header name matches. The md5 item is ignored. 454 // Header name matches. The md5 item is ignored.
446 raw += "X-Goog-HASH: md5=rL0Y20zC+Fzt72VPzMSk2A==,crc32c=" + expected + "\n"; 455 raw += "X-Goog-HASH: md5=rL0Y20zC+Fzt72VPzMSk2A==,crc32c=" +
456 expected_encoded + "\n";
447 // Ignored because we already found a crc32c in the one above. 457 // Ignored because we already found a crc32c in the one above.
448 raw += "X-Goog-HASH: crc32c=AAAAAA==\n"; 458 raw += "X-Goog-HASH: crc32c=AAAAAA==\n";
449 raw += "\n"; 459 raw += "\n";
450 std::replace(raw.begin(), raw.end(), '\n', '\0'); 460 std::replace(raw.begin(), raw.end(), '\n', '\0');
451 scoped_refptr<net::HttpResponseHeaders> headers( 461 scoped_refptr<net::HttpResponseHeaders> headers(
452 new net::HttpResponseHeaders(raw)); 462 new net::HttpResponseHeaders(raw));
453 std::string extracted; 463 uint32_t extracted;
454 ASSERT_TRUE(AttachmentDownloaderImpl::ExtractCrc32c(*headers, &extracted)); 464 ASSERT_TRUE(
465 AttachmentDownloaderImpl::ExtractCrc32c(headers.get(), &extracted));
455 ASSERT_EQ(expected, extracted); 466 ASSERT_EQ(expected, extracted);
456 } 467 }
457 468
469 // Verify that extract fails when encoded value is too long.
470 TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_TooLong) {
maniscalco 2014/11/11 00:44:54 Good one!
471 std::string raw;
472 raw += "HTTP/1.1 200 OK\n";
473 raw += "Foo: bar\n";
474 raw += "X-Goog-HASH: crc32c=AAAAAAAA\n";
475 raw += "\n";
476 std::replace(raw.begin(), raw.end(), '\n', '\0');
477 scoped_refptr<net::HttpResponseHeaders> headers(
478 new net::HttpResponseHeaders(raw));
479 uint32_t extracted;
480 ASSERT_FALSE(
481 AttachmentDownloaderImpl::ExtractCrc32c(headers.get(), &extracted));
482 }
483
458 // Verify that extract fails if there is no crc32c. 484 // Verify that extract fails if there is no crc32c.
459 TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_None) { 485 TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_None) {
460 std::string raw; 486 std::string raw;
461 raw += "HTTP/1.1 200 OK\n"; 487 raw += "HTTP/1.1 200 OK\n";
462 raw += "Foo: bar\n"; 488 raw += "Foo: bar\n";
463 raw += "X-Goog-Hash: md5=rL0Y20zC+Fzt72VPzMSk2A==\n"; 489 raw += "X-Goog-Hash: md5=rL0Y20zC+Fzt72VPzMSk2A==\n";
464 raw += "\n"; 490 raw += "\n";
465 std::replace(raw.begin(), raw.end(), '\n', '\0'); 491 std::replace(raw.begin(), raw.end(), '\n', '\0');
466 scoped_refptr<net::HttpResponseHeaders> headers( 492 scoped_refptr<net::HttpResponseHeaders> headers(
467 new net::HttpResponseHeaders(raw)); 493 new net::HttpResponseHeaders(raw));
468 std::string extracted; 494 uint32_t extracted;
469 ASSERT_FALSE(AttachmentDownloaderImpl::ExtractCrc32c(*headers, &extracted)); 495 ASSERT_FALSE(
496 AttachmentDownloaderImpl::ExtractCrc32c(headers.get(), &extracted));
470 } 497 }
471 498
472 } // namespace syncer 499 } // namespace syncer
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698