# 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. import logging from autotest_lib.client.bin import utils from autotest_lib.client.common_lib import error from autotest_lib.client.common_lib.cros import chrome from autotest_lib.client.cros.update_engine import nano_omaha_devserver from autotest_lib.client.cros.update_engine import update_engine_test class autoupdate_EOL(update_engine_test.UpdateEngineTest): """Tests end of life (EOL) behaviour.""" version = 1 _EXPECTED_EOL_STATUS = 'EOL_STATUS=eol' _EOL_NOTIFICATION_TITLE = 'This device is no longer supported' def cleanup(self): self._save_extra_update_engine_logs() super(autoupdate_EOL, self).cleanup() def _check_eol_status(self): """Checks update_engines eol status.""" result = utils.run('update_engine_client --eol_status').stdout.strip() if result != self._EXPECTED_EOL_STATUS: raise error.TestFail('Expected status %s. Actual: %s' % (self._EXPECTED_EOL_STATUS, result)) def _check_eol_notification(self): """Checks that we are showing an EOL notification to the user.""" with chrome.Chrome(autotest_ext=True, logged_in=True) as cr: def find_notification(): notifications = cr.get_visible_notifications() if notifications is None: return False else: logging.debug(notifications) for n in notifications: if n['title'] == self._EOL_NOTIFICATION_TITLE: return True utils.poll_for_condition(condition=lambda: find_notification(), desc='Notification is found', timeout=5, sleep_interval=1) def run_once(self): # Start a devserver to return a response with eol entry. self._omaha = nano_omaha_devserver.NanoOmahaDevserver(eol=True) self._omaha.start() # Try to update using the omaha server. It will fail with noupdate. self._check_for_update(port=self._omaha.get_port(), ignore_status=True, wait_for_completion=True) self._check_eol_status() self._check_eol_notification()