82 lines
2.8 KiB
Python
Executable file
82 lines
2.8 KiB
Python
Executable file
#!/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)
|