most_visited_iframe_source_unittest.cc revision 5d1f7b1de12d16ceb2c938c56701a3e8bfa558f7
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/bind.h"
6#include "base/metrics/histogram.h"
7#include "base/metrics/statistics_recorder.h"
8#include "base/strings/stringprintf.h"
9#include "chrome/browser/search/most_visited_iframe_source.h"
10#include "testing/gtest/include/gtest/gtest.h"
11
12class MostVisitedIframeSourceTest : public testing::Test {
13 public:
14  void ExpectNullData(base::RefCountedMemory* data) {
15    EXPECT_EQ(NULL, data);
16  }
17
18 protected:
19  MostVisitedIframeSource* source() { return source_.get(); }
20
21 private:
22  virtual void SetUp() { source_.reset(new MostVisitedIframeSource()); }
23
24  scoped_ptr<MostVisitedIframeSource> source_;
25};
26
27TEST_F(MostVisitedIframeSourceTest, LogEndpointIsValidNoProvider) {
28  content::URLDataSource::GotDataCallback callback = base::Bind(
29      &MostVisitedIframeSourceTest::ExpectNullData, base::Unretained(this));
30
31  base::StatisticsRecorder::Initialize();
32  // Making sure the histogram is created.
33  UMA_HISTOGRAM_ENUMERATION(MostVisitedIframeSource::kMostVisitedHistogramName,
34                            0, MostVisitedIframeSource::kNumMostVisited);
35
36  base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(
37      MostVisitedIframeSource::kMostVisitedHistogramName);
38
39  scoped_ptr<base::HistogramSamples> samples1(histogram->SnapshotSamples());
40  // The dummy value got logged.
41  EXPECT_EQ(1, samples1->TotalCount());
42  EXPECT_EQ(1, samples1->GetCount(0));
43
44  // Test the method.
45  source()->StartDataRequest("log.html?pos=1", 0, 0, callback);
46
47  scoped_ptr<base::HistogramSamples> samples2(histogram->SnapshotSamples());
48  EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount());
49  EXPECT_EQ(1, samples2->GetCount(1));
50
51  // Counts accumulate and behave as expected.
52  source()->StartDataRequest("log.html?pos=5", 0, 0, callback);
53  source()->StartDataRequest("log.html?pos=1", 0, 0, callback);
54
55  scoped_ptr<base::HistogramSamples> samples3(histogram->SnapshotSamples());
56  EXPECT_EQ(samples2->TotalCount() + 2, samples3->TotalCount());
57  EXPECT_EQ(1, samples3->GetCount(5));
58  EXPECT_EQ(2, samples3->GetCount(1));
59
60  // If 'pos' is unspecified or invalid, callback still gets called but values
61  // are not incremented.
62  source()->StartDataRequest("log.html?pos=", 0, 0, callback);
63  source()->StartDataRequest("log.html", 0, 0, callback);
64  // Total count hasn't changed.
65  EXPECT_EQ(samples2->TotalCount() + 2, samples3->TotalCount());
66}
67
68TEST_F(MostVisitedIframeSourceTest, LogEndpointIsValidWithProvider) {
69  content::URLDataSource::GotDataCallback callback = base::Bind(
70      &MostVisitedIframeSourceTest::ExpectNullData, base::Unretained(this));
71
72  base::StatisticsRecorder::Initialize();
73  // Making sure a test histogram with provider is created by logging a dummy
74  // value.
75  const std::string histogram_name =
76      MostVisitedIframeSource::GetHistogramNameForProvider("foobar");
77  UMA_HISTOGRAM_ENUMERATION(histogram_name, 0,
78                            MostVisitedIframeSource::kNumMostVisited);
79
80  base::HistogramBase* histogram = base::StatisticsRecorder::FindHistogram(
81      histogram_name);
82  scoped_ptr<base::HistogramSamples> samples1(histogram->SnapshotSamples());
83  // The dummy value got logged.
84  EXPECT_EQ(1, samples1->TotalCount());
85  EXPECT_EQ(1, samples1->GetCount(0));
86
87  // Test the method.
88  source()->StartDataRequest("log.html?pos=1&pr=foobar", 0, 0, callback);
89
90  scoped_ptr<base::HistogramSamples> samples2(histogram->SnapshotSamples());
91  EXPECT_EQ(samples1->TotalCount() + 1, samples2->TotalCount());
92  EXPECT_EQ(1, samples2->GetCount(1));
93
94  // Counts accumulate and behave as expected.
95  source()->StartDataRequest("log.html?pos=5&pr=foobar", 0, 0, callback);
96  source()->StartDataRequest("log.html?pos=1&pr=foobar", 0, 0, callback);
97  // This should have no effect for the "foobar" histogram.
98  source()->StartDataRequest("log.html?pos=1&pr=nofoo", 0, 0, callback);
99
100  scoped_ptr<base::HistogramSamples> samples3(histogram->SnapshotSamples());
101  EXPECT_EQ(samples2->TotalCount() + 2, samples3->TotalCount());
102  EXPECT_EQ(1, samples3->GetCount(5));
103  EXPECT_EQ(2, samples3->GetCount(1));
104}
105