Bug 1171033 - Add taskcluster linux64 test configs (but not scheduled anywhere yet), r=dustin
☠☠ backed out by d351ee79b4e4 ☠ ☠
authorAndrew Halberstadt <ahalberstadt@mozilla.com>
Thu, 15 Oct 2015 15:35:45 -0400
changeset 304394 11ba4c03d2054b6b7f7d80841e455b102b26d664
parent 304393 06db05394add083b2e65a598a5fad7f92bc75438
child 304395 d8e7d5986ace4e399cde3793b556a8c0a04662a2
push id1001
push userraliiev@mozilla.com
push dateMon, 18 Jan 2016 19:06:03 +0000
treeherdermozilla-release@8b89261f3ac4 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersdustin
bugs1171033
milestone44.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1171033 - Add taskcluster linux64 test configs (but not scheduled anywhere yet), r=dustin This adds test configs for desktop linux64 unittests, including: mochitest-plain, mochitest-browser-chrome, mochitest-devtools-chrome, reftest and xpcshell. It also does a minor refactor of the b2g configs to remove some b2g-specific logic from the base 'test.yml' config. This does *not* schedule these tests anywhere just yet.
testing/mozharness/configs/remove_executables.py
testing/taskcluster/mach_commands.py
testing/taskcluster/scripts/tester/test-linux.sh
testing/taskcluster/tasks/builds/firefox_base.yml
testing/taskcluster/tasks/builds/linux64_clobber.yml
testing/taskcluster/tasks/test.yml
testing/taskcluster/tasks/tests/b2g_build_test.yml
testing/taskcluster/tasks/tests/b2g_build_unit.yml
testing/taskcluster/tasks/tests/b2g_emulator_cpp_unit.yml
testing/taskcluster/tasks/tests/b2g_emulator_crashtest.yml
testing/taskcluster/tasks/tests/b2g_emulator_js_reftest.yml
testing/taskcluster/tasks/tests/b2g_emulator_marionette.yml
testing/taskcluster/tasks/tests/b2g_emulator_marionette_webapi.yml
testing/taskcluster/tasks/tests/b2g_emulator_mochitest.yml
testing/taskcluster/tasks/tests/b2g_emulator_mochitest_media.yml
testing/taskcluster/tasks/tests/b2g_emulator_reftest.yml
testing/taskcluster/tasks/tests/b2g_emulator_xpcshell.yml
testing/taskcluster/tasks/tests/b2g_emulator_xpcshell_chunked.yml
testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml
testing/taskcluster/tasks/tests/b2g_gaia_unit.yml
testing/taskcluster/tasks/tests/b2g_gaia_unit_oop.yml
testing/taskcluster/tasks/tests/b2g_linter.yml
testing/taskcluster/tasks/tests/b2g_mochitest.yml
testing/taskcluster/tasks/tests/b2g_mochitest_oop.yml
testing/taskcluster/tasks/tests/b2g_reftests.yml
testing/taskcluster/tasks/tests/b2g_reftests_sanity_oop.yml
testing/taskcluster/tasks/tests/b2g_unittest_base.yml
testing/taskcluster/tasks/tests/fx_linux64_mochitest_bc.yml
testing/taskcluster/tasks/tests/fx_linux64_mochitest_dt.yml
testing/taskcluster/tasks/tests/fx_linux64_mochitest_gl.yml
testing/taskcluster/tasks/tests/fx_linux64_mochitest_plain.yml
testing/taskcluster/tasks/tests/fx_linux64_reftest.yml
testing/taskcluster/tasks/tests/fx_linux64_xpcshell.yml
testing/taskcluster/tasks/tests/fx_unittest_base.yml
testing/taskcluster/tasks/tests/mulet_build_test.yml
testing/taskcluster/tasks/tests/mulet_build_unit.yml
testing/taskcluster/tasks/tests/mulet_gaia_js_integration_tests.yml
testing/taskcluster/tasks/tests/mulet_gaia_unit.yml
testing/taskcluster/tasks/tests/mulet_gaia_unit_oop.yml
testing/taskcluster/tasks/tests/mulet_linter.yml
testing/taskcluster/tasks/tests/mulet_mochitests.yml
testing/taskcluster/tasks/tests/mulet_reftests.yml
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/remove_executables.py
@@ -0,0 +1,6 @@
+config = {
+    # We bake this directly into the tester image now...
+    "download_minidump_stackwalk": False,
+    "minidump_stackwalk_path": "/usr/local/bin/linux64-minidump_stackwalk",
+    "exes": {}
+}
--- a/testing/taskcluster/mach_commands.py
+++ b/testing/taskcluster/mach_commands.py
@@ -538,30 +538,38 @@ class Graph(object):
                 test_parameters = copy.copy(build_parameters)
                 if tests_url:
                     test_parameters['tests_url'] = tests_url
                 if test_packages_url:
                     test_parameters['test_packages_url'] = test_packages_url
                 if mozharness_url:
                     test_parameters['mozharness_url'] = mozharness_url
                 test_definition = templates.load(test['task'], {})['task']
