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

Side by Side Diff: chrome/browser/metrics/metrics_state_manager_unittest.cc

Issue 312583002: Move MetricsStateManager into the Metrics component. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Response to review Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2014 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 "chrome/browser/metrics/metrics_state_manager.h"
6
7 #include <ctype.h>
8 #include <string>
9
10 #include "base/bind.h"
11 #include "base/command_line.h"
12 #include "base/prefs/testing_pref_service.h"
13 #include "chrome/common/chrome_switches.h"
14 #include "chrome/common/pref_names.h"
15 #include "components/metrics/metrics_pref_names.h"
16 #include "components/variations/caching_permuted_entropy_provider.h"
17 #include "components/variations/pref_names.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19
20 namespace metrics {
21
22 class MetricsStateManagerTest : public testing::Test {
23 public:
24 MetricsStateManagerTest() : is_metrics_reporting_enabled_(false) {
25 MetricsStateManager::RegisterPrefs(prefs_.registry());
26 }
27
28 scoped_ptr<MetricsStateManager> CreateStateManager() {
29 return MetricsStateManager::Create(
30 &prefs_,
31 base::Bind(&MetricsStateManagerTest::is_metrics_reporting_enabled,
32 base::Unretained(this))).Pass();
33 }
34
35 // Sets metrics reporting as enabled for testing.
36 void EnableMetricsReporting() {
37 is_metrics_reporting_enabled_ = true;
38 }
39
40 protected:
41 TestingPrefServiceSimple prefs_;
42
43 private:
44 bool is_metrics_reporting_enabled() const {
45 return is_metrics_reporting_enabled_;
46 }
47
48 bool is_metrics_reporting_enabled_;
49
50 DISALLOW_COPY_AND_ASSIGN(MetricsStateManagerTest);
51 };
52
53 // Ensure the ClientId is formatted as expected.
54 TEST_F(MetricsStateManagerTest, ClientIdCorrectlyFormatted) {
55 scoped_ptr<MetricsStateManager> state_manager(CreateStateManager());
56 state_manager->ForceClientIdCreation();
57
58 const std::string client_id = state_manager->client_id();
59 EXPECT_EQ(36U, client_id.length());
60
61 for (size_t i = 0; i < client_id.length(); ++i) {
62 char current = client_id[i];
63 if (i == 8 || i == 13 || i == 18 || i == 23)
64 EXPECT_EQ('-', current);
65 else
66 EXPECT_TRUE(isxdigit(current));
67 }
68 }
69
70 TEST_F(MetricsStateManagerTest, EntropySourceUsed_Low) {
71 scoped_ptr<MetricsStateManager> state_manager(CreateStateManager());
72 state_manager->CreateEntropyProvider();
73 EXPECT_EQ(MetricsStateManager::ENTROPY_SOURCE_LOW,
74 state_manager->entropy_source_returned());
75 }
76
77 TEST_F(MetricsStateManagerTest, EntropySourceUsed_High) {
78 EnableMetricsReporting();
79 scoped_ptr<MetricsStateManager> state_manager(CreateStateManager());
80 state_manager->CreateEntropyProvider();
81 EXPECT_EQ(MetricsStateManager::ENTROPY_SOURCE_HIGH,
82 state_manager->entropy_source_returned());
83 }
84
85 TEST_F(MetricsStateManagerTest, LowEntropySource0NotReset) {
86 scoped_ptr<MetricsStateManager> state_manager(CreateStateManager());
87
88 // Get the low entropy source once, to initialize it.
89 state_manager->GetLowEntropySource();
90
91 // Now, set it to 0 and ensure it doesn't get reset.
92 state_manager->low_entropy_source_ = 0;
93 EXPECT_EQ(0, state_manager->GetLowEntropySource());
94 // Call it another time, just to make sure.
95 EXPECT_EQ(0, state_manager->GetLowEntropySource());
96 }
97
98 TEST_F(MetricsStateManagerTest,
99 PermutedEntropyCacheClearedWhenLowEntropyReset) {
100 const PrefService::Preference* low_entropy_pref =
101 prefs_.FindPreference(::prefs::kMetricsLowEntropySource);
102 const char* kCachePrefName = prefs::kVariationsPermutedEntropyCache;
103 int low_entropy_value = -1;
104
105 // First, generate an initial low entropy source value.
106 {
107 EXPECT_TRUE(low_entropy_pref->IsDefaultValue());
108
109 scoped_ptr<MetricsStateManager> state_manager(CreateStateManager());
110 state_manager->GetLowEntropySource();
111
112 EXPECT_FALSE(low_entropy_pref->IsDefaultValue());
113 EXPECT_TRUE(low_entropy_pref->GetValue()->GetAsInteger(&low_entropy_value));
114 }
115
116 // Now, set a dummy value in the permuted entropy cache pref and verify that
117 // another call to GetLowEntropySource() doesn't clobber it when
118 // --reset-variation-state wasn't specified.
119 {
120 prefs_.SetString(kCachePrefName, "test");
121
122 scoped_ptr<MetricsStateManager> state_manager(CreateStateManager());
123 state_manager->GetLowEntropySource();
124
125 EXPECT_EQ("test", prefs_.GetString(kCachePrefName));
126 EXPECT_EQ(low_entropy_value,
127 prefs_.GetInteger(::prefs::kMetricsLowEntropySource));
128 }
129
130 // Verify that the cache does get reset if --reset-variations-state is passed.
131 {
132 CommandLine::ForCurrentProcess()->AppendSwitch(
133 switches::kResetVariationState);
134
135 scoped_ptr<MetricsStateManager> state_manager(CreateStateManager());
136 state_manager->GetLowEntropySource();
137
138 EXPECT_TRUE(prefs_.GetString(kCachePrefName).empty());
139 }
140 }
141
142 // Check that setting the kMetricsResetIds pref to true causes the client id to
143 // be reset. We do not check that the low entropy source is reset because we
144 // cannot ensure that metrics state manager won't generate the same id again.
145 TEST_F(MetricsStateManagerTest, ResetMetricsIDs) {
146 // Set an initial client id in prefs. It should not be possible for the
147 // metrics state manager to generate this id randomly.
148 const std::string kInitialClientId = "initial client id";
149 prefs_.SetString(::prefs::kMetricsClientID, kInitialClientId);
150
151 // Make sure the initial client id isn't reset by the metrics state manager.
152 {
153 scoped_ptr<MetricsStateManager> state_manager(CreateStateManager());
154 state_manager->ForceClientIdCreation();
155 EXPECT_EQ(kInitialClientId, state_manager->client_id());
156 }
157
158 // Set the reset pref to cause the IDs to be reset.
159 prefs_.SetBoolean(prefs::kMetricsResetIds, true);
160
161 // Cause the actual reset to happen.
162 {
163 scoped_ptr<MetricsStateManager> state_manager(CreateStateManager());
164 state_manager->ForceClientIdCreation();
165 EXPECT_NE(kInitialClientId, state_manager->client_id());
166
167 state_manager->GetLowEntropySource();
168
169 EXPECT_FALSE(prefs_.GetBoolean(prefs::kMetricsResetIds));
170 }
171
172 EXPECT_NE(kInitialClientId, prefs_.GetString(::prefs::kMetricsClientID));
173 }
174
175 } // namespace metrics
OLDNEW
« no previous file with comments | « chrome/browser/metrics/metrics_state_manager.cc ('k') | chrome/browser/metrics/variations/variations_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698