Index: third_party/libaddressinput/chromium/cpp/test/retriever_test.cc |
diff --git a/third_party/libaddressinput/chromium/cpp/test/retriever_test.cc b/third_party/libaddressinput/chromium/cpp/test/retriever_test.cc |
deleted file mode 100644 |
index 90c9099069b195a641bb729dddcc22c2d266971c..0000000000000000000000000000000000000000 |
--- a/third_party/libaddressinput/chromium/cpp/test/retriever_test.cc |
+++ /dev/null |
@@ -1,335 +0,0 @@ |
-// Copyright (C) 2013 Google Inc. |
-// |
-// Licensed under the Apache License, Version 2.0 (the "License"); |
-// you may not use this file except in compliance with the License. |
-// You may obtain a copy of the License at |
-// |
-// http://www.apache.org/licenses/LICENSE-2.0 |
-// |
-// Unless required by applicable law or agreed to in writing, software |
-// distributed under the License is distributed on an "AS IS" BASIS, |
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-// See the License for the specific language governing permissions and |
-// limitations under the License. |
- |
-#include "retriever.h" |
- |
-#include <libaddressinput/callback.h> |
-#include <libaddressinput/downloader.h> |
-#include <libaddressinput/storage.h> |
-#include <libaddressinput/util/scoped_ptr.h> |
- |
-#include <cstddef> |
-#include <ctime> |
-#include <string> |
- |
-#include <gtest/gtest.h> |
- |
-#include "fake_downloader.h" |
-#include "fake_storage.h" |
-#include "region_data_constants.h" |
-#include "util/string_util.h" |
- |
-namespace i18n { |
-namespace addressinput { |
- |
-namespace { |
- |
-const char kKey[] = "data/CA"; |
- |
-// Empty data that the downloader can return. |
-const char kEmptyData[] = "{}"; |
- |
-// The MD5 checksum for kEmptyData. Retriever uses MD5 to validate data |
-// integrity. |
-const char kEmptyDataChecksum[] = "99914b932bd37a50b983c5e7c90ae93b"; |
- |
-scoped_ptr<std::string> Wrap(const std::string& data, |
- const std::string& checksum, |
- const std::string& timestamp) { |
- return make_scoped_ptr(new std::string( |
- data + "\n" + "checksum=" + checksum + "\n" + "timestamp=" + timestamp)); |
-} |
- |
-} // namespace |
- |
-// Tests for Retriever object. |
-class RetrieverTest : public testing::Test { |
- protected: |
- RetrieverTest() |
- : storage_(NULL), |
- retriever_(), |
- success_(false), |
- key_(), |
- data_(), |
- reject_empty_data_(false) { |
- ResetRetriever(FakeDownloader::kFakeDataUrl); |
- } |
- |
- virtual ~RetrieverTest() {} |
- |
- scoped_ptr<Retriever::Callback> BuildCallback() { |
- return ::i18n::addressinput::BuildCallback( |
- this, &RetrieverTest::OnDataReady); |
- } |
- |
- void ResetRetriever(const std::string& url) { |
- storage_ = new FakeStorage; |
- retriever_.reset( |
- new Retriever(url, |
- scoped_ptr<Downloader>(new FakeDownloader), |
- scoped_ptr<Storage>(storage_))); |
- } |
- |
- std::string GetUrlForKey(const std::string& key) { |
- return retriever_->GetUrlForKey(key); |
- } |
- |
- std::string GetKeyForUrl(const std::string& url) { |
- return retriever_->GetKeyForUrl(url); |
- } |
- |
- FakeStorage* storage_; // Owned by |retriever_|. |
- scoped_ptr<Retriever> retriever_; |
- bool success_; |
- std::string key_; |
- std::string data_; |
- bool reject_empty_data_; |
- |
- private: |
- bool OnDataReady(bool success, |
- const std::string& key, |
- const std::string& data) { |
- success_ = success; |
- key_ = key; |
- data_ = data; |
- return !reject_empty_data_ || data_ != kEmptyData; |
- } |
-}; |
- |
-TEST_F(RetrieverTest, RegionHasData) { |
- const std::vector<std::string>& region_codes = |
- RegionDataConstants::GetRegionCodes(); |
- for (size_t i = 0; i < region_codes.size(); ++i) { |
- std::string key = "data/" + region_codes[i]; |
- SCOPED_TRACE("For key: " + key); |
- |
- retriever_->Retrieve(key, BuildCallback()); |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(key, key_); |
- EXPECT_FALSE(data_.empty()); |
- EXPECT_NE(kEmptyData, data_); |
- } |
-} |
- |
-TEST_F(RetrieverTest, RetrieveData) { |
- retriever_->Retrieve(kKey, BuildCallback()); |
- |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kKey, key_); |
- EXPECT_FALSE(data_.empty()); |
- EXPECT_NE(kEmptyData, data_); |
-} |
- |
-TEST_F(RetrieverTest, ReadDataFromStorage) { |
- retriever_->Retrieve(kKey, BuildCallback()); |
- retriever_->Retrieve(kKey, BuildCallback()); |
- |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kKey, key_); |
- EXPECT_FALSE(data_.empty()); |
- EXPECT_NE(kEmptyData, data_); |
-} |
- |
-TEST_F(RetrieverTest, MissingKeyReturnsEmptyData) { |
- static const char kMissingKey[] = "junk"; |
- |
- retriever_->Retrieve(kMissingKey, BuildCallback()); |
- |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kMissingKey, key_); |
- EXPECT_EQ(kEmptyData, data_); |
-} |
- |
-// The downloader that always fails. |
-class FaultyDownloader : public Downloader { |
- public: |
- FaultyDownloader() {} |
- virtual ~FaultyDownloader() {} |
- |
- // Downloader implementation. |
- virtual void Download(const std::string& url, |
- scoped_ptr<Callback> downloaded) { |
- (*downloaded)(false, url, make_scoped_ptr(new std::string("garbage"))); |
- } |
-}; |
- |
-TEST_F(RetrieverTest, FaultyDownloader) { |
- Retriever bad_retriever(FakeDownloader::kFakeDataUrl, |
- scoped_ptr<Downloader>(new FaultyDownloader), |
- scoped_ptr<Storage>(new FakeStorage)); |
- bad_retriever.Retrieve(kKey, BuildCallback()); |
- |
- EXPECT_FALSE(success_); |
- EXPECT_EQ(kKey, key_); |
- EXPECT_TRUE(data_.empty()); |
-} |
- |
-TEST_F(RetrieverTest, FaultyDownloaderFallback) { |
- Retriever bad_retriever(FakeDownloader::kFakeDataUrl, |
- scoped_ptr<Downloader>(new FaultyDownloader), |
- scoped_ptr<Storage>(new FakeStorage)); |
- const char kFallbackDataKey[] = "data/US"; |
- bad_retriever.Retrieve(kFallbackDataKey, BuildCallback()); |
- |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kFallbackDataKey, key_); |
- EXPECT_FALSE(data_.empty()); |
- EXPECT_NE(kEmptyData, data_); |
-} |
- |
-TEST_F(RetrieverTest, NoChecksumAndTimestampWillRedownload) { |
- storage_->Put(kKey, make_scoped_ptr(new std::string(kEmptyData))); |
- retriever_->Retrieve(kKey, BuildCallback()); |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kKey, key_); |
- EXPECT_FALSE(data_.empty()); |
- EXPECT_NE(kEmptyData, data_); |
-} |
- |
-TEST_F(RetrieverTest, ChecksumAndTimestampWillNotRedownload) { |
- storage_->Put(kKey, |
- Wrap(kEmptyData, kEmptyDataChecksum, TimeToString(time(NULL)))); |
- retriever_->Retrieve(kKey, BuildCallback()); |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kKey, key_); |
- EXPECT_EQ(kEmptyData, data_); |
-} |
- |
-TEST_F(RetrieverTest, OldTimestampWillRedownload) { |
- storage_->Put(kKey, Wrap(kEmptyData, kEmptyDataChecksum, "0")); |
- retriever_->Retrieve(kKey, BuildCallback()); |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kKey, key_); |
- EXPECT_FALSE(data_.empty()); |
- EXPECT_NE(kEmptyData, data_); |
-} |
- |
-TEST_F(RetrieverTest, JunkDataRedownloads) { |
- ResetRetriever(std::string(FakeDownloader::kFakeDataUrl)); |
- storage_->Put(kKey, |
- Wrap(kEmptyData, kEmptyDataChecksum, TimeToString(time(NULL)))); |
- reject_empty_data_ = true; |
- retriever_->Retrieve(kKey, BuildCallback()); |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kKey, key_); |
- EXPECT_FALSE(data_.empty()); |
- EXPECT_NE(kEmptyData, data_); |
- |
- // After verifying it's correct, it's saved in storage. |
- EXPECT_EQ(data_, storage_->SynchronousGet(kKey).substr(0, data_.size())); |
-} |
- |
-TEST_F(RetrieverTest, JunkDataIsntStored) { |
- // Data the retriever accepts is stored in |storage_|. |
- ResetRetriever("test:///"); |
- const std::string not_a_key("foobar"); |
- retriever_->Retrieve(not_a_key, BuildCallback()); |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(not_a_key, key_); |
- EXPECT_FALSE(data_.empty()); |
- EXPECT_EQ(kEmptyData, data_); |
- EXPECT_EQ( |
- kEmptyData, |
- storage_->SynchronousGet(not_a_key).substr(0, sizeof kEmptyData - 1)); |
- |
- // Try again, but this time reject the data. |
- reject_empty_data_ = true; |
- ResetRetriever("test:///"); |
- EXPECT_EQ("", storage_->SynchronousGet(not_a_key)); |
- retriever_->Retrieve(not_a_key, BuildCallback()); |
- |
- // Falls back to the fallback, which doesn't have data for Canada. |
- EXPECT_FALSE(success_); |
- EXPECT_EQ(not_a_key, key_); |
- EXPECT_TRUE(data_.empty()); |
- |
- // Since the retriever is rejecting empty data, it shouldn't be stored. |
- EXPECT_EQ("", storage_->SynchronousGet(not_a_key)); |
-} |
- |
-TEST_F(RetrieverTest, OldTimestampOkIfDownloadFails) { |
- storage_ = new FakeStorage; |
- Retriever bad_retriever(FakeDownloader::kFakeDataUrl, |
- scoped_ptr<Downloader>(new FaultyDownloader), |
- scoped_ptr<Storage>(storage_)); |
- storage_->Put(kKey, Wrap(kEmptyData, kEmptyDataChecksum, "0")); |
- bad_retriever.Retrieve(kKey, BuildCallback()); |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kKey, key_); |
- EXPECT_EQ(kEmptyData, data_); |
-} |
- |
-TEST_F(RetrieverTest, WrongChecksumWillRedownload) { |
- static const char kNonEmptyData[] = "{\"non-empty\": \"data\"}"; |
- storage_->Put( |
- kKey, |
- Wrap(kNonEmptyData, kEmptyDataChecksum, TimeToString(time(NULL)))); |
- retriever_->Retrieve(kKey, BuildCallback()); |
- EXPECT_TRUE(success_); |
- EXPECT_EQ(kKey, key_); |
- EXPECT_FALSE(data_.empty()); |
- EXPECT_NE(kNonEmptyData, data_); |
-} |
- |
-// The downloader that doesn't get back to you. |
-class HangingDownloader : public Downloader { |
- public: |
- HangingDownloader() {} |
- virtual ~HangingDownloader() {} |
- |
- // Downloader implementation. |
- virtual void Download(const std::string& url, |
- scoped_ptr<Callback> downloaded) {} |
-}; |
- |
-TEST_F(RetrieverTest, RequestsDontStack) { |
- Retriever slow_retriever(FakeDownloader::kFakeDataUrl, |
- scoped_ptr<Downloader>(new HangingDownloader), |
- scoped_ptr<Storage>(new FakeStorage)); |
- |
- slow_retriever.Retrieve(kKey, BuildCallback()); |
- EXPECT_FALSE(success_); |
- EXPECT_TRUE(key_.empty()); |
- |
- EXPECT_NO_FATAL_FAILURE(slow_retriever.Retrieve(kKey, BuildCallback())); |
-} |
- |
-TEST_F(RetrieverTest, GetUrlForKey) { |
- ResetRetriever("test:///"); |
- EXPECT_EQ("test:///", GetUrlForKey("")); |
- EXPECT_EQ("test:///data", GetUrlForKey("data")); |
- EXPECT_EQ("test:///data/US", GetUrlForKey("data/US")); |
- EXPECT_EQ("test:///data/CA--fr", GetUrlForKey("data/CA--fr")); |
-} |
- |
-TEST_F(RetrieverTest, GetKeyForUrl) { |
- ResetRetriever("test:///"); |
- EXPECT_EQ("", GetKeyForUrl("test://")); |
- EXPECT_EQ("", GetKeyForUrl("http://www.google.com/")); |
- EXPECT_EQ("", GetKeyForUrl("")); |
- EXPECT_EQ("", GetKeyForUrl("test:///")); |
- EXPECT_EQ("data", GetKeyForUrl("test:///data")); |
- EXPECT_EQ("data/US", GetKeyForUrl("test:///data/US")); |
- EXPECT_EQ("data/CA--fr", GetKeyForUrl("test:///data/CA--fr")); |
-} |
- |
-TEST_F(RetrieverTest, NullCallbackNoCrash) { |
- ASSERT_NO_FATAL_FAILURE( |
- retriever_->Retrieve(kKey, scoped_ptr<Retriever::Callback>())); |
- ASSERT_NO_FATAL_FAILURE( |
- retriever_->Retrieve(kKey, scoped_ptr<Retriever::Callback>())); |
-} |
- |
-} // namespace addressinput |
-} // namespace i18n |