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

from autotest_lib.client.common_lib import error, utils


AUTHOR = "sbasi, chromeos-lab-infrastructure@google.com"
ATTRIBUTES = "suite:bvt-cq"
NAME = "generic_RebootTest"
TIME = "SHORT"
TEST_CATEGORY = "Functional"
TEST_CLASS = "Generic"
TEST_TYPE = "server"

DOC = """
This server side test checks if a host, specified through the command line,
can successfully reboot. It automatically detects the type of the host,
creates the appropriate host object, and calls reboot on the host object.

Example usage:
test_that generic_RebootTest <sonic/cros/beaglobonedevice ip> --board=<board>
A note about --board: <unless you're emerging sonic sources you
can just use a chromeos board here, as all we need is test_that
from the sysroot>.

Typically, for the case of an adb host, we can send adb commands to the
android device either through usb or tcp. If no device_hostname is specified
the adb commands are sent to the android device over usb, via the beaglebone,
whereas if the ip of the android device is specified through device_hostname
we'll send the adb commands over tcp.
"""

args_dict = utils.args_to_dict(args)

def run_reboot_test(machine):
    device_hostname = args_dict.get('device_hostname', None)
    try:
        host = hosts.create_host(machine,
                                 device_hostname=device_hostname)
    except error.AutoservError as e:
        raise error.AutoservError(
            'Failed to create host for %s: %s. If this is an android host that '
            'requires a beaglebone jump host, you need to specify the device '
            'hostname through test_that --args="device_hostname=<android ip>".'
            % (machine, e))

    job.run_test("generic_RebootTest", host=host)


parallel_simple(run_reboot_test, machines)