-                chunk_config = test_definition['extra']['chunks']
+                chunk_config = test_definition['extra'].get('chunks', {})
 
                 # Allow branch configs to override task level chunking...
                 if 'chunks' in test:
                     chunk_config['total'] = test['chunks']
 
-                test_parameters['total_chunks'] = chunk_config['total']
+                chunked = 'total' in chunk_config
+                if chunked:
+                    test_parameters['total_chunks'] = chunk_config['total']
 
-                for chunk in range(1, chunk_config['total'] + 1):
-                    if 'only_chunks' in test and \
+                if 'suite' in test_definition['extra']:
+                    suite_config = test_definition['extra']['suite']
+                    test_parameters['suite'] = suite_config['name']
+                    test_parameters['flavor'] = suite_config.get('flavor', '')
+
+                for chunk in range(1, chunk_config.get('total', 1) + 1):
+                    if 'only_chunks' in test and chunked and \
                         chunk not in test['only_chunks']:
                         continue
 
-                    test_parameters['chunk'] = chunk
+                    if chunked:
+                        test_parameters['chunk'] = chunk
                     test_task = configure_dependent_task(test['task'],
                                                          test_parameters,
                                                          slugid(),
                                                          templates,
                                                          build_treeherder_config)
                     set_interactive_task(test_task, interactive)
 
                     if params['revision_hash']:
--- a/testing/taskcluster/scripts/tester/test-linux.sh
+++ b/testing/taskcluster/scripts/tester/test-linux.sh
@@ -73,19 +73,15 @@ if $NEED_XVFB; then
             sleep 2
         fi done
     if [ $xvfb_test == 255 ]; then exit 255; fi
 fi
 
 # support multiple, space delimited, config files
 config_cmds=""
 for cfg in $MOZHARNESS_CONFIG; do
-  config_cmds="${config_cmds} --config ${cfg}"
+  config_cmds="${config_cmds} --config-file ${cfg}"
 done
 
-# TODO: this config should be folded into others once we are no longer
-# also running tests in Buildbot
-config_cmds="${config_cmds} --config-file remove_executables.py"
-
 # run the given mozharness script and configs, but pass the rest of the
 # arguments in from our own invocation
 python2.7 $WORKSPACE/${MOZHARNESS_SCRIPT} ${config_cmds} "${@}"
 
--- a/testing/taskcluster/tasks/builds/firefox_base.yml
+++ b/testing/taskcluster/tasks/builds/firefox_base.yml
@@ -1,4 +1,9 @@
 $inherits:
   from: 'tasks/build.yml'
   variables:
     build_product: 'firefox'
+task:
+  extra:
+    locations:
+      mozharness: 'public/build/mozharness.zip'
+      test_packages: 'public/build/test_packages.json'
--- a/testing/taskcluster/tasks/builds/linux64_clobber.yml
+++ b/testing/taskcluster/tasks/builds/linux64_clobber.yml
@@ -39,9 +39,8 @@ task:
       machine:
         # see https://github.com/mozilla/treeherder/blob/master/ui/js/values.js
         platform: linux64
     # Rather then enforcing particular conventions we require that all build
     # tasks provide the "build" extra field to specify where the build and tests
     # files are located, relative to the task's artifacts URL
     locations:
       build: 'public/build/target.tar.bz2'
