Chromium Code Reviews| 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 0f8aa8ffc5106eb880c28dce6f9c11cd1f109417..f36fbad02adef500b29d03030e088c45b38d05f0 100644 |
| --- a/sync/internal_api/attachments/attachment_downloader_impl_unittest.cc |
| +++ b/sync/internal_api/attachments/attachment_downloader_impl_unittest.cc |
| @@ -16,7 +16,9 @@ |
| #include "net/url_request/url_request_test_util.h" |
| #include "sync/api/attachments/attachment.h" |
| #include "sync/internal_api/public/attachments/attachment_uploader_impl.h" |
| +#include "sync/internal_api/public/attachments/attachment_util.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| +#include "third_party/leveldatabase/src/util/crc32c.h" |
| namespace syncer { |
| @@ -278,8 +280,8 @@ void AttachmentDownloaderImplTest::AddHashHeader( |
| case HASH_HEADER_NONE: |
| break; |
| case HASH_HEADER_VALID: |
| - header += AttachmentUploaderImpl::ComputeCrc32cHash( |
| - kAttachmentContent, strlen(kAttachmentContent)); |
| + header += AttachmentUploaderImpl::FormatCrc32cHash(leveldb::crc32c::Value( |
| + kAttachmentContent, strlen(kAttachmentContent))); |
| headers->AddHeader(header); |
| break; |
| case HASH_HEADER_INVALID: |
| @@ -419,6 +421,11 @@ TEST_F(AttachmentDownloaderImplTest, InvalidHash) { |
| VerifyDownloadResult(id1, AttachmentDownloader::DOWNLOAD_TRANSIENT_ERROR); |
| } |
| +// Verify that extract fails when there is no headers object. |
| +TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_NoHeaders) { |
| + uint32_t extracted; |
| + ASSERT_FALSE(AttachmentDownloaderImpl::ExtractCrc32c(nullptr, &extracted)); |
| +} |
| // Verify that extract fails when there is no crc32c value. |
| TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_Empty) { |
| @@ -430,31 +437,50 @@ TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_Empty) { |
| std::replace(raw.begin(), raw.end(), '\n', '\0'); |
| scoped_refptr<net::HttpResponseHeaders> headers( |
| new net::HttpResponseHeaders(raw)); |
| - std::string extracted; |
| - ASSERT_FALSE(AttachmentDownloaderImpl::ExtractCrc32c(*headers, &extracted)); |
| + uint32_t extracted; |
| + ASSERT_FALSE( |
| + AttachmentDownloaderImpl::ExtractCrc32c(headers.get(), &extracted)); |
| } |
| // Verify that extract finds the first crc32c and ignores others. |
| TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_First) { |
| - const std::string expected = "z8SuHQ=="; |
| + const std::string expected_encoded = "z8SuHQ=="; |
| + const uint32_t expected = 3485773341; |
| std::string raw; |
| raw += "HTTP/1.1 200 OK\n"; |
| raw += "Foo: bar\n"; |
| // Ignored because it's the wrong header. |
| raw += "X-Goog-Hashes: crc32c=AAAAAA==\n"; |
| // Header name matches. The md5 item is ignored. |
| - raw += "X-Goog-HASH: md5=rL0Y20zC+Fzt72VPzMSk2A==,crc32c=" + expected + "\n"; |
| + raw += "X-Goog-HASH: md5=rL0Y20zC+Fzt72VPzMSk2A==,crc32c=" + |
| + expected_encoded + "\n"; |
| // Ignored because we already found a crc32c in the one above. |
| raw += "X-Goog-HASH: crc32c=AAAAAA==\n"; |
| raw += "\n"; |
| std::replace(raw.begin(), raw.end(), '\n', '\0'); |
| scoped_refptr<net::HttpResponseHeaders> headers( |
| new net::HttpResponseHeaders(raw)); |
| - std::string extracted; |
| - ASSERT_TRUE(AttachmentDownloaderImpl::ExtractCrc32c(*headers, &extracted)); |
| + uint32_t extracted; |
| + ASSERT_TRUE( |
| + AttachmentDownloaderImpl::ExtractCrc32c(headers.get(), &extracted)); |
| ASSERT_EQ(expected, extracted); |
| } |
| +// Verify that extract fails when encoded value is too long. |
| +TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_TooLong) { |
|
maniscalco
2014/11/11 00:44:54
Good one!
|
| + std::string raw; |
| + raw += "HTTP/1.1 200 OK\n"; |
| + raw += "Foo: bar\n"; |
| + raw += "X-Goog-HASH: crc32c=AAAAAAAA\n"; |
| + raw += "\n"; |
| + std::replace(raw.begin(), raw.end(), '\n', '\0'); |
| + scoped_refptr<net::HttpResponseHeaders> headers( |
| + new net::HttpResponseHeaders(raw)); |
| + uint32_t extracted; |
| + ASSERT_FALSE( |
| + AttachmentDownloaderImpl::ExtractCrc32c(headers.get(), &extracted)); |
| +} |
| + |
| // Verify that extract fails if there is no crc32c. |
| TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_None) { |
| std::string raw; |
| @@ -465,8 +491,9 @@ TEST_F(AttachmentDownloaderImplTest, ExtractCrc32c_None) { |
| std::replace(raw.begin(), raw.end(), '\n', '\0'); |
| scoped_refptr<net::HttpResponseHeaders> headers( |
| new net::HttpResponseHeaders(raw)); |
| - std::string extracted; |
| - ASSERT_FALSE(AttachmentDownloaderImpl::ExtractCrc32c(*headers, &extracted)); |
| + uint32_t extracted; |
| + ASSERT_FALSE( |
| + AttachmentDownloaderImpl::ExtractCrc32c(headers.get(), &extracted)); |
| } |
| } // namespace syncer |