--- a/taskcluster/ci/desktop-test/test-platforms.yml
+++ b/taskcluster/ci/desktop-test/test-platforms.yml
@@ -20,14 +20,47 @@ linux64/opt:
# TODO: use 'pgo' and 'asan' labels here, instead of -pgo/opt
linux64-pgo/opt:
build-platform: linux64-pgo/opt
test-set: all-tests
linux64-asan/opt:
build-platform: linux64-asan/opt
test-set: asan-tests
+
linux64-ccov/opt:
build-platform: linux64-ccov/opt
test-set: ccov-code-coverage-tests
linux64-jsdcov/opt:
build-platform: linux64-jsdcov/opt
- test-set: jsdcov-code-coverage-tests
\ No newline at end of file
+ test-set: jsdcov-code-coverage-tests
+
+# win32 vm
+windows7-32-vm/debug:
+ build-platform: win32/debug
+ test-set: windows-vm-tests
+windows7-32-vm/opt:
+ build-platform: win32/opt
+ test-set: windows-vm-tests
+
+# win32 gpu
+#windows7-32/debug:
+# build-platform: win32/debug
+# test-set: windows-gpu-tests
+#windows7-32/opt:
+# build-platform: win32/opt
+# test-set: windows-gpu-tests
+
+# win64 vm
+windows10-64-vm/debug:
+ build-platform: win64/debug
+ test-set: windows-vm-tests
+windows10-64-vm/opt:
+ build-platform: win64/opt
+ test-set: windows-vm-tests
+
+# win64 gpu
+#windows10-64/debug:
+# build-platform: win64/debug
+# test-set: windows-gpu-tests
+#windows10-64/opt:
+# build-platform: win64/opt
+# test-set: windows-gpu-tests
--- a/taskcluster/ci/desktop-test/test-sets.yml
+++ b/taskcluster/ci/desktop-test/test-sets.yml
@@ -53,13 +53,42 @@ asan-tests:
- mochitest-gpu
- mochitest-jetpack
- mochitest-media
- mochitest-webgl
- reftest
- reftest-no-accel
- xpcshell
+windows-vm-tests:
+ - cppunit
+ #- crashtest
+ #- external-media-tests
+ #- gtest
+ #- jittest
+ #- jsreftest
+ #- marionette
+ #- mochitest
+ #- mochitest-browser-chrome
+ #- mochitest-devtools-chrome
+ #- mochitest-jetpack
+ #- mochitest-media
+ #- web-platform-tests
+ #- web-platform-tests-reftests
+ #- xpcshell
+
+# windows-gpu-tests:
+# - reftest
+# - reftest-no-accel
+# - mochitest-webgl
+
+# these tests currently run on hardware, but may migrate above when validated
+# note: on win, mochitest-a11y and mochitest-chrome come under mochitest-other
+# windows-hw-tests:
+# - mochitest-clipboard
+# - mochitest-gpu
+# - mochitest-other
+
ccov-code-coverage-tests:
- mochitest-browser-chrome
jsdcov-code-coverage-tests:
- mochitest-browser-chrome
\ No newline at end of file
--- a/taskcluster/ci/desktop-test/tests.yml
+++ b/taskcluster/ci/desktop-test/tests.yml
@@ -10,38 +10,42 @@ cppunit:
suite: cppunittest
treeherder-symbol: tc(Cpp)
e10s: false
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
- # Coming soon:
- # win.*:
- # - unittests/win_unittest.py
- # - remove_executables.py
- # ...
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --cppunittest-suite=cppunittest
crashtest:
description: "Crashtest run"
suite: reftest/crashtest
treeherder-symbol: tc-R(C)
docker-image: {"in-tree": "desktop1604-test"}
+ e10s:
+ by-test-platform:
+ # Bug 1304435
+ win.*: false
+ default: both
mozharness:
script: desktop_unittest.py
chunked: true
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --reftest-suite=crashtest
external-media-tests:
description: "External Media Test run"
@@ -49,18 +53,22 @@ external-media-tests:
treeherder-symbol: tc-VP(b-m)
e10s: false
tier: 2
max-run-time: 5400
mozharness:
script: firefox_media_tests_buildbot.py
no-read-buildbot-config: true
config:
- - mediatests/buildbot_posix_config.py
- - remove_executables.py
+ by-test-platform:
+ win.*:
+ - mediatests/taskcluster_windows_config.py
+ default:
+ - mediatests/buildbot_posix_config.py
+ - remove_executables.py
firefox-ui-functional-local:
description: "Firefox-ui-tests functional run"
suite: "firefox-ui/functional local"
treeherder-symbol: tc-Fxfn-l(en-US)
max-run-time: 5400
tier: 1
docker-image: {"in-tree": "desktop1604-test"}
@@ -93,80 +101,101 @@ gtest:
treeherder-symbol: tc(GTest)
e10s: false
instance-size: xlarge
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --gtest-suite=gtest
jittest:
description: "JIT Test run"
suite: jittest/jittest-chunked
treeherder-symbol: tc(Jit)
e10s: false
- chunks: 6
+ chunks:
+ by-test-platform:
+ win.*: 1
+ default: 6
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --jittest-suite=jittest-chunked
jsreftest:
description: "JS Reftest run"
suite: reftest/jsreftest
treeherder-symbol: tc-R(J)
- chunks: 2
+ chunks:
+ by-test-platform:
+ win.*: 1
+ default: 2
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --reftest-suite=jsreftest
marionette:
description: "Marionette unittest run"
suite: marionette
treeherder-symbol: tc(Mn)
max-run-time: 5400
mozharness:
script: marionette.py
no-read-buildbot-config: true
config:
- - marionette/prod_config.py
- - remove_executables.py
+ by-test-platform:
+ win.*:
+ - marionette/windows_taskcluster_config.py
+ default:
+ - marionette/prod_config.py
+ - remove_executables.py
mochitest:
description: "Mochitest plain run"
suite: mochitest/plain-chunked
treeherder-symbol: tc-M()
loopback-video: true
- chunks: 10
+ chunks:
+ by-test-platform:
+ win.*: 5
+ default: 10
max-run-time: 5400
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
chunked: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --mochitest-suite=plain-chunked
# Bug 1281241: migrating to m3.large instances
instance-size: legacy
allow-software-gl-layers: false
@@ -178,16 +207,18 @@ mochitest-a11y:
loopback-video: true
e10s: false
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
chunked: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --mochitest-suite=a11y
mochitest-browser-chrome:
description: "Mochitest browser-chrome run"
@@ -217,16 +248,18 @@ mochitest-browser-chrome:
linux64-ccov/opt: 7200
linux64/debug: 5400
default: 3600
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
by-test-platform:
linux64-jsdcov/opt:
- --mochitest-suite=browser-chrome-coverage
linux64-ccov/opt:
@@ -249,16 +282,18 @@ mochitest-chrome:
loopback-video: true
chunks: 3
e10s: false
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --mochitest-suite=chrome
mochitest-clipboard:
description: "Mochitest clipboard run"
@@ -267,39 +302,46 @@ mochitest-clipboard:
loopback-video: true
instance-size: xlarge
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
chunked: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --mochitest-suite=plain-clipboard,chrome-clipboard,browser-chrome-clipboard,jetpack-package-clipboard
mochitest-devtools-chrome:
description: "Mochitest devtools-chrome run"
suite: mochitest/mochitest-devtools-chrome-chunked
treeherder-symbol: tc-M(dt)
loopback-video: true
max-run-time: 5400
- chunks: 10
+ chunks:
+ by-test-platform:
+ win.*: 8
+ default: 10
e10s:
by-test-platform:
# Bug 1242986: linux64/debug mochitest-devtools-chrome e10s is not greened up yet
linux64/debug: false
default: both
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --mochitest-suite=mochitest-devtools-chrome-chunked
instance-size:
by-test-platform:
# Bug 1281241: migrating to m3.large instances
@@ -308,22 +350,28 @@ mochitest-devtools-chrome:
# Bug 1296086: high number of intermittents observed with software GL and large instances
allow-software-gl-layers: false
mochitest-gpu:
description: "Mochitest GPU run"
suite: mochitest/plain-gpu,chrome-gpu,browser-chrome-gpu
treeherder-symbol: tc-M(gpu)
loopback-video: true
+ e10s:
+ by-test-platform:
+ win.*: both
+ default: true
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
chunked: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --mochitest-suite=plain-gpu,chrome-gpu,browser-chrome-gpu
mochitest-jetpack:
description: "Mochitest jetpack run"
@@ -333,36 +381,41 @@ mochitest-jetpack:
e10s: false
max-run-time: 5400
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
chunked: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --mochitest-suite=jetpack-package
+ - --mochitest-suite=jetpack-addon
mochitest-media:
description: "Mochitest media run"
suite: mochitest/mochitest-media
treeherder-symbol: tc-M(mda)
max-run-time: 5400
loopback-video: true
instance-size: large
docker-image: {"in-tree": "desktop1604-test"}
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
chunked: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --mochitest-suite=mochitest-media
mochitest-webgl:
description: "Mochitest webgl run"
@@ -371,16 +424,18 @@ mochitest-webgl:
chunks: 3
loopback-video: true
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
chunked: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --mochitest-suite=mochitest-gl
# Bug 1296733: llvmpipe with mesa 9.2.1 lacks thread safety
allow-software-gl-layers: false
@@ -390,16 +445,18 @@ reftest:
treeherder-symbol: tc-R(R)
chunks: 8
docker-image: {"in-tree": "desktop1604-test"}
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --reftest-suite=reftest
reftest-no-accel:
description: "Reftest not accelerated run"
@@ -407,16 +464,18 @@ reftest-no-accel:
treeherder-symbol: tc-R(Ru)
chunks: 8
docker-image: {"in-tree": "desktop1604-test"}
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --reftest-suite=reftest-no-accel
web-platform-tests:
description: "Web platform test run"
@@ -426,70 +485,85 @@ web-platform-tests:
max-run-time: 7200
instance-size: xlarge
docker-image: {"in-tree": "desktop1604-test"}
checkout: true
mozharness:
script: web_platform_tests.py
no-read-buildbot-config: true
config:
- - web_platform_tests/prod_config.py
- - remove_executables.py
+ by-test-platform:
+ win.*:
+ - web_platform_tests/prod_config_windows_taskcluster.py
+ default:
+ - web_platform_tests/prod_config.py
+ - remove_executables.py
extra-options:
- --test-type=testharness
web-platform-tests-reftests:
description: "Web platform reftest run"
suite: web-platform-tests-reftests
treeherder-symbol: tc-W(Wr)
max-run-time: 5400
instance-size: xlarge
docker-image: {"in-tree": "desktop1604-test"}
checkout: true
mozharness:
script: web_platform_tests.py
no-read-buildbot-config: true
config:
- - web_platform_tests/prod_config.py
- - remove_executables.py
+ by-test-platform:
+ win.*:
+ - web_platform_tests/prod_config_windows_taskcluster.py
+ default:
+ - web_platform_tests/prod_config.py
+ - remove_executables.py
extra-options:
- --test-type=reftest
web-platform-tests-wdspec:
description: "Web platform webdriver-spec run"
suite: web-platform-tests-wdspec
treeherder-symbol: tc-W(Wd)
max-run-time: 5400
instance-size: xlarge
docker-image: {"in-tree": "desktop1604-test"}
checkout: true
mozharness:
script: web_platform_tests.py
no-read-buildbot-config: true
config:
- - web_platform_tests/prod_config.py
- - remove_executables.py
+ by-test-platform:
+ win.*:
+ - web_platform_tests/prod_config_windows_taskcluster.py
+ default:
+ - web_platform_tests/prod_config.py
+ - remove_executables.py
extra-options:
- --test-type=wdspec
xpcshell:
description: "xpcshell test run"
suite: xpcshell
treeherder-symbol: tc-X()
chunks:
by-test-platform:
+ # win.*: 1
linux64/debug: 10
default: 8
max-run-time: 5400
e10s: false
mozharness:
script: desktop_unittest.py
no-read-buildbot-config: true
config:
by-test-platform:
+ win.*:
+ - unittests/win_taskcluster_unittest.py
default:
- unittests/linux_unittest.py
- remove_executables.py
extra-options:
- --xpcshell-suite=xpcshell
# Bug 1281241: migrating to m3.large instances
instance-size: legacy
allow-software-gl-layers: false
--- a/taskcluster/taskgraph/transforms/task.py
+++ b/taskcluster/taskgraph/transforms/task.py
@@ -200,33 +200,36 @@ task_description_schema = Schema({
# the exit status code that indicates the task should be retried
Optional('retry-exit-status'): int,
}, {
Required('implementation'): 'generic-worker',
# command is a list of commands to run, sequentially
- 'command': [basestring],
+ 'command': [taskref_or_string],
# artifacts to extract from the task image after completion; note that artifacts
# for the generic worker cannot have names
Optional('artifacts'): [{
# type of artifact -- simple file, or recursive directory
'type': Any('file', 'directory'),
# task image path from which to read artifact
'path': basestring,
}],
# environment variables
Required('env', default={}): {basestring: taskref_or_string},
# the maximum time to run, in seconds
'max-run-time': int,
+
+ # os user groups for test task workers
+ Optional('os-groups', default=[]): [basestring],
}, {
Required('implementation'): 'buildbot-bridge',
# see
# https://github.com/mozilla/buildbot-bridge/blob/master/bbb/schemas/payload.yml
'buildername': basestring,
'sourcestamp': {
'branch': basestring,
@@ -396,18 +399,19 @@ def build_generic_worker_payload(config,
'path': artifact['path'],
'type': artifact['type'],
'expires': task_def['expires'], # always expire with the task
})
task_def['payload'] = {
'command': worker['command'],
'artifacts': artifacts,
- 'env': worker['env'],
+ 'env': worker.get('env', {}),
'maxRunTime': worker['max-run-time'],
+ 'osGroups': worker.get('os-groups', []),
}
if 'retry-exit-status' in worker:
raise Exception("retry-exit-status not supported in generic-worker")
transforms = TransformSequence()
--- a/taskcluster/taskgraph/transforms/tests/all_kinds.py
+++ b/taskcluster/taskgraph/transforms/tests/all_kinds.py
@@ -19,18 +19,20 @@ import copy
transforms = TransformSequence()
@transforms.add
def set_worker_implementation(config, tests):
"""Set the worker implementation based on the test platform."""
for test in tests:
- # this is simple for now, but soon will not be!
- test['worker-implementation'] = 'docker-worker'
+ if test['test-platform'].startswith('win'):
+ test['worker-implementation'] = 'generic-worker'
+ else:
+ test['worker-implementation'] = 'docker-worker'
yield test
@transforms.add
def set_tier(config, tests):
"""Set the tier based on policy for all test descriptions that do not
specify a tier otherwise."""
for test in tests:
--- a/taskcluster/taskgraph/transforms/tests/desktop_test.py
+++ b/taskcluster/taskgraph/transforms/tests/desktop_test.py
@@ -30,21 +30,22 @@ def set_defaults(config, tests):
@transforms.add
def set_treeherder_machine_platform(config, tests):
"""Set the appropriate task.extra.treeherder.machine.platform"""
# Linux64 build platforms for asan and pgo are specified differently to
# treeherder. This is temporary until we can clean up the handling of
# platforms
translation = {
'linux64-asan/opt': 'linux64/asan',
- 'linux64-pgo/opt': 'linux64/pgo',
+ 'linux64-pgo/opt': 'linux64/pgo'
}
for test in tests:
build_platform = test['build-platform']
- test['treeherder-machine-platform'] = translation.get(build_platform, build_platform)
+ test_platform = test['test-platform']
+ test['treeherder-machine-platform'] = translation.get(build_platform, test_platform)
yield test
@transforms.add
def set_asan_docker_image(config, tests):
"""Set the appropriate task.extra.treeherder.docker-image"""
# Linux64-asan has many leaks with running mochitest-media jobs
# on Ubuntu 16.04, please remove this when bug 1289209 is resolved
@@ -78,19 +79,33 @@ def split_e10s(config, tests):
test['treeherder-symbol'] = join_symbol(group, symbol)
test['mozharness'].setdefault('extra-options', []).append('--e10s')
yield test
@transforms.add
def allow_software_gl_layers(config, tests):
for test in tests:
- allow = get_keyed_by(item=test, field='allow-software-gl-layers',
+
+ # since this value defaults to true, but is not applicable on windows,
+ # it's overriden for that platform here.
+ allow = not test['test-platform'].startswith('win') \
+ and get_keyed_by(item=test, field='allow-software-gl-layers',
item_name=test['test-name'])
if allow:
assert test['instance-size'] != 'legacy',\
'Software GL layers on a legacy instance is disallowed (bug 1296086).'
# This should be set always once bug 1296086 is resolved.
test['mozharness'].setdefault('extra-options', [])\
.append("--allow-software-gl-layers")
yield test
+
+
+@transforms.add
+def add_os_groups(config, tests):
+ for test in tests:
+ if test['test-platform'].startswith('win'):
+ groups = get_keyed_by(item=test, field='os-groups', item_name=test['test-name'])
+ if groups:
+ test['os-groups'] = groups
+ yield test
--- a/taskcluster/taskgraph/transforms/tests/make_task_description.py
+++ b/taskcluster/taskgraph/transforms/tests/make_task_description.py
@@ -22,23 +22,28 @@ from __future__ import absolute_import,
from taskgraph.transforms.base import TransformSequence
from taskgraph.transforms.job.common import (
docker_worker_support_vcs_checkout,
)
import logging
ARTIFACT_URL = 'https://queue.taskcluster.net/v1/task/{}/artifacts/{}'
-
-ARTIFACTS = [
- # (artifact name prefix, in-image path)
- ("public/logs/", "/home/worker/workspace/build/upload/logs/"),
- ("public/test", "/home/worker/artifacts/"),
- ("public/test_info/", "/home/worker/workspace/build/blobber_upload_dir/"),
-]
+WORKER_TYPE = {
+ # default worker types keyed by instance-size
+ 'large': 'aws-provisioner-v1/desktop-test-large',
+ 'xlarge': 'aws-provisioner-v1/desktop-test-xlarge',
+ 'legacy': 'aws-provisioner-v1/desktop-test',
+ 'default': 'aws-provisioner-v1/desktop-test-large',
+ # windows worker types keyed by test-platform
+ 'windows7-32-vm': 'aws-provisioner-v1/gecko-t-win7-32',
+ 'windows7-32': 'aws-provisioner-v1/gecko-t-win7-32-gpu',
+ 'windows10-64-vm': 'aws-provisioner-v1/gecko-t-win10-64',
+ 'windows10-64': 'aws-provisioner-v1/gecko-t-win10-64-gpu'
+}
logger = logging.getLogger(__name__)
transforms = TransformSequence()
@transforms.add
def make_task_description(config, tests):
@@ -117,47 +122,49 @@ def worker_setup_function(name):
worker_setup_functions[name] = func
return func
return wrap
@worker_setup_function("docker-engine")
@worker_setup_function("docker-worker")
def docker_worker_setup(config, test, taskdesc):
+
+ artifacts = [
+ # (artifact name prefix, in-image path)
+ ("public/logs/", "/home/worker/workspace/build/upload/logs/"),
+ ("public/test", "/home/worker/artifacts/"),
+ ("public/test_info/", "/home/worker/workspace/build/blobber_upload_dir/"),
+ ]
mozharness = test['mozharness']
installer_url = ARTIFACT_URL.format('<build>', mozharness['build-artifact-name'])
test_packages_url = ARTIFACT_URL.format('<build>',
'public/build/target.test_packages.json')
mozharness_url = ARTIFACT_URL.format('<build>',
'public/build/mozharness.zip')
- taskdesc['worker-type'] = {
- 'default': 'aws-provisioner-v1/desktop-test-large',
- 'large': 'aws-provisioner-v1/desktop-test-large',
- 'xlarge': 'aws-provisioner-v1/desktop-test-xlarge',
- 'legacy': 'aws-provisioner-v1/desktop-test',
- }[test['instance-size']]
+ taskdesc['worker-type'] = WORKER_TYPE[test['instance-size']]
worker = taskdesc['worker'] = {}
worker['implementation'] = test['worker-implementation']
worker['docker-image'] = test['docker-image']
worker['allow-ptrace'] = True # required for all tests, for crashreporter
worker['relengapi-proxy'] = False # but maybe enabled for tooltool below
worker['loopback-video'] = test['loopback-video']
worker['loopback-audio'] = test['loopback-audio']
worker['max-run-time'] = test['max-run-time']
worker['retry-exit-status'] = test['retry-exit-status']
worker['artifacts'] = [{
'name': prefix,
'path': path,
'type': 'directory',
- } for (prefix, path) in ARTIFACTS]
+ } for (prefix, path) in artifacts]
worker['caches'] = [{
'type': 'persistent',
'name': 'level-{}-{}-test-workspace'.format(
config.params['level'], config.params['project']),
'mount-point': "/home/worker/workspace",
}]
@@ -237,8 +244,116 @@ def docker_worker_setup(config, test, ta
command[i] += suffix
if 'download-symbols' in mozharness:
download_symbols = mozharness['download-symbols']
download_symbols = {True: 'true', False: 'false'}.get(download_symbols, download_symbols)
command.append('--download-symbols=' + download_symbols)
worker['command'] = command
+
+
+def normpath(path):
+ return path.replace('/', '\\')
+
+
+def get_firefox_version():
+ with open('browser/config/version.txt', 'r') as f:
+ return f.readline().strip()
+
+
+@worker_setup_function('generic-worker')
+def generic_worker_setup(config, test, taskdesc):
+ artifacts = [
+ {
+ 'path': 'public\\logs\\localconfig.json',
+ 'type': 'file'
+ },
+ {
+ 'path': 'public\\logs\\log_critical.log',
+ 'type': 'file'
+ },
+ {
+ 'path': 'public\\logs\\log_error.log',
+ 'type': 'file'
+ },
+ {
+ 'path': 'public\\logs\\log_fatal.log',
+ 'type': 'file'
+ },
+ {
+ 'path': 'public\\logs\\log_info.log',
+ 'type': 'file'
+ },
+ {
+ 'path': 'public\\logs\\log_raw.log',
+ 'type': 'file'
+ },
+ {
+ 'path': 'public\\logs\\log_warning.log',
+ 'type': 'file'
+ },
+ {
+ 'path': 'public\\test_info',
+ 'type': 'directory'
+ }
+ ]
+ mozharness = test['mozharness']
+
+ build_platform = taskdesc['attributes']['build_platform']
+ test_platform = test['test-platform'].split('/')[0]
+
+ target = 'firefox-{}.en-US.{}'.format(get_firefox_version(), build_platform)
+
+ installer_url = ARTIFACT_URL.format(
+ '<build>', 'public/build/{}.zip'.format(target))
+ test_packages_url = ARTIFACT_URL.format(
+ '<build>', 'public/build/{}.test_packages.json'.format(target))
+ mozharness_url = ARTIFACT_URL.format(
+ '<build>', 'public/build/mozharness.zip')
+
+ taskdesc['worker-type'] = WORKER_TYPE[test_platform]
+
+ taskdesc['scopes'].extend(
+ ['generic-worker:os-group:{}'.format(group) for group in test['os-groups']])
+
+ worker = taskdesc['worker'] = {}
+ worker['os-groups'] = test['os-groups']
+ worker['implementation'] = test['worker-implementation']
+ worker['max-run-time'] = test['max-run-time']
+ worker['artifacts'] = artifacts
+
+ env = worker['env'] = {
+ # Bug 1306989
+ 'APPDATA': '%cd%\\AppData\\Roaming',
+ 'LOCALAPPDATA': '%cd%\\AppData\\Local',
+ 'TEMP': '%cd%\\AppData\\Local\\Temp',
+ 'TMP': '%cd%\\AppData\\Local\\Temp',
+ 'USERPROFILE': '%cd%',
+ }
+
+ # assemble the command line
+ mh_command = [
+ 'c:\\mozilla-build\\python\\python.exe',
+ '-u',
+ 'mozharness\\scripts\\' + normpath(mozharness['script'])
+ ]
+ for mh_config in mozharness['config']:
+ mh_command.extend(['--cfg', 'mozharness\\configs\\' + normpath(mh_config)])
+ mh_command.extend(mozharness.get('extra-options', []))
+ if mozharness.get('no-read-buildbot-config'):
+ mh_command.append('--no-read-buildbot-config')
+ mh_command.extend(['--installer-url', installer_url])
+ mh_command.extend(['--test-packages-url', test_packages_url])
+ if mozharness.get('download-symbols'):
+ if isinstance(mozharness['download-symbols'], basestring):
+ mh_command.extend(['--download-symbols', mozharness['download-symbols']])
+ else:
+ mh_command.extend(['--download-symbols', 'true'])
+
+ worker['command'] = [
+ 'mkdir {} {}'.format(env['APPDATA'], env['TMP']),
+ {'task-reference': 'c:\\mozilla-build\\wget\\wget.exe {}'.format(mozharness_url)},
+ 'c:\\mozilla-build\\info-zip\\unzip.exe mozharness.zip',
+ {'task-reference': ' '.join(mh_command)},
+ 'xcopy build\\blobber_upload_dir public\\test_info /e /i',
+ 'copy /y logs\\*.* public\\logs\\'
+ ]
--- a/taskcluster/taskgraph/transforms/tests/test_description.py
+++ b/taskcluster/taskgraph/transforms/tests/test_description.py
@@ -101,18 +101,18 @@ test_description_schema = Schema({
# using the GL compositor. May not be used with "legacy" sized instances
# due to poor LLVMPipe performance (bug 1296086).
Optional('allow-software-gl-layers', default=True): bool,
# The worker implementation for this test, as dictated by policy and by the
# test platform.
Optional('worker-implementation'): Any(
'docker-worker',
+ 'generic-worker',
# coming soon:
- 'generic-worker',
'docker-engine',
'buildbot-bridge',
),
# For tasks that will run in docker-worker or docker-engine, this is the
# name of the docker image or in-tree docker image to run the task in. If
# in-tree, then a dependency will be created automatically. This is
# generally `desktop-test`, or an image that acts an awful lot like it.
@@ -194,16 +194,24 @@ test_description_schema = Schema({
# chunking-args = test-suite-suffix; "<CHUNK>" in this string will
# be replaced with the chunk number.
Optional('chunk-suffix'): basestring,
}),
# The current chunk; this is filled in by `all_kinds.py`
Optional('this-chunk'): int,
+ # os user groups for test task workers; required scopes, will be
+ # added automatically
+ Optional('os-groups', default=[]): Any(
+ [basestring],
+ # todo: create a dedicated elevated worker group and name here
+ {'by-test-platform': {basestring: [basestring]}},
+ ),
+
# -- values supplied by the task-generation infrastructure
# the platform of the build this task is testing
'build-platform': basestring,
# the label of the build task generating the materials to test
'build-label': basestring,
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/marionette/windows_taskcluster_config.py
@@ -0,0 +1,122 @@
+# This is a template config file for marionette production on Windows.
+import os
+import sys
+
+config = {
+ # marionette options
+ "marionette_address": "localhost:2828",
+ "test_manifest": "unit-tests.ini",
+
+ "virtualenv_python_dll": os.path.join(os.path.dirname(sys.executable), 'python27.dll'),
+ "virtualenv_path": 'venv',
+ "exes": {
+ 'python': sys.executable,
+ 'virtualenv': [
+ sys.executable,
+ os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
+ ],
+ 'mozinstall': ['build/venv/scripts/python', 'build/venv/scripts/mozinstall-script.py'],
+ 'tooltool.py': [sys.executable, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
+ 'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
+ },
+
+ "find_links": [
+ "http://pypi.pvt.build.mozilla.org/pub",
+ "http://pypi.pub.build.mozilla.org/pub",
+ ],
+ "pip_index": False,
+
+ "default_actions": [
+ 'clobber',
+ 'download-and-extract',
+ 'create-virtualenv',
+ 'install',
+ 'run-tests',
+ ],
+ "default_blob_upload_servers": [
+ "https://blobupload.elasticbeanstalk.com",
+ ],
+ "blob_uploader_auth_file" : 'C:/builds/oauth.txt',
+ "download_minidump_stackwalk": True,
+ "download_symbols": "ondemand",
+ "suite_definitions": {
+ "gaiatest_desktop": {
+ "options": [
+ "--restart",
+ "--timeout=%(timeout)s",
+ "--testvars=%(testvars)s",
+ "--profile=%(profile)s",
+ "--symbols-path=%(symbols_path)s",
+ "--gecko-log=%(gecko_log)s",
+ "--log-xunit=%(xml_output)s",
+ "--html-output=%(html_output)s",
+ "--log-raw=%(raw_log_file)s",
+ "--log-errorsummary=%(error_summary_file)s",
+ "--binary=%(binary)s",
+ "--address=%(address)s",
+ "--total-chunks=%(total_chunks)s",
+ "--this-chunk=%(this_chunk)s"
+ ],
+ "run_filename": "",
+ "testsdir": ""
+ },
+ "gaiatest_emulator": {
+ "options": [
+ "--restart",
+ "--timeout=%(timeout)s",
+ "--testvars=%(testvars)s",
+ "--profile=%(profile)s",
+ "--symbols-path=%(symbols_path)s",
+ "--log-xunit=%(xml_output)s",
+ "--html-output=%(html_output)s",
+ "--log-raw=%(raw_log_file)s",
+ "--log-errorsummary=%(error_summary_file)s",
+ "--logcat-dir=%(logcat_dir)s",
+ "--emulator=%(emulator)s",
+ "--homedir=%(homedir)s"
+ ],
+ "run_filename": "",
+ "testsdir": ""
+ },
+ "marionette_desktop": {
+ "options": [
+ "--log-raw=%(raw_log_file)s",
+ "--log-errorsummary=%(error_summary_file)s",
+ "--binary=%(binary)s",
+ "--address=%(address)s",
+ "--symbols-path=%(symbols_path)s"
+ ],
+ "run_filename": "",
+ "testsdir": ""
+ },
+ "marionette_emulator": {
+ "options": [
+ "--log-raw=%(raw_log_file)s",
+ "--log-errorsummary=%(error_summary_file)s",
+ "--logcat-dir=%(logcat_dir)s",
+ "--emulator=%(emulator)s",
+ "--homedir=%(homedir)s",
+ "--symbols-path=%(symbols_path)s"
+ ],
+ "run_filename": "",
+ "testsdir": ""
+ },
+ "webapi_desktop": {
+ "options": [],
+ "run_filename": "",
+ "testsdir": ""
+ },
+ "webapi_emulator": {
+ "options": [
+ "--log-raw=%(raw_log_file)s",
+ "--log-errorsummary=%(error_summary_file)s",
+ "--symbols-path=%(symbols_path)s",
+ "--logcat-dir=%(logcat_dir)s",
+ "--emulator=%(emulator)s",
+ "--homedir=%(homedir)s"
+ ],
+ "run_filename": "",
+ "testsdir": ""
+ }
+ },
+}
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/mediatests/taskcluster_windows_config.py
@@ -0,0 +1,54 @@
+import os
+import sys
+import mozharness
+
+external_tools_path = os.path.join(
+ os.path.abspath(os.path.dirname(os.path.dirname(mozharness.__file__))),
+ 'external_tools',
+)
+
+config = {
+ "virtualenv_python_dll": os.path.join(os.path.dirname(sys.executable), 'python27.dll'),
+ "virtualenv_path": 'venv',
+ "exes": {
+ 'python': sys.executable,
+ 'virtualenv': [
+ sys.executable,
+ os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
+ ],
+ 'mozinstall': ['build/venv/scripts/python', 'build/venv/scripts/mozinstall-script.py'],
+ 'tooltool.py': [sys.executable, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
+ 'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
+ },
+ "find_links": [
+ "http://pypi.pvt.build.mozilla.org/pub",
+ "http://pypi.pub.build.mozilla.org/pub",
+ ],
+ "pip_index": False,
+
+ "default_actions": [
+ 'clobber',
+ 'download-and-extract',
+ 'create-virtualenv',
+ 'install',
+ 'run-media-tests',
+ ],
+ "default_blob_upload_servers": [
+ "https://blobupload.elasticbeanstalk.com",
+ ],
+ "blob_uploader_auth_file" : 'C:/builds/oauth.txt',
+ "in_tree_config": "config/mozharness/marionette.py",
+ "download_minidump_stackwalk": True,
+ "download_symbols": "ondemand",
+
+ "suite_definitions": {
+ "media-tests": {
+ "options": [],
+ },
+ "media-youtube-tests": {
+ "options": [
+ "%(test_manifest)s"
+ ],
+ },
+ },
+}
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/unittests/win_taskcluster_unittest.py
@@ -0,0 +1,282 @@
+import os
+import sys
+
+# OS Specifics
+ABS_WORK_DIR = os.path.join(os.getcwd(), "build")
+BINARY_PATH = os.path.join(ABS_WORK_DIR, "firefox", "firefox.exe")
+INSTALLER_PATH = os.path.join(ABS_WORK_DIR, "installer.zip")
+XPCSHELL_NAME = 'xpcshell.exe'
+EXE_SUFFIX = '.exe'
+DISABLE_SCREEN_SAVER = False
+ADJUST_MOUSE_AND_SCREEN = True
+#####
+config = {
+ "exes": {
+ 'python': sys.executable,
+ 'virtualenv': [
+ sys.executable,
+ os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
+ ],
+ 'mozinstall': ['build/venv/scripts/python', 'build/venv/scripts/mozinstall-script.py'],
+ 'tooltool.py': [sys.executable, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
+ 'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
+ },
+ ###
+ "installer_path": INSTALLER_PATH,
+ "binary_path": BINARY_PATH,
+ "xpcshell_name": XPCSHELL_NAME,
+ "virtualenv_path": 'venv',
+ "virtualenv_python_dll": os.path.join(os.path.dirname(sys.executable), "python27.dll"),
+
+ "find_links": [
+ "http://pypi.pvt.build.mozilla.org/pub",
+ "http://pypi.pub.build.mozilla.org/pub",
+ ],
+ "pip_index": False,
+ "exe_suffix": EXE_SUFFIX,
+ "run_file_names": {
+ "mochitest": "runtests.py",
+ "reftest": "runreftest.py",
+ "xpcshell": "runxpcshelltests.py",
+ "cppunittest": "runcppunittests.py",
+ "gtest": "rungtests.py",
+ "jittest": "jit_test.py",
+ "mozbase": "test.py",
+ "mozmill": "runtestlist.py",
+ },
+ "minimum_tests_zip_dirs": [
+ "bin/*",
+ "certs/*",
+ "config/*",
+ "mach",
+ "marionette/*",
+ "modules/*",
+ "mozbase/*",
+ "tools/*",
+ ],
+ "specific_tests_zip_dirs": {
+ "mochitest": ["mochitest/*"],
+ "reftest": ["reftest/*", "jsreftest/*"],
+ "xpcshell": ["xpcshell/*"],
+ "cppunittest": ["cppunittest/*"],
+ "gtest": ["gtest/*"],
+ "jittest": ["jit-test/*"],
+ "mozbase": ["mozbase/*"],
+ "mozmill": ["mozmill/*"],
+ },
+ "suite_definitions": {
+ "cppunittest": {
+ "options": [
+ "--symbols-path=%(symbols_path)s",
+ "--xre-path=%(abs_app_dir)s"
+ ],
+ "run_filename": "runcppunittests.py",
+ "testsdir": "cppunittest"
+ },
+ "jittest": {
+ "options": [
+ "tests/bin/js",
+ "--no-slow",
+ "--no-progress",
+ "--format=automation",
+ "--jitflags=all",
+ "--timeout=970" # Keep in sync with run_timeout below.
+ ],
+ "run_filename": "jit_test.py",
+ "testsdir": "jit-test/jit-test",
+ "run_timeout": 1000 # Keep in sync with --timeout above.
+ },
+ "mochitest": {
+ "options": [
+ "--appname=%(binary_path)s",
+ "--utility-path=tests/bin",
+ "--extra-profile-file=tests/bin/plugins",
+ "--symbols-path=%(symbols_path)s",
+ "--certificate-path=tests/certs",
+ "--quiet",
+ "--log-raw=%(raw_log_file)s",
+ "--log-errorsummary=%(error_summary_file)s",
+ "--screenshot-on-fail",
+ "--cleanup-crashes",
+ ],
+ "run_filename": "runtests.py",
+ "testsdir": "mochitest"
+ },
+ "mozbase": {
+ "options": [
+ "-b",
+ "%(binary_path)s"
+ ],
+ "run_filename": "test.py",
+ "testsdir": "mozbase"
+ },
+ "mozmill": {
+ "options": [
+ "--binary=%(binary_path)s",
+ "--testing-modules-dir=test/modules",
+ "--plugins-path=%(test_plugin_path)s",
+ "--symbols-path=%(symbols_path)s"
+ ],
+ "run_filename": "runtestlist.py",
+ "testsdir": "mozmill"
+ },
+ "reftest": {
+ "options": [
+ "--appname=%(binary_path)s",
+ "--utility-path=tests/bin",
+ "--extra-profile-file=tests/bin/plugins",
+ "--symbols-path=%(symbols_path)s",
+ "--log-raw=%(raw_log_file)s",
+ "--log-errorsummary=%(error_summary_file)s",
+ "--cleanup-crashes",
+ ],
+ "run_filename": "runreftest.py",
+ "testsdir": "reftest"
+ },
+ "xpcshell": {
+ "options": [
+ "--symbols-path=%(symbols_path)s",
+ "--test-plugin-path=%(test_plugin_path)s",
+ "--log-raw=%(raw_log_file)s",
+ "--log-errorsummary=%(error_summary_file)s",
+ "--utility-path=tests/bin",
+ ],
+ "run_filename": "runxpcshelltests.py",
+ "testsdir": "xpcshell"
+ },
+ "gtest": {
+ "options": [
+ "--xre-path=%(abs_res_dir)s",
+ "--cwd=%(gtest_dir)s",
+ "--symbols-path=%(symbols_path)s",
+ "--utility-path=tests/bin",
+ "%(binary_path)s",
+ ],
+ "run_filename": "rungtests.py",
+ },
+ },
+ # local mochi suites
+ "all_mochitest_suites":
+ {
+ "plain": [],
+ "plain-gpu": ["--subsuite=gpu"],
+ "plain-clipboard": ["--subsuite=clipboard"],
+ "plain-chunked": ["--chunk-by-dir=4"],
+ "mochitest-media": ["--subsuite=media"],
+ "chrome": ["--flavor=chrome"],
+ "chrome-gpu": ["--flavor=chrome", "--subsuite=gpu"],
+ "chrome-clipboard": ["--flavor=chrome", "--subsuite=clipboard"],
+ "chrome-chunked": ["--flavor=chrome", "--chunk-by-dir=4"],
+ "browser-chrome": ["--flavor=browser"],
+ "browser-chrome-gpu": ["--flavor=browser", "--subsuite=gpu"],
+ "browser-chrome-clipboard": ["--flavor=browser", "--subsuite=clipboard"],
+ "browser-chrome-chunked": ["--flavor=browser", "--chunk-by-runtime"],
+ "browser-chrome-addons": ["--flavor=browser", "--chunk-by-runtime", "--tag=addons"],
+ "browser-chrome-screenshots": ["--flavor=browser", "--subsuite=screenshots"],
+ "mochitest-gl": ["--subsuite=webgl"],
+ "mochitest-devtools-chrome": ["--flavor=browser", "--subsuite=devtools"],
+ "mochitest-devtools-chrome-chunked": ["--flavor=browser", "--subsuite=devtools", "--chunk-by-runtime"],
+ "mochitest-metro-chrome": ["--flavor=browser", "--metro-immersive"],
+ "jetpack-package": ["--flavor=jetpack-package"],
+ "jetpack-package-clipboard": ["--flavor=jetpack-package", "--subsuite=clipboard"],
+ "jetpack-addon": ["--flavor=jetpack-addon"],
+ "a11y": ["--flavor=a11y"],
+ },
+ # local reftest suites
+ "all_reftest_suites": {
+ "reftest": {
+ 'options': ["--suite=reftest"],
+ 'tests': ["tests/reftest/tests/layout/reftests/reftest.list"]
+ },
+ "crashtest": {
+ 'options': ["--suite=crashtest"],
+ 'tests': ["tests/reftest/tests/testing/crashtest/crashtests.list"]
+ },
+ "jsreftest": {
+ 'options':["--extra-profile-file=tests/jsreftest/tests/user.js"],
+ 'tests': ["tests/jsreftest/tests/jstests.list"]
+ },
+ "reftest-ipc": {
+ 'options': ['--suite=reftest',
+ '--setpref=browser.tabs.remote=true',
+ '--setpref=browser.tabs.remote.autostart=true',
+ '--setpref=extensions.e10sBlocksEnabling=false',
+ '--setpref=layers.async-pan-zoom.enabled=true'],
+ 'tests': ['tests/reftest/tests/layout/reftests/reftest-sanity/reftest.list']
+ },
+ "reftest-no-accel": {
+ "options": ["--suite=reftest",
+ "--setpref=gfx.direct2d.disabled=true",
+ "--setpref=layers.acceleration.disabled=true"],
+ "tests": ["tests/reftest/tests/layout/reftests/reftest.list"]
+ },
+ "crashtest-ipc": {
+ "options": ["--suite=crashtest",
+ '--setpref=browser.tabs.remote=true',
+ '--setpref=browser.tabs.remote.autostart=true',
+ '--setpref=extensions.e10sBlocksEnabling=false',
+ '--setpref=layers.async-pan-zoom.enabled=true'],
+ "tests": ['tests/reftest/tests/testing/crashtest/crashtests.list'],
+ },
+ },
+ "all_xpcshell_suites": {
+ "xpcshell": {
+ 'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
+ "--manifest=tests/xpcshell/tests/xpcshell.ini"],
+ 'tests': []
+ },
+ "xpcshell-addons": {
+ 'options': ["--xpcshell=%(abs_app_dir)s/" + XPCSHELL_NAME,
+ "--tag=addons",
+ "--manifest=tests/xpcshell/tests/xpcshell.ini"],
+ 'tests': []
+ },
+ },
+ "all_cppunittest_suites": {
+ "cppunittest": ['tests/cppunittest']
+ },
+ "all_gtest_suites": {
+ "gtest": []
+ },
+ "all_jittest_suites": {
+ "jittest": []
+ },
+ "all_mozbase_suites": {
+ "mozbase": []
+ },
+ "run_cmd_checks_enabled": True,
+ "preflight_run_cmd_suites": [
+ {
+ 'name': 'disable_screen_saver',
+ 'cmd': ['xset', 's', 'off', 's', 'reset'],
+ 'architectures': ['32bit', '64bit'],
+ 'halt_on_failure': False,
+ 'enabled': DISABLE_SCREEN_SAVER
+ },
+ {
+ 'name': 'run mouse & screen adjustment script',
+ 'cmd': [
+ sys.executable,
+ os.path.join(os.getcwd(),
+ 'mozharness', 'external_tools', 'mouse_and_screen_resolution.py'),
+ '--configuration-file',
+ os.path.join(os.getcwd(),
+ 'mozharness', 'external_tools', 'machine-configuration.json')
+ ],
+ 'architectures': ['32bit'],
+ 'halt_on_failure': True,
+ 'enabled': ADJUST_MOUSE_AND_SCREEN
+ }
+ ],
+ "vcs_output_timeout": 1000,
+ "minidump_save_path": "%(abs_work_dir)s/../minidumps",
+ "buildbot_max_log_size": 52428800,
+ "default_blob_upload_servers": [
+ "https://blobupload.elasticbeanstalk.com",
+ ],
+ "structured_suites": ["reftest"],
+ 'blob_uploader_auth_file': 'C:/builds/oauth.txt',
+ "download_minidump_stackwalk": True,
+ "minidump_stackwalk_path": "win32-minidump_stackwalk.exe",
+ "minidump_tooltool_manifest_path": "config/tooltool-manifests/win32/releng.manifest"
+}
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/web_platform_tests/prod_config_windows_taskcluster.py
@@ -0,0 +1,48 @@
+# ***** BEGIN LICENSE BLOCK *****
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this file,
+# You can obtain one at http://mozilla.org/MPL/2.0/.
+# ***** END LICENSE BLOCK *****
+
+# This is a template config file for web-platform-tests test.
+
+import os
+import sys
+
+config = {
+ "options": [
+ "--prefs-root=%(test_path)s/prefs",
+ "--processes=1",
+ "--config=%(test_path)s/wptrunner.ini",
+ "--ca-cert-path=%(test_path)s/certs/cacert.pem",
+ "--host-key-path=%(test_path)s/certs/web-platform.test.key",
+ "--host-cert-path=%(test_path)s/certs/web-platform.test.pem",
+ "--certutil-binary=%(test_install_path)s/bin/certutil",
+ ],
+
+ "exes": {
+ 'python': sys.executable,
+ 'virtualenv': [
+ sys.executable,
+ os.path.join(os.path.dirname(sys.executable), 'Lib', 'site-packages', 'virtualenv.py')
+ ],
+ 'mozinstall': ['build/venv/scripts/python', 'build/venv/scripts/mozinstall-script.py'],
+ 'tooltool.py': [sys.executable, os.path.join(os.environ['MOZILLABUILD'], 'tooltool.py')],
+ 'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
+ },
+
+ "find_links": [
+ "http://pypi.pvt.build.mozilla.org/pub",
+ "http://pypi.pub.build.mozilla.org/pub",
+ ],
+
+ "pip_index": False,
+
+ "default_blob_upload_servers": [
+ "https://blobupload.elasticbeanstalk.com",
+ ],
+
+ "blob_uploader_auth_file" : 'C:/builds/oauth.txt',
+
+ "download_minidump_stackwalk": True,
+}