-      tests: 'public/build/target.tests.zip'
--- a/testing/taskcluster/tasks/test.yml
+++ b/testing/taskcluster/tasks/test.yml
@@ -10,37 +10,21 @@ task:
   workerType: b2gtest
   provisionerId: aws-provisioner-v1
   schedulerId: task-graph-scheduler
 
   scopes:
     - 'docker-worker:image:{{#docker_image}}tester{{/docker_image}}'
     - 'queue:define-task:aws-provisioner-v1/test-c4-2xlarge'
     - 'queue:create-task:aws-provisioner-v1/test-c4-2xlarge'
-    - 'docker-worker:cache:tc-vcs'
-    - 'docker-worker:cache:linux-cache'
-    - 'docker-worker:capability:device:loopbackVideo'
-    - 'docker-worker:capability:device:loopbackAudio'
 
   payload:
-    capabilities:
-      devices:
-        loopbackVideo: true
-        loopbackAudio: true
     image: '{{#docker_image}}tester{{/docker_image}}'
     maxRunTime: 3600
-    cache:
-      # So pip installs are cached...
-      linux-cache: /home/worker/.cache
-      tc-vcs: '/home/worker/.tc-vcs'
     env:
-      GAIA_HEAD_REPOSITORY: '{{{gaia_head_repository}}}'
-      GAIA_BASE_REPOSITORY: '{{{gaia_base_repository}}}'
-      GAIA_REF: '{{{gaia_ref}}}'
-      GAIA_REV: '{{{gaia_rev}}}'
       MOZILLA_BUILD_URL: '{{build_url}}'
       MOZHARNESS_URL: '{{mozharness_url}}'
 
     # All builds share a common artifact directory for ease of uploading.
     artifacts:
       'public/logs/':
         type: directory
         path: '/home/worker/build/upload/logs/'
--- a/testing/taskcluster/tasks/tests/b2g_build_test.yml
+++ b/testing/taskcluster/tasks/tests/b2g_build_test.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] - Gaia Build Test'
     description: Gaia Build Test test run
 
   payload:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
--- a/testing/taskcluster/tasks/tests/b2g_build_unit.yml
+++ b/testing/taskcluster/tasks/tests/b2g_build_unit.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] - Gaia Build Unit Test'
     description: Gaia Build Unit Test
 
   payload:
     command:
       - entrypoint
--- a/testing/taskcluster/tasks/tests/b2g_emulator_cpp_unit.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_cpp_unit.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] CPP Unit Tests'
     description: CPP Unit Tests test run
 
   workerType: b2gtest-emulator
   payload:
     command:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_crashtest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_crashtest.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Crashtest'
     description: Crashtest test run {{chunk}}
 
   workerType: b2gtest-emulator
   payload:
     maxRunTime: 3600
--- a/testing/taskcluster/tasks/tests/b2g_emulator_js_reftest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_js_reftest.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] JSReftest'
     description: JSReftest test run {{chunk}}
 
   workerType: b2gtest-emulator
   payload:
     command:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_marionette.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_marionette.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Marionette Framework Unit Tests'
     description: Marionette Framework Unit Tests test run
 
   workerType: b2gtest-emulator
   payload:
     command:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_marionette_webapi.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_marionette_webapi.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Marionette WebAPI Tests'
     description: Marionette WebAPI test run
 
   workerType: b2gtest-emulator
   payload:
     command:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_mochitest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_mochitest.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Mochitest'
     description: Mochitest test run {{chunk}}
 
   workerType: b2gtest-emulator
   payload:
     maxRunTime: 7200
--- a/testing/taskcluster/tasks/tests/b2g_emulator_mochitest_media.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_mochitest_media.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Mochitest'
     description: Mochitest Media test run
 
   workerType: b2gtest-emulator
   payload:
     command:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_reftest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_reftest.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Reftest'
     description: Reftest test run {{chunk}}
 
   workerType: b2gtest-emulator
   payload:
     command:
--- a/testing/taskcluster/tasks/tests/b2g_emulator_xpcshell.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_xpcshell.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] XPCShell'
     description: XPCShell test run
 
   workerType: b2gtest-emulator
   payload:
     maxRunTime: 6000
