OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 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_log.h" | 5 #include "components/metrics/metrics_log.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/base64.h" | 9 #include "base/base64.h" |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 EXPECT_EQ(10, histogram_proto.bucket(3).min()); | 234 EXPECT_EQ(10, histogram_proto.bucket(3).min()); |
235 | 235 |
236 // 11-12 becomes /-12 (last record must keep max, min is same as max - 1). | 236 // 11-12 becomes /-12 (last record must keep max, min is same as max - 1). |
237 EXPECT_FALSE(histogram_proto.bucket(4).has_min()); | 237 EXPECT_FALSE(histogram_proto.bucket(4).has_min()); |
238 EXPECT_TRUE(histogram_proto.bucket(4).has_max()); | 238 EXPECT_TRUE(histogram_proto.bucket(4).has_max()); |
239 EXPECT_EQ(12, histogram_proto.bucket(4).max()); | 239 EXPECT_EQ(12, histogram_proto.bucket(4).max()); |
240 } | 240 } |
241 | 241 |
242 TEST_F(MetricsLogTest, RecordEnvironment) { | 242 TEST_F(MetricsLogTest, RecordEnvironment) { |
243 TestMetricsServiceClient client; | 243 TestMetricsServiceClient client; |
244 client.set_install_date(kInstallDate); | |
245 TestMetricsLog log( | 244 TestMetricsLog log( |
246 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); | 245 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
247 | 246 |
248 std::vector<variations::ActiveGroupId> synthetic_trials; | 247 std::vector<variations::ActiveGroupId> synthetic_trials; |
249 // Add two synthetic trials. | 248 // Add two synthetic trials. |
250 synthetic_trials.push_back(kSyntheticTrials[0]); | 249 synthetic_trials.push_back(kSyntheticTrials[0]); |
251 synthetic_trials.push_back(kSyntheticTrials[1]); | 250 synthetic_trials.push_back(kSyntheticTrials[1]); |
252 | 251 |
253 log.RecordEnvironment(std::vector<MetricsProvider*>(), | 252 log.RecordEnvironment(std::vector<MetricsProvider*>(), |
254 synthetic_trials); | 253 synthetic_trials, |
| 254 kInstallDate); |
255 // Check that the system profile on the log has the correct values set. | 255 // Check that the system profile on the log has the correct values set. |
256 CheckSystemProfile(log.system_profile()); | 256 CheckSystemProfile(log.system_profile()); |
257 | 257 |
258 // Check that the system profile has also been written to prefs. | 258 // Check that the system profile has also been written to prefs. |
259 const std::string base64_system_profile = | 259 const std::string base64_system_profile = |
260 prefs_.GetString(prefs::kStabilitySavedSystemProfile); | 260 prefs_.GetString(prefs::kStabilitySavedSystemProfile); |
261 EXPECT_FALSE(base64_system_profile.empty()); | 261 EXPECT_FALSE(base64_system_profile.empty()); |
262 std::string serialied_system_profile; | 262 std::string serialied_system_profile; |
263 EXPECT_TRUE(base::Base64Decode(base64_system_profile, | 263 EXPECT_TRUE(base::Base64Decode(base64_system_profile, |
264 &serialied_system_profile)); | 264 &serialied_system_profile)); |
265 SystemProfileProto decoded_system_profile; | 265 SystemProfileProto decoded_system_profile; |
266 EXPECT_TRUE(decoded_system_profile.ParseFromString(serialied_system_profile)); | 266 EXPECT_TRUE(decoded_system_profile.ParseFromString(serialied_system_profile)); |
267 CheckSystemProfile(decoded_system_profile); | 267 CheckSystemProfile(decoded_system_profile); |
268 } | 268 } |
269 | 269 |
270 TEST_F(MetricsLogTest, LoadSavedEnvironmentFromPrefs) { | 270 TEST_F(MetricsLogTest, LoadSavedEnvironmentFromPrefs) { |
271 const char* kSystemProfilePref = prefs::kStabilitySavedSystemProfile; | 271 const char* kSystemProfilePref = prefs::kStabilitySavedSystemProfile; |
272 const char* kSystemProfileHashPref = | 272 const char* kSystemProfileHashPref = |
273 prefs::kStabilitySavedSystemProfileHash; | 273 prefs::kStabilitySavedSystemProfileHash; |
274 | 274 |
275 TestMetricsServiceClient client; | 275 TestMetricsServiceClient client; |
276 client.set_install_date(kInstallDate); | |
277 | 276 |
278 // The pref value is empty, so loading it from prefs should fail. | 277 // The pref value is empty, so loading it from prefs should fail. |
279 { | 278 { |
280 TestMetricsLog log( | 279 TestMetricsLog log( |
281 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); | 280 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
282 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs()); | 281 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs()); |
283 } | 282 } |
284 | 283 |
285 // Do a RecordEnvironment() call and check whether the pref is recorded. | 284 // Do a RecordEnvironment() call and check whether the pref is recorded. |
286 { | 285 { |
287 TestMetricsLog log( | 286 TestMetricsLog log( |
288 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); | 287 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
289 log.RecordEnvironment(std::vector<MetricsProvider*>(), | 288 log.RecordEnvironment(std::vector<MetricsProvider*>(), |
290 std::vector<variations::ActiveGroupId>()); | 289 std::vector<variations::ActiveGroupId>(), |
| 290 kInstallDate); |
291 EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty()); | 291 EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty()); |
292 EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty()); | 292 EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty()); |
293 } | 293 } |
294 | 294 |
295 { | 295 { |
296 TestMetricsLog log( | 296 TestMetricsLog log( |
297 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); | 297 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
298 EXPECT_TRUE(log.LoadSavedEnvironmentFromPrefs()); | 298 EXPECT_TRUE(log.LoadSavedEnvironmentFromPrefs()); |
299 // Check some values in the system profile. | 299 // Check some values in the system profile. |
300 EXPECT_EQ(kInstallDateExpected, log.system_profile().install_date()); | 300 EXPECT_EQ(kInstallDateExpected, log.system_profile().install_date()); |
301 EXPECT_EQ(kEnabledDateExpected, log.system_profile().uma_enabled_date()); | 301 EXPECT_EQ(kEnabledDateExpected, log.system_profile().uma_enabled_date()); |
302 // Ensure that the call cleared the prefs. | 302 // Ensure that the call cleared the prefs. |
303 EXPECT_TRUE(prefs_.GetString(kSystemProfilePref).empty()); | 303 EXPECT_TRUE(prefs_.GetString(kSystemProfilePref).empty()); |
304 EXPECT_TRUE(prefs_.GetString(kSystemProfileHashPref).empty()); | 304 EXPECT_TRUE(prefs_.GetString(kSystemProfileHashPref).empty()); |
305 } | 305 } |
306 | 306 |
307 // Ensure that a non-matching hash results in the pref being invalid. | 307 // Ensure that a non-matching hash results in the pref being invalid. |
308 { | 308 { |
309 TestMetricsLog log( | 309 TestMetricsLog log( |
310 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); | 310 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
311 // Call RecordEnvironment() to record the pref again. | 311 // Call RecordEnvironment() to record the pref again. |
312 log.RecordEnvironment(std::vector<MetricsProvider*>(), | 312 log.RecordEnvironment(std::vector<MetricsProvider*>(), |
313 std::vector<variations::ActiveGroupId>()); | 313 std::vector<variations::ActiveGroupId>(), |
| 314 kInstallDate); |
314 } | 315 } |
315 | 316 |
316 { | 317 { |
317 // Set the hash to a bad value. | 318 // Set the hash to a bad value. |
318 prefs_.SetString(kSystemProfileHashPref, "deadbeef"); | 319 prefs_.SetString(kSystemProfileHashPref, "deadbeef"); |
319 TestMetricsLog log( | 320 TestMetricsLog log( |
320 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); | 321 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
321 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs()); | 322 EXPECT_FALSE(log.LoadSavedEnvironmentFromPrefs()); |
322 // Ensure that the prefs are cleared, even if the call failed. | 323 // Ensure that the prefs are cleared, even if the call failed. |
323 EXPECT_TRUE(prefs_.GetString(kSystemProfilePref).empty()); | 324 EXPECT_TRUE(prefs_.GetString(kSystemProfilePref).empty()); |
324 EXPECT_TRUE(prefs_.GetString(kSystemProfileHashPref).empty()); | 325 EXPECT_TRUE(prefs_.GetString(kSystemProfileHashPref).empty()); |
325 } | 326 } |
326 } | 327 } |
327 | 328 |
328 TEST_F(MetricsLogTest, InitialLogStabilityMetrics) { | 329 TEST_F(MetricsLogTest, InitialLogStabilityMetrics) { |
329 TestMetricsServiceClient client; | 330 TestMetricsServiceClient client; |
330 TestMetricsLog log(kClientId, | 331 TestMetricsLog log(kClientId, |
331 kSessionId, | 332 kSessionId, |
332 MetricsLog::INITIAL_STABILITY_LOG, | 333 MetricsLog::INITIAL_STABILITY_LOG, |
333 &client, | 334 &client, |
334 &prefs_); | 335 &prefs_); |
335 std::vector<MetricsProvider*> metrics_providers; | 336 std::vector<MetricsProvider*> metrics_providers; |
336 log.RecordEnvironment(metrics_providers, | 337 log.RecordEnvironment(metrics_providers, |
337 std::vector<variations::ActiveGroupId>()); | 338 std::vector<variations::ActiveGroupId>(), |
| 339 kInstallDate); |
338 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(), | 340 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(), |
339 base::TimeDelta()); | 341 base::TimeDelta()); |
340 const SystemProfileProto_Stability& stability = | 342 const SystemProfileProto_Stability& stability = |
341 log.system_profile().stability(); | 343 log.system_profile().stability(); |
342 // Required metrics: | 344 // Required metrics: |
343 EXPECT_TRUE(stability.has_launch_count()); | 345 EXPECT_TRUE(stability.has_launch_count()); |
344 EXPECT_TRUE(stability.has_crash_count()); | 346 EXPECT_TRUE(stability.has_crash_count()); |
345 // Initial log metrics: | 347 // Initial log metrics: |
346 EXPECT_TRUE(stability.has_incomplete_shutdown_count()); | 348 EXPECT_TRUE(stability.has_incomplete_shutdown_count()); |
347 EXPECT_TRUE(stability.has_breakpad_registration_success_count()); | 349 EXPECT_TRUE(stability.has_breakpad_registration_success_count()); |
348 EXPECT_TRUE(stability.has_breakpad_registration_failure_count()); | 350 EXPECT_TRUE(stability.has_breakpad_registration_failure_count()); |
349 EXPECT_TRUE(stability.has_debugger_present_count()); | 351 EXPECT_TRUE(stability.has_debugger_present_count()); |
350 EXPECT_TRUE(stability.has_debugger_not_present_count()); | 352 EXPECT_TRUE(stability.has_debugger_not_present_count()); |
351 } | 353 } |
352 | 354 |
353 TEST_F(MetricsLogTest, OngoingLogStabilityMetrics) { | 355 TEST_F(MetricsLogTest, OngoingLogStabilityMetrics) { |
354 TestMetricsServiceClient client; | 356 TestMetricsServiceClient client; |
355 TestMetricsLog log( | 357 TestMetricsLog log( |
356 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); | 358 kClientId, kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
357 std::vector<MetricsProvider*> metrics_providers; | 359 std::vector<MetricsProvider*> metrics_providers; |
358 log.RecordEnvironment(metrics_providers, | 360 log.RecordEnvironment(metrics_providers, |
359 std::vector<variations::ActiveGroupId>()); | 361 std::vector<variations::ActiveGroupId>(), |
| 362 kInstallDate); |
360 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(), | 363 log.RecordStabilityMetrics(metrics_providers, base::TimeDelta(), |
361 base::TimeDelta()); | 364 base::TimeDelta()); |
362 const SystemProfileProto_Stability& stability = | 365 const SystemProfileProto_Stability& stability = |
363 log.system_profile().stability(); | 366 log.system_profile().stability(); |
364 // Required metrics: | 367 // Required metrics: |
365 EXPECT_TRUE(stability.has_launch_count()); | 368 EXPECT_TRUE(stability.has_launch_count()); |
366 EXPECT_TRUE(stability.has_crash_count()); | 369 EXPECT_TRUE(stability.has_crash_count()); |
367 // Initial log metrics: | 370 // Initial log metrics: |
368 EXPECT_FALSE(stability.has_incomplete_shutdown_count()); | 371 EXPECT_FALSE(stability.has_incomplete_shutdown_count()); |
369 EXPECT_FALSE(stability.has_breakpad_registration_success_count()); | 372 EXPECT_FALSE(stability.has_breakpad_registration_success_count()); |
370 EXPECT_FALSE(stability.has_breakpad_registration_failure_count()); | 373 EXPECT_FALSE(stability.has_breakpad_registration_failure_count()); |
371 EXPECT_FALSE(stability.has_debugger_present_count()); | 374 EXPECT_FALSE(stability.has_debugger_present_count()); |
372 EXPECT_FALSE(stability.has_debugger_not_present_count()); | 375 EXPECT_FALSE(stability.has_debugger_not_present_count()); |
373 } | 376 } |
374 | 377 |
375 TEST_F(MetricsLogTest, ChromeChannelWrittenToProtobuf) { | 378 TEST_F(MetricsLogTest, ChromeChannelWrittenToProtobuf) { |
376 TestMetricsServiceClient client; | 379 TestMetricsServiceClient client; |
377 TestMetricsLog log( | 380 TestMetricsLog log( |
378 "user@test.com", kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); | 381 "user@test.com", kSessionId, MetricsLog::ONGOING_LOG, &client, &prefs_); |
379 EXPECT_TRUE(log.uma_proto().system_profile().has_channel()); | 382 EXPECT_TRUE(log.uma_proto().system_profile().has_channel()); |
380 } | 383 } |
381 | 384 |
382 } // namespace metrics | 385 } // namespace metrics |
OLD | NEW |