blob: dcee7797472e9e7953d82414601859d4a861266f [file] [log] [blame]
# Lint as: python2, python3
# Copyright (c) 2021 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros.update_engine import nebraska_wrapper
from autotest_lib.client.cros.update_engine import update_engine_test
class autoupdate_InvalidateSuccessfulUpdate(update_engine_test.UpdateEngineTest
):
"""Tests installing an update and then invalidating it."""
version = 1
def _apply_update(self, update_url):
"""
Performs the update and ensures it is successful.
@param update_url: The URL to get an update.
"""
try:
self._check_for_update(update_url,
critical_update=True,
wait_for_completion=True)
except error.CmdError as e:
raise error.TestFail('Update attempt failed: %s' %
self._get_last_error_string())
def _check_invalidated_update(self, update_url):
"""
Performs an update check and confirms that it results
in an invalidated update.
@param update_url: The URL to get an update.
"""
try:
self._check_for_update(update_url,
critical_update=True,
wait_for_completion=False)
self._wait_for_update_to_idle(check_kernel_after_update=True,
inactive_kernel=False)
except error.CmdError as e:
raise error.TestFail('Invalidate attempt failed: %s' %
self._get_last_error_string())
self._check_update_engine_log_for_entry(
'Invalidating previous update.',
raise_error=True,
err_str='Failed to invalidate previous update')
def run_once(self, payload_url):
"""
Runs an update and then invalidates it using Nebraska.
@param payload_url: Path to a payload on Google storage.
"""
with nebraska_wrapper.NebraskaWrapper(
log_dir=self.resultsdir, payload_url=payload_url) as nebraska:
self._apply_update(nebraska.get_update_url())
nebraska.update_config(invalidate_last_update=True)
self._check_invalidated_update(nebraska.get_update_url())