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

Side by Side Diff: components/metrics/metrics_service_unittest.cc

Issue 310393006: Componentize MetricsService unittest (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase 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
« no previous file with comments | « components/components_tests.gyp ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/metrics/metrics_service.h" 5 #include "components/metrics/metrics_service.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/message_loop/message_loop.h"
10 #include "base/prefs/testing_pref_service.h" 11 #include "base/prefs/testing_pref_service.h"
11 #include "base/threading/platform_thread.h" 12 #include "base/threading/platform_thread.h"
12 #include "chrome/browser/google/google_util.h"
13 #include "chrome/common/pref_names.h"
14 #include "chrome/test/base/scoped_testing_local_state.h"
15 #include "chrome/test/base/testing_browser_process.h"
16 #include "components/metrics/compression_utils.h" 13 #include "components/metrics/compression_utils.h"
17 #include "components/metrics/metrics_log.h" 14 #include "components/metrics/metrics_log.h"
15 #include "components/metrics/metrics_pref_names.h"
18 #include "components/metrics/metrics_service_observer.h" 16 #include "components/metrics/metrics_service_observer.h"
19 #include "components/metrics/metrics_state_manager.h" 17 #include "components/metrics/metrics_state_manager.h"
20 #include "components/metrics/test_metrics_service_client.h" 18 #include "components/metrics/test_metrics_service_client.h"
21 #include "components/variations/metrics_util.h" 19 #include "components/variations/metrics_util.h"
22 #include "content/public/test/test_browser_thread_bundle.h"
23 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
24 21
25 #if defined(OS_CHROMEOS)
26 #include "chromeos/login/login_state.h"
27 #endif // defined(OS_CHROMEOS)
28
29 namespace { 22 namespace {
30 23
31 using metrics::MetricsLogManager; 24 using metrics::MetricsLogManager;
32 25
33 class TestMetricsService : public MetricsService { 26 class TestMetricsService : public MetricsService {
34 public: 27 public:
35 TestMetricsService(metrics::MetricsStateManager* state_manager, 28 TestMetricsService(metrics::MetricsStateManager* state_manager,
36 metrics::MetricsServiceClient* client, 29 metrics::MetricsServiceClient* client,
37 PrefService* local_state) 30 PrefService* local_state)
38 : MetricsService(state_manager, client, local_state) {} 31 : MetricsService(state_manager, client, local_state) {}
(...skipping 24 matching lines...) Expand all
63 }; 56 };
64 57
65 class MetricsServiceTest : public testing::Test { 58 class MetricsServiceTest : public testing::Test {
66 public: 59 public:
67 MetricsServiceTest() : is_metrics_reporting_enabled_(false) { 60 MetricsServiceTest() : is_metrics_reporting_enabled_(false) {
68 MetricsService::RegisterPrefs(testing_local_state_.registry()); 61 MetricsService::RegisterPrefs(testing_local_state_.registry());
69 metrics_state_manager_ = metrics::MetricsStateManager::Create( 62 metrics_state_manager_ = metrics::MetricsStateManager::Create(
70 GetLocalState(), 63 GetLocalState(),
71 base::Bind(&MetricsServiceTest::is_metrics_reporting_enabled, 64 base::Bind(&MetricsServiceTest::is_metrics_reporting_enabled,
72 base::Unretained(this))); 65 base::Unretained(this)));
73 #if defined(OS_CHROMEOS)
74 // TODO(blundell): Remove this code once MetricsService no longer creates
75 // ChromeOSMetricsProvider. Also remove the #include of login_state.h.
76 // (http://crbug.com/375776)
77 if (!chromeos::LoginState::IsInitialized())
78 chromeos::LoginState::Initialize();
79 #endif // defined(OS_CHROMEOS)
80 } 66 }
81 67
82 virtual ~MetricsServiceTest() { 68 virtual ~MetricsServiceTest() {
83 MetricsService::SetExecutionPhase(MetricsService::UNINITIALIZED_PHASE, 69 MetricsService::SetExecutionPhase(MetricsService::UNINITIALIZED_PHASE,
84 GetLocalState()); 70 GetLocalState());
85 #if defined(OS_CHROMEOS)
86 // TODO(blundell): Remove this code once MetricsService no longer creates
87 // ChromeOSMetricsProvider.
88 chromeos::LoginState::Shutdown();
89 #endif // defined(OS_CHROMEOS)
90 } 71 }
91 72
92 metrics::MetricsStateManager* GetMetricsStateManager() { 73 metrics::MetricsStateManager* GetMetricsStateManager() {
93 return metrics_state_manager_.get(); 74 return metrics_state_manager_.get();
94 } 75 }
95 76
96 PrefService* GetLocalState() { return &testing_local_state_; } 77 PrefService* GetLocalState() { return &testing_local_state_; }
97 78
98 // Sets metrics reporting as enabled for testing. 79 // Sets metrics reporting as enabled for testing.
99 void EnableMetricsReporting() { 80 void EnableMetricsReporting() {
(...skipping 23 matching lines...) Expand all
123 return true; 104 return true;
124 } 105 }
125 return false; 106 return false;
126 } 107 }
127 108
128 private: 109 private:
129 bool is_metrics_reporting_enabled() const { 110 bool is_metrics_reporting_enabled() const {
130 return is_metrics_reporting_enabled_; 111 return is_metrics_reporting_enabled_;
131 } 112 }
132 113
133 content::TestBrowserThreadBundle thread_bundle_;
134 bool is_metrics_reporting_enabled_; 114 bool is_metrics_reporting_enabled_;
135 TestingPrefServiceSimple testing_local_state_; 115 TestingPrefServiceSimple testing_local_state_;
136 scoped_ptr<metrics::MetricsStateManager> metrics_state_manager_; 116 scoped_ptr<metrics::MetricsStateManager> metrics_state_manager_;
117 base::MessageLoop message_loop;
137 118
138 DISALLOW_COPY_AND_ASSIGN(MetricsServiceTest); 119 DISALLOW_COPY_AND_ASSIGN(MetricsServiceTest);
139 }; 120 };
140 121
141 class TestMetricsServiceObserver : public MetricsServiceObserver { 122 class TestMetricsServiceObserver : public MetricsServiceObserver {
142 public: 123 public:
143 TestMetricsServiceObserver(): observed_(0) {} 124 TestMetricsServiceObserver(): observed_(0) {}
144 virtual ~TestMetricsServiceObserver() {} 125 virtual ~TestMetricsServiceObserver() {}
145 126
146 virtual void OnDidCreateMetricsLog() OVERRIDE { 127 virtual void OnDidCreateMetricsLog() OVERRIDE {
(...skipping 16 matching lines...) Expand all
163 metrics::TestMetricsServiceClient client; 144 metrics::TestMetricsServiceClient client;
164 TestMetricsService service( 145 TestMetricsService service(
165 GetMetricsStateManager(), &client, GetLocalState()); 146 GetMetricsStateManager(), &client, GetLocalState());
166 service.InitializeMetricsRecordingState(); 147 service.InitializeMetricsRecordingState();
167 // No initial stability log should be generated. 148 // No initial stability log should be generated.
168 EXPECT_FALSE(service.log_manager()->has_unsent_logs()); 149 EXPECT_FALSE(service.log_manager()->has_unsent_logs());
169 EXPECT_FALSE(service.log_manager()->has_staged_log()); 150 EXPECT_FALSE(service.log_manager()->has_staged_log());
170 } 151 }
171 152
172 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) { 153 TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) {
173 // TODO(asvitkine): Eliminate using |testing_local_state| in favor of using
174 // |GetLocalState()| once MetricsService no longer internally creates metrics
175 // providers that rely on g_browser_process->local_state() being correctly
176 // set up. crbug.com/375776.
177 ScopedTestingLocalState testing_local_state(
178 TestingBrowserProcess::GetGlobal());
179 TestingPrefServiceSimple* local_state = testing_local_state.Get();
180 EnableMetricsReporting(); 154 EnableMetricsReporting();
181 local_state->ClearPref(metrics::prefs::kStabilityExitedCleanly); 155 GetLocalState()->ClearPref(metrics::prefs::kStabilityExitedCleanly);
182 156
183 // Set up prefs to simulate restarting after a crash. 157 // Set up prefs to simulate restarting after a crash.
184 158
185 // Save an existing system profile to prefs, to correspond to what would be 159 // Save an existing system profile to prefs, to correspond to what would be
186 // saved from a previous session. 160 // saved from a previous session.
187 metrics::TestMetricsServiceClient client; 161 metrics::TestMetricsServiceClient client;
188 TestMetricsLog log("client", 1, &client, local_state); 162 TestMetricsLog log("client", 1, &client, GetLocalState());
189 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(), 163 log.RecordEnvironment(std::vector<metrics::MetricsProvider*>(),
190 std::vector<variations::ActiveGroupId>()); 164 std::vector<variations::ActiveGroupId>());
191 165
192 // Record stability build time and version from previous session, so that 166 // Record stability build time and version from previous session, so that
193 // stability metrics (including exited cleanly flag) won't be cleared. 167 // stability metrics (including exited cleanly flag) won't be cleared.
194 local_state->SetInt64(metrics::prefs::kStabilityStatsBuildTime, 168 GetLocalState()->SetInt64(metrics::prefs::kStabilityStatsBuildTime,
195 MetricsLog::GetBuildTime()); 169 MetricsLog::GetBuildTime());
196 local_state->SetString(metrics::prefs::kStabilityStatsVersion, 170 GetLocalState()->SetString(metrics::prefs::kStabilityStatsVersion,
197 client.GetVersionString()); 171 client.GetVersionString());
198 172
199 local_state->SetBoolean(metrics::prefs::kStabilityExitedCleanly, false); 173 GetLocalState()->SetBoolean(metrics::prefs::kStabilityExitedCleanly, false);
200 174
201 TestMetricsService service(GetMetricsStateManager(), &client, local_state); 175 TestMetricsService service(
176 GetMetricsStateManager(), &client, GetLocalState());
202 service.InitializeMetricsRecordingState(); 177 service.InitializeMetricsRecordingState();
203 178
204 // The initial stability log should be generated and persisted in unsent logs. 179 // The initial stability log should be generated and persisted in unsent logs.
205 MetricsLogManager* log_manager = service.log_manager(); 180 MetricsLogManager* log_manager = service.log_manager();
206 EXPECT_TRUE(log_manager->has_unsent_logs()); 181 EXPECT_TRUE(log_manager->has_unsent_logs());
207 EXPECT_FALSE(log_manager->has_staged_log()); 182 EXPECT_FALSE(log_manager->has_staged_log());
208 183
209 // Stage the log and retrieve it. 184 // Stage the log and retrieve it.
210 log_manager->StageNextLogForUpload(); 185 log_manager->StageNextLogForUpload();
211 EXPECT_TRUE(log_manager->has_staged_log()); 186 EXPECT_TRUE(log_manager->has_staged_log());
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
320 295
321 service.RemoveObserver(&observer1); 296 service.RemoveObserver(&observer1);
322 297
323 service.OpenNewLog(); 298 service.OpenNewLog();
324 EXPECT_EQ(2, observer1.observed()); 299 EXPECT_EQ(2, observer1.observed());
325 EXPECT_EQ(2, observer2.observed()); 300 EXPECT_EQ(2, observer2.observed());
326 service.log_manager_.FinishCurrentLog(); 301 service.log_manager_.FinishCurrentLog();
327 302
328 service.RemoveObserver(&observer2); 303 service.RemoveObserver(&observer2);
329 } 304 }
OLDNEW
« no previous file with comments | « components/components_tests.gyp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698