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

Unified Diff: net/nqe/observation_buffer_unittest.cc

Issue 2367143002: NQE: Cleanup observation buffer code (Closed)
Patch Set: ps Created 4 years, 3 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
« no previous file with comments | « net/nqe/observation_buffer.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/nqe/observation_buffer_unittest.cc
diff --git a/net/nqe/network_quality_observation_unittest.cc b/net/nqe/observation_buffer_unittest.cc
similarity index 74%
rename from net/nqe/network_quality_observation_unittest.cc
rename to net/nqe/observation_buffer_unittest.cc
index f8215a23f4e74c635bd1c3c20520d772af859896..4da54e44ddfd57d65785ffe7da650b07891c11e8 100644
--- a/net/nqe/network_quality_observation_unittest.cc
+++ b/net/nqe/observation_buffer_unittest.cc
@@ -2,30 +2,93 @@
// 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_observation.h"
+#include "net/nqe/observation_buffer.h"
#include <stddef.h>
+#include <memory>
+#include <utility>
#include <vector>
#include "base/logging.h"
#include "base/macros.h"
+#include "base/memory/ptr_util.h"
+#include "base/test/simple_test_tick_clock.h"
#include "base/time/time.h"
+#include "net/nqe/network_quality_observation.h"
#include "net/nqe/network_quality_observation_source.h"
-#include "net/nqe/observation_buffer.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
namespace nqe {
+namespace internal {
+
namespace {
+// Verify that the buffer size is never exceeded.
+TEST(NetworkQualityObservationBufferTest, BoundedBuffer) {
+ ObservationBuffer<int32_t> observation_buffer(1.0);
+ const base::TimeTicks now =
+ base::TimeTicks() + base::TimeDelta::FromSeconds(1);
+ for (int i = 1; i <= 1000; ++i) {
+ observation_buffer.AddObservation(
+ Observation<int32_t>(i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_TCP));
+ // The number of entries should be at most the maximum buffer size.
+ EXPECT_GE(300u, observation_buffer.Size());
+ }
+}
+
+// Test disabled on OS_WIN to avoid linking errors when calling
+// SetTickClockForTesting.
+// TODO(tbansal): crbug.com/651963. Pass the clock through NQE's constructor.
+#if !defined(OS_WIN)
+// Verify that the percentiles are monotonically non-decreasing when a weight is
+// applied.
+TEST(NetworkQualityObservationBufferTest, GetPercentileWithWeights) {
+ std::unique_ptr<base::SimpleTestTickClock> tick_clock(
+ new base::SimpleTestTickClock());
+ base::SimpleTestTickClock* tick_clock_ptr = tick_clock.get();
+
+ ObservationBuffer<int32_t> observation_buffer(0.98);
+ observation_buffer.SetTickClockForTesting(std::move(tick_clock));
+ const base::TimeTicks now = tick_clock_ptr->NowTicks();
+ for (int i = 1; i <= 100; ++i) {
+ tick_clock_ptr->Advance(base::TimeDelta::FromSeconds(1));
+ observation_buffer.AddObservation(Observation<int32_t>(
+ i, tick_clock_ptr->NowTicks(), NETWORK_QUALITY_OBSERVATION_SOURCE_TCP));
+ }
+ EXPECT_EQ(100U, observation_buffer.Size());
+
+ int32_t result_lowest = INT32_MAX;
+ int32_t result_highest = INT32_MIN;
+
+ for (int i = 1; i <= 100; ++i) {
+ // Verify that i'th percentile is more than i-1'th percentile.
+ int32_t result_i;
+ EXPECT_TRUE(observation_buffer.GetPercentile(
+ now, &result_i, i, std::vector<NetworkQualityObservationSource>()));
+ result_lowest = std::min(result_lowest, result_i);
+
+ result_highest = std::max(result_highest, result_i);
+
+ int32_t result_i_1;
+ EXPECT_TRUE(observation_buffer.GetPercentile(
+ now, &result_i_1, i - 1,
+ std::vector<NetworkQualityObservationSource>()));
+
+ EXPECT_LE(result_i_1, result_i);
+ }
+ EXPECT_LT(result_lowest, result_highest);
+}
+#endif
+
// Verifies that the percentiles are correctly computed. All observations have
// the same timestamp.
-TEST(NetworkQualityObservationTest, PercentileSameTimestamps) {
- internal::ObservationBuffer<int32_t> int_buffer(0.5);
- internal::ObservationBuffer<base::TimeDelta> time_delta_buffer(0.5);
+TEST(NetworkQualityObservationBufferTest, PercentileSameTimestamps) {
+ ObservationBuffer<int32_t> int_buffer(0.5);
+ ObservationBuffer<base::TimeDelta> time_delta_buffer(0.5);
ASSERT_EQ(0u, int_buffer.Size());
ASSERT_LT(0u, int_buffer.Capacity());
ASSERT_EQ(0u, time_delta_buffer.Size());
@@ -47,9 +110,9 @@ TEST(NetworkQualityObservationTest, PercentileSameTimestamps) {
// Insert samples from {1,2,3,..., 100}. First insert odd samples, then even
// samples. This helps in verifying that the order of samples does not matter.
for (int i = 1; i <= 99; i += 2) {
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(i), now,
NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
EXPECT_TRUE(int_buffer.GetPercentile(
@@ -63,9 +126,9 @@ TEST(NetworkQualityObservationTest, PercentileSameTimestamps) {
}
for (int i = 2; i <= 100; i += 2) {
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(i), now,
NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
EXPECT_TRUE(int_buffer.GetPercentile(
@@ -118,9 +181,9 @@ TEST(NetworkQualityObservationTest, PercentileSameTimestamps) {
// different timestamps with half the observations being very old and the rest
// of them being very recent. Percentiles should factor in recent observations
// much more heavily than older samples.
-TEST(NetworkQualityObservationTest, PercentileDifferentTimestamps) {
- internal::ObservationBuffer<int32_t> int_buffer(0.5);
- internal::ObservationBuffer<base::TimeDelta> time_delta_buffer(0.5);
+TEST(NetworkQualityObservationBufferTest, PercentileDifferentTimestamps) {
+ ObservationBuffer<int32_t> int_buffer(0.5);
+ ObservationBuffer<base::TimeDelta> time_delta_buffer(0.5);
const base::TimeTicks now = base::TimeTicks::Now();
const base::TimeTicks very_old = now - base::TimeDelta::FromDays(365);
@@ -137,18 +200,18 @@ TEST(NetworkQualityObservationTest, PercentileDifferentTimestamps) {
// First 50 samples have very old timestamp.
for (int i = 1; i <= 50; ++i) {
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
i, very_old, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(i), very_old,
NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
}
// Next 50 (i.e., from 51 to 100) have recent timestamp.
for (int i = 51; i <= 100; ++i) {
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(i), now,
NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
}
@@ -181,9 +244,9 @@ TEST(NetworkQualityObservationTest, PercentileDifferentTimestamps) {
// Verifies that the percentiles are correctly computed when some of the
// observation sources are disallowed. All observations have the same timestamp.
-TEST(NetworkQualityObservationTest, DisallowedObservationSources) {
- internal::ObservationBuffer<int32_t> int_buffer(0.5);
- internal::ObservationBuffer<base::TimeDelta> time_delta_buffer(0.5);
+TEST(NetworkQualityObservationBufferTest, DisallowedObservationSources) {
+ ObservationBuffer<int32_t> int_buffer(0.5);
+ ObservationBuffer<base::TimeDelta> time_delta_buffer(0.5);
const base::TimeTicks now = base::TimeTicks::Now();
int32_t result;
@@ -200,9 +263,9 @@ TEST(NetworkQualityObservationTest, DisallowedObservationSources) {
// Insert samples from {1,2,3,..., 100}. First insert odd samples, then even
// samples. This helps in verifying that the order of samples does not matter.
for (int i = 1; i <= 99; i += 2) {
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(i), now,
NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
}
@@ -210,22 +273,22 @@ TEST(NetworkQualityObservationTest, DisallowedObservationSources) {
// Add samples for TCP and QUIC observations which should not be taken into
// account when computing the percentile.
for (int i = 1; i <= 99; i += 2) {
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
10000, now, NETWORK_QUALITY_OBSERVATION_SOURCE_TCP));
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
10000, now, NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(10000), now,
NETWORK_QUALITY_OBSERVATION_SOURCE_TCP));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(10000), now,
NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC));
}
for (int i = 2; i <= 100; i += 2) {
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(i), now,
NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
}
@@ -269,23 +332,23 @@ TEST(NetworkQualityObservationTest, DisallowedObservationSources) {
}
}
-TEST(NetworkQualityObservationTest, TestGetMedianRTTSince) {
- internal::ObservationBuffer<int32_t> int_buffer(0.5);
- internal::ObservationBuffer<base::TimeDelta> time_delta_buffer(0.5);
+TEST(NetworkQualityObservationBufferTest, TestGetMedianRTTSince) {
+ ObservationBuffer<int32_t> int_buffer(0.5);
+ ObservationBuffer<base::TimeDelta> time_delta_buffer(0.5);
base::TimeTicks now = base::TimeTicks::Now();
base::TimeTicks old = now - base::TimeDelta::FromMilliseconds(1);
ASSERT_NE(old, now);
// First sample has very old timestamp.
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
1, old, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(1), old,
NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
- int_buffer.AddObservation(internal::Observation<int32_t>(
+ int_buffer.AddObservation(Observation<int32_t>(
100, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
- time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
+ time_delta_buffer.AddObservation(Observation<base::TimeDelta>(
base::TimeDelta::FromMilliseconds(100), now,
NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
@@ -327,6 +390,8 @@ TEST(NetworkQualityObservationTest, TestGetMedianRTTSince) {
} // namespace
+} // namespace internal
+
} // namespace nqe
} // namespace net
« no previous file with comments | « net/nqe/observation_buffer.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698