| #!/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) |