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

# TEST IS DISABLED UNTIL MIGRATED TO PYTHON 3.
# For instructions on how to: go/tauto-py3-migration
# To re-enable migrate to Python 3.
# If the test is not migrated by 1/14/22 it will be deleted.

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)