--- a/testing/taskcluster/tasks/tests/b2g_emulator_xpcshell_chunked.yml
+++ b/testing/taskcluster/tasks/tests/b2g_emulator_xpcshell_chunked.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] XPCShell'
     description: XPCShell test run {{chunk}}
 
   workerType: b2gtest-emulator
   payload:
     maxRunTime: 6000
--- a/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gaia_js_integration_tests.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] - Gaia JS Integration Test'
     description: Gaia JS Integration Test run {{chunk}}
 
   payload:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
--- a/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gaia_unit.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Gaia Unit Test'
     description: Gaia Unit Test
 
   payload:
     command:
       - entrypoint
--- a/testing/taskcluster/tasks/tests/b2g_gaia_unit_oop.yml
+++ b/testing/taskcluster/tasks/tests/b2g_gaia_unit_oop.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Gaia Unit Test OOP'
     description: Gaia Unit Test OOP
 
   payload:
     command:
       - entrypoint
--- a/testing/taskcluster/tasks/tests/b2g_linter.yml
+++ b/testing/taskcluster/tasks/tests/b2g_linter.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] - Gaia Linter'
     description: Linter Test
 
   payload:
     command:
       - entrypoint
--- a/testing/taskcluster/tasks/tests/b2g_mochitest.yml
+++ b/testing/taskcluster/tasks/tests/b2g_mochitest.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] B2G Mochitests {{chunk}}'
     description: B2G Desktop Mochi test run {{chunk}}
 
   payload:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
--- a/testing/taskcluster/tasks/tests/b2g_mochitest_oop.yml
+++ b/testing/taskcluster/tasks/tests/b2g_mochitest_oop.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Mochitest OOP'
     description: Mochitest OOP test run {{chunk}}
 
   payload:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
--- a/testing/taskcluster/tasks/tests/b2g_reftests.yml
+++ b/testing/taskcluster/tasks/tests/b2g_reftests.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Reftest'
     description: Reftest test run {{chunk}}
 
   payload:
     command:
       - entrypoint
--- a/testing/taskcluster/tasks/tests/b2g_reftests_sanity_oop.yml
+++ b/testing/taskcluster/tasks/tests/b2g_reftests_sanity_oop.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Reftest Sanity OOP'
     description: Reftest Sanity OOP test run {{chunk}}
 
   payload:
     command:
       - entrypoint
