# Copyright 2014 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.


AUTHOR = 'fdeng, chromeos-lab-infrastructure'
NAME = 'provision_AutoUpdate.double'
PURPOSE = 'Verify autoupdate works by provisioning a host to its current build'
TIME = 'MEDIUM'
TEST_CATEGORY = 'System'
TEST_CLASS = 'provision'
TEST_TYPE = 'Server'
# Note: This test can occasionally take more than 20 minutes to complete. Be
# sure the suite max_runtime_mins is set to a large enough value. If the test
# is terminated early, you will see a line in status.log "Job aborted by
# autotest_system". You can double-check the "Max runtime" for the job in the
# Autotest web frontend.
ATTRIBUTES = "suite:bvt-inline, suite:push_to_prod, suite:skylab_staging_test, suite:dev_drone_image_test"
JOB_RETRIES = 2

DOC = """
This test is to ensure that we can provision out of a given build.
When running this test with a cros-version label, the scheduler
does the first-round provision by scheduling a provision special task
on the host. And then this test is run to enforce a second-round
provision that verifies the auto-update actually works.

What does the failure of this test mean?

If this test fails, any DUT with this build is likely going to require
re-imaging from USB. We decided to add this test to bvt-inline and run it
in parrallel with other tests, which means by the time this test reports
failure, many duts in the pool will have been imaged with the bad build.

We are taking the risk because
1) Blocking all testing until this test ran would impose a per-build
   performance cost we don't want to pay.
2) History suggests that bugs of this sort are very rare.
3) We hope that in future, servo will be sufficiently reliable to offset
   this kind of failure.
"""


from autotest_lib.client.bin import sysinfo
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import constants
from autotest_lib.server import afe_utils
from autotest_lib.server import utils as server_utils


def run(machine):
    # This test will try to access cautotest to get cros-label
    # of the host and also update the label. This will fail
    # when the test is kicked of by test_that on people's desk.
    # As a workaround, we will check whether the test is running
    # inside a chroot (as test_that requires chroot), if so,
    # skip the test.
    if server_utils.is_inside_chroot():
        is_test_na = True
        host = None
        value = None
    else:
        is_test_na = False
        # Save preserved log after autoupdate is completed.
        job.sysinfo.add_logdir(
                sysinfo.logdir(constants.AUTOUPDATE_PRESERVE_LOG))
        host = hosts.create_host(machine)
        info = host.host_info_store.get()
        value = info.build
    job.run_test('provision_AutoUpdate', host=host, value=value,
                 force_update_engine=True, disable_sysinfo=False,
                 tag='double', is_test_na=is_test_na)


job.parallel_simple(run, machines)
