# 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_AutoUpdate"
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_AutoUpdate

"""


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 autoupdate 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_AutoUpdate', 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)
