Index: components/metrics/single_sample_metrics_provider_unittest.cc |
diff --git a/components/metrics/single_sample_metrics_provider_unittest.cc b/components/metrics/single_sample_metrics_provider_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..17e0e38ba15d4b14a68c239004debc78bfe4973e |
--- /dev/null |
+++ b/components/metrics/single_sample_metrics_provider_unittest.cc |
@@ -0,0 +1,83 @@ |
+// Copyright 2017 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 "components/metrics/single_sample_metrics_provider.h" |
+ |
+#include "base/message_loop/message_loop.h" |
+#include "base/run_loop.h" |
+#include "base/test/gtest_util.h" |
+#include "base/test/histogram_tester.h" |
+#include "mojo/public/cpp/bindings/interface_request.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+namespace metrics { |
+ |
+namespace { |
+ |
+const base::HistogramBase::Sample kMin = 1; |
+const base::HistogramBase::Sample kMax = 10; |
+const uint32_t kBucketCount = 10; |
+const char kMetricName[] = "Single.Sample.Metric"; |
+ |
+class SingleSampleMetricsProviderTest : public testing::Test { |
+ public: |
+ SingleSampleMetricsProviderTest() { |
+ SingleSampleMetricsProvider::Create(mojo::MakeRequest(&provider_)); |
+ } |
+ |
+ ~SingleSampleMetricsProviderTest() override {} |
+ |
+ void CreateMetric(mojom::SingleSampleMetricRequest request) { |
+ provider_->AcquireSingleSampleMetric( |
+ kMetricName, kMin, kMax, kBucketCount, |
+ base::HistogramBase::kUmaTargetedHistogramFlag, std::move(request)); |
+ } |
+ |
+ private: |
+ base::MessageLoop message_loop_; |
+ mojom::SingleSampleMetricsProviderPtr provider_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(SingleSampleMetricsProviderTest); |
+}; |
+ |
+} // namespace |
+ |
+TEST_F(SingleSampleMetricsProviderTest, DefaultSingleSampleMetricNoValue) { |
+ base::HistogramTester tester; |
+ mojom::SingleSampleMetricPtr metric; |
+ CreateMetric(mojo::MakeRequest(&metric)); |
+ metric.reset(); |
+ |
+ // Verify that no sample is recorded if SetSample() is never called. |
+ base::RunLoop().RunUntilIdle(); |
+ tester.ExpectTotalCount(kMetricName, 0); |
+} |
+ |
+TEST_F(SingleSampleMetricsProviderTest, DefaultSingleSampleMetricWithValue) { |
+ base::HistogramTester tester; |
+ mojom::SingleSampleMetricPtr metric; |
+ CreateMetric(mojo::MakeRequest(&metric)); |
+ |
+ const base::HistogramBase::Sample kLastSample = 9; |
+ metric->SetSample(1); |
+ metric->SetSample(3); |
+ metric->SetSample(5); |
+ metric->SetSample(kLastSample); |
+ metric.reset(); |
+ |
+ // Verify only the last sample sent to SetSample() is recorded. |
+ base::RunLoop().RunUntilIdle(); |
+ tester.ExpectUniqueSample(kMetricName, kLastSample, 1); |
+ |
+ // Verify construction implicitly by requesting a histogram with the same |
+ // parameters; this test relies on the fact that histogram objects are unique |
+ // per name. Different parameters will result in a nullptr being returned. |
+ EXPECT_FALSE(base::Histogram::FactoryGet(kMetricName, 1, 3, 3, |
+ base::HistogramBase::kNoFlags)); |
+ EXPECT_TRUE(base::Histogram::FactoryGet( |
+ kMetricName, kMin, kMax, kBucketCount, |
+ base::HistogramBase::kUmaTargetedHistogramFlag)); |
+} |
+ |
+} // namespace metrics |