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