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

Unified Diff: components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc

Issue 1153543016: Trigger LoFi based on NQE and use hysteresis to prevent frequent changes in network quality (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Change in connection type triggers change in network quality despite hysteresis. Created 5 years, 6 months 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 side-by-side diff with in-line comments
Download patch
Index: components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc
diff --git a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc
index b1e6316653ff7d05c81c143730f5aebd731eda3f..26f726dff3bcb095f62e75950aa01bfc068663cb 100644
--- a/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc
+++ b/components/data_reduction_proxy/core/browser/data_reduction_proxy_config_unittest.cc
@@ -8,6 +8,7 @@
#include "base/command_line.h"
#include "base/metrics/field_trial.h"
+#include "base/strings/safe_sprintf.h"
#include "base/strings/string_util.h"
#include "base/time/time.h"
#include "components/data_reduction_proxy/core/browser/data_reduction_proxy_config_test_utils.h"
@@ -19,6 +20,8 @@
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_params_test_utils.h"
#include "components/data_reduction_proxy/core/common/data_reduction_proxy_switches.h"
#include "components/variations/variations_associated_data.h"
+#include "net/base/network_quality.h"
+#include "net/base/network_quality_estimator.h"
#include "net/http/http_status_code.h"
#include "net/log/test_net_log.h"
#include "net/proxy/proxy_server.h"
@@ -1213,30 +1216,95 @@ TEST_F(DataReductionProxyConfigTest, LoFiStatusTransition) {
}
}
-TEST_F(DataReductionProxyConfigTest, PopulateAutoLoFiParams) {
+// Overrides net::NetworkQualityEstimator::GetEstimate() for testing purposes.
+class TestNetworkQualityEstimator : public net::NetworkQualityEstimator {
+ public:
+ TestNetworkQualityEstimator() : rtt_(base::TimeDelta()), kbps_(0) {}
+
+ ~TestNetworkQualityEstimator() override {}
+
+ net::NetworkQuality GetEstimate() const override {
+ return net::NetworkQuality(rtt_, 0.0, kbps_, 0.0);
+ }
+
+ void SetRtt(base::TimeDelta rtt) { rtt_ = rtt; }
+
+ void SetKbps(uint64_t kbps) { kbps_ = kbps; }
+
+ private:
+ base::TimeDelta rtt_;
+ uint64_t kbps_;
+};
+
+TEST_F(DataReductionProxyConfigTest, AutoLoFiParams) {
+ DataReductionProxyConfig config(nullptr, nullptr, configurator(),
+ event_creator());
variations::testing::ClearAllVariationParams();
std::map<std::string, std::string> variation_params;
- variation_params["rtt_msec"] = "120";
+
+ int rtt_msec = 120;
+ char rtt[20];
+ base::strings::SafeSPrintf(rtt, "%d", rtt_msec);
+ variation_params["rtt_msec"] = rtt;
+
variation_params["kbps"] = "240";
- variation_params["hysteresis_period_seconds"] = "360";
+
+ int hysteresis_sec = 360;
+ char hysteresis[20];
+ base::strings::SafeSPrintf(hysteresis, "%d", hysteresis_sec);
+ variation_params["hysteresis_period_seconds"] = hysteresis;
+
variation_params["spurious_field"] = "480";
ASSERT_TRUE(variations::AssociateVariationParams(
DataReductionProxyParams::GetLoFiFieldTrialName(), "Enabled",
variation_params));
- EXPECT_CALL(*config(), IsIncludedInLoFiEnabledFieldTrial())
- .WillRepeatedly(testing::Return(true));
base::FieldTrialList field_trial_list(nullptr);
base::FieldTrialList::CreateFieldTrial(
DataReductionProxyParams::GetLoFiFieldTrialName(), "Enabled");
- config()->PopulateAutoLoFiParams();
-
- EXPECT_EQ(config()->auto_lofi_minimum_rtt_,
- base::TimeDelta::FromMilliseconds(120));
- EXPECT_EQ(config()->auto_lofi_maximum_kbps_, 240U);
- EXPECT_EQ(config()->auto_lofi_hysteresis_, base::TimeDelta::FromSeconds(360));
+ config.PopulateAutoLoFiParams();
+
+ EXPECT_EQ(base::TimeDelta::FromMilliseconds(rtt_msec),
+ config.auto_lofi_minimum_rtt_);
+ EXPECT_EQ(240U, config.auto_lofi_maximum_kbps_);
+ EXPECT_EQ(base::TimeDelta::FromSeconds(hysteresis_sec),
+ config.auto_lofi_hysteresis_);
+
+ TestNetworkQualityEstimator test_network_quality_estimator;
+
+ // RTT is higher than threshold. Network is slow.
+ test_network_quality_estimator.SetRtt(
+ base::TimeDelta::FromMilliseconds(rtt_msec + 1));
+ EXPECT_TRUE(config.IsNetworkQualityProhibitivelySlow(
+ &test_network_quality_estimator));
+
+ // Network quality improved. RTT is lower than the threshold. However,
+ // network should still be marked as slow because of hysteresis.
+ test_network_quality_estimator.SetRtt(
+ base::TimeDelta::FromMilliseconds(rtt_msec - 1));
+ EXPECT_TRUE(config.IsNetworkQualityProhibitivelySlow(
+ &test_network_quality_estimator));
+
+ // Change the last update time to be older than the hysteresis duration.
+ // Checking network quality afterwards should show that network is no longer
+ // slow.
+ config.network_quality_last_updated_ =
+ base::TimeTicks::Now() - base::TimeDelta::FromSeconds(hysteresis_sec + 1);
+ EXPECT_FALSE(config.IsNetworkQualityProhibitivelySlow(
+ &test_network_quality_estimator));
+
+ // Changing the RTT has no effect because of hysteresis.
+ test_network_quality_estimator.SetRtt(
+ base::TimeDelta::FromMilliseconds(rtt_msec + 1));
+ EXPECT_FALSE(config.IsNetworkQualityProhibitivelySlow(
+ &test_network_quality_estimator));
+
+ // Change in connection type changes the network quality despite hysteresis.
+ config.connection_type_ = net::NetworkChangeNotifier::CONNECTION_WIFI;
+ EXPECT_TRUE(config.IsNetworkQualityProhibitivelySlow(
+ &test_network_quality_estimator));
}
} // namespace data_reduction_proxy

Powered by Google App Engine
This is Rietveld 408576698