| // Copyright 2017 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "components/metrics/environment_recorder.h" |
| |
| #include "components/metrics/metrics_pref_names.h" |
| #include "components/prefs/testing_pref_service.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| #include "third_party/metrics_proto/system_profile.pb.h" |
| |
| namespace metrics { |
| |
| class EnvironmentRecorderTest : public testing::Test { |
| public: |
| EnvironmentRecorderTest() { |
| EnvironmentRecorder::RegisterPrefs(prefs_.registry()); |
| } |
| |
| ~EnvironmentRecorderTest() override {} |
| |
| protected: |
| TestingPrefServiceSimple prefs_; |
| |
| private: |
| DISALLOW_COPY_AND_ASSIGN(EnvironmentRecorderTest); |
| }; |
| |
| TEST_F(EnvironmentRecorderTest, LoadEnvironmentFromPrefs) { |
| const char* kSystemProfilePref = prefs::kStabilitySavedSystemProfile; |
| const char* kSystemProfileHashPref = prefs::kStabilitySavedSystemProfileHash; |
| |
| // The pref value is empty, so loading it from prefs should fail. |
| { |
| EnvironmentRecorder recorder(&prefs_); |
| SystemProfileProto system_profile; |
| EXPECT_FALSE(recorder.LoadEnvironmentFromPrefs(&system_profile)); |
| EXPECT_FALSE(system_profile.has_app_version()); |
| } |
| |
| // Do a RecordEnvironment() call and check whether the pref is recorded. |
| { |
| EnvironmentRecorder recorder(&prefs_); |
| SystemProfileProto system_profile; |
| system_profile.set_app_version("bogus version"); |
| std::string serialized_profile = |
| recorder.SerializeAndRecordEnvironmentToPrefs(system_profile); |
| EXPECT_FALSE(serialized_profile.empty()); |
| EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty()); |
| EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty()); |
| } |
| |
| // Load it and check that it has the right value. |
| { |
| EnvironmentRecorder recorder(&prefs_); |
| SystemProfileProto system_profile; |
| EXPECT_TRUE(recorder.LoadEnvironmentFromPrefs(&system_profile)); |
| EXPECT_EQ("bogus version", system_profile.app_version()); |
| // Ensure that the call did not clear the prefs. |
| EXPECT_FALSE(prefs_.GetString(kSystemProfilePref).empty()); |
| EXPECT_FALSE(prefs_.GetString(kSystemProfileHashPref).empty()); |
| } |
| |
| // Ensure that a non-matching hash results in the pref being invalid. |
| { |
| // Set the hash to a bad value. |
| prefs_.SetString(kSystemProfileHashPref, "deadbeef"); |
| EnvironmentRecorder recorder(&prefs_); |
| SystemProfileProto system_profile; |
| EXPECT_FALSE(recorder.LoadEnvironmentFromPrefs(&system_profile)); |
| EXPECT_FALSE(system_profile.has_app_version()); |
| } |
| } |
| |
| } // namespace metrics |