new file mode 100644
--- /dev/null
+++ b/testing/taskcluster/tasks/tests/b2g_unittest_base.yml
@@ -0,0 +1,23 @@
+---
+$inherits:
+  from: 'tasks/test.yml'
+task:
+  scopes:
+    - 'docker-worker:cache:tc-vcs'
+    - 'docker-worker:cache:linux-cache'
+    - 'docker-worker:capability:device:loopbackVideo'
+    - 'docker-worker:capability:device:loopbackAudio'
+  payload:
+    cache:
+      # So pip installs are cached...
+      linux-cache: /home/worker/.cache
+      tc-vcs: '/home/worker/.tc-vcs'
+    capabilities:
+      devices:
+        loopbackVideo: true
+        loopbackAudio: true
+    env:
+      GAIA_HEAD_REPOSITORY: '{{{gaia_head_repository}}}'
+      GAIA_BASE_REPOSITORY: '{{{gaia_base_repository}}}'
+      GAIA_REF: '{{{gaia_ref}}}'
+      GAIA_REV: '{{{gaia_rev}}}'
new file mode 100644
--- /dev/null
+++ b/testing/taskcluster/tasks/tests/fx_linux64_mochitest_bc.yml
@@ -0,0 +1,26 @@
+---
+$inherits:
+  from: 'tasks/tests/fx_unittest_base.yml'
+task:
+  scopes:
+    - 'docker-worker:capability:device:loopbackVideo'
+    - 'docker-worker:capability:device:loopbackAudio'
+  metadata:
+    name: '[TC] Linux64 mochitest-browser-chrome M(bc{{chunk}})'
+    description: Mochitest browser-chrome run {{chunk}}
+  payload:
+    capabilities:
+      devices:
+        loopbackVideo: true
+        loopbackAudio: true
+  extra:
+    chunks:
+      total: 7
+    suite:
+      name: mochitest
+      flavor: browser-chrome-chunked
+    treeherder:
+      groupName: Desktop mochitests
+      groupSymbol: tc-M
+      symbol: bc{{chunk}}
+
new file mode 100644
--- /dev/null
+++ b/testing/taskcluster/tasks/tests/fx_linux64_mochitest_dt.yml
@@ -0,0 +1,25 @@
+---
+$inherits:
+  from: 'tasks/tests/fx_unittest_base.yml'
+task:
+  scopes:
+    - 'docker-worker:capability:device:loopbackVideo'
+    - 'docker-worker:capability:device:loopbackAudio'
+  metadata:
+    name: '[TC] Linux64 mochitest-devtools-chrome M(dt{{chunk}})'
+    description: Mochitest devtools-chrome run {{chunk}}
+  payload:
+    capabilities:
+      devices:
+        loopbackVideo: true
+        loopbackAudio: true
+  extra:
+    chunks:
+      total: 2
+    suite:
+      name: mochitest
+      flavor: mochitest-devtools-chrome
+    treeherder:
+      groupName: Desktop mochitests
+      groupSymbol: tc-M
+      symbol: dt{{chunk}}
new file mode 100644
--- /dev/null
+++ b/testing/taskcluster/tasks/tests/fx_linux64_mochitest_gl.yml
@@ -0,0 +1,22 @@
+$inherits:
+  from: 'tasks/tests/fx_unittest_base.yml'
+task:
+  scopes:
+    - 'docker-worker:capability:device:loopbackVideo'
+    - 'docker-worker:capability:device:loopbackAudio'
+  metadata:
+    name: '[TC] Linux64 mochitest-gl M(gl)'
+    description: Mochitest webgl run
+  payload:
+    capabilities:
+      devices:
+        loopbackVideo: true
+        loopbackAudio: true
+  extra:
+    suite:
+      name: mochitest
+      flavor: mochitest-gl
+    treeherder:
+      groupName: Desktop mochitests
+      groupSymbol: tc-M
+      symbol: gl
new file mode 100644
--- /dev/null
+++ b/testing/taskcluster/tasks/tests/fx_linux64_mochitest_plain.yml
@@ -0,0 +1,25 @@
+---
+$inherits:
+  from: 'tasks/tests/fx_unittest_base.yml'
+task:
+  scopes:
+    - 'docker-worker:capability:device:loopbackVideo'
+    - 'docker-worker:capability:device:loopbackAudio'
+  metadata:
+    name: '[TC] Linux64 mochitest-plain {{chunk}}'
+    description: Mochitest plain run {{chunk}}
+  payload:
+    capabilities:
+      devices:
+        loopbackVideo: true
+        loopbackAudio: true
+  extra:
+    chunks:
+      total: 5
+    suite:
+      name: mochitest
+      flavor: plain-chunked
+    treeherder:
+      groupName: Desktop mochitests
+      groupSymbol: tc-M
+      symbol: {{chunk}}
new file mode 100644
--- /dev/null
+++ b/testing/taskcluster/tasks/tests/fx_linux64_reftest.yml
@@ -0,0 +1,17 @@
+---
+$inherits:
+  from: 'tasks/tests/fx_unittest_base.yml'
+task:
+  metadata:
+    name: '[TC] Linux64 reftest {{chunk}}'
+    description: Reftest run {{chunk}}
+  extra:
+    chunks:
+      total: 4
+    suite:
+      name: reftest
+      flavor: reftest
+    treeherder:
+      groupName: Desktop reftest
+      groupSymbol: tc-R
+      symbol: {{chunk}}
new file mode 100644
--- /dev/null
+++ b/testing/taskcluster/tasks/tests/fx_linux64_xpcshell.yml
@@ -0,0 +1,17 @@
+---
+$inherits:
+  from: 'tasks/tests/fx_unittest_base.yml'
+task:
+  metadata:
+    name: '[TC] Linux64 xpcshell {{chunk}}'
+    description: XPCShell run {{chunk}}
+  extra:
+    chunks:
+      total: 2
+    suite:
+      name: xpcshell
+      flavor: xpcshell
+    treeherder:
+      groupName: Desktop xpcshell tests
+      groupSymbol: tc-X
+      symbol: {{chunk}}
new file mode 100644
--- /dev/null
+++ b/testing/taskcluster/tasks/tests/fx_unittest_base.yml
@@ -0,0 +1,34 @@
+---
+$inherits:
+  from: 'tasks/test.yml'
+task:
+  payload:
+    image: '{{#docker_image}}desktop-test{{/docker_image}}'
+    command:
+      - bash
+      - /home/worker/bin/test.sh
+      - --no-read-buildbot-config
+      - --installer-url={{build_url}}
+      - --test-packages-url={{test_packages_url}}
+      - --download-symbols=ondemand
+      - --{{suite}}-suite={{flavor}}
+      - --total-chunk={{total_chunks}}
+      - --this-chunk={{chunk}}
+    env:
+        GECKO_HEAD_REPOSITORY: '{{{head_repository}}}'
+        GECKO_HEAD_REV: '{{{head_rev}}}'
+        MOZHARNESS_SCRIPT: 'mozharness/scripts/desktop_unittest.py'
+        # TODO move linux_unittest.py to a platform specific config
+        MOZHARNESS_CONFIG: >
+          mozharness/configs/unittests/linux_unittest.py
+          mozharness/configs/remove_executables.py
+    artifacts:
+      'public/build':
+        type: directory
+        path: '/home/worker/artifacts/'
+        expires: '{{#from_now}}1 year{{/from_now}}'
+
+  extra:
+    treeherderEnv:
+      - production
+      - staging
--- a/testing/taskcluster/tasks/tests/mulet_build_test.yml
+++ b/testing/taskcluster/tasks/tests/mulet_build_test.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] - Gaia Build Test'
     description: Gaia Build Test test run
 
   payload:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
