90 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			90 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Python
		
	
	
	
# 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.common_lib import utils
 | 
						|
from autotest_lib.client.cros.update_engine import nebraska_wrapper
 | 
						|
from autotest_lib.client.cros.update_engine import update_engine_test
 | 
						|
from autotest_lib.client.cros.enterprise import enterprise_policy_base
 | 
						|
 | 
						|
 | 
						|
class policy_DeviceAutoUpdateDisabled(
 | 
						|
        enterprise_policy_base.EnterprisePolicyTest,
 | 
						|
        update_engine_test.UpdateEngineTest):
 | 
						|
    """Test for the DeviceAutoUpdateDisabled policy."""
 | 
						|
    version = 1
 | 
						|
    _POLICY = 'DeviceAutoUpdateDisabled'
 | 
						|
 | 
						|
 | 
						|
    def _test_update_disabled(self, update_url, 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 update_url: The URL to get an update from.
 | 
						|
        @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._check_for_update(update_url, interactive=False)
 | 
						|
 | 
						|
            utils.poll_for_condition(
 | 
						|
                    self._is_update_started,
 | 
						|
                    timeout=60,
 | 
						|
                    exception=error.TestFail('Update did not 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._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, 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).
 | 
						|
 | 
						|
        """
 | 
						|
        # Because we are doing polimorphism and the EnterprisePolicyTest is
 | 
						|
        # earlier in the python MRO, this class's initialize() will get called,
 | 
						|
        # but not the UpdateEngineTest's initialize(). So we need to call it
 | 
						|
        # manually.
 | 
						|
        update_engine_test.UpdateEngineTest.initialize(self)
 | 
						|
 | 
						|
        self.setup_case(device_policies={self._POLICY: case}, enroll=enroll)
 | 
						|
 | 
						|
        with nebraska_wrapper.NebraskaWrapper(
 | 
						|
            log_dir=self.resultsdir, payload_url=image_url,
 | 
						|
            target_version='999999.9.9') as nebraska:
 | 
						|
 | 
						|
            self._create_custom_lsb_release(nebraska.get_update_url(),
 | 
						|
                                            build='1.1.1')
 | 
						|
 | 
						|
            # When policy is False or not set, user should update.
 | 
						|
            self._test_update_disabled(nebraska.get_update_url(),
 | 
						|
                                       should_update=case is not True)
 | 
						|
 |