| // Copyright 2019 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/metrics/metrics_service.h" |
| |
| #include "base/command_line.h" |
| #include "base/functional/bind.h" |
| #include "base/strings/string_number_conversions.h" |
| #include "components/metrics/metrics_switches.h" |
| #include "components/metrics/test/test_metrics_service_client.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace metrics { |
| namespace { |
| |
| class MetricsServiceClientTest : public testing::Test { |
| public: |
| MetricsServiceClientTest() = default; |
| |
| MetricsServiceClientTest(const MetricsServiceClientTest&) = delete; |
| MetricsServiceClientTest& operator=(const MetricsServiceClientTest&) = delete; |
| |
| ~MetricsServiceClientTest() override = default; |
| }; |
| |
| } // namespace |
| |
| TEST_F(MetricsServiceClientTest, TestUploadIntervalDefaultsToStandard) { |
| TestMetricsServiceClient client; |
| |
| ASSERT_EQ(client.GetStandardUploadInterval(), client.GetUploadInterval()); |
| } |
| |
| TEST_F(MetricsServiceClientTest, TestModifyMetricsUploadInterval) { |
| TestMetricsServiceClient client; |
| |
| // Flip it a few times to make sure we really can modify it. Values are |
| // arbitrary (but positive, because the upload interval should be). |
| int specified_upload_sec = 800; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| switches::kMetricsUploadIntervalSec, |
| base::NumberToString(specified_upload_sec)); |
| ASSERT_EQ(base::Seconds(specified_upload_sec), client.GetUploadInterval()); |
| |
| base::CommandLine::ForCurrentProcess()->RemoveSwitch( |
| switches::kMetricsUploadIntervalSec); |
| |
| specified_upload_sec = 30; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| switches::kMetricsUploadIntervalSec, |
| base::NumberToString(specified_upload_sec)); |
| ASSERT_EQ(base::Seconds(specified_upload_sec), client.GetUploadInterval()); |
| } |
| |
| TEST_F(MetricsServiceClientTest, TestUploadIntervalLimitedForDos) { |
| TestMetricsServiceClient client; |
| |
| // If we set the upload interval too small, it should be limited to prevent |
| // the possibility of DOS'ing the backend. This should be a safe guess for a |
| // value strictly smaller than the DOS limit. |
| int too_short_upload_sec = 2; |
| base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
| switches::kMetricsUploadIntervalSec, |
| base::NumberToString(too_short_upload_sec)); |
| // Upload interval should be the DOS rate limit. |
| ASSERT_EQ(base::Seconds(20), client.GetUploadInterval()); |
| } |
| |
| } // namespace metrics |