--- a/testing/taskcluster/tasks/tests/mulet_build_unit.yml
+++ b/testing/taskcluster/tasks/tests/mulet_build_unit.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] - Gaia Build Unit Test'
     description: Gaia Build Unit Test
 
   payload:
     command:
       - entrypoint
--- a/testing/taskcluster/tasks/tests/mulet_gaia_js_integration_tests.yml
+++ b/testing/taskcluster/tasks/tests/mulet_gaia_js_integration_tests.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Mulet Gaia JS Integration Test'
     description: Mulet Gaia JS Integration Test run {{chunk}}
 
   payload:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
--- a/testing/taskcluster/tasks/tests/mulet_gaia_unit.yml
+++ b/testing/taskcluster/tasks/tests/mulet_gaia_unit.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Mulet Gaia Unit Test'
     description: Mulet Gaia Unit Test
 
   payload:
     command:
       - entrypoint
--- a/testing/taskcluster/tasks/tests/mulet_gaia_unit_oop.yml
+++ b/testing/taskcluster/tasks/tests/mulet_gaia_unit_oop.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Mulet Gaia Unit Test OOP'
     description: Mulet Gaia Unit Test OOP
 
   payload:
     command:
       - entrypoint
--- a/testing/taskcluster/tasks/tests/mulet_linter.yml
+++ b/testing/taskcluster/tasks/tests/mulet_linter.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] - Gaia Linter'
     description: Linter Test
 
   payload:
     command:
       - entrypoint
--- a/testing/taskcluster/tasks/tests/mulet_mochitests.yml
+++ b/testing/taskcluster/tasks/tests/mulet_mochitests.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Mulet Mochitests ( {{chunk}} )'
     description: Mulet Mochitest run {{chunk}}
   payload:
     command:
       - entrypoint # entrypoint ensures we are running in xvfb
       - >
--- a/testing/taskcluster/tasks/tests/mulet_reftests.yml
+++ b/testing/taskcluster/tasks/tests/mulet_reftests.yml
@@ -1,11 +1,11 @@
 ---
 $inherits:
-  from: 'tasks/test.yml'
+  from: 'tasks/tests/b2g_unittest_base.yml'
 task:
   metadata:
     name: '[TC] Reftest'
     description: Reftest test run {{chunk}}
 
   payload:
     env:
       MOZ_DISABLE_NONLOCAL_CONNECTIONS: 0