blob: c0251ad64b9a49fa366ac0d7c86726a5da9a07bb [file] [log] [blame]
# Copyright 2020 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
import os
from autotest_lib.client.bin import utils
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_PeriodicCheck(update_engine_test.UpdateEngineTest):
"""Tests update_engine's periodic update check mechanism."""
version = 1
_PERIODIC_INTERVAL_PREF = 'test-update-check-interval-timeout'
_PERIODIC_LOG = ('Unofficial build, but periodic update check interval '
'timeout is defined, so update is not blocked.')
def cleanup(self):
"""Cleans up the state and extra files this test created."""
self._remove_update_engine_pref(self._PERIODIC_INTERVAL_PREF)
self._clear_custom_lsb_release()
super(autoupdate_PeriodicCheck, self).cleanup()
def run_once(self, payload_url, periodic_interval):
"""
Tests update_engine's periodic update check.
@param payload_url: The payload url.
@param periodic_interval: Seconds between periodic update checks.
"""
# Setup the DUT for the test.
pref_file = os.path.join(self._UPDATE_ENGINE_PREFS_DIR,
self._PERIODIC_INTERVAL_PREF)
utils.run(['echo', str(periodic_interval), '>', pref_file])
utils.run(['touch', '/home/chronos/.oobe_completed'])
with nebraska_wrapper.NebraskaWrapper(
log_dir=self.resultsdir, payload_url=payload_url) as nebraska:
logging.info('Setting first update response to return no update.')
self._create_custom_lsb_release(
nebraska.get_update_url(no_update=True))
self._restart_update_engine()
# Wait for the first update check.
try:
utils.poll_for_condition(
lambda: len(self._get_update_requests()) == 1,
desc='1st periodic update check.',
timeout=1.5 * periodic_interval)
except utils.TimeoutError:
raise error.TestFail('1st periodic check not found.')
self._check_update_engine_log_for_entry(self._PERIODIC_LOG,
raise_error=True)
logging.info('First periodic update was initiated.')
logging.info('Setting the next update response to be an update.')
self._create_custom_lsb_release(nebraska.get_update_url())
# Wait for the second update check.
try:
utils.poll_for_condition(
lambda: len(self._get_update_requests()) == 2,
desc='2nd periodic update check.',
timeout=2 * periodic_interval)
except utils.TimeoutError:
raise error.TestFail('2nd periodic check not found.')
logging.info('Second periodic update was initiated.')
self._wait_for_update_to_complete()