# Copyright (c) 2013 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 = "milleral, chromeos-lab-infrastructure"
NAME = "provision_QuickProvision"
PURPOSE = "Provision a system to the correct OS version."
TIME = "MEDIUM"
TEST_CATEGORY = "System"
TEST_CLASS = "provision"
TEST_TYPE = "Server"

DOC = """
This is a test used by the provision control segment in autoserv to set the
cros-version label of a host to the desired setting.

To run locally:

1. Start a devserver outside of a chroot like this:
src/platform/dev/devserver.py --port=8082

2. You will need to add a few lines to
src/third_party/autotest/files/shadow_config.ini

[CROS]
dev_server: http://127.0.0.1:8082

3. Use a command like this replacing the |value| arg with the device and build
version you want to run the test against:

test_that --args="value='samus-release/R60-9495.0.0'" <DUT-IPADDR>
provision_QuickProvision

"""


from autotest_lib.client.bin import sysinfo
from autotest_lib.client.common_lib import error, utils
from autotest_lib.client.cros import constants


# Uncomment the below line, and change it to the correct value if you are
# running this from the AFE.
# value = 'lumpy-release/R28-3993.0.0'


if not locals().get('value'):
    args = utils.args_to_dict(args)
    if not args.get('value'):
        raise error.TestError("No provision value!")
    value = args['value']


def run(machine):
    # Save preserved log after provision is completed.
    job.sysinfo.add_logdir(
            sysinfo.logdir(constants.AUTOUPDATE_PRESERVE_LOG))

    host = hosts.create_host(machine)
    # Only collect pre-test sysinfo to save time.
    job.run_test('provision_QuickProvision', host=host, value=value,
                 disable_sysinfo=False,
                 disable_before_test_sysinfo=False,
                 disable_before_iteration_sysinfo=True,
                 disable_after_test_sysinfo=True,
                 disable_after_iteration_sysinfo=True)


job.parallel_simple(run, machines)
