def add_common_arguments(p): script_common.AddDeviceArguments(p) script_common.AddEnvironmentArguments(p) p.add_argument( '-v', '--verbose', action='count', default=0, help='Print more information.') p.add_argument('command', nargs='*')
def main(raw_args): parser = argparse.ArgumentParser( description="Use your keyboard as your phone's keyboard.") script_common.AddDeviceArguments(parser) parser.add_argument('-v', '--verbose', action='count', help='print more') args = parser.parse_args(raw_args) run_tests_helper.SetLogLevel(args.verbose) devices = script_common.GetDevices(args.devices, None) if len(devices) > 1: raise MultipleDevicesError(devices) def next_char(): while True: yield sys.stdin.read(1) try: fd = sys.stdin.fileno() # See man 3 termios for more info on what this is doing. old_attrs = termios.tcgetattr(fd) new_attrs = copy.deepcopy(old_attrs) new_attrs[tty.LFLAG] = new_attrs[tty.LFLAG] & ~(termios.ICANON) new_attrs[tty.CC][tty.VMIN] = 1 new_attrs[tty.CC][tty.VTIME] = 0 termios.tcsetattr(fd, termios.TCSAFLUSH, new_attrs) Keyboard(devices[0], next_char()) finally: termios.tcsetattr(fd, termios.TCSAFLUSH, old_attrs) return 0
def main(raw_args): parser = argparse.ArgumentParser( description="Use your keyboard as your phone's keyboard.") logging_common.AddLoggingArguments(parser) script_common.AddDeviceArguments(parser) args = parser.parse_args(raw_args) logging_common.InitializeLogging(args) devices = script_common.GetDevices(args.devices, None) if len(devices) > 1: raise MultipleDevicesError(devices) def next_char(): while True: yield sys.stdin.read(1) try: fd = sys.stdin.fileno() # See man 3 termios for more info on what this is doing. old_attrs = termios.tcgetattr(fd) new_attrs = copy.deepcopy(old_attrs) new_attrs[tty.LFLAG] = new_attrs[tty.LFLAG] & ~(termios.ICANON) new_attrs[tty.CC][tty.VMIN] = 1 new_attrs[tty.CC][tty.VTIME] = 0 termios.tcsetattr(fd, termios.TCSAFLUSH, new_attrs) Keyboard(devices[0], next_char()) finally: termios.tcsetattr(fd, termios.TCSAFLUSH, old_attrs) return 0
def main(): parser = argparse.ArgumentParser( 'Run an adb shell command on selected devices') parser.add_argument('cmd', help='Adb shell command to run.', nargs="+") logging_common.AddLoggingArguments(parser) script_common.AddDeviceArguments(parser) script_common.AddEnvironmentArguments(parser) parser.add_argument('--as-root', action='store_true', help='Run as root.') parser.add_argument('--json-output', help='File to dump json output to.') args = parser.parse_args() logging_common.InitializeLogging(args) script_common.InitializeEnvironment(args) devices = script_common.GetDevices(args.devices, args.denylist_file) p_out = (device_utils.DeviceUtils.parallel(devices).RunShellCommand( args.cmd, large_output=True, as_root=args.as_root, check_return=True).pGet(None)) data = {} for device, output in zip(devices, p_out): for line in output: print '%s: %s' % (device, line) data[str(device)] = output if args.json_output: with open(args.json_output, 'w') as f: json.dump(data, f) return 0
def main(): # Parse options. parser = argparse.ArgumentParser(description=__doc__) logging_common.AddLoggingArguments(parser) script_common.AddDeviceArguments(parser) parser.add_argument( '-f', '--file', metavar='FILE', help='Save result to file instead of generating a ' 'timestamped file name.') parser.add_argument( 'host_file', nargs='?', help='File to which the screenshot will be saved.') args = parser.parse_args() host_file = args.host_file or args.file logging_common.InitializeLogging(args) devices = script_common.GetDevices(args.devices, args.blacklist_file) def screenshot(device): f = None if host_file: root, ext = os.path.splitext(host_file) f = '%s_%s%s' % (root, str(device), ext) f = device.TakeScreenshot(f) print 'Screenshot for device %s written to %s' % (str(device), os.path.abspath(f)) device_utils.DeviceUtils.parallel(devices).pMap(screenshot) return 0
def main(raw_args): parser = argparse.ArgumentParser() parser.add_argument('--debug', action='store_true', help='Get additional debugging mode') parser.add_argument( '--output-directory', help='the path to the build output directory, such as out/Debug') parser.add_argument('--report-path', default='report.html', help='Report path') parser.add_argument('--adb-path', help='Absolute path to the adb binary to use.') script_common.AddDeviceArguments(parser) logging_common.AddLoggingArguments(parser) args = parser.parse_args(raw_args) logging_common.InitializeLogging(args) devil_chromium.Initialize(adb_path=args.adb_path) devices = script_common.GetDevices(args.devices, args.blacklist_file) device = devices[0] if len(devices) > 1: raise device_errors.MultipleDevicesError(devices) with tempfile_ext.NamedTemporaryDirectory( prefix='tmp_simpleperf') as tmp_dir: runner = SimplePerfRunner( device, args, tmp_dir, StackAddressInterpreter(args, tmp_dir)) runner.Run()
def main(): devil_chromium.Initialize() parser = argparse.ArgumentParser(description=""" List Java classes in an APK which fail ART class verification. """) parser.add_argument('--package', '-P', type=str, default=None, required=True, help='Specify the full application package name') parser.add_argument( '--mapping', '-m', type=os.path.realpath, default=None, help='Mapping file for the desired APK to deobfuscate class names') parser.add_argument( '--hide-summary', default=False, action='store_true', help='Do not output the total number of classes in each Status.') parser.add_argument( '--status', type=str, default='RetryVerificationAtRuntime', choices=STATUSES, help='Which category of classes to list at the end of the script') parser.add_argument( '--workdir', '-w', type=os.path.realpath, default=None, help=( 'Work directory for oatdump output (default = temporary ' 'directory). If specified, this will not be cleaned up at the end ' 'of the script (useful if you want to inspect oatdump output ' 'manually)')) script_common.AddEnvironmentArguments(parser) script_common.AddDeviceArguments(parser) logging_common.AddLoggingArguments(parser) args = parser.parse_args() script_common.InitializeEnvironment(args) logging_common.InitializeLogging(args) if args.workdir: if not os.path.isdir(args.workdir): raise RuntimeError('Specified working directory does not exist') RealMain(args.mapping, args.devices, args.package, args.status, args.hide_summary, args.workdir) # Assume the user wants the workdir to persist (useful for debugging). logging.warn('Not cleaning up explicitly-specified workdir: %s', args.workdir) else: with tempfile_ext.NamedTemporaryDirectory() as workdir: RealMain(args.mapping, args.devices, args.package, args.status, args.hide_summary, workdir)
def add_common_arguments(p): script_common.AddDeviceArguments(p) p.add_argument( '--adb-path', help='Path to the adb binary.') p.add_argument( '-v', '--verbose', action='count', default=0, help='Print more information.') p.add_argument('command', nargs='*')
def main(): parser = argparse.ArgumentParser(description=__doc__) parser.usage = '''%(prog)s --name FILENAME [--device SERIAL] [flags...] No flags: Prints existing command-line file. Empty string: Deletes command-line file. Otherwise: Writes command-line file. ''' parser.add_argument('--name', required=True, help='Name of file where to store flags on the device.') parser.add_argument('-e', '--executable', dest='executable', default='chrome', help='(deprecated) No longer used.') script_common.AddEnvironmentArguments(parser) script_common.AddDeviceArguments(parser) logging_common.AddLoggingArguments(parser) args, remote_args = parser.parse_known_args() devil_chromium.Initialize(adb_path=args.adb_path) logging_common.InitializeLogging(args) devices = device_utils.DeviceUtils.HealthyDevices(device_arg=args.devices, default_retries=0) all_devices = device_utils.DeviceUtils.parallel(devices) if not remote_args: # No args == do not update, just print flags. remote_args = None action = '' elif len(remote_args) == 1 and not remote_args[0]: # Single empty string arg == delete flags remote_args = [] action = 'Deleted command line file. ' else: action = 'Wrote command line file. ' def update_flags(device): CheckBuildTypeSupportsFlags(device, args.name) changer = flag_changer.FlagChanger(device, args.name) if remote_args is not None: flags = changer.ReplaceFlags(remote_args) else: flags = changer.GetCurrentFlags() return (device, device.build_description, flags) updated_values = all_devices.pMap(update_flags).pGet(None) print('%sCurrent flags (in %s):' % (action, args.name)) for d, desc, flags in updated_values: if flags: # Shell-quote flags for easy copy/paste as new args on the terminal. quoted_flags = ' '.join(cmd_helper.SingleQuote(f) for f in sorted(flags)) else: quoted_flags = '( empty )' print(' %s (%s): %s' % (d, desc, quoted_flags)) return 0
def main(): parser = argparse.ArgumentParser() parser.add_argument('build_path', help='Path to android build.') parser.add_argument( '-w', '--wipe', action='store_true', help='If set, wipes user data') logging_common.AddLoggingArguments(parser) script_common.AddDeviceArguments(parser) args = parser.parse_args() logging_common.InitializeLogging(args) if args.blacklist_file: blacklist = device_blacklist.Blacklist(args.blacklist_file).Read() if blacklist: logger.critical('Device(s) in blacklist, not flashing devices:') for key in blacklist: logger.critical(' %s', key) return exit_codes.INFRA flashed_devices = [] failed_devices = [] def flash(device): try: device.FlashDevice(args.build_path, wipe=args.wipe) flashed_devices.append(device) except Exception: # pylint: disable=broad-except logger.exception('Device %s failed to flash.', str(device)) failed_devices.append(device) devices = [] try: adb_devices = script_common.GetDevices(args.devices, args.blacklist_file) devices += [fastboot_utils.FastbootUtils(device=d) for d in adb_devices] except device_errors.NoDevicesError: # Don't bail out if we're not looking for any particular device and there's # at least one sitting in fastboot mode. Note that if we ARE looking for a # particular device, and it's in fastboot mode, this will still fail. fastboot_devices = fastboot.Fastboot.Devices() if args.devices or not fastboot_devices: raise devices += [ fastboot_utils.FastbootUtils(fastbooter=d) for d in fastboot_devices ] parallel_devices = parallelizer.SyncParallelizer(devices) parallel_devices.pMap(flash) if flashed_devices: logger.info('The following devices were flashed:') logger.info(' %s', ' '.join(str(d) for d in flashed_devices)) if failed_devices: logger.critical('The following devices failed to flash:') logger.critical(' %s', ' '.join(str(d) for d in failed_devices)) return exit_codes.INFRA return 0
def main(): parser = argparse.ArgumentParser() parser.add_argument( '--arch', choices=list(set(_SUPPORTED_ARCH_DICT.values())), default=None, type=str, help=('Architecture to for CTS tests. Will auto-determine based on ' 'the device ro.product.cpu.abi property.')) parser.add_argument('--platform', choices=['L', 'M', 'N', 'O'], required=False, default=None, help='Android platform version for CTS tests. ' 'Will auto-determine based on SDK level by default.') parser.add_argument( '--skip-expected-failures', action='store_true', help='Option to skip all tests that are expected to fail.') parser.add_argument('--apk-dir', help='Directory to extract CTS APKs to. ' 'Will use temp directory by default.') parser.add_argument( '--test-launcher-summary-output', '--json-results-file', '--write-full-results-to', '--isolated-script-test-output', dest='json_results_file', type=os.path.realpath, help='If set, will dump results in JSON form to the specified file. ' 'Note that this will also trigger saving per-test logcats to ' 'logdog.') script_common.AddDeviceArguments(parser) args, test_runner_args = parser.parse_known_args() devil_chromium.Initialize() devices = script_common.GetDevices(args.devices, args.blacklist_file) device = devices[0] if len(devices) > 1: logging.warning( 'Only single device supported, using 1st of %d devices: %s', len(devices), device.serial) test_runner_args.extend(['-d', device.serial]) if args.platform is None: args.platform = DeterminePlatform(device) if args.platform is None: raise Exception('Could not auto-determine device platform, ' 'please specifiy --platform') arch = args.arch if args.arch else DetermineArch(device) return RunAllCTSTests(args, arch, test_runner_args)
def main(raw_args): parser = argparse.ArgumentParser() parser.add_argument('--debug', action='store_true', help='Get additional debugging mode') parser.add_argument( '--output-directory', help='the path to the build output directory, such as out/Debug') parser.add_argument('--report-path', default='report.html', help='Report path') parser.add_argument('--adb-path', help='Absolute path to the adb binary to use.') parser.add_argument( '--record-options', help=('Set recording options for app_profiler.py command.' ' Example: "-e task-clock:u -f 1000 -g --duration' ' 10" where -f means sampling frequency per second.' ' Try `app_profiler.py record -h` for more ' ' information. Note that not setting this defaults' ' to the default record options.')) parser.add_argument('--show-file-line', action='store_true', help='Show file name and lines in the result.') parser.add_argument( '--system-wide', action='store_true', help=('Whether to profile system wide (without launching' 'an app).')) script_common.AddDeviceArguments(parser) logging_common.AddLoggingArguments(parser) args = parser.parse_args(raw_args) logging_common.InitializeLogging(args) devil_chromium.Initialize(adb_path=args.adb_path) devices = script_common.GetDevices(args.devices, args.denylist_file) device = devices[0] if len(devices) > 1: raise device_errors.MultipleDevicesError(devices) with tempfile_ext.NamedTemporaryDirectory( prefix='tmp_simpleperf') as tmp_dir: runner = SimplePerfRunner(device, args, tmp_dir, StackAddressInterpreter(args, tmp_dir)) runner.Run()
def main(): parser = argparse.ArgumentParser(description=""" Removes the preinstalled WebView APKs to avoid signature mismatches during development. """) script_common.AddEnvironmentArguments(parser) script_common.AddDeviceArguments(parser) logging_common.AddLoggingArguments(parser) args = parser.parse_args() logging_common.InitializeLogging(args) devil_chromium.Initialize(adb_path=args.adb_path) devices = device_utils.DeviceUtils.HealthyDevices(device_arg=args.devices) device_utils.DeviceUtils.parallel(devices).pMap(RemovePreinstalledWebViews)
def main(): parser = argparse.ArgumentParser() parser.add_argument('build_path', help='Path to android build.') parser.add_argument('-v', '--verbose', default=0, action='count', help='Verbose level (multiple times for more)') parser.add_argument('-w', '--wipe', action='store_true', help='If set, wipes user data') script_common.AddDeviceArguments(parser) args = parser.parse_args() run_tests_helper.SetLogLevel(args.verbose) if args.blacklist_file: blacklist = device_blacklist.Blacklist(args.blacklist_file).Read() if blacklist: logger.critical('Device(s) in blacklist, not flashing devices:') for key in blacklist: logger.critical(' %s', key) return exit_codes.INFRA flashed_devices = [] failed_devices = [] def flash(device): fastboot = fastboot_utils.FastbootUtils(device) try: fastboot.FlashDevice(args.build_path, wipe=args.wipe) flashed_devices.append(device) except Exception: # pylint: disable=broad-except logger.exception('Device %s failed to flash.', str(device)) failed_devices.append(device) devices = script_common.GetDevices(args.devices, args.blacklist_file) device_utils.DeviceUtils.parallel(devices).pMap(flash) if flashed_devices: logger.info('The following devices were flashed:') logger.info(' %s', ' '.join(str(d) for d in flashed_devices)) if failed_devices: logger.critical('The following devices failed to flash:') logger.critical(' %s', ' '.join(str(d) for d in failed_devices)) return exit_codes.INFRA return 0
def main(): logging.getLogger().setLevel(logging.INFO) parser = argparse.ArgumentParser() script_common.AddDeviceArguments(parser) parser.add_argument('--adb-path', help='Absolute path to the adb binary to use.') args = parser.parse_args() devil_dynamic_config = devil_env.EmptyConfig() if args.adb_path: devil_dynamic_config['dependencies'].update( devil_env.LocalConfigItem( 'adb', devil_env.GetPlatform(), args.adb_path)) devil_env.config.Initialize(configs=[devil_dynamic_config]) reboot_into_bootloader(args.devices) devices = [ d for d in fastboot.Fastboot.Devices() if not args.devices or str(d) in args.devices] parallel_devices = parallelizer.Parallelizer(devices) parallel_devices.pMap(unlock_bootloader).pGet(None) return 0
def main(): parser = argparse.ArgumentParser(description=""" Removes the preinstalled WebView APKs to avoid signature mismatches during development. """) parser.add_argument('--verbose', '-v', default=False, action='store_true') parser.add_argument('--quiet', '-q', default=False, action='store_true') script_common.AddEnvironmentArguments(parser) script_common.AddDeviceArguments(parser) args = parser.parse_args() if args.verbose: logging.basicConfig(stream=sys.stderr, level=logging.INFO) elif args.quiet: logging.basicConfig(stream=sys.stderr, level=logging.ERROR) else: logging.basicConfig(stream=sys.stderr, level=logging.WARN) devil_chromium.Initialize() script_common.InitializeEnvironment(args) devices = device_utils.DeviceUtils.HealthyDevices(device_arg=args.devices) device_utils.DeviceUtils.parallel(devices).pMap(RemovePreinstalledWebViews)
def main(args): TEST_CASES.update({ p.product_name(): p for p in [ChromeFinchTestCase, WebViewFinchTestCase, WebLayerFinchTestCase] }) parser = argparse.ArgumentParser(prog='run_finch_smoke_tests_android.py') parser.add_argument( '--test-case', choices=TEST_CASES.keys(), # TODO(rmhasan): Remove default values after # adding arguments to test suites. Also make # this argument required. default='webview', help='Name of test case') parser.add_argument('--finch-seed-path', default=TEST_SEED_PATH, type=os.path.realpath, help='Path to the finch seed') parser.add_argument('--browser-apk', '--webview-shell-apk', '--weblayer-shell-apk', help='Path to the browser apk', type=os.path.realpath, required=True) parser.add_argument('--webview-provider-apk', type=os.path.realpath, help='Path to the WebView provider apk') parser.add_argument('--browser-activity-name', action='store', help='Browser activity name') parser.add_argument('--write-full-results-to', '--isolated-script-test-output', action='store', type=os.path.realpath, default=os.path.join(os.getcwd(), 'output.json'), help='Path to output directory') add_emulator_args(parser) script_common.AddDeviceArguments(parser) script_common.AddEnvironmentArguments(parser) logging_common.AddLoggingArguments(parser) options, _ = parser.parse_known_args(args) devil_chromium.Initialize(adb_path=options.adb_path) logging_common.InitializeLogging(options) with get_device(options) as device, \ TEST_CASES[options.test_case](device, options) as test_case, \ test_case.install_apks(): device.EnableRoot() log_mon = logcat_monitor.LogcatMonitor( device.adb, output_file=os.path.join( os.path.dirname(options.write_full_results_to), '%s_finch_smoke_tests_logcat.txt' % test_case.product_name()), filter_specs=_LOGCAT_FILTERS) log_mon.Start() device.RunShellCommand( ['pm', 'clear', get_package_name(options.browser_apk)], check_return=True) tests_pass = False with_seed_res = TestResult.Fail without_seed_res = TestResult.Fail if test_case.run_tests('without finch seed') != 0: test_case.install_seed() tests_pass = test_case.run_tests('with finch seed') without_seed_res = TestResult.Pass if tests_pass: with_seed_res = TestResult.Pass log_mon.Stop() json_results = get_json_results(with_seed_res, without_seed_res) with open(options.write_full_results_to, 'w') as json_out: json_out.write(json.dumps(json_results, indent=4)) # Return zero exit code if tests pass return not tests_pass
def main(): parser = argparse.ArgumentParser(description=__doc__) parser.usage = '''%(prog)s --name FILENAME [--device SERIAL] [flags...] No flags: Prints existing command-line file. Empty string: Deletes command-line file. Otherwise: Writes command-line file. ''' parser.add_argument( '--name', required=True, help='Name of file where to store flags on the device.') parser.add_argument('-e', '--executable', dest='executable', default='chrome', help='(deprecated) No longer used.') script_common.AddEnvironmentArguments(parser) script_common.AddDeviceArguments(parser) logging_common.AddLoggingArguments(parser) args, remote_args = parser.parse_known_args() script_common.InitializeEnvironment(args) logging_common.InitializeLogging(args) devices = device_utils.DeviceUtils.HealthyDevices(device_arg=args.devices, default_retries=0) all_devices = device_utils.DeviceUtils.parallel(devices) if not remote_args: # No args == do not update, just print flags. remote_args = None action = '' elif len(remote_args) == 1 and not remote_args[0]: # Single empty string arg == delete flags remote_args = [] action = 'Deleted command line file. ' else: action = 'Wrote command line file. ' is_webview = args.name == 'webview-command-line' def update_flags(device): if device.IsUserBuild() and is_webview: raise device_errors.CommandFailedError( 'WebView only respects flags on a userdebug or eng device, yours ' 'is a user build.', device) elif device.IsUserBuild(): logging.warning( 'Your device (%s) is a user build; Chrome may or may not pick up ' 'your commandline flags. Check your ' '"command_line_on_non_rooted_enabled" preference, or switch ' 'devices.', device) changer = flag_changer.FlagChanger(device, args.name) if remote_args is not None: flags = changer.ReplaceFlags(remote_args) else: flags = changer.GetCurrentFlags() return (device, device.build_description, flags) updated_values = all_devices.pMap(update_flags).pGet(None) print '%sCurrent flags (in %s):' % (action, args.name) for d, desc, flags in updated_values: if flags: # Shell-quote flags for easy copy/paste as new args on the terminal. quoted_flags = ' '.join( cmd_helper.SingleQuote(f) for f in sorted(flags)) else: quoted_flags = '( empty )' print ' %s (%s): %s' % (d, desc, quoted_flags) return 0
def main(): parser = argparse.ArgumentParser(description=""" Configures WebView to start recording a netlog. This script chooses a suitable netlog filename for the application, and will pull the netlog off the device when the user terminates the script (with ctrl-C). For a more complete usage guide, open your web browser to: https://chromium.googlesource.com/chromium/src/+/HEAD/android_webview/docs/net-debugging.md """) parser.add_argument( '--package', required=True, type=str, help='Package name of the application you intend to use.') parser.add_argument('--force', default=False, action='store_true', help='Suppress user checks.') script_common.AddEnvironmentArguments(parser) script_common.AddDeviceArguments(parser) logging_common.AddLoggingArguments(parser) args = parser.parse_args() logging_common.InitializeLogging(args) devil_chromium.Initialize(adb_path=args.adb_path) # Only use a single device, for the sake of simplicity (of implementation and # user experience). devices = device_utils.DeviceUtils.HealthyDevices(device_arg=args.devices) device = devices[0] if len(devices) > 1: raise device_errors.MultipleDevicesError(devices) package_name = args.package device_netlog_file_name = 'netlog.json' device_netlog_path = os.path.join( device.GetApplicationDataDirectory(package_name), 'app_webview', device_netlog_file_name) CheckAppNotRunning(device, package_name, args.force) # Append to the existing flags, to allow users to experiment with other # features/flags enabled. The CustomCommandLineFlags will restore the original # flag state after the user presses 'ctrl-C'. changer = flag_changer.FlagChanger(device, WEBVIEW_COMMAND_LINE) new_flags = changer.GetCurrentFlags() new_flags.append('--log-net-log={}'.format(device_netlog_path)) logging.info('Running with flags %r', new_flags) with flag_changer.CustomCommandLineFlags(device, WEBVIEW_COMMAND_LINE, new_flags): print( 'Netlog will start recording as soon as app starts up. Press ctrl-C ' 'to stop recording.') _WaitUntilCtrlC() host_netlog_path = 'netlog.json' print('Pulling netlog to "%s"' % host_netlog_path) # The netlog file will be under the app's uid, which the default shell doesn't # have permission to read (but root does). Prefer this to EnableRoot(), which # restarts the adb daemon. device.PullFile(device_netlog_path, host_netlog_path, as_root=True) device.RemovePath(device_netlog_path, as_root=True)
def main(): parser = argparse.ArgumentParser() parser.add_argument( '--arch', choices=list(set(_SUPPORTED_ARCH_DICT.values())), default=None, type=str, help=('Architecture to for CTS tests. Will auto-determine based on ' 'the device ro.product.cpu.abi property.')) parser.add_argument( '--cts-release', # TODO(aluo): --platform is deprecated (the meaning is unclear). '--platform', choices=sorted(set(SDK_PLATFORM_DICT.values())), required=False, default=None, help='Which CTS release to use for the run. This should generally be <= ' 'device OS level (otherwise, the newer tests will fail). If ' 'unspecified, the script will auto-determine the release based on ' 'device OS level.') parser.add_argument( '--skip-expected-failures', action='store_true', help= "Option to skip all tests that are expected to fail. Can't be used " "with test filters.") parser.add_argument('--apk-dir', help='Directory to extract CTS APKs to. ' 'Will use temp directory by default.') parser.add_argument( '--test-launcher-summary-output', '--json-results-file', '--write-full-results-to', '--isolated-script-test-output', dest='json_results_file', type=os.path.realpath, help='If set, will dump results in JSON form to the specified file. ' 'Note that this will also trigger saving per-test logcats to ' 'logdog.') parser.add_argument('-m', '--module-apk', dest='module_apk', help='CTS module apk name in ' + _WEBVIEW_CTS_GCS_PATH_FILE + ' file, without the path prefix.') test_filter.AddFilterOptions(parser) script_common.AddDeviceArguments(parser) logging_common.AddLoggingArguments(parser) args, test_runner_args = parser.parse_known_args() logging_common.InitializeLogging(args) devil_chromium.Initialize() test_runner_args.extend(ForwardArgsToTestRunner(args)) devices = script_common.GetDevices(args.devices, args.blacklist_file) device = devices[0] if len(devices) > 1: logging.warning( 'Detection of arch and cts-release will use 1st of %d ' 'devices: %s', len(devices), device.serial) arch = args.arch or DetermineArch(device) cts_release = args.cts_release or DetermineCtsRelease(device) if (args.test_filter_file or args.test_filter or args.isolated_script_test_filter): # TODO(aluo): auto-determine the module based on the test filter and the # available tests in each module if not args.module_apk: args.module_apk = 'CtsWebkitTestCases.apk' platform_modules = GetCTSModuleNames(arch, cts_release) if args.module_apk and args.module_apk not in platform_modules: raise Exception('--module-apk for arch==' + arch + 'and cts_release==' + cts_release + ' must be one of: ' + ', '.join(platform_modules)) # Need to uninstall all previous cts webkit packages so that the # MockContentProvider names won't conflict with a previously installed # one under a different package name. This is due to CtsWebkitTestCases's # package name change from M to N versions of the tests while keeping the # MockContentProvider's authority string the same. UninstallAnyCtsWebkitPackages(device) return RunAllCTSTests(args, arch, cts_release, test_runner_args)
def main(): parser = argparse.ArgumentParser() parser.add_argument( '--arch', choices=list(set(_SUPPORTED_ARCH_DICT.values())), default=None, type=str, help=('Architecture to for CTS tests. Will auto-determine based on ' 'the device ro.product.cpu.abi property.')) parser.add_argument( '--platform', choices=['L', 'M', 'N', 'O'], required=False, default=None, help='Android platform version for CTS tests. ' 'Will auto-determine based on SDK level by default.') parser.add_argument( '--skip-expected-failures', action='store_true', help="Option to skip all tests that are expected to fail. Can't be used " "with test filters.") parser.add_argument( '--apk-dir', help='Directory to extract CTS APKs to. ' 'Will use temp directory by default.') parser.add_argument( '--test-launcher-summary-output', '--json-results-file', '--write-full-results-to', '--isolated-script-test-output', dest='json_results_file', type=os.path.realpath, help='If set, will dump results in JSON form to the specified file. ' 'Note that this will also trigger saving per-test logcats to ' 'logdog.') parser.add_argument( '-m', '--module-apk', dest='module_apk', help='CTS module apk name in ' + _WEBVIEW_CTS_GCS_PATH_FILE + ' file, without the path prefix.') test_filter.AddFilterOptions(parser) script_common.AddDeviceArguments(parser) args, test_runner_args = parser.parse_known_args() devil_chromium.Initialize() devices = script_common.GetDevices(args.devices, args.blacklist_file) device = devices[0] if len(devices) > 1: logging.warning('Only single device supported, using 1st of %d devices: %s', len(devices), device.serial) test_runner_args.extend(['-d', device.serial]) if args.platform is None: args.platform = DeterminePlatform(device) if args.platform is None: raise Exception('Could not auto-determine device platform, ' 'please specifiy --platform') arch = args.arch if args.arch else DetermineArch(device) if (args.test_filter_file or args.test_filter or args.isolated_script_test_filter): if args.skip_expected_failures: # TODO(aluo): allow both options to be used together so that expected # failures in the filtered test set can be skipped raise Exception('--skip-expected-failures and test filters are mutually' ' exclusive') # TODO(aluo): auto-determine the module based on the test filter and the # available tests in each module if not args.module_apk: args.module_apk = 'CtsWebkitTestCases.apk' platform_modules = GetCTSModuleNames(arch, args.platform) if args.module_apk and args.module_apk not in platform_modules: raise Exception('--module-apk for arch==' + arch + 'and platform==' + args.platform + ' must be one of: ' + ', '.join(platform_modules)) return RunAllCTSTests(args, arch, test_runner_args)
def main(): # Parse options. parser = argparse.ArgumentParser(description=__doc__) script_common.AddDeviceArguments(parser) parser.add_argument('-f', '--file', metavar='FILE', help='Save result to file instead of generating a ' 'timestamped file name.') parser.add_argument('-v', '--verbose', action='store_true', help='Verbose logging.') parser.add_argument('-b', '--bitrate', default=4, type=float, help='Bitrate in megabits/s, from 0.1 to 100 mbps, ' '%(default)d mbps by default.') parser.add_argument('-r', '--rotate', action='store_true', help='Rotate video by 90 degrees.') parser.add_argument('-s', '--size', metavar='WIDTHxHEIGHT', help='Frame size to use instead of the device ' 'screen size.') parser.add_argument( 'host_file', nargs='?', help='File to which the video capture will be written.') args = parser.parse_args() host_file = args.host_file or args.file if args.verbose: logging.getLogger().setLevel(logging.DEBUG) size = (tuple(int(i) for i in args.size.split('x')) if args.size else None) def record_video(device, stop_recording): recorder = VideoRecorder(device, megabits_per_second=args.bitrate, size=size, rotate=args.rotate) with recorder: stop_recording.wait() f = None if host_file: root, ext = os.path.splitext(host_file) f = '%s_%s%s' % (root, str(device), ext) f = recorder.Pull(f) print 'Video written to %s' % os.path.abspath(f) parallel_devices = device_utils.DeviceUtils.parallel( script_common.GetDevices(args.devices, args.denylist_file), asynch=True) stop_recording = threading.Event() running_recording = parallel_devices.pMap(record_video, stop_recording) print 'Recording. Press Enter to stop.', sys.stdout.flush() raw_input() stop_recording.set() running_recording.pGet(None) return 0
def main(raw_args): # Recommended options on perf bots: # --disable-network # TODO(tonyg): We eventually want network on. However, currently radios # can cause perfbots to drain faster than they charge. # --min-battery-level 95 # Some perf bots run benchmarks with USB charging disabled which leads # to gradual draining of the battery. We must wait for a full charge # before starting a run in order to keep the devices online. parser = argparse.ArgumentParser( description='Provision Android devices with settings required for bots.' ) logging_common.AddLoggingArguments(parser) script_common.AddDeviceArguments(parser) script_common.AddEnvironmentArguments(parser) parser.add_argument('--adb-key-files', type=str, nargs='+', help='list of adb keys to push to device') parser.add_argument('--disable-location', action='store_true', help='disable Google location services on devices') parser.add_argument('--disable-mock-location', action='store_true', default=False, help='Set ALLOW_MOCK_LOCATION to false') parser.add_argument('--disable-network', action='store_true', help='disable network access on devices') parser.add_argument('--disable-java-debug', action='store_false', dest='enable_java_debug', default=True, help='disable Java property asserts and JNI checking') parser.add_argument( '--disable-system-chrome', action='store_true', help='DEPRECATED: use --remove-system-packages com.android.google ' 'Disable the system chrome from devices.') parser.add_argument('--emulators', action='store_true', help='provision only emulators and ignore usb devices ' '(this will not wipe emulators)') parser.add_argument( '--max-battery-temp', type=int, metavar='NUM', help='Wait for the battery to have this temp or lower.') parser.add_argument( '--min-battery-level', type=int, metavar='NUM', help='wait for the device to reach this minimum battery' ' level before trying to continue') parser.add_argument('--output-device-denylist', help='Json file to output the device denylist.') parser.add_argument('--reboot-timeout', metavar='SECS', type=int, help='when wiping the device, max number of seconds to' ' wait after each reboot ' '(default: %s)' % _DEFAULT_TIMEOUTS.HELP_TEXT) parser.add_argument( '--remove-system-apps', nargs='*', dest='system_app_remove_list', help='DEPRECATED: use --remove-system-packages instead. ' 'The names of system apps to remove. ') parser.add_argument('--remove-system-packages', nargs='*', dest='system_package_remove_list', help='The names of system packages to remove.') parser.add_argument('--remove-system-webview', action='store_true', help='DEPRECATED: use --remove-system-packages ' 'com.google.android.webview com.android.webview ' 'Remove the system webview from devices.') parser.add_argument('--skip-wipe', action='store_true', default=False, help='do not wipe device data during provisioning') # No-op arguments for compatibility with build/android/provision_devices.py. # TODO(jbudorick): Remove these once all callers have stopped using them. parser.add_argument('--chrome-specific-wipe', action='store_true', help=argparse.SUPPRESS) parser.add_argument('--phase', action='append', help=argparse.SUPPRESS) parser.add_argument('-r', '--auto-reconnect', action='store_true', help=argparse.SUPPRESS) parser.add_argument('-t', '--target', help=argparse.SUPPRESS) args = parser.parse_args(raw_args) logging_common.InitializeLogging(args) script_common.InitializeEnvironment(args) try: return ProvisionDevices( args.devices, args.denylist_file, adb_key_files=args.adb_key_files, disable_location=args.disable_location, disable_mock_location=args.disable_mock_location, disable_network=args.disable_network, disable_system_chrome=args.disable_system_chrome, emulators=args.emulators, enable_java_debug=args.enable_java_debug, max_battery_temp=args.max_battery_temp, min_battery_level=args.min_battery_level, output_device_denylist=args.output_device_denylist, reboot_timeout=args.reboot_timeout, remove_system_webview=args.remove_system_webview, system_app_remove_list=args.system_app_remove_list, system_package_remove_list=args.system_package_remove_list, wipe=not args.skip_wipe and not args.emulators) except (device_errors.DeviceUnreachableError, device_errors.NoDevicesError): logging.exception('Unable to provision local devices.') return exit_codes.INFRA