| # 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 |
| import math |
| import time |
| |
| from autotest_lib.client.common_lib import error |
| from autotest_lib.client.cros.enterprise import enterprise_au_context |
| from autotest_lib.client.cros.enterprise import enterprise_policy_base |
| |
| |
| class policy_DeviceAutoUpdateDisabled( |
| enterprise_policy_base.EnterprisePolicyTest): |
| """Test for the DeviceAutoUpdateDisabled policy.""" |
| version = 1 |
| _POLICY = 'DeviceAutoUpdateDisabled' |
| |
| |
| def _test_update_disabled(self, should_update): |
| """ |
| Main test function. |
| |
| Try to update and poll for start (or lack of start) to the update. |
| Check whether an update request was sent. |
| |
| @param should_update: True or False whether the device should update. |
| |
| """ |
| # Log time is only in second accuracy. Assume no update request has |
| # occured since the current whole second started. |
| start_time = math.floor(time.time()) |
| logging.info('Update test start time: %s', start_time) |
| |
| try: |
| self._au_context.update_and_poll_for_update_start() |
| except error.TestFail as e: |
| if should_update: |
| raise e |
| else: |
| if not should_update: |
| raise error.TestFail('Update started when it should not have!') |
| |
| update_time = self._au_context.get_time_of_last_update_request() |
| logging.info('Last update time: %s', update_time) |
| |
| if should_update and (not update_time or update_time < start_time): |
| raise error.TestFail('No update request was sent!') |
| if not should_update and update_time and update_time >= start_time: |
| raise error.TestFail('Update request was sent!') |
| |
| |
| def run_once(self, case, image_url, image_size, sha256, enroll=True): |
| """ |
| Entry point of this test. |
| |
| @param case: True, False, or None for the value of the update policy. |
| @param image_url: Url of update image (this build). |
| @param image_size: Size of the update. |
| @param sha256: Sha256 hash of the update. |
| |
| """ |
| self.setup_case(device_policies={self._POLICY: case}, enroll=enroll) |
| |
| self._au_context = enterprise_au_context.NanoOmahaEnterpriseAUContext( |
| image_url=image_url, image_size=image_size, sha256=sha256) |
| |
| # When policy is False or not set, user should update. |
| self._test_update_disabled(should_update=case is not True) |