# Copyright (c) 2012 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.

from autotest_lib.client.common_lib import utils

AUTHOR = "Chrome OS Team"
NAME = "platform_InstallRecoveryImage"
TIME = "MEDIUM"
TEST_CATEGORY = "Install"
TEST_CLASS = "platform"
TEST_TYPE = "server"

DOC = """
This test installs a specified recovery image onto a servo-connected DUT.
This is useful for testing the recovery process and imaging servo-connected
Devices under Test (DUTs).
Here is the command to install a recovery image;
test_that --args='image=<recovery_image_path_on_host>'
          --board=<board name>
          <IP addres>
          platform_InstallRecoveryImage
"""

args_dict = utils.args_to_dict(args)
image = args_dict.get('image', None)
servo_args = hosts.CrosHost.get_servo_arguments(args_dict)

def run(machine):
    # Setup the client machine.
    host = hosts.create_host(machine, servo_args=servo_args)
    job.fast = True
    job.run_test("platform_InstallRecoveryImage", host=host,
                 disable_sysinfo=True, image=image, local=False)

parallel_simple(run, machines)
