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

Unified Diff: trunk/src/chrome/browser/metrics/metrics_service_unittest.cc

Issue 268223002: Revert 268232 "Refactor MetricsStateManager class out of Metrics..." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 6 years, 7 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 side-by-side diff with in-line comments
Download patch
Index: trunk/src/chrome/browser/metrics/metrics_service_unittest.cc
===================================================================
--- trunk/src/chrome/browser/metrics/metrics_service_unittest.cc (revision 268245)
+++ trunk/src/chrome/browser/metrics/metrics_service_unittest.cc (working copy)
@@ -4,6 +4,7 @@
#include "chrome/browser/metrics/metrics_service.h"
+#include <ctype.h>
#include <string>
#include "base/command_line.h"
@@ -96,13 +97,6 @@
return testing_local_state_.Get();
}
- // Sets metrics reporting as enabled for testing.
- void EnableMetricsReporting() {
- // TODO(asvitkine): Refactor the code to not need this flag and delete it.
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kEnableMetricsReportingForTesting);
- }
-
// Waits until base::TimeTicks::Now() no longer equals |value|. This should
// take between 1-15ms per the documented resolution of base::TimeTicks.
void WaitUntilTimeChanges(const base::TimeTicks& value) {
@@ -137,6 +131,20 @@
} // namespace
+// Ensure the ClientId is formatted as expected.
+TEST_F(MetricsServiceTest, ClientIdCorrectlyFormatted) {
+ std::string clientid = MetricsService::GenerateClientID();
+ EXPECT_EQ(36U, clientid.length());
+
+ for (size_t i = 0; i < clientid.length(); ++i) {
+ char current = clientid[i];
+ if (i == 8 || i == 13 || i == 18 || i == 23)
+ EXPECT_EQ('-', current);
+ else
+ EXPECT_TRUE(isxdigit(current));
+ }
+}
+
TEST_F(MetricsServiceTest, IsPluginProcess) {
EXPECT_TRUE(
MetricsService::IsPluginProcess(content::PROCESS_TYPE_PLUGIN));
@@ -146,19 +154,82 @@
MetricsService::IsPluginProcess(content::PROCESS_TYPE_GPU));
}
+TEST_F(MetricsServiceTest, LowEntropySource0NotReset) {
+ MetricsService service;
+
+ // Get the low entropy source once, to initialize it.
+ service.GetLowEntropySource();
+
+ // Now, set it to 0 and ensure it doesn't get reset.
+ service.low_entropy_source_ = 0;
+ EXPECT_EQ(0, service.GetLowEntropySource());
+ // Call it another time, just to make sure.
+ EXPECT_EQ(0, service.GetLowEntropySource());
+}
+
+TEST_F(MetricsServiceTest, PermutedEntropyCacheClearedWhenLowEntropyReset) {
+ const PrefService::Preference* low_entropy_pref =
+ GetLocalState()->FindPreference(prefs::kMetricsLowEntropySource);
+ const char* kCachePrefName = prefs::kMetricsPermutedEntropyCache;
+ int low_entropy_value = -1;
+
+ // First, generate an initial low entropy source value.
+ {
+ EXPECT_TRUE(low_entropy_pref->IsDefaultValue());
+
+ MetricsService::SetExecutionPhase(MetricsService::UNINITIALIZED_PHASE);
+ MetricsService service;
+ service.GetLowEntropySource();
+
+ EXPECT_FALSE(low_entropy_pref->IsDefaultValue());
+ EXPECT_TRUE(low_entropy_pref->GetValue()->GetAsInteger(&low_entropy_value));
+ }
+
+ // Now, set a dummy value in the permuted entropy cache pref and verify that
+ // another call to GetLowEntropySource() doesn't clobber it when
+ // --reset-variation-state wasn't specified.
+ {
+ GetLocalState()->SetString(kCachePrefName, "test");
+
+ MetricsService::SetExecutionPhase(MetricsService::UNINITIALIZED_PHASE);
+ MetricsService service;
+ service.GetLowEntropySource();
+
+ EXPECT_EQ("test", GetLocalState()->GetString(kCachePrefName));
+ EXPECT_EQ(low_entropy_value,
+ GetLocalState()->GetInteger(prefs::kMetricsLowEntropySource));
+ }
+
+ // Verify that the cache does get reset if --reset-variations-state is passed.
+ {
+ CommandLine::ForCurrentProcess()->AppendSwitch(
+ switches::kResetVariationState);
+
+ MetricsService::SetExecutionPhase(MetricsService::UNINITIALIZED_PHASE);
+ MetricsService service;
+ service.GetLowEntropySource();
+
+ EXPECT_TRUE(GetLocalState()->GetString(kCachePrefName).empty());
+ }
+}
+
TEST_F(MetricsServiceTest, InitialStabilityLogAfterCleanShutDown) {
- EnableMetricsReporting();
+ base::FieldTrialList field_trial_list(NULL);
+ base::FieldTrialList::CreateFieldTrial("UMAStability", "SeparateLog");
+
GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, true);
TestMetricsService service;
- service.InitializeMetricsRecordingState();
+ service.InitializeMetricsRecordingState(MetricsService::REPORTING_ENABLED);
// No initial stability log should be generated.
EXPECT_FALSE(service.log_manager()->has_unsent_logs());
EXPECT_FALSE(service.log_manager()->has_staged_log());
}
TEST_F(MetricsServiceTest, InitialStabilityLogAfterCrash) {
- EnableMetricsReporting();
+ base::FieldTrialList field_trial_list(NULL);
+ base::FieldTrialList::CreateFieldTrial("UMAStability", "SeparateLog");
+
GetLocalState()->ClearPref(prefs::kStabilityExitedCleanly);
// Set up prefs to simulate restarting after a crash.
@@ -180,7 +251,7 @@
GetLocalState()->SetBoolean(prefs::kStabilityExitedCleanly, false);
TestMetricsService service;
- service.InitializeMetricsRecordingState();
+ service.InitializeMetricsRecordingState(MetricsService::REPORTING_ENABLED);
// The initial stability log should be generated and persisted in unsent logs.
MetricsLogManager* log_manager = service.log_manager();
@@ -304,3 +375,42 @@
EXPECT_FALSE(MetricsServiceHelper::IsCrashReportingEnabled());
#endif // defined(GOOGLE_CHROME_BUILD)
}
+
+// Check that setting the kMetricsResetIds pref to true causes the client id to
+// be reset. We do not check that the low entropy source is reset because we
+// cannot ensure that metrics service won't generate the same id again.
+TEST_F(MetricsServiceTest, ResetMetricsIDs) {
+ // Set an initial client id in prefs. It should not be possible for the
+ // metrics service to generate this id randomly.
+ const std::string kInitialClientId = "initial client id";
+ GetLocalState()->SetString(prefs::kMetricsClientID, kInitialClientId);
+
+ // Make sure the initial client id isn't reset by the metrics service.
+ {
+ MetricsService service;
+ service.ForceClientIdCreation();
+ EXPECT_TRUE(service.metrics_ids_reset_check_performed_);
+ EXPECT_EQ(kInitialClientId, service.client_id_);
+ }
+
+
+ // Set the reset pref to cause the IDs to be reset.
+ GetLocalState()->SetBoolean(prefs::kMetricsResetIds, true);
+
+ // Cause the actual reset to happen.
+ {
+ MetricsService service;
+ service.ForceClientIdCreation();
+ EXPECT_TRUE(service.metrics_ids_reset_check_performed_);
+ EXPECT_NE(kInitialClientId, service.client_id_);
+
+ service.GetLowEntropySource();
+
+ EXPECT_FALSE(GetLocalState()->GetBoolean(prefs::kMetricsResetIds));
+ }
+
+ std::string new_client_id =
+ GetLocalState()->GetString(prefs::kMetricsClientID);
+
+ EXPECT_NE(kInitialClientId, new_client_id);
+}

Powered by Google App Engine
This is Rietveld 408576698