| # Copyright 2018 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.cros.update_engine import nano_omaha_devserver |
| from autotest_lib.client.cros.update_engine import update_engine_test |
| |
| class autoupdate_UrlSwitch(update_engine_test.UpdateEngineTest): |
| """Tests that we can continue with the second url when the first fails.""" |
| version = 1 |
| |
| def run_once(self, image_url, image_size, sha256): |
| # Start an omaha instance on the DUT that will return a response with |
| # two Urls. This matches what test and production omaha does today. |
| self._omaha = nano_omaha_devserver.NanoOmahaDevserver() |
| self._omaha.set_image_params(image_url, image_size, sha256) |
| self._omaha.start() |
| |
| # Start the update. |
| self._check_for_update(port=self._omaha.get_port()) |
| self._wait_for_progress(0.2) |
| |
| # Pull the network cable so the update fails. |
| self._disable_internet() |
| |
| # It will retry 21 times before giving up. |
| self._wait_for_update_to_fail() |
| |
| # Check that we are moving to the next Url. |
| self._enable_internet() |
| self._check_update_engine_log_for_entry('Reached max number of ' |
| 'failures for Url') |
| |
| # The next update attempt should resume and finish successfully. |
| self._check_for_update(port=self._omaha.get_port()) |
| self._wait_for_update_to_complete() |
| self._check_update_engine_log_for_entry('Resuming an update that was ' |
| 'previously started.') |