// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/component_updater/updater_state.h"
#include <optional>
#include "base/files/file_path.h"
#include "base/files/file_util.h"
#include "base/time/time.h"
#include "base/version.h"
#include "build/branding_buildflags.h"
#include "build/build_config.h"
#include "chrome/updater/updater_scope.h"
#include "chrome/updater/util/util.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace component_updater {
class UpdaterStateTest : public testing::Test {};
TEST_F(UpdaterStateTest, SerializeChromium) {
#if BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
EXPECT_STREQ("0", UpdaterState::GetState(false).at("ismachine").c_str());
EXPECT_STREQ("1", UpdaterState::GetState(true).at("ismachine").c_str());
#else
EXPECT_TRUE(UpdaterState::GetState(false).empty());
EXPECT_TRUE(UpdaterState::GetState(true).empty());
#endif // BUILDFLAG(IS_WIN) || BUILDFLAG(IS_MAC)
}
#if (BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)) && \
BUILDFLAG(GOOGLE_CHROME_BRANDING)
TEST_F(UpdaterStateTest, SerializeChromePerUser) {
{
UpdaterState updater_state(false);
updater_state.state_->updater_name = "the updater";
updater_state.state_->updater_version = base::Version("1.0");
updater_state.state_->last_autoupdate_started =
base::Time::NowFromSystemTime();
updater_state.state_->last_checked = base::Time::NowFromSystemTime();
updater_state.state_->is_autoupdate_check_enabled = true;
updater_state.state_->update_policy = 1;
UpdaterState::Attributes attributes = updater_state.Serialize();
EXPECT_STREQ("the updater", attributes.at("name").c_str());
EXPECT_STREQ("1.0", attributes.at("version").c_str());
EXPECT_STREQ("0", attributes.at("laststarted").c_str());
EXPECT_STREQ("0", attributes.at("lastchecked").c_str());
EXPECT_STREQ("1", attributes.at("autoupdatecheckenabled").c_str());
EXPECT_STREQ("1", attributes.at("updatepolicy").c_str());
}
{
UpdaterState updater_state = UpdaterState(false);
// Don't serialize an invalid version if it could not be read.
updater_state.state_->updater_version = base::Version();
UpdaterState::Attributes attributes = updater_state.Serialize();
EXPECT_EQ(0u, attributes.count("version"));
updater_state.state_->updater_version = base::Version("0.0.0.0");
attributes = updater_state.Serialize();
EXPECT_STREQ("0.0.0.0", attributes.at("version").c_str());
updater_state.state_->last_autoupdate_started =
base::Time::NowFromSystemTime() - base::Days(15);
attributes = updater_state.Serialize();
EXPECT_STREQ("336", attributes.at("laststarted").c_str());
updater_state.state_->last_autoupdate_started =
base::Time::NowFromSystemTime() - base::Days(58);
attributes = updater_state.Serialize();
EXPECT_STREQ("1344", attributes.at("laststarted").c_str());
updater_state.state_->last_autoupdate_started =
base::Time::NowFromSystemTime() - base::Days(90);
attributes = updater_state.Serialize();
EXPECT_STREQ("1344", attributes.at("laststarted").c_str());
// Don't serialize the time if it could not be read.
updater_state.state_->last_autoupdate_started = base::Time();
attributes = updater_state.Serialize();
EXPECT_EQ(0u, attributes.count("laststarted"));
updater_state.state_->last_checked =
base::Time::NowFromSystemTime() - base::Days(15);
attributes = updater_state.Serialize();
EXPECT_STREQ("336", attributes.at("lastchecked").c_str());
updater_state.state_->last_checked =
base::Time::NowFromSystemTime() - base::Days(90);
attributes = updater_state.Serialize();
EXPECT_STREQ("1344", attributes.at("lastchecked").c_str());
// Don't serialize the time if it could not be read (the value is invalid).
updater_state.state_->last_checked = base::Time();
attributes = updater_state.Serialize();
EXPECT_EQ(0u, attributes.count("lastchecked"));
updater_state.state_->is_autoupdate_check_enabled = false;
attributes = updater_state.Serialize();
EXPECT_STREQ("0", attributes.at("autoupdatecheckenabled").c_str());
updater_state.state_->update_policy = 0;
attributes = updater_state.Serialize();
EXPECT_STREQ("0", attributes.at("updatepolicy").c_str());
updater_state.state_->update_policy = -1;
attributes = updater_state.Serialize();
EXPECT_STREQ("-1", attributes.at("updatepolicy").c_str());
}
}
#endif // (BUILDFLAG(IS_MAC) || BUILDFLAG(IS_WIN)) &&
// BUILDFLAG(GOOGLE_CHROME_BRANDING)
} // namespace component_updater