# 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 error
from autotest_lib.server import test

class platform_InstallTestImage(test.test):
    """Installs a specified test image onto a servo-connected DUT."""
    version = 1

    # Time to allow for chromeos-install.  At the time of this
    # writing, four minutes is about double what's needed.
    _INSTALL_TIMEOUT = 240

    def run_once(self, host, image):
        host.servo.install_recovery_image(image)
        if not host.wait_up(timeout=host.USB_BOOT_TIMEOUT):
            raise error.TestFail('DUT failed to boot from USB'
                                 ' after %d seconds' % host.USB_BOOT_TIMEOUT)
        host.run('chromeos-install --yes',
                 timeout=self._INSTALL_TIMEOUT)
        host.servo.power_long_press()
        host.servo.set('usb_mux_sel1', 'servo_sees_usbkey')
        host.servo.power_short_press()
        if not host.wait_up(timeout=host.BOOT_TIMEOUT):
            raise error.TestFail('DUT failed to reboot installed test image'
                                 ' after %d seconds' % host.BOOT_TIMEOUT)
