blob: 2a73bc457dc7542c84c2fc83e5e57cdfe6fbf34f [file] [log] [blame]
// 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(const EnvironmentRecorderTest&) = delete;
EnvironmentRecorderTest& operator=(const EnvironmentRecorderTest&) = delete;
~EnvironmentRecorderTest() override {}
protected:
TestingPrefServiceSimple prefs_;
};
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