chromium/ios/chrome/test/wpt/tools/run_cwt_chromedriver.py

#!/usr/bin/env vpython3
# Copyright 2019 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import argparse
import os
import subprocess
import sys
import time

def GetChromiumSrcDir():
  return os.path.abspath(os.path.join(os.path.dirname(__file__), os.pardir,
                                      os.pardir, os.pardir, os.pardir,
                                      os.pardir))

def GetIosDir():
  return os.path.join(GetChromiumSrcDir(), 'ios')

sys.path.append(os.path.join(GetIosDir(), 'build', 'bots', 'scripts'))

import constants
import iossim_util
import test_apps
import xcodebuild_runner

def GetDefaultBuildDir():
  return os.path.join(GetChromiumSrcDir(), 'out', 'Release')

parser=argparse.ArgumentParser(
    formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('--port', default='9999',
    help='The port to listen on for WebDriver commands')
parser.add_argument('--build-dir', default=GetDefaultBuildDir(),
    help='Chrome build directory')
parser.add_argument('--out-dir', default='/tmp/cwt_chromedriver',
    help='Output directory for CWTChromeDriver\'s dummy test case')
parser.add_argument('--os', default='15.5', help='iOS version')
parser.add_argument('--device', default='iPhone 11 Pro', help='Device type')
parser.add_argument('--asan-build', help='Use ASan-related libraries',
    dest='asan_build', action='store_true')
parser.set_defaults(asan_build=False)
parser.add_argument('--version', help='Get the version of current browser app.',
    action='store_true')
args, _ = parser.parse_known_args()

test_app = os.path.join(
    args.build_dir, 'ios_cwt_chromedriver_tests_module-Runner.app')
host_app = os.path.join(args.build_dir, 'ios_cwt_chromedriver_tests.app')
destination = iossim_util.get_simulator(args.device, args.os)

if args.version:
    plist_path = os.path.join(host_app, 'Info.plist')
    version_command = 'defaults read ' + plist_path + ' CFBundleVersion'
    stdout = subprocess.check_output(version_command, shell=True)
    current_version = stdout.decode('utf-8').strip()
    print(current_version)
    sys.exit(0)

if not os.path.exists(args.out_dir):
  os.mkdir(args.out_dir)

# Make sure each run produces a unique output directory, since reusing an
# existing directory will cause CWTChromeDriver's dummy test case to get
# skipped, meaning that CWTChromeDriver's http server won't get launched.
output_directory = os.path.join(args.out_dir, 'run%d' %  int(time.time()))

inserted_libs = []
if args.asan_build:
  inserted_libs = [os.path.join(args.build_dir,
      'libclang_rt.asan_iossim_dynamic.dylib')]

egtests_app = test_apps.EgtestsApp(
    egtests_app=test_app, all_eg_test_names=[],
    test_args=['--port %s' % args.port],
    host_app_path=host_app, inserted_libs=inserted_libs)

if iossim_util.is_device_with_udid_simulator(destination):
    xcodebuild_runner.shutdown_all_simulators()
    xcodebuild_runner.erase_all_simulators()
launch_command = xcodebuild_runner.LaunchCommand(egtests_app, destination,
    clones=1, retries=1, readline_timeout=constants.READLINE_TIMEOUT,
    out_dir=output_directory,
    cert_path='../../wpt_tools/wpt/tools/certs/cacert.pem',
    erase_simulators=False)

launch_command.launch()