# 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())