#!/usr/bin/python # Copyright 2015 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 import os import sys import common try: # Ensure the chromite site-package is installed. from chromite.lib import * except ImportError: import subprocess build_externals_path = os.path.join( os.path.dirname(os.path.dirname(os.path.realpath(__file__))), 'utils', 'build_externals.py') subprocess.check_call([build_externals_path, 'chromiterepo']) # Restart the script so python now finds the autotest site-packages. sys.exit(os.execv(__file__, sys.argv)) from autotest_lib.site_utils import brillo_common _TEST_NAME = 'brillo_RecoverFromBadImage' def setup_parser(parser): """Add parser options. @param parser: argparse.ArgumentParser of the script. """ parser.add_argument('-i', '--recovery_image', metavar='FILE', required=True, help='Image file to use for recovery. This is a ' 'mandatory input.') parser.add_argument('-p', '--partition', metavar='NAME', help='Name of partition to recover. If the name ends ' 'with "_X" then it will be substitued with the ' 'currently active slot (e.g. "_a"). (default: ' 'system_X)') parser.add_argument('-D', '--device', metavar='PATH', help='Path of partition device. (default: infer from ' 'name)') brillo_common.setup_test_action_parser(parser) def main(args): """The main function.""" args = brillo_common.parse_args( 'Set up Moblab for running Brillo image recovery test, then launch ' 'the test (unless otherwise requested).', setup_parser=setup_parser) test_args = {} if args.partition: test_args['partition'] = args.partition if args.device: test_args['device'] = args.device moblab, _ = brillo_common.get_moblab_and_devserver_port(args.moblab_host) tmp_dir = moblab.make_tmp_dir() try: remote_recovery_image = os.path.join( tmp_dir, os.path.basename(args.recovery_image)) moblab.send_file(args.recovery_image, remote_recovery_image) moblab.run('chown -R moblab:moblab %s' % tmp_dir) test_args['image_file'] = remote_recovery_image logging.info('Recovery image was staged') brillo_common.do_test_action(args, moblab, _TEST_NAME, test_args) finally: moblab.run('rm -rf %s' % tmp_dir) if __name__ == '__main__': try: main(sys.argv) sys.exit(0) except brillo_common.BrilloTestError as e: logging.error('Error: %s', e) sys.exit(1)