Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_unittest.cc |
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_unittest.cc |
index 6b44ceb5b70b51f6579cc46d344fc2cc741226a1..f8e7c0f36dc6f72a5fc595e82695d5c5d8fbc1b4 100644 |
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_unittest.cc |
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_service_client_unittest.cc |
@@ -7,8 +7,10 @@ |
#include <string> |
#include "base/memory/scoped_ptr.h" |
+#include "base/time/tick_clock.h" |
#include "base/values.h" |
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h" |
+#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_configurator_test_utils.h" |
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_test_utils.h" |
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_client_config_parser.h" |
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params.h" |
@@ -19,7 +21,34 @@ |
namespace data_reduction_proxy { |
-class DataReductionProxyConfigClientTest : public testing::Test { |
+namespace { |
+ |
+class RequestOptionsPopulator { |
+ public: |
+ RequestOptionsPopulator(const base::Time& expiration_time, |
+ const base::TimeDelta& increment) |
+ : expiration_time_(expiration_time), |
+ increment_(increment) { |
+ } |
+ |
+ void PopulateResponse(base::DictionaryValue* response) { |
+ response->SetString("sessionKey", "abcdef|1234-5678-12345678"); |
+ response->SetString("expireTime", |
+ config_parser::TimeToISO8601(expiration_time_)); |
+ expiration_time_ += increment_; |
+ } |
+ |
+ private: |
+ base::Time expiration_time_; |
+ base::TimeDelta increment_; |
+}; |
+ |
+void PopulateResponseFailure(base::DictionaryValue* response) { |
+} |
+ |
+} // namespace |
+ |
+class DataReductionProxyConfigServiceClientTest : public testing::Test { |
protected: |
void SetUp() override { |
test_context_ = |
@@ -28,20 +57,62 @@ class DataReductionProxyConfigClientTest : public testing::Test { |
DataReductionProxyParams::kFallbackAllowed | |
DataReductionProxyParams::kPromoAllowed) |
.WithParamsDefinitions(TestDataReductionProxyParams::HAS_EVERYTHING) |
+ .WithTestConfigurator() |
+ .WithMockRequestOptions() |
+ .WithTestConfigClient() |
.Build(); |
+ test_context_->test_config_client()->SetCustomReleaseTime( |
+ base::TimeTicks::UnixEpoch()); |
+ test_context_->test_config_client()->SetNow(base::Time::UnixEpoch()); |
+ } |
+ |
+ void SetDataReductionProxyEnabled(bool enabled) { |
+ test_context_->config()->SetStateForTest(enabled, false, false); |
} |
scoped_ptr<DataReductionProxyConfigServiceClient> BuildConfigClient() { |
- return make_scoped_ptr(new DataReductionProxyConfigServiceClient( |
- test_context_->config()->test_params(), |
- test_context_->io_data()->request_options())); |
+ scoped_ptr<DataReductionProxyParams> params(new DataReductionProxyParams( |
+ DataReductionProxyParams::kAllowed | |
+ DataReductionProxyParams::kFallbackAllowed | |
+ DataReductionProxyParams::kPromoAllowed)); |
+ request_options_.reset( |
+ new DataReductionProxyRequestOptions(Client::UNKNOWN, |
+ test_context_->io_data()->config(), |
+ test_context_->task_runner())); |
+ return scoped_ptr<DataReductionProxyConfigServiceClient>( |
+ new DataReductionProxyConfigServiceClient( |
+ params.Pass(), GetBackoffPolicy(), |
+ request_options_.get(), |
+ test_context_->mutable_config_values(), |
+ test_context_->io_data()->config(), test_context_->task_runner())); |
+ } |
+ |
+ DataReductionProxyParams* params() { |
+ return test_context_->test_params(); |
+ } |
+ |
+ TestDataReductionProxyConfigServiceClient* config_client() { |
+ return test_context_->test_config_client(); |
+ } |
+ |
+ TestDataReductionProxyConfigurator* configurator() { |
+ return test_context_->test_configurator(); |
+ } |
+ |
+ MockDataReductionProxyRequestOptions* request_options() { |
+ return test_context_->mock_request_options(); |
+ } |
+ |
+ void RunUntilIdle() { |
+ test_context_->RunUntilIdle(); |
} |
private: |
scoped_ptr<DataReductionProxyTestContext> test_context_; |
+ scoped_ptr<DataReductionProxyRequestOptions> request_options_; |
}; |
-TEST_F(DataReductionProxyConfigClientTest, TestConstructStaticResponse) { |
+TEST_F(DataReductionProxyConfigServiceClientTest, TestConstructStaticResponse) { |
scoped_ptr<DataReductionProxyConfigServiceClient> config_client = |
BuildConfigClient(); |
std::string config_data = config_client->ConstructStaticResponse(); |
@@ -49,4 +120,93 @@ TEST_F(DataReductionProxyConfigClientTest, TestConstructStaticResponse) { |
EXPECT_TRUE(config_parser::ParseClientConfig(config_data, &config)); |
} |
+TEST_F(DataReductionProxyConfigServiceClientTest, SuccessfulLoop) { |
+ RequestOptionsPopulator populator( |
+ base::Time::UnixEpoch() + base::TimeDelta::FromDays(1), |
+ base::TimeDelta::FromDays(1)); |
+ SetDataReductionProxyEnabled(true); |
+ EXPECT_TRUE(configurator()->origin().empty()); |
+ EXPECT_TRUE(configurator()->fallback_origin().empty()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+ EXPECT_CALL(*request_options(), PopulateConfigResponse(testing::_)) |
+ .Times(2) |
+ .WillRepeatedly( |
+ testing::Invoke(&populator, |
+ &RequestOptionsPopulator::PopulateResponse)); |
+ RunUntilIdle(); |
+ EXPECT_EQ(base::TimeDelta::FromDays(1), config_client()->GetDelay()); |
+ EXPECT_EQ(params()->origin().ToURI(), configurator()->origin()); |
+ EXPECT_EQ(params()->fallback_origin().ToURI(), |
+ configurator()->fallback_origin()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+ config_client()->SetNow(base::Time::UnixEpoch() + base::TimeDelta::FromDays(1) |
+ + base::TimeDelta::FromSeconds(5)); |
+ config_client()->RetrieveConfig(); |
+ EXPECT_EQ(base::TimeDelta::FromDays(1) - base::TimeDelta::FromSeconds(5), |
+ config_client()->GetDelay()); |
+ EXPECT_EQ(params()->origin().ToURI(), configurator()->origin()); |
+ EXPECT_EQ(params()->fallback_origin().ToURI(), |
+ configurator()->fallback_origin()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+} |
+ |
+TEST_F(DataReductionProxyConfigServiceClientTest, SuccessfulLoopShortDuration) { |
+ RequestOptionsPopulator populator( |
+ base::Time::UnixEpoch() + base::TimeDelta::FromSeconds(1), |
+ base::TimeDelta::FromSeconds(1)); |
+ SetDataReductionProxyEnabled(true); |
+ EXPECT_TRUE(configurator()->origin().empty()); |
+ EXPECT_TRUE(configurator()->fallback_origin().empty()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+ EXPECT_CALL(*request_options(), PopulateConfigResponse(testing::_)) |
+ .Times(1) |
+ .WillOnce(testing::Invoke(&populator, |
+ &RequestOptionsPopulator::PopulateResponse)); |
+ RunUntilIdle(); |
+ EXPECT_EQ(base::TimeDelta::FromSeconds(10), config_client()->GetDelay()); |
+ EXPECT_EQ(params()->origin().ToURI(), configurator()->origin()); |
+ EXPECT_EQ(params()->fallback_origin().ToURI(), |
+ configurator()->fallback_origin()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+} |
+ |
+TEST_F(DataReductionProxyConfigServiceClientTest, EnsureBackoff) { |
+ SetDataReductionProxyEnabled(true); |
+ EXPECT_TRUE(configurator()->origin().empty()); |
+ EXPECT_TRUE(configurator()->fallback_origin().empty()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+ EXPECT_CALL(*request_options(), PopulateConfigResponse(testing::_)) |
+ .Times(2) |
+ .WillRepeatedly(testing::Invoke(&PopulateResponseFailure)); |
+ config_client()->RetrieveConfig(); |
+ EXPECT_TRUE(configurator()->origin().empty()); |
+ EXPECT_TRUE(configurator()->fallback_origin().empty()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+ EXPECT_EQ(base::TimeDelta::FromSeconds(20), config_client()->GetDelay()); |
+ config_client()->RetrieveConfig(); |
+ EXPECT_TRUE(configurator()->origin().empty()); |
+ EXPECT_TRUE(configurator()->fallback_origin().empty()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+ EXPECT_EQ(base::TimeDelta::FromSeconds(40), config_client()->GetDelay()); |
+} |
+ |
+TEST_F(DataReductionProxyConfigServiceClientTest, ConfigDisabled) { |
+ RequestOptionsPopulator populator( |
+ base::Time::UnixEpoch() + base::TimeDelta::FromDays(1), |
+ base::TimeDelta::FromDays(1)); |
+ SetDataReductionProxyEnabled(false); |
+ EXPECT_TRUE(configurator()->origin().empty()); |
+ EXPECT_TRUE(configurator()->fallback_origin().empty()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+ EXPECT_CALL(*request_options(), PopulateConfigResponse(testing::_)) |
+ .Times(1) |
+ .WillOnce(testing::Invoke(&populator, |
+ &RequestOptionsPopulator::PopulateResponse)); |
+ RunUntilIdle(); |
+ EXPECT_TRUE(configurator()->origin().empty()); |
+ EXPECT_TRUE(configurator()->fallback_origin().empty()); |
+ EXPECT_TRUE(configurator()->ssl_origin().empty()); |
+ EXPECT_EQ(base::TimeDelta::FromDays(1), config_client()->GetDelay()); |
+} |
+ |
} // namespace data_reduction_proxy |