blob: 64132a167040b8527cda21df5a2d23c9bb9dd3a7 [file] [log] [blame]
# Copyright 2016 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
DEPS = [
'dart',
'depot_tools/bot_update',
'depot_tools/gclient',
'depot_tools/gsutil',
'recipe_engine/context',
'recipe_engine/file',
'recipe_engine/path',
'recipe_engine/platform',
'recipe_engine/properties',
'recipe_engine/python',
'recipe_engine/step',
'test_utils',
'zip',
]
all_runtimes = ['d8', 'jsshell', 'ie9', 'ie10', 'ie11', 'ff',
'safari', 'chrome', 'safarimobilesim', 'drt', 'chromeff',
'ie10chrome', 'ie11ff']
multiple_runtimes = {'chromeff': ['chrome', 'ff'],
'ie10chrome': ['ie10', 'chrome'],
'ie11ff': ['ie11', 'ff']}
all_options = {'hostchecked': '--host-checked',
'minified': '--minified',
'cps': '--cps-ir',
'csp': '--csp'}
build_directories = {'linux': 'out/ReleaseX64',
'win': 'out/ReleaseX64',
'mac': 'xcodebuild/ReleaseX64'}
IsFirstTestStep = True
def RunTests(api, test_args, test_specs, use_xvfb=False):
for test_spec in test_specs:
args = []
args.extend(test_args)
global IsFirstTestStep
if IsFirstTestStep:
IsFirstTestStep = False
else:
args.append('--append_logs')
args.extend(test_spec['tests'])
with api.context(cwd=api.path['checkout']):
if use_xvfb:
xvfb_cmd = ['xvfb-run', '-a', '--server-args=-screen 0 1024x768x24']
xvfb_cmd.extend(['python', '-u', './tools/test.py'])
xvfb_cmd.extend(args)
api.step(test_spec['name'], xvfb_cmd)
api.dart.read_result_file('read results of %s' % test_spec['name'],
'result.log')
else:
api.python(test_spec['name'],
api.path['checkout'].join('tools', 'test.py'),
args=args)
api.dart.read_result_file('read results of %s' % test_spec['name'],
'result.log')
def sdk_url(channel, platform, arch, mode, revision):
platforms = {
'linux': 'linux',
'win': 'windows',
'mac': 'macos',
}
platform = platforms[platform]
# The paths here come from dart-lang/sdk/tools/bots/bot_utils.py
return ('gs://dart-archive/channels/%s/raw/hash/%s/sdk/dartsdk-%s-%s-%s.zip'
% (channel, revision, platform, arch, mode))
def RunSteps(api):
builder_name = str(api.properties.get('buildername')) # Convert from unicode.
builder_fragments = builder_name.split('-')
assert len(builder_fragments) > 3
assert builder_fragments[0] == 'dart2js'
system = builder_fragments[1]
assert system in ['linux', 'mac10.11', 'win7', 'win8', 'win10']
runtime = builder_fragments[2]
assert runtime in all_runtimes
channel = builder_fragments[-1]
assert channel in ['be', 'dev', 'stable', 'integration']
try:
num_shards = int(builder_fragments[-2])
shard = int(builder_fragments[-3])
sharded = True
options_end = - 3
except ValueError:
sharded = False
options_end = - 1
options = builder_fragments[3:options_end]
for option in options:
assert all_options.has_key(option)
api.gclient.set_config('dart')
api.path.c.dynamic_paths['tools'] = None
api.bot_update.ensure_checkout()
api.path['tools'] = api.path['checkout'].join('tools')
revision = api.properties['revision']
api.gclient.runhooks()
with api.step.defer_results():
with api.context(cwd=api.path['checkout']):
api.python('taskkill before building',
api.path['checkout'].join('tools', 'task_kill.py'),
args=['--kill_browsers=True'],
ok_ret='any')
zipfile = api.path.abspath(api.path['checkout'].join('sdk.zip'))
url = sdk_url(channel, api.platform.name, 'x64', 'release', revision)
api.gsutil(['cp', url, zipfile], name='Download sdk')
build_dir = api.path['checkout'].join(build_directories[api.platform.name])
build_dir = api.path.abspath(build_dir)
api.file.ensure_directory('Create build directory', build_dir)
api.file.rmtree('Clean build directory', build_dir)
api.zip.unzip('Unzip sdk', zipfile, build_dir)
with api.step.defer_results():
runtimes = multiple_runtimes.get(runtime, [runtime])
for runtime in runtimes:
# TODO(whesse): Call a script that prints the runtime version.
test_args = ['--mode=release',
'--arch=x64',
'--use-sdk',
'--compiler=dart2js',
'--dart2js-batch',
'--runtime=%s' % runtime,
'--progress=buildbot',
'-v',
'--reset-browser-configuration',
'--report',
'--time',
'--write-debug-log',
'--write-result-log',
'--write-test-outcome-log']
for option in options:
test_args.append(all_options[option])
if sharded:
test_args.extend(['--shards=%s' % num_shards, '--shard=%s' % shard])
if system in ['win7', 'win8', 'win10']:
test_args.append('--builder-tag=%s' % system)
if runtime in ['ie10', 'ie11']:
test_args.extend(['-j6', '--timeout=120']) # Issue 28955, IE is slow.
test_specs = [{'name': 'dart2js %s tests' % runtime,
'tests': ['html', 'pkg', 'samples']},
{'name': 'dart2js %s co19 tests' % runtime,
'tests': ['co19']}]
else:
test_specs = [
{'name': 'dart2js-%s tests' % runtime,
'tests': ['--exclude-suite=observatory_ui,co19']},
{'name': 'dart2js-%s-package tests' % runtime,
'tests': ['pkg']},
{'name': 'dart2js-%s-observatory_ui tests' % runtime,
'tests': ['observatory_ui']},
{'name': 'dart2js-%s-extra tests' % runtime,
'tests': ['dart2js_extra', 'dart2js_native']},
{'name': 'dart2js-%s-co19 tests' % runtime,
'tests': ['co19']},
]
needs_xvfb = (runtime in ['drt', 'dartium', 'chrome', 'ff'] and
system == 'linux')
RunTests(api, test_args, test_specs, use_xvfb=needs_xvfb)
if runtime == 'd8':
kernel_test_args = test_args + ['--dart2js-with-kernel']
kernel_test_specs = [{
'name': 'dart2js-with-kernel-d8 tests',
'tests': ['language', 'language_2', 'corelib', 'corelib_2',
'dart2js_extra', 'dart2js_native']
}]
RunTests(api, kernel_test_args, kernel_test_specs, use_xvfb=needs_xvfb)
test_args.append('--fast-startup')
for spec in test_specs:
spec['name'] = spec['name'].replace(' tests', '-fast-startup tests')
RunTests(api, test_args, test_specs, use_xvfb=needs_xvfb)
if runtime in ['d8', 'drt']:
test_args.append('--checked')
for spec in test_specs:
spec['name'] = spec['name'].replace(' tests', '-checked tests')
RunTests(api, test_args, test_specs, use_xvfb=needs_xvfb)
with api.context(cwd=api.path['checkout']):
# TODO(whesse): Add archive coredumps step from dart_factory.py.
api.python('taskkill after testing',
api.path['checkout'].join('tools', 'task_kill.py'),
args=['--kill_browsers=True'],
ok_ret='any')
if api.platform.name == 'win':
api.step('debug log',
['cmd.exe', '/c', 'type', '.debug.log'])
else:
api.step('debug log',
['cat', '.debug.log'])
def GenTests(api):
yield (
api.test('dart2js-linux-jsshell-hostchecked-csp-3-5-be') +
api.platform('linux', 64) +
api.properties.generic(
mastername='client.dart',
buildername='dart2js-linux-jsshell-hostchecked-csp-3-5-be',
revision='hash_of_revision'))
yield (
api.test('dart2js-win7-ie10-dev') + api.platform('win', 32) +
api.properties.generic(
mastername='client.dart',
buildername='dart2js-win7-ie10-dev',
revision='hash_of_revision'))
yield (
api.test('dart2js-linux-drt-be') + api.platform('linux', 64) +
api.properties.generic(
mastername='client.dart',
buildername='dart2js-linux-drt-93-105-dev',
revision='hash_of_revision'))
yield (
api.test('dart2js-linux-d8-be') + api.platform('linux', 64) +
api.properties.generic(
mastername='client.dart',
buildername='dart2js-linux-d8-1-4-be',
revision='hash_of_revision'))
yield (
api.test('dart2js-mac10.11-safari-1-3-be') + api.platform('mac', 64) +
api.properties.generic(
mastername='client.dart',
buildername='dart2js-mac10.11-safari-1-3-be',
revision='hash_of_revision'))