Implement the update engine portion for new enterprise policies.
Enterprises need the ability to stop the auto updates and pin clients
to a given target version. This CL adds support for these features in
the update_engine.
BUG=27307: Implement StopAutoUpdate based on enterprise policy
TEST=Added new unit tests, manually tested all cases on ZGB.
CQ-DEPEND=I523c3f67e0cb07fd24744dc0a30382ff2fe2128a
Change-Id: Id576401afc6d2c93f0e9ece7c6c0ddcf4b1bc00d
Reviewed-on: https://gerrit.chromium.org/gerrit/17867
Commit-Ready: Jay Srinivasan <jaysri@chromium.org>
Reviewed-by: Jay Srinivasan <jaysri@chromium.org>
Tested-by: Jay Srinivasan <jaysri@chromium.org>
diff --git a/update_attempter_unittest.cc b/update_attempter_unittest.cc
index 463d5a6..6402bb6 100644
--- a/update_attempter_unittest.cc
+++ b/update_attempter_unittest.cc
@@ -75,6 +75,13 @@
void ReadTrackFromPolicyTestStart();
static gboolean StaticReadTrackFromPolicyTestStart(gpointer data);
+ void ReadUpdateDisabledFromPolicyTestStart();
+ static gboolean StaticReadUpdateDisabledFromPolicyTestStart(gpointer data);
+
+ void ReadTargetVersionPrefixFromPolicyTestStart();
+ static gboolean StaticReadTargetVersionPrefixFromPolicyTestStart(
+ gpointer data);
+
MockDbusGlib dbus_;
UpdateAttempterUnderTest attempter_;
ActionProcessorMock* processor_;
@@ -272,6 +279,20 @@
return FALSE;
}
+gboolean UpdateAttempterTest::StaticReadUpdateDisabledFromPolicyTestStart(
+ gpointer data) {
+ UpdateAttempterTest* ua_test = reinterpret_cast<UpdateAttempterTest*>(data);
+ ua_test->ReadUpdateDisabledFromPolicyTestStart();
+ return FALSE;
+}
+
+gboolean UpdateAttempterTest::StaticReadTargetVersionPrefixFromPolicyTestStart(
+ gpointer data) {
+ UpdateAttempterTest* ua_test = reinterpret_cast<UpdateAttempterTest*>(data);
+ ua_test->ReadTargetVersionPrefixFromPolicyTestStart();
+ return FALSE;
+}
+
namespace {
const string kActionTypes[] = {
OmahaRequestAction::StaticType(),
@@ -404,4 +425,64 @@
g_idle_add(&StaticQuitMainLoop, this);
}
+TEST_F(UpdateAttempterTest, ReadUpdateDisabledFromPolicy) {
+ loop_ = g_main_loop_new(g_main_context_default(), FALSE);
+ g_idle_add(&StaticReadUpdateDisabledFromPolicyTestStart, this);
+ g_main_loop_run(loop_);
+ g_main_loop_unref(loop_);
+ loop_ = NULL;
+}
+
+void UpdateAttempterTest::ReadUpdateDisabledFromPolicyTestStart() {
+ // Tests that the update_disbled flag is properly fetched
+ // from the device policy.
+
+ policy::MockDevicePolicy* device_policy = new policy::MockDevicePolicy();
+ attempter_.policy_provider_.reset(new policy::PolicyProvider(device_policy));
+
+ EXPECT_CALL(*device_policy, LoadPolicy()).WillRepeatedly(Return(true));
+
+ EXPECT_CALL(*device_policy, GetUpdateDisabled(_))
+ .WillRepeatedly(DoAll(
+ SetArgumentPointee<0>(true),
+ Return(true)));
+
+ attempter_.Update("", "", false, false, false);
+ EXPECT_TRUE(attempter_.omaha_request_params_.update_disabled);
+
+ g_idle_add(&StaticQuitMainLoop, this);
+}
+
+TEST_F(UpdateAttempterTest, ReadTargetVersionPrefixFromPolicy) {
+ loop_ = g_main_loop_new(g_main_context_default(), FALSE);
+ g_idle_add(&StaticReadTargetVersionPrefixFromPolicyTestStart, this);
+ g_main_loop_run(loop_);
+ g_main_loop_unref(loop_);
+ loop_ = NULL;
+}
+
+void UpdateAttempterTest::ReadTargetVersionPrefixFromPolicyTestStart() {
+ // Tests that the target_version_prefix value is properly fetched
+ // from the device policy.
+
+ const std::string target_version_prefix = "1412.";
+
+ policy::MockDevicePolicy* device_policy = new policy::MockDevicePolicy();
+ attempter_.policy_provider_.reset(new policy::PolicyProvider(device_policy));
+
+ EXPECT_CALL(*device_policy, LoadPolicy()).WillRepeatedly(Return(true));
+
+ EXPECT_CALL(*device_policy, GetTargetVersionPrefix(_))
+ .WillRepeatedly(DoAll(
+ SetArgumentPointee<0>(target_version_prefix),
+ Return(true)));
+
+ attempter_.Update("", "", false, false, false);
+ EXPECT_EQ(target_version_prefix.c_str(),
+ attempter_.omaha_request_params_.target_version_prefix);
+
+ g_idle_add(&StaticQuitMainLoop, this);
+}
+
+
} // namespace chromeos_update_engine