update_engine: Implement ReleaseLtsTag
LTS (Long Term Support) requires reading the policy
ChromeOSReleaseLtsHint() to get the token that is used for defining the
LTS channel parameters. The value is sent in "ltstag" attribute of the
updatecheck.
BUG=chromium:1114784
TEST=sudo FEATURES=test emerge update_engine
Cq-Depend: chromium:2345311
Change-Id: I480e7920e9187ebe79cbde6c655252e432842608
Reviewed-on: https://chromium-review.googlesource.com/c/aosp/platform/system/update_engine/+/2350580
Reviewed-by: Victor-Gabriel Savu <vsavu@google.com>
Reviewed-by: Jae Hoon Kim <kimjae@chromium.org>
Reviewed-by: Andrew Lassalle <andrewlassalle@chromium.org>
Tested-by: Victor-Gabriel Savu <vsavu@google.com>
Commit-Queue: Victor-Gabriel Savu <vsavu@google.com>
Commit-Queue: Amin Hassani <ahassani@chromium.org>
diff --git a/update_manager/android_things_policy.cc b/update_manager/android_things_policy.cc
index a76ea48..6362a73 100644
--- a/update_manager/android_things_policy.cc
+++ b/update_manager/android_things_policy.cc
@@ -58,6 +58,7 @@
// Set the default return values.
result->updates_enabled = true;
result->target_channel.clear();
+ result->lts_tag.clear();
result->target_version_prefix.clear();
result->rollback_allowed = false;
result->rollback_data_save_requested = false;
diff --git a/update_manager/chromeos_policy.cc b/update_manager/chromeos_policy.cc
index c310e42..a4926f4 100644
--- a/update_manager/chromeos_policy.cc
+++ b/update_manager/chromeos_policy.cc
@@ -215,6 +215,7 @@
// Set the default return values.
result->updates_enabled = true;
result->target_channel.clear();
+ result->lts_tag.clear();
result->target_version_prefix.clear();
result->rollback_allowed = false;
result->rollback_allowed_milestones = -1;
diff --git a/update_manager/chromeos_policy_unittest.cc b/update_manager/chromeos_policy_unittest.cc
index 414ac0d..f4ad165 100644
--- a/update_manager/chromeos_policy_unittest.cc
+++ b/update_manager/chromeos_policy_unittest.cc
@@ -262,6 +262,8 @@
new bool(false));
fake_state_.device_policy_provider()->var_release_channel()->reset(
new string("foo-channel"));
+ fake_state_.device_policy_provider()->var_release_lts_tag()->reset(
+ new string("foo-hint"));
UpdateCheckParams result;
ExpectPolicyStatus(
@@ -270,6 +272,7 @@
EXPECT_EQ("1.2", result.target_version_prefix);
EXPECT_EQ(5, result.rollback_allowed_milestones);
EXPECT_EQ("foo-channel", result.target_channel);
+ EXPECT_EQ("foo-hint", result.lts_tag);
EXPECT_FALSE(result.interactive);
}
diff --git a/update_manager/default_policy.cc b/update_manager/default_policy.cc
index 81ab795..cc13c44 100644
--- a/update_manager/default_policy.cc
+++ b/update_manager/default_policy.cc
@@ -40,6 +40,7 @@
UpdateCheckParams* result) const {
result->updates_enabled = true;
result->target_channel.clear();
+ result->lts_tag.clear();
result->target_version_prefix.clear();
result->rollback_allowed = false;
result->rollback_allowed_milestones = -1; // No version rolls should happen.
diff --git a/update_manager/device_policy_provider.h b/update_manager/device_policy_provider.h
index b68fe96..d63c416 100644
--- a/update_manager/device_policy_provider.h
+++ b/update_manager/device_policy_provider.h
@@ -44,6 +44,8 @@
virtual Variable<bool>* var_release_channel_delegated() = 0;
+ virtual Variable<std::string>* var_release_lts_tag() = 0;
+
virtual Variable<bool>* var_update_disabled() = 0;
virtual Variable<std::string>* var_target_version_prefix() = 0;
diff --git a/update_manager/enterprise_device_policy_impl.cc b/update_manager/enterprise_device_policy_impl.cc
index dea38ba..fed50a9 100644
--- a/update_manager/enterprise_device_policy_impl.cc
+++ b/update_manager/enterprise_device_policy_impl.cc
@@ -126,6 +126,12 @@
if (release_channel_p)
result->target_channel = *release_channel_p;
}
+
+ const string* release_lts_tag_p =
+ ec->GetValue(dp_provider->var_release_lts_tag());
+ if (release_lts_tag_p) {
+ result->lts_tag = *release_lts_tag_p;
+ }
}
return EvalStatus::kContinue;
}
diff --git a/update_manager/fake_device_policy_provider.h b/update_manager/fake_device_policy_provider.h
index 86bdef1..352e51e 100644
--- a/update_manager/fake_device_policy_provider.h
+++ b/update_manager/fake_device_policy_provider.h
@@ -42,6 +42,10 @@
return &var_release_channel_delegated_;
}
+ FakeVariable<std::string>* var_release_lts_tag() override {
+ return &var_release_lts_tag_;
+ }
+
FakeVariable<bool>* var_update_disabled() override {
return &var_update_disabled_;
}
@@ -98,6 +102,8 @@
kVariableModePoll};
FakeVariable<bool> var_release_channel_delegated_{"release_channel_delegated",
kVariableModePoll};
+ FakeVariable<std::string> var_release_lts_tag_{"release_lts_tag",
+ kVariableModePoll};
FakeVariable<bool> var_update_disabled_{"update_disabled", kVariableModePoll};
FakeVariable<std::string> var_target_version_prefix_{"target_version_prefix",
kVariableModePoll};
diff --git a/update_manager/policy.h b/update_manager/policy.h
index 844a4d0..9194c38 100644
--- a/update_manager/policy.h
+++ b/update_manager/policy.h
@@ -60,6 +60,8 @@
int rollback_allowed_milestones;
// A target channel, if so imposed by policy; otherwise, an empty string.
std::string target_channel;
+ // Specifies if the channel hint, e.g. LTS (Long Term Support) updates.
+ std::string lts_tag;
// Whether the allowed update is interactive (user-initiated) or periodic.
bool interactive;
diff --git a/update_manager/real_device_policy_provider.cc b/update_manager/real_device_policy_provider.cc
index 55232f3..bd9d415 100644
--- a/update_manager/real_device_policy_provider.cc
+++ b/update_manager/real_device_policy_provider.cc
@@ -220,6 +220,7 @@
UpdateVariable(&var_release_channel_, &DevicePolicy::GetReleaseChannel);
UpdateVariable(&var_release_channel_delegated_,
&DevicePolicy::GetReleaseChannelDelegated);
+ UpdateVariable(&var_release_lts_tag_, &DevicePolicy::GetReleaseLtsTag);
UpdateVariable(&var_update_disabled_, &DevicePolicy::GetUpdateDisabled);
UpdateVariable(&var_target_version_prefix_,
&DevicePolicy::GetTargetVersionPrefix);
diff --git a/update_manager/real_device_policy_provider.h b/update_manager/real_device_policy_provider.h
index 9da052d..e6df18c 100644
--- a/update_manager/real_device_policy_provider.h
+++ b/update_manager/real_device_policy_provider.h
@@ -64,6 +64,10 @@
return &var_release_channel_delegated_;
}
+ Variable<std::string>* var_release_lts_tag() override {
+ return &var_release_lts_tag_;
+ }
+
Variable<bool>* var_update_disabled() override {
return &var_update_disabled_;
}
@@ -191,6 +195,7 @@
AsyncCopyVariable<std::string> var_release_channel_{"release_channel"};
AsyncCopyVariable<bool> var_release_channel_delegated_{
"release_channel_delegated"};
+ AsyncCopyVariable<std::string> var_release_lts_tag_{"release_lts_tag"};
AsyncCopyVariable<bool> var_update_disabled_{"update_disabled"};
AsyncCopyVariable<std::string> var_target_version_prefix_{
"target_version_prefix"};
diff --git a/update_manager/real_device_policy_provider_unittest.cc b/update_manager/real_device_policy_provider_unittest.cc
index 84debd1..1384e6f 100644
--- a/update_manager/real_device_policy_provider_unittest.cc
+++ b/update_manager/real_device_policy_provider_unittest.cc
@@ -177,6 +177,7 @@
UmTestUtils::ExpectVariableNotSet(provider_->var_release_channel());
UmTestUtils::ExpectVariableNotSet(provider_->var_release_channel_delegated());
+ UmTestUtils::ExpectVariableNotSet(provider_->var_release_lts_tag());
UmTestUtils::ExpectVariableNotSet(provider_->var_update_disabled());
UmTestUtils::ExpectVariableNotSet(provider_->var_target_version_prefix());
UmTestUtils::ExpectVariableNotSet(