Index: sync/internal_api/attachments/attachment_downloader_impl_unittest.cc |
diff --git a/sync/internal_api/attachments/attachment_downloader_impl_unittest.cc b/sync/internal_api/attachments/attachment_downloader_impl_unittest.cc |
index 1d026eb56a5f6de7e01c241b1e18dd332c30057a..0cae099337e11942ea598066ca02b2dd5676ceea 100644 |
--- a/sync/internal_api/attachments/attachment_downloader_impl_unittest.cc |
+++ b/sync/internal_api/attachments/attachment_downloader_impl_unittest.cc |
@@ -152,7 +152,12 @@ class AttachmentDownloaderImplTest : public testing::Test { |
HASH_HEADER_INVALID |
}; |
- AttachmentDownloaderImplTest() : num_completed_downloads_(0) {} |
+ AttachmentDownloaderImplTest() |
+ : num_completed_downloads_(0), |
+ attachment_id_( |
+ Attachment::Create(new base::RefCountedStaticMemory( |
+ kAttachmentContent, |
+ strlen(kAttachmentContent))).GetId()) {} |
void SetUp() override; |
void TearDown() override; |
@@ -163,6 +168,8 @@ class AttachmentDownloaderImplTest : public testing::Test { |
int num_completed_downloads() { return num_completed_downloads_; } |
+ const AttachmentId attachment_id() const { return attachment_id_; } |
+ |
AttachmentDownloader::DownloadCallback download_callback( |
const AttachmentId& id) { |
return base::Bind(&AttachmentDownloaderImplTest::DownloadDone, |
@@ -193,6 +200,7 @@ class AttachmentDownloaderImplTest : public testing::Test { |
scoped_ptr<AttachmentDownloader> attachment_downloader_; |
ResultsMap download_results_; |
int num_completed_downloads_; |
+ const AttachmentId attachment_id_; |
}; |
void AttachmentDownloaderImplTest::SetUp() { |
@@ -294,7 +302,7 @@ void AttachmentDownloaderImplTest::AddHashHeader( |
} |
TEST_F(AttachmentDownloaderImplTest, HappyCase) { |
- AttachmentId id1 = AttachmentId::Create(); |
+ AttachmentId id1 = attachment_id(); |
// DownloadAttachment should trigger RequestAccessToken. |
downloader()->DownloadAttachment(id1, download_callback(id1)); |
RunMessageLoop(); |
@@ -314,7 +322,7 @@ TEST_F(AttachmentDownloaderImplTest, HappyCase) { |
} |
TEST_F(AttachmentDownloaderImplTest, SameIdMultipleDownloads) { |
- AttachmentId id1 = AttachmentId::Create(); |
+ AttachmentId id1 = attachment_id(); |
base::HistogramTester histogram_tester; |
// Call DownloadAttachment two times for the same id. |
downloader()->DownloadAttachment(id1, download_callback(id1)); |
@@ -351,8 +359,8 @@ TEST_F(AttachmentDownloaderImplTest, SameIdMultipleDownloads) { |
} |
TEST_F(AttachmentDownloaderImplTest, RequestAccessTokenFails) { |
- AttachmentId id1 = AttachmentId::Create(); |
- AttachmentId id2 = AttachmentId::Create(); |
+ AttachmentId id1 = attachment_id(); |
+ AttachmentId id2 = AttachmentId::Create(id1.GetSize(), id1.GetCrc32c()); |
// Trigger first RequestAccessToken. |
downloader()->DownloadAttachment(id1, download_callback(id1)); |
RunMessageLoop(); |
@@ -375,7 +383,7 @@ TEST_F(AttachmentDownloaderImplTest, RequestAccessTokenFails) { |
} |
TEST_F(AttachmentDownloaderImplTest, URLFetcher_BadToken) { |
- AttachmentId id1 = AttachmentId::Create(); |
+ AttachmentId id1 = attachment_id(); |
downloader()->DownloadAttachment(id1, download_callback(id1)); |
RunMessageLoop(); |
// Return valid access token. |
@@ -393,7 +401,7 @@ TEST_F(AttachmentDownloaderImplTest, URLFetcher_BadToken) { |
} |
TEST_F(AttachmentDownloaderImplTest, URLFetcher_ServiceUnavailable) { |
- AttachmentId id1 = AttachmentId::Create(); |
+ AttachmentId id1 = attachment_id(); |
downloader()->DownloadAttachment(id1, download_callback(id1)); |
RunMessageLoop(); |
// Return valid access token. |
@@ -413,7 +421,7 @@ TEST_F(AttachmentDownloaderImplTest, URLFetcher_ServiceUnavailable) { |
// Verify that if no hash is present on the response the downloader accepts the |
// received attachment. |
TEST_F(AttachmentDownloaderImplTest, NoHash) { |
- AttachmentId id1 = AttachmentId::Create(); |
+ AttachmentId id1 = attachment_id(); |
downloader()->DownloadAttachment(id1, download_callback(id1)); |
RunMessageLoop(); |
token_service()->RespondToAccessTokenRequest( |
@@ -426,7 +434,7 @@ TEST_F(AttachmentDownloaderImplTest, NoHash) { |
// Verify that if an invalid hash is present on the response the downloader |
// treats it as a transient error. |
TEST_F(AttachmentDownloaderImplTest, InvalidHash) { |
- AttachmentId id1 = AttachmentId::Create(); |
+ AttachmentId id1 = attachment_id(); |
downloader()->DownloadAttachment(id1, download_callback(id1)); |
RunMessageLoop(); |
token_service()->RespondToAccessTokenRequest( |
@@ -436,6 +444,21 @@ TEST_F(AttachmentDownloaderImplTest, InvalidHash) { |
VerifyDownloadResult(id1, AttachmentDownloader::DOWNLOAD_TRANSIENT_ERROR); |
} |
+// Verify that when the hash from the attachment id does not match the one on |
+// the response the result is an unspecified error. |
+TEST_F(AttachmentDownloaderImplTest, IdHashDoesNotMatch) { |
+ // id1 has the wrong crc32c. |
+ AttachmentId id1 = AttachmentId::Create(attachment_id().GetSize(), 12345); |
+ downloader()->DownloadAttachment(id1, download_callback(id1)); |
+ RunMessageLoop(); |
+ token_service()->RespondToAccessTokenRequest( |
+ GoogleServiceAuthError::AuthErrorNone()); |
+ RunMessageLoop(); |
+ CompleteDownload(net::HTTP_OK, HASH_HEADER_VALID); |
+ VerifyDownloadResult(id1, AttachmentDownloader::DOWNLOAD_UNSPECIFIED_ERROR); |
+} |
+ |
+ |
// Verify that extract fails when there is no headers object. |
TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_NoHeaders) { |
uint32_t extracted; |