| # -*- coding: utf-8 -*- |
| # Copyright (c) 2014 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. |
| |
| """Integration VM test for cros commands. |
| |
| To run this command, first build a test image. e.g. |
| (host)$ cros_sdk |
| (sdk)$ ./build_packages --board=betty |
| (sdk)$ ./build_image --board=betty test |
| (sdk)$ ./image_to_vm.sh --board=betty --test_image |
| (sdk)$ cd ../../chromite/cli/cros/tests/ |
| (sdk)$ ./cros_vm_test --board=betty --image_path \ |
| ~/trunk/src/build/images/betty/latest/chromiumos_qemu_image.bin |
| """ |
| |
| from __future__ import print_function |
| |
| from chromite.cli import command_vm_test |
| from chromite.lib import commandline |
| |
| |
| class CrosVMTest(command_vm_test.CommandVMTest): |
| """Test class for cros commands.""" |
| |
| def BuildCommand(self, command, device=None, pos_args=None, opt_args=None): |
| """Builds a cros command. |
| |
| Args: |
| command: The subcommand to build on (e.g. 'flash', 'deploy'). |
| device: The device's address for the command. |
| pos_args: A list of positional arguments for the command. |
| opt_args: A list of optional arguments for the command. |
| |
| Returns: |
| A full cros command as a list. |
| """ |
| cmd = ['cros', command] |
| if opt_args: |
| cmd.extend(opt_args) |
| if device: |
| if command == 'devices': |
| # The device argument is optional for 'cros devices' command. |
| cmd.extend(['--device', device]) |
| else: |
| cmd.append(device) |
| if pos_args: |
| cmd.extend(pos_args) |
| return cmd |
| |
| |
| def _ParseArguments(argv): |
| """Parses command-line arguments.""" |
| parser = commandline.ArgumentParser(description=__doc__, caching=True) |
| parser.add_argument( |
| '--board', required=True, help='Board for the VM to run tests.') |
| parser.add_argument( |
| '--image_path', required=True, type='path', |
| help='Path to the image for the VM to run tests.') |
| return parser.parse_args(argv) |
| |
| |
| def main(argv): |
| """Main function of the script.""" |
| options = _ParseArguments(argv) |
| options.Freeze() |
| test = CrosVMTest(options.board, options.image_path) |
| test.Run() |