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

Unified Diff: net/nqe/network_quality_store_unittest.cc

Issue 2128793003: Factor out NetworkID and caching mechanism from n_q_e.{h,cc} (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Addressed bengr comments, renamed the class from *Manager to *Store Created 4 years, 5 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: net/nqe/network_quality_store_unittest.cc
diff --git a/net/nqe/network_quality_store_unittest.cc b/net/nqe/network_quality_store_unittest.cc
new file mode 100644
index 0000000000000000000000000000000000000000..d8807200211203efec675ef04b322305608a5cf6
--- /dev/null
+++ b/net/nqe/network_quality_store_unittest.cc
@@ -0,0 +1,201 @@
+// Copyright 2016 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "net/nqe/network_quality_store.h"
+
+#include "base/strings/string_number_conversions.h"
+#include "base/test/simple_test_tick_clock.h"
+#include "base/time/time.h"
+#include "net/base/network_change_notifier.h"
+#include "net/nqe/cached_network_quality.h"
+#include "net/nqe/network_id.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace net {
+
+namespace {
+
+TEST(NetworkQualityStoreTest, TestCaching) {
+ nqe::internal::NetworkQualityStore network_quality_store;
+ base::SimpleTestTickClock tick_clock;
+
+ // Cached network quality for network with NetworkID (2G, "test1").
+ const nqe::internal::CachedNetworkQuality cached_network_quality_2g_test1(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(1),
+ base::TimeDelta::FromSeconds(1), 1));
+
+ {
+ // Entry will be added for (2G, "test1").
+ nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
+ "test1");
+ nqe::internal::CachedNetworkQuality read_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0), 0));
+ network_quality_store.Add(network_id, cached_network_quality_2g_test1);
+ EXPECT_TRUE(
+ network_quality_store.GetById(network_id, &read_network_quality));
+ EXPECT_EQ(cached_network_quality_2g_test1.network_quality(),
+ read_network_quality.network_quality());
+ }
+
+ {
+ // Entry will be added for (2G, "test2").
+ nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
+ "test2");
+ nqe::internal::CachedNetworkQuality read_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0), 0));
+ nqe::internal::CachedNetworkQuality cached_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(2),
+ base::TimeDelta::FromSeconds(2), 2));
+ network_quality_store.Add(network_id, cached_network_quality);
+ EXPECT_TRUE(
+ network_quality_store.GetById(network_id, &read_network_quality));
+ EXPECT_EQ(read_network_quality.network_quality(),
+ cached_network_quality.network_quality());
+ }
+
+ {
+ // Entry will be added for (3G, "test3").
+ nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_3G,
+ "test3");
+ nqe::internal::CachedNetworkQuality read_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0), 0));
+ nqe::internal::CachedNetworkQuality cached_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(3),
+ base::TimeDelta::FromSeconds(3), 3));
+ network_quality_store.Add(network_id, cached_network_quality);
+ EXPECT_TRUE(
+ network_quality_store.GetById(network_id, &read_network_quality));
+ EXPECT_EQ(read_network_quality.network_quality(),
+ cached_network_quality.network_quality());
+ }
+
+ {
+ // Entry will not be added for (Unknown, "").
+ nqe::internal::NetworkID network_id(
+ NetworkChangeNotifier::CONNECTION_UNKNOWN, "");
+ nqe::internal::CachedNetworkQuality read_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0), 0));
+ nqe::internal::CachedNetworkQuality set_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(4),
+ base::TimeDelta::FromSeconds(4), 4));
+ network_quality_store.Add(network_id, set_network_quality);
+ EXPECT_FALSE(
+ network_quality_store.GetById(network_id, &read_network_quality));
+ }
+
+ {
+ // Existing entry will be read for (2G, "test1").
+ nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
+ "test1");
+ nqe::internal::CachedNetworkQuality read_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0), 0));
+ EXPECT_TRUE(
+ network_quality_store.GetById(network_id, &read_network_quality));
+ EXPECT_EQ(cached_network_quality_2g_test1.network_quality(),
+ read_network_quality.network_quality());
+ }
+
+ {
+ // Existing entry will be overwritten for (2G, "test1").
+ nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
+ "test1");
+ nqe::internal::CachedNetworkQuality read_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0), 0));
+ const nqe::internal::CachedNetworkQuality cached_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(5),
+ base::TimeDelta::FromSeconds(5), 5));
+ network_quality_store.Add(network_id, cached_network_quality);
+ EXPECT_TRUE(
+ network_quality_store.GetById(network_id, &read_network_quality));
+ EXPECT_EQ(cached_network_quality.network_quality(),
+ read_network_quality.network_quality());
+ }
+
+ {
+ // No entry should exist for (2G, "test4").
+ nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
+ "test4");
+ nqe::internal::CachedNetworkQuality read_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0), 0));
+ EXPECT_FALSE(
+ network_quality_store.GetById(network_id, &read_network_quality));
+ }
+}
+
+// Tests if the cache size remains bounded. Also, ensure that the cache is
+// LRU.
+TEST(NetworkQualityStoreTest, TestLRUCacheMaximumSize) {
+ nqe::internal::NetworkQualityStore network_quality_store;
+ base::SimpleTestTickClock tick_clock;
+
+ // Add more networks than the maximum size of the cache.
+ const size_t network_count = 11;
+
+ nqe::internal::CachedNetworkQuality read_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0), 0));
+
+ for (size_t i = 0; i < network_count; ++i) {
+ nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
+ "test" + base::IntToString(i));
+
+ const nqe::internal::CachedNetworkQuality network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(1),
+ base::TimeDelta::FromSeconds(1), 1));
+ network_quality_store.Add(network_id, network_quality);
+ tick_clock.Advance(base::TimeDelta::FromSeconds(1));
+ }
+
+ base::TimeTicks earliest_last_update_time = tick_clock.NowTicks();
+ size_t cache_match_count = 0;
+ for (size_t i = 0; i < network_count; ++i) {
+ nqe::internal::NetworkID network_id(NetworkChangeNotifier::CONNECTION_2G,
+ "test" + base::IntToString(i));
+
+ nqe::internal::CachedNetworkQuality read_network_quality(
+ tick_clock.NowTicks(),
+ nqe::internal::NetworkQuality(base::TimeDelta::FromSeconds(0),
+ base::TimeDelta::FromSeconds(0), 0));
+ if (network_quality_store.GetById(network_id, &read_network_quality)) {
+ cache_match_count++;
+ earliest_last_update_time = std::min(
+ earliest_last_update_time, read_network_quality.last_update_time());
+ }
+ }
+
+ // Ensure that the number of entries in cache are fewer than |network_count|.
+ EXPECT_LT(cache_match_count, network_count);
+ EXPECT_GT(cache_match_count, 0u);
+
+ // Ensure that only LRU entries are cached by comparing the
+ // |earliest_last_update_time|.
+ EXPECT_EQ(
+ tick_clock.NowTicks() - base::TimeDelta::FromSeconds(cache_match_count),
+ earliest_last_update_time);
+}
+
+} // namespace
+
+} // namespace net

Powered by Google App Engine
This is Rietveld 408576698