1134ec2c1ecfa243e9d7b0ebd18ed20a6bb6d7240J. Richard Barnette# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
28ee1d59be1e2ec44701a6263b602473596d0d0e0Chris Sosa# Use of this source code is governed by a BSD-style license that can be
38ee1d59be1e2ec44701a6263b602473596d0d0e0Chris Sosa# found in the LICENSE file.
48ee1d59be1e2ec44701a6263b602473596d0d0e0Chris Sosa
5b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnetteimport logging
6b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnetteimport time
7b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette
8134ec2c1ecfa243e9d7b0ebd18ed20a6bb6d7240J. Richard Barnettefrom autotest_lib.server import test
9b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnettefrom autotest_lib.client.common_lib import error
108ee1d59be1e2ec44701a6263b602473596d0d0e0Chris Sosa
11134ec2c1ecfa243e9d7b0ebd18ed20a6bb6d7240J. Richard Barnetteclass platform_InstallRecoveryImage(test.test):
128ee1d59be1e2ec44701a6263b602473596d0d0e0Chris Sosa    """Installs a specified recovery image onto a servo-connected DUT."""
138ee1d59be1e2ec44701a6263b602473596d0d0e0Chris Sosa    version = 1
148ee1d59be1e2ec44701a6263b602473596d0d0e0Chris Sosa
15b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette    _RECOVERY_INSTALL_DELAY = 540
16b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette
17741b5d42bfc197830145abe39d968ac44840efe5Simran Basi    def run_once(self, host, image):
18741b5d42bfc197830145abe39d968ac44840efe5Simran Basi        host.servo.install_recovery_image(image,
19b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette                                          make_image_noninteractive=True)
20b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette        logging.info('Running the recovery process on the DUT. '
21b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette                     'Will wait up to %d seconds for recovery to '
22b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette                     'complete.', self._RECOVERY_INSTALL_DELAY)
23b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette        start_time = time.time()
24b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette        # Wait for the host to come up.
25b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette        if host.ping_wait_up(timeout=self._RECOVERY_INSTALL_DELAY):
26b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette            logging.info('Recovery process completed successfully in '
27b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette                         '%d seconds.', time.time() - start_time)
28b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette        else:
29b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette            raise error.TestFail('Host failed to come back up after '
30b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette                                 '%d seconds.' % self._RECOVERY_INSTALL_DELAY)
31b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette        logging.info('Removing the usb key from the DUT.')
32b6de7e3d672bfa4b9b2c4c304165bb5fdd03f4a1J. Richard Barnette        host.servo.switch_usbkey('host')
33