| Index: net/nqe/network_quality_observation_unittest.cc
|
| diff --git a/net/nqe/network_quality_observation_unittest.cc b/net/nqe/network_quality_observation_unittest.cc
|
| deleted file mode 100644
|
| index f8215a23f4e74c635bd1c3c20520d772af859896..0000000000000000000000000000000000000000
|
| --- a/net/nqe/network_quality_observation_unittest.cc
|
| +++ /dev/null
|
| @@ -1,332 +0,0 @@
|
| -// 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_observation.h"
|
| -
|
| -#include <stddef.h>
|
| -
|
| -#include <vector>
|
| -
|
| -#include "base/logging.h"
|
| -#include "base/macros.h"
|
| -#include "base/time/time.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 {
|
| -
|
| -// 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);
|
| - ASSERT_EQ(0u, int_buffer.Size());
|
| - ASSERT_LT(0u, int_buffer.Capacity());
|
| - ASSERT_EQ(0u, time_delta_buffer.Size());
|
| - ASSERT_LT(0u, time_delta_buffer.Capacity());
|
| -
|
| - const base::TimeTicks now = base::TimeTicks::Now();
|
| -
|
| - int32_t result;
|
| - base::TimeDelta time_delta_result;
|
| -
|
| - // Percentiles should be unavailable when no observations are available.
|
| - EXPECT_FALSE(
|
| - int_buffer.GetPercentile(base::TimeTicks(), &result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_FALSE(time_delta_buffer.GetPercentile(
|
| - base::TimeTicks(), &time_delta_result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| -
|
| - // 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>(
|
| - i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
|
| - base::TimeDelta::FromMilliseconds(i), now,
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - EXPECT_TRUE(int_buffer.GetPercentile(
|
| - base::TimeTicks(), &result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - ASSERT_EQ(static_cast<size_t>(i / 2 + 1), int_buffer.Size());
|
| - EXPECT_TRUE(time_delta_buffer.GetPercentile(
|
| - base::TimeTicks(), &time_delta_result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - ASSERT_EQ(static_cast<size_t>(i / 2 + 1), time_delta_buffer.Size());
|
| - }
|
| -
|
| - for (int i = 2; i <= 100; i += 2) {
|
| - int_buffer.AddObservation(internal::Observation<int32_t>(
|
| - i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
|
| - base::TimeDelta::FromMilliseconds(i), now,
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - EXPECT_TRUE(int_buffer.GetPercentile(
|
| - base::TimeTicks(), &result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - ASSERT_EQ(static_cast<size_t>(i / 2 + 50), int_buffer.Size());
|
| - EXPECT_TRUE(time_delta_buffer.GetPercentile(
|
| - base::TimeTicks(), &time_delta_result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - ASSERT_EQ(static_cast<size_t>(i / 2 + 50), time_delta_buffer.Size());
|
| - }
|
| -
|
| - ASSERT_EQ(100u, int_buffer.Size());
|
| - ASSERT_EQ(100u, time_delta_buffer.Size());
|
| -
|
| - for (int i = 0; i <= 100; ++i) {
|
| - // Checks if the difference between the two integers is less than 1. This is
|
| - // required because computed percentiles may be slightly different from
|
| - // what is expected due to floating point computation errors and integer
|
| - // rounding off errors.
|
| - EXPECT_TRUE(int_buffer.GetPercentile(
|
| - base::TimeTicks(), &result, i,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_TRUE(time_delta_buffer.GetPercentile(
|
| - base::TimeTicks(), &time_delta_result, i,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_NEAR(result, i, 1);
|
| - EXPECT_NEAR(time_delta_result.InMilliseconds(), i, 1);
|
| - }
|
| -
|
| - EXPECT_FALSE(int_buffer.GetPercentile(
|
| - now + base::TimeDelta::FromSeconds(1), &result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_FALSE(time_delta_buffer.GetPercentile(
|
| - now + base::TimeDelta::FromSeconds(1), &time_delta_result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| -
|
| - // Percentiles should be unavailable when no observations are available.
|
| - int_buffer.Clear();
|
| - time_delta_buffer.Clear();
|
| - EXPECT_FALSE(
|
| - int_buffer.GetPercentile(base::TimeTicks(), &result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_FALSE(time_delta_buffer.GetPercentile(
|
| - base::TimeTicks(), &time_delta_result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| -}
|
| -
|
| -// Verifies that the percentiles are correctly computed. Observations have
|
| -// 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);
|
| - const base::TimeTicks now = base::TimeTicks::Now();
|
| - const base::TimeTicks very_old = now - base::TimeDelta::FromDays(365);
|
| -
|
| - int32_t result;
|
| - base::TimeDelta time_delta_result;
|
| -
|
| - // Network quality should be unavailable when no observations are available.
|
| - EXPECT_FALSE(
|
| - int_buffer.GetPercentile(base::TimeTicks(), &result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_FALSE(time_delta_buffer.GetPercentile(
|
| - base::TimeTicks(), &time_delta_result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| -
|
| - // First 50 samples have very old timestamp.
|
| - for (int i = 1; i <= 50; ++i) {
|
| - int_buffer.AddObservation(internal::Observation<int32_t>(
|
| - i, very_old, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - time_delta_buffer.AddObservation(internal::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>(
|
| - i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
|
| - base::TimeDelta::FromMilliseconds(i), now,
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - }
|
| -
|
| - // Older samples have very little weight. So, all percentiles are >= 51
|
| - // (lowest value among recent observations).
|
| - for (int i = 1; i < 100; ++i) {
|
| - // Checks if the difference between the two integers is less than 1. This is
|
| - // required because computed percentiles may be slightly different from
|
| - // what is expected due to floating point computation errors and integer
|
| - // rounding off errors.
|
| - EXPECT_TRUE(int_buffer.GetPercentile(
|
| - base::TimeTicks(), &result, i,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_NEAR(result, 51 + 0.49 * i, 1);
|
| -
|
| - EXPECT_TRUE(time_delta_buffer.GetPercentile(
|
| - base::TimeTicks(), &time_delta_result, i,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_NEAR(time_delta_result.InMilliseconds(), 51 + 0.49 * i, 1);
|
| - }
|
| -
|
| - EXPECT_FALSE(int_buffer.GetPercentile(
|
| - now + base::TimeDelta::FromSeconds(1), &result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_FALSE(time_delta_buffer.GetPercentile(
|
| - now + base::TimeDelta::FromSeconds(1), &time_delta_result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| -}
|
| -
|
| -// 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);
|
| - const base::TimeTicks now = base::TimeTicks::Now();
|
| -
|
| - int32_t result;
|
| - base::TimeDelta time_delta_result;
|
| -
|
| - // Network quality should be unavailable when no observations are available.
|
| - EXPECT_FALSE(
|
| - int_buffer.GetPercentile(base::TimeTicks(), &result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| - EXPECT_FALSE(time_delta_buffer.GetPercentile(
|
| - base::TimeTicks(), &time_delta_result, 50,
|
| - std::vector<NetworkQualityObservationSource>()));
|
| -
|
| - // 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>(
|
| - i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
|
| - base::TimeDelta::FromMilliseconds(i), now,
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - }
|
| -
|
| - // 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>(
|
| - 10000, now, NETWORK_QUALITY_OBSERVATION_SOURCE_TCP));
|
| - int_buffer.AddObservation(internal::Observation<int32_t>(
|
| - 10000, now, NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC));
|
| - time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
|
| - base::TimeDelta::FromMilliseconds(10000), now,
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_TCP));
|
| - time_delta_buffer.AddObservation(internal::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>(
|
| - i, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
|
| - base::TimeDelta::FromMilliseconds(i), now,
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - }
|
| -
|
| - std::vector<NetworkQualityObservationSource> disallowed_observation_sources;
|
| - disallowed_observation_sources.push_back(
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_TCP);
|
| - disallowed_observation_sources.push_back(
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_QUIC);
|
| -
|
| - for (int i = 0; i <= 100; ++i) {
|
| - // Checks if the difference between the two integers is less than 1. This is
|
| - // required because computed percentiles may be slightly different from
|
| - // what is expected due to floating point computation errors and integer
|
| - // rounding off errors.
|
| - EXPECT_TRUE(int_buffer.GetPercentile(base::TimeTicks(), &result, i,
|
| - disallowed_observation_sources));
|
| - EXPECT_NEAR(result, i, 1);
|
| - EXPECT_TRUE(
|
| - time_delta_buffer.GetPercentile(base::TimeTicks(), &time_delta_result,
|
| - i, disallowed_observation_sources));
|
| - EXPECT_NEAR(time_delta_result.InMilliseconds(), i, 1);
|
| - }
|
| -
|
| - // Now check the percentile value for TCP and QUIC observations.
|
| - disallowed_observation_sources.clear();
|
| - disallowed_observation_sources.push_back(
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST);
|
| - for (int i = 0; i <= 100; ++i) {
|
| - // Checks if the difference between the two integers is less than 1. This is
|
| - // required because computed percentiles may be slightly different from
|
| - // what is expected due to floating point computation errors and integer
|
| - // rounding off errors.
|
| - EXPECT_TRUE(int_buffer.GetPercentile(base::TimeTicks(), &result, i,
|
| - disallowed_observation_sources));
|
| - EXPECT_NEAR(result, 10000, 1);
|
| - EXPECT_TRUE(
|
| - time_delta_buffer.GetPercentile(base::TimeTicks(), &time_delta_result,
|
| - i, disallowed_observation_sources));
|
| - EXPECT_NEAR(time_delta_result.InMilliseconds(), 10000, 1);
|
| - }
|
| -}
|
| -
|
| -TEST(NetworkQualityObservationTest, TestGetMedianRTTSince) {
|
| - internal::ObservationBuffer<int32_t> int_buffer(0.5);
|
| - internal::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>(
|
| - 1, old, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
|
| - base::TimeDelta::FromMilliseconds(1), old,
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| -
|
| - int_buffer.AddObservation(internal::Observation<int32_t>(
|
| - 100, now, NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| - time_delta_buffer.AddObservation(internal::Observation<base::TimeDelta>(
|
| - base::TimeDelta::FromMilliseconds(100), now,
|
| - NETWORK_QUALITY_OBSERVATION_SOURCE_URL_REQUEST));
|
| -
|
| - const struct {
|
| - base::TimeTicks start_timestamp;
|
| - bool expect_network_quality_available;
|
| - base::TimeDelta expected_url_request_rtt;
|
| - int32_t expected_downstream_throughput;
|
| - } tests[] = {
|
| - {now + base::TimeDelta::FromSeconds(10), false,
|
| - base::TimeDelta::FromMilliseconds(0), 0},
|
| - {now, true, base::TimeDelta::FromMilliseconds(100), 100},
|
| - {now - base::TimeDelta::FromMicroseconds(500), true,
|
| - base::TimeDelta::FromMilliseconds(100), 100},
|
| -
|
| - };
|
| -
|
| - for (const auto& test : tests) {
|
| - base::TimeDelta url_request_rtt;
|
| - int32_t downstream_throughput_kbps;
|
| - std::vector<NetworkQualityObservationSource> disallowed_observation_sources;
|
| -
|
| - EXPECT_EQ(
|
| - test.expect_network_quality_available,
|
| - time_delta_buffer.GetPercentile(test.start_timestamp, &url_request_rtt,
|
| - 50, disallowed_observation_sources));
|
| - EXPECT_EQ(test.expect_network_quality_available,
|
| - int_buffer.GetPercentile(test.start_timestamp,
|
| - &downstream_throughput_kbps, 50,
|
| - disallowed_observation_sources));
|
| -
|
| - if (test.expect_network_quality_available) {
|
| - EXPECT_EQ(test.expected_url_request_rtt, url_request_rtt);
|
| - EXPECT_EQ(test.expected_downstream_throughput,
|
| - downstream_throughput_kbps);
|
| - }
|
| - }
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -} // namespace nqe
|
| -
|
| -} // namespace net
|
|
|