Bug 1181261 - Merge configs from testing/config/mozharness into mozharness proper, r=chmanchester
☠☠ backed out by 639a28373b05 ☠ ☠
authorAndrew Halberstadt <ahalberstadt@mozilla.com>
Fri, 14 Aug 2015 16:54:08 -0400
changeset 258847 28fa968ea46ca3e232b8cfbb4a88e9a492e71b16
parent 258846 22fffeb30cac33f5e2ab5fdb6270ac874374a1ee
child 258848 af522ac9fd4d9f065f0296d4d47be085c682e022
push id29263
push userryanvm@gmail.com
push dateSun, 23 Aug 2015 21:18:49 +0000
treeherdermozilla-central@4ccdd06e51d7 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerschmanchester
bugs1181261
milestone43.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 1181261 - Merge configs from testing/config/mozharness into mozharness proper, r=chmanchester The config files under testing/config/mozharness were created so that certain mozharness options such as test harness arguments could ride the trees, simplifying a lot of logic in mozharness. But now that mozharness itself is in-tree, these configs no longer serve any purpose. Instead they are merged into the main configs at testing/mozharness/configs.
testing/config/mozharness/android_arm_4_3_config.py
testing/config/mozharness/android_arm_config.py
testing/config/mozharness/android_panda_config.py
testing/config/mozharness/android_x86_config.py
testing/config/mozharness/b2g_desktop_config.py
testing/config/mozharness/b2g_emulator_config.py
testing/config/mozharness/linux_config.py
testing/config/mozharness/linux_mulet_config.py
testing/config/mozharness/mac_config.py
testing/config/mozharness/marionette.py
testing/config/mozharness/taskcluster_linux_config.py
testing/config/mozharness/try_arguments.py
testing/config/mozharness/web_platform_tests_config.py
testing/config/mozharness/windows_config.py
testing/mozharness/configs/android/android_panda_releng.py
testing/mozharness/configs/android/androidarm.py
testing/mozharness/configs/android/androidarm_4_3.py
testing/mozharness/configs/android/androidx86.py
testing/mozharness/configs/b2g/desktop_automation_config.py
testing/mozharness/configs/b2g/emulator_automation_config.py
testing/mozharness/configs/b2g/mulet_config.py
testing/mozharness/configs/luciddream/linux_config.py
testing/mozharness/configs/marionette/automation_emulator_config.py
testing/mozharness/configs/marionette/gaia_ui_test_prod_config.py
testing/mozharness/configs/marionette/prod_config.py
testing/mozharness/configs/marionette/test_config.py
testing/mozharness/configs/marionette/windows_config.py
testing/mozharness/configs/unittests/linux_unittest.py
testing/mozharness/configs/unittests/mac_unittest.py
testing/mozharness/configs/unittests/win_unittest.py
testing/mozharness/configs/web_platform_tests/prod_config.py
testing/mozharness/configs/web_platform_tests/prod_config_windows.py
testing/mozharness/configs/web_platform_tests/test_config.py
testing/mozharness/configs/web_platform_tests/test_config_windows.py
testing/mozharness/mozharness/mozilla/testing/testbase.py
testing/mozharness/mozharness/mozilla/testing/try_tools.py
testing/mozharness/scripts/android_emulator_unittest.py
testing/mozharness/scripts/android_panda.py
testing/mozharness/scripts/androidx86_emulator_unittest.py
testing/mozharness/scripts/b2g_desktop_unittest.py
testing/mozharness/scripts/b2g_emulator_unittest.py
testing/mozharness/scripts/desktop_unittest.py
testing/mozharness/scripts/luciddream_unittest.py
testing/mozharness/scripts/marionette.py
testing/mozharness/scripts/mulet_unittest.py
testing/mozharness/scripts/web_platform_tests.py
deleted file mode 100644
--- a/testing/config/mozharness/android_arm_4_3_config.py
+++ /dev/null
@@ -1,154 +0,0 @@
-# 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/.
-
-config = {
-    "suite_definitions": {
-        "mochitest": {
-            "run_filename": "runtestsremote.py",
-            "testsdir": "mochitest",
-            "options": [
-                "--dm_trans=adb",
-                "--app=%(app)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--certificate-path=%(certs_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--screenshot-on-fail",
-            ],
-        },
-        "mochitest-gl": {
-            "run_filename": "runtestsremote.py",
-            "testsdir": "mochitest",
-            "options": [
-                "--dm_trans=adb",
-                "--app=%(app)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--certificate-path=%(certs_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--screenshot-on-fail",
-                "--total-chunks=4",
-                "--subsuite=webgl",
-            ],
-        },
-        "robocop": {
-            "run_filename": "runrobocop.py",
-            "testsdir": "mochitest",
-            "options": [
-                "--dm_trans=adb",
-                "--app=%(app)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--certificate-path=%(certs_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--total-chunks=4",
-                "--robocop-apk=../../robocop.apk",
-                "--robocop-ini=robocop.ini",
-            ],
-        },
-        "reftest": {
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest",
-            "options": [
-                "--app=%(app)s",
-                "--ignore-window-size",
-                "--dm_trans=adb",
-                "--bootstrap",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--httpd-path", "%(modules_dir)s",
-                "--symbols-path=%(symbols_path)s",
-                "--total-chunks=16",
-                "tests/layout/reftests/reftest.list",
-            ],
-        },
-        "crashtest": {
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest",
-            "options": [
-                "--app=%(app)s",
-                "--ignore-window-size",
-                "--dm_trans=adb",
-                "--bootstrap",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--httpd-path",
-                "%(modules_dir)s",
-                "--symbols-path=%(symbols_path)s",
-                "--total-chunks=2",
-                "tests/testing/crashtest/crashtests.list",
-            ],
-        },
-        "jsreftest": {
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest",
-            "options": [
-                "--app=%(app)s",
-                "--ignore-window-size",
-                "--dm_trans=adb",
-                "--bootstrap",
-                "--remote-webserver=%(remote_webserver)s", "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s", "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s", "--httpd-path", "%(modules_dir)s",
-                "--symbols-path=%(symbols_path)s",
-                "../jsreftest/tests/jstests.list",
-                "--total-chunks=6",
-                "--extra-profile-file=jsreftest/tests/user.js",
-            ],
-        },
-        "xpcshell": {
-            "run_filename": "remotexpcshelltests.py",
-            "testsdir": "xpcshell",
-            "options": [
-                "--dm_trans=adb",
-                "--xre-path=%(xre_path)s",
-                "--testing-modules-dir=%(modules_dir)s",
-                "--apk=%(installer_path)s",
-                "--no-logfiles",
-                "--symbols-path=%(symbols_path)s",
-                "--manifest=tests/xpcshell.ini",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--total-chunks=3",
-            ],
-        },
-        "cppunittest": {
-            "run_filename": "remotecppunittests.py",
-            "testsdir": "cppunittest",
-            "options": [
-                "--symbols-path=%(symbols_path)s",
-                "--xre-path=%(xre_path)s",
-                "--dm_trans=adb",
-                "--localBinDir=../bin",
-                "--apk=%(installer_path)s",
-                ".",
-            ],
-        },
-
-    }, # end suite_definitions
-}
deleted file mode 100644
--- a/testing/config/mozharness/android_arm_config.py
+++ /dev/null
@@ -1,156 +0,0 @@
-# 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/.
-
-config = {
-    "suite_definitions": {
-        "mochitest": {
-            "run_filename": "runtestsremote.py",
-            "testsdir": "mochitest",
-            "options": [
-                "--dm_trans=sut",
-                "--app=%(app)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--deviceIP=%(device_ip)s",
-                "--devicePort=%(device_port)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--certificate-path=%(certs_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--screenshot-on-fail",
-            ],
-        },
-        "mochitest-gl": {
-            "run_filename": "runtestsremote.py",
-            "testsdir": "mochitest",
-            "options": [
-                "--dm_trans=sut",
-                "--app=%(app)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--deviceIP=%(device_ip)s",
-                "--devicePort=%(device_port)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--certificate-path=%(certs_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--screenshot-on-fail",
-                "--total-chunks=4",
-                "--subsuite=webgl",
-            ],
-        },
-        "robocop": {
-            "run_filename": "runrobocop.py",
-            "testsdir": "mochitest",
-            "options": [
-                "--dm_trans=sut",
-                "--app=%(app)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--deviceIP=%(device_ip)s",
-                "--devicePort=%(device_port)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--certificate-path=%(certs_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--total-chunks=4",
-                "--robocop-apk=../../robocop.apk",
-                "--robocop-ini=robocop.ini",
-            ],
-        },
-        "reftest": {
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest",
-            "options": [
-                "--app=%(app)s",
-                "--ignore-window-size",
-                "--bootstrap",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--deviceIP=%(device_ip)s",
-                "--devicePort=%(device_port)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--httpd-path",
-                "%(modules_dir)s",
-                "--symbols-path=%(symbols_path)s",
-                "--total-chunks=16",
-                "tests/layout/reftests/reftest.list",
-            ],
-        },
-        "crashtest": {
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest",
-            "options": [
-                "--app=%(app)s",
-                "--ignore-window-size",
-                "--bootstrap",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--deviceIP=%(device_ip)s",
-                "--devicePort=%(device_port)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--httpd-path",
-                "%(modules_dir)s",
-                "--symbols-path=%(symbols_path)s",
-                "--total-chunks=2",
-                "tests/testing/crashtest/crashtests.list",
-            ],
-        },
-        "jsreftest": {
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest",
-            "options": [
-                "--app=%(app)s",
-                "--ignore-window-size",
-                "--bootstrap",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--utility-path=%(utility_path)s",
-                "--deviceIP=%(device_ip)s",
-                "--devicePort=%(device_port)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--httpd-path",
-                "%(modules_dir)s",
-                "--symbols-path=%(symbols_path)s",
-                "../jsreftest/tests/jstests.list",
-                "--total-chunks=6",
-                "--extra-profile-file=jsreftest/tests/user.js",
-            ],
-        },
-        "xpcshell": {
-            "run_filename": "remotexpcshelltests.py",
-            "testsdir": "xpcshell",
-            "options": [
-                "--deviceIP=%(device_ip)s",
-                "--devicePort=%(device_port)s",
-                "--xre-path=%(xre_path)s",
-                "--testing-modules-dir=%(modules_dir)s",
-                "--apk=%(installer_path)s",
-                "--no-logfiles",
-                "--symbols-path=%(symbols_path)s",
-                "--manifest=tests/xpcshell.ini",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--total-chunks=3",
-            ],
-        },
-    }, # end suite_definitions
-}
deleted file mode 100644
--- a/testing/config/mozharness/android_panda_config.py
+++ /dev/null
@@ -1,140 +0,0 @@
-# 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/.
-
-config = {
-    "suite_definitions": {
-        "cppunittest": {
-            "options": [
-                "--symbols-path=%(symbols_path)s",
-                "--xre-path=tests/bin",
-                "--dm_trans=sut",
-                "--deviceIP=%(device_ip)s",
-                "--localBinDir=../tests/bin",
-                "--apk=%(apk_path)s",
-                "--skip-manifest=../tests/cppunittests/android_cppunittest_manifest.txt"
-            ],
-            "run_filename": "remotecppunittests.py",
-            "testsdir": "cppunittest"
-        },
-        "crashtest": {
-            "options": [
-                "--deviceIP=%(device_ip)s",
-                "--xre-path=../hostutils/xre",
-                "--utility-path=../hostutils/bin",
-                "--app=%(app_name)s",
-                "--ignore-window-size",
-                "--bootstrap",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--symbols-path=%(symbols_path)s",
-                "reftest/tests/testing/crashtest/crashtests.list"
-            ],
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest"
-        },
-        "jittest": {
-            "options": [
-                "bin/js",
-                "--remote",
-                "-j",
-                "1",
-                "--deviceTransport=sut",
-                "--deviceIP=%(device_ip)s",
-                "--localLib=../tests/bin",
-                "--no-slow",
-                "--no-progress",
-                "--format=automation",
-                "--jitflags=all"
-            ],
-            "run_filename": "jit_test.py",
-            "testsdir": "jit-test/jit-test"
-        },
-        "jsreftest": {
-            "options": [
-                "--deviceIP=%(device_ip)s",
-                "--xre-path=../hostutils/xre",
-                "--utility-path=../hostutils/bin",
-                "--app=%(app_name)s",
-                "--ignore-window-size",
-                "--bootstrap",
-                "--extra-profile-file=jsreftest/tests/user.js",
-                "jsreftest/tests/jstests.list",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--symbols-path=%(symbols_path)s"
-            ],
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest"
-        },
-        "mochitest": {
-            "options": [
-                "--dm_trans=sut",
-                "--deviceIP=%(device_ip)s",
-                "--xre-path=../hostutils/xre",
-                "--utility-path=../hostutils/bin",
-                "--certificate-path=certs",
-                "--app=%(app_name)s",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--symbols-path=%(symbols_path)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--screenshot-on-fail",
-            ],
-            "run_filename": "runtestsremote.py",
-            "testsdir": "mochitest"
-        },
-        "reftest": {
-            "options": [
-                "--deviceIP=%(device_ip)s",
-                "--xre-path=../hostutils/xre",
-                "--utility-path=../hostutils/bin",
-                "--app=%(app_name)s",
-                "--ignore-window-size",
-                "--bootstrap",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--symbols-path=%(symbols_path)s",
-                "reftest/tests/layout/reftests/reftest.list"
-            ],
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest"
-        },
-        "robocop": {
-            "options": [
-                "--dm_trans=sut",
-                "--deviceIP=%(device_ip)s",
-                "--xre-path=../hostutils/xre",
-                "--utility-path=../hostutils/bin",
-                "--certificate-path=certs",
-                "--app=%(app_name)s",
-                "--console-level=INFO",
-                "--http-port=%(http_port)s",
-                "--ssl-port=%(ssl_port)s",
-                "--symbols-path=%(symbols_path)s",
-                "--robocop-ini=mochitest/robocop.ini"
-            ],
-            "run_filename": "runrobocop.py",
-            "testsdir": "mochitest"
-        },
-        "xpcshell": {
-            "options": [
-                "--deviceIP=%(device_ip)s",
-                "--xre-path=../hostutils/xre",
-                "--manifest=xpcshell/tests/xpcshell.ini",
-                "--build-info-json=xpcshell/mozinfo.json",
-                "--testing-modules-dir=modules",
-                "--local-lib-dir=../fennec",
-                "--apk=../%(apk_name)s",
-                "--no-logfiles",
-                "--symbols-path=%(symbols_path)s",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-            ],
-            "run_filename": "remotexpcshelltests.py",
-            "testsdir": "xpcshell"
-        }
-    }
-}
deleted file mode 100644
--- a/testing/config/mozharness/android_x86_config.py
+++ /dev/null
@@ -1,57 +0,0 @@
-# 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/.
-
-config = {
-    "suite_definitions": {
-        "mochitest": {
-            "run_filename": "runtestsremote.py",
-            "options": ["--dm_trans=sut",
-                        "--app=%(app)s",
-                        "--remote-webserver=%(remote_webserver)s",
-                        "--xre-path=%(xre_path)s",
-                        "--utility-path=%(utility_path)s",
-                        "--deviceIP=%(device_ip)s",
-                        "--devicePort=%(device_port)s",
-                        "--http-port=%(http_port)s",
-                        "--ssl-port=%(ssl_port)s",
-                        "--certificate-path=%(certs_path)s",
-                        "--symbols-path=%(symbols_path)s",
-                        "--quiet",
-                        "--log-raw=%(raw_log_file)s",
-                        "--log-errorsummary=%(error_summary_file)s",
-                        "--screenshot-on-fail",
-                    ],
-        },
-        "reftest": {
-            "run_filename": "remotereftest.py",
-            "options": ["--app=%(app)s",
-                        "--ignore-window-size",
-                        "--bootstrap",
-                        "--remote-webserver=%(remote_webserver)s",
-                        "--xre-path=%(xre_path)s",
-                        "--utility-path=%(utility_path)s",
-                        "--deviceIP=%(device_ip)s",
-                        "--devicePort=%(device_port)s",
-                        "--http-port=%(http_port)s",
-                        "--ssl-port=%(ssl_port)s",
-                        "--httpd-path", "%(modules_dir)s",
-                        "--symbols-path=%(symbols_path)s",
-                    ],
-        },
-        "xpcshell": {
-            "run_filename": "remotexpcshelltests.py",
-            "options": ["--deviceIP=%(device_ip)s",
-                        "--devicePort=%(device_port)s",
-                        "--xre-path=%(xre_path)s",
-                        "--testing-modules-dir=%(modules_dir)s",
-                        "--apk=%(installer_path)s",
-                        "--no-logfiles",
-                        "--symbols-path=%(symbols_path)s",
-                        "--manifest=tests/xpcshell.ini",
-                        "--log-raw=%(raw_log_file)s",
-                        "--log-errorsummary=%(error_summary_file)s",
-                    ],
-        },
-    }, # end suite_definitions
-}
deleted file mode 100644
--- a/testing/config/mozharness/b2g_desktop_config.py
+++ /dev/null
@@ -1,41 +0,0 @@
-# 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/.
-
-config = {
-    "suite_definitions": {
-        "mochitest": {
-            "options": [
-                "--total-chunks=%(total_chunks)s",
-                "--this-chunk=%(this_chunk)s",
-                "--profile=%(gaia_profile)s",
-                "--app=%(application)s",
-                "--desktop",
-                "--utility-path=%(utility_path)s",
-                "--certificate-path=%(cert_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--browser-arg=%(browser_arg)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--screenshot-on-fail",
-            ],
-            "run_filename": "runtestsb2g.py",
-            "testsdir": "mochitest"
-        },
-        "reftest": {
-            "options": [
-                "--desktop",
-                "--profile=%(gaia_profile)s",
-                "--appname=%(application)s",
-                "--total-chunks=%(total_chunks)s",
-                "--this-chunk=%(this_chunk)s",
-                "--browser-arg=%(browser_arg)s",
-                "--symbols-path=%(symbols_path)s",
-                "%(test_manifest)s"
-            ],
-            "run_filename": "runreftestsb2g.py",
-            "testsdir": "reftest"
-        }
-    }
-}
deleted file mode 100644
--- a/testing/config/mozharness/b2g_emulator_config.py
+++ /dev/null
@@ -1,144 +0,0 @@
-# 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/.
-
-config = {
-    "suite_definitions": {
-        "cppunittest": {
-            "options": [
-                "--dm_trans=adb",
-                "--symbols-path=%(symbols_path)s",
-                "--xre-path=%(xre_path)s",
-                "--addEnv",
-                "LD_LIBRARY_PATH=/vendor/lib:/system/lib:/system/b2g",
-                "--with-b2g-emulator=%(b2gpath)s",
-                "."
-            ],
-            "run_filename": "remotecppunittests.py",
-            "testsdir": "cppunittest"
-        },
-        "crashtest": {
-            "options": [
-                "--adbpath=%(adbpath)s",
-                "--b2gpath=%(b2gpath)s",
-                "--emulator=%(emulator)s",
-                "--emulator-res=800x1000",
-                "--logdir=%(logcat_dir)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--ignore-window-size",
-                "--xre-path=%(xre_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--busybox=%(busybox)s",
-                "--total-chunks=%(total_chunks)s",
-                "--this-chunk=%(this_chunk)s",
-                "tests/testing/crashtest/crashtests.list"
-            ],
-            "run_filename": "runreftestb2g.py",
-            "testsdir": "reftest"
-        },
-        "jsreftest": {
-            "options": [
-                "--adbpath=%(adbpath)s",
-                "--b2gpath=%(b2gpath)s",
-                "--emulator=%(emulator)s",
-                "--emulator-res=800x1000",
-                "--logdir=%(logcat_dir)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--ignore-window-size",
-                "--xre-path=%(xre_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--busybox=%(busybox)s",
-                "--total-chunks=%(total_chunks)s",
-                "--this-chunk=%(this_chunk)s",
-                "--extra-profile-file=jsreftest/tests/user.js",
-                "jsreftest/tests/jstests.list"
-            ],
-            "run_filename": "remotereftest.py",
-            "testsdir": "reftest"
-        },
-        "mochitest": {
-            "options": [
-                "--adbpath=%(adbpath)s",
-                "--b2gpath=%(b2gpath)s",
-                "--emulator=%(emulator)s",
-                "--logdir=%(logcat_dir)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--busybox=%(busybox)s",
-                "--total-chunks=%(total_chunks)s",
-                "--this-chunk=%(this_chunk)s",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--certificate-path=%(certificate_path)s",
-                "--screenshot-on-fail",
-                "%(test_path)s"
-            ],
-            "run_filename": "runtestsb2g.py",
-            "testsdir": "mochitest"
-        },
-        "mochitest-chrome": {
-            "options": [
-                "--adbpath=%(adbpath)s",
-                "--b2gpath=%(b2gpath)s",
-                "--emulator=%(emulator)s",
-                "--logdir=%(logcat_dir)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--xre-path=%(xre_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--busybox=%(busybox)s",
-                "--total-chunks=%(total_chunks)s",
-                "--this-chunk=%(this_chunk)s",
-                "--quiet",
-                "--chrome",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--certificate-path=%(certificate_path)s",
-                "--screenshot-on-fail",
-                "%(test_path)s"
-            ],
-            "run_filename": "runtestsb2g.py",
-            "testsdir": "mochitest"
-        },
-        "reftest": {
-            "options": [
-                "--adbpath=%(adbpath)s",
-                "--b2gpath=%(b2gpath)s",
-                "--emulator=%(emulator)s",
-                "--emulator-res=800x1000",
-                "--logdir=%(logcat_dir)s",
-                "--remote-webserver=%(remote_webserver)s",
-                "--ignore-window-size",
-                "--xre-path=%(xre_path)s",
-                "--symbols-path=%(symbols_path)s",
-                "--busybox=%(busybox)s",
-                "--total-chunks=%(total_chunks)s",
-                "--this-chunk=%(this_chunk)s",
-                "--enable-oop",
-                "tests/layout/reftests/reftest.list"
-            ],
-            "run_filename": "runreftestsb2g.py",
-            "testsdir": "reftest"
-        },
-        "xpcshell": {
-            "options": [
-                "--adbpath=%(adbpath)s",
-                "--b2gpath=%(b2gpath)s",
-                "--emulator=%(emulator)s",
-                "--logdir=%(logcat_dir)s",
-                "--manifest=tests/xpcshell.ini",
-                "--use-device-libs",
-                "--testing-modules-dir=%(modules_dir)s",
-                "--symbols-path=%(symbols_path)s",
-                "--busybox=%(busybox)s",
-                "--total-chunks=%(total_chunks)s",
-                "--this-chunk=%(this_chunk)s",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-            ],
-            "run_filename": "runtestsb2g.py",
-            "testsdir": "xpcshell"
-        }
-    }
-}
deleted file mode 100644
--- a/testing/config/mozharness/linux_config.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# 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/.
-
-config = {
-    "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"
-            ],
-            "run_filename": "jit_test.py",
-            "testsdir": "jit-test/jit-test"
-        },
-        "luciddream-emulator": {
-            "options": [
-                "--startup-timeout=300",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--browser-path=%(browser_path)s",
-                "--b2gpath=%(emulator_path)s",
-                "%(test_manifest)s"
-            ],
-        },
-        "luciddream-b2gdt": {
-            "options": [
-                "--startup-timeout=300",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--browser-path=%(browser_path)s",
-                "--b2g-desktop-path=%(fxos_desktop_path)s",
-                "--gaia-profile=%(gaia_profile)s",
-                "%(test_manifest)s"
-            ],
-        },
-        "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",
-                "--setpref=webgl.force-enabled=true",
-                "--quiet",
-                "--log-raw=%(raw_log_file)s",
-                "--log-errorsummary=%(error_summary_file)s",
-                "--use-test-media-devices",
-                "--screenshot-on-fail",
-            ],
-            "run_filename": "runtests.py",
-            "testsdir": "mochitest"
-        },
-        "mozbase": {
-            "options": [
-                "-b",
-                "%(binary_path)s"
-            ],
-            "run_filename": "test.py",
-            "testsdir": "mozbase"
-        },
-        "mozmill": {
-            "options": [
-                "--binary=%(binary_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"
-            ],
-            "run_filename": "runreftest.py",
-            "testsdir": "reftest"
-        },
-        "webapprt": {
-            "options": [
-                "--app=%(app_path)s",
-                "--utility-path=tests/bin",
-                "--extra-profile-file=tests/bin/plugins",
-                "--symbols-path=%(symbols_path)s",
-                "--certificate-path=tests/certs",
-                "--console-level=INFO",
-                "--testing-modules-dir=tests/modules",
-                "--quiet"
-            ],
-            "run_filename": "runtests.py",
-            "testsdir": "mochitest"
-        },
-        "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"
-        }
-    }
-}
deleted file mode 100644
--- a/testing/config/mozharness/linux_mulet_config.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# This is used by mozharness' mulet_unittest.py
-config = {
-    # testsuite options
-    "reftest_options": [
-        "--mulet",
-        "--profile=%(gaia_profile)s",
-        "--appname=%(application)s",
-        "--total-chunks=%(total_chunks)s",
-        "--this-chunk=%(this_chunk)s",
-        "--symbols-path=%(symbols_path)s",
-        "--enable-oop",
-        "%(test_manifest)s"
-    ],
-    "run_file_names": {
-        "reftest": "runreftestb2g.py",
-    },
-}
deleted file mode 100644
--- a/testing/config/mozharness/mac_config.py
+++ /dev/null
@@ -1,94 +0,0 @@
-# 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/.
-
-config = {
-    "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"
-            ],
-            "run_filename": "jit_test.py",
-            "testsdir": "jit-test/jit-test"
-        },
-        "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",
-            ],
-            "run_filename": "runtests.py",
-            "testsdir": "mochitest"
-        },
-        "mozbase": {
-            "options": [
-                "-b",
-                "%(binary_path)s"
-            ],
-            "run_filename": "test.py",
-            "testsdir": "mozbase"
-        },
-        "mozmill": {
-            "options": [
-                "--binary=%(binary_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"
-            ],
-            "run_filename": "runreftest.py",
-            "testsdir": "reftest"
-        },
-        "webapprt": {
-            "options": [
-                "--app=%(app_path)s",
-                "--xre-path=%(abs_res_dir)s",
-                "--utility-path=tests/bin",
-                "--extra-profile-file=tests/bin/plugins",
-                "--symbols-path=%(symbols_path)s",
-                "--certificate-path=tests/certs",
-                "--console-level=INFO",
-                "--testing-modules-dir=tests/modules",
-                "--quiet"
-            ],
-            "run_filename": "runtests.py",
-            "testsdir": "mochitest"
-        },
-        "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"
-        }
-    }
-}
deleted file mode 100644
--- a/testing/config/mozharness/marionette.py
+++ /dev/null
@@ -1,91 +0,0 @@
-# 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/.
-
-config = {
-    "suite_definitions": {
-        "gaiatest_desktop": {
-            "options": [
-                "--restart",
-                "--timeout=%(timeout)s",
-                "--type=%(type)s",
-                "--testvars=%(testvars)s",
-                "--profile=%(profile)s",
-                "--symbols-path=%(symbols_path)s",
-                "--gecko-log=%(gecko_log)s",
-                "--xml-output=%(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",
-                "--type=%(type)s",
-                "--testvars=%(testvars)s",
-                "--profile=%(profile)s",
-                "--symbols-path=%(symbols_path)s",
-                "--xml-output=%(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": [
-                "--type=%(type)s",
-                "--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": [
-                "--type=%(type)s",
-                "--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": [
-                "--type=%(type)s",
-                "--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": ""
-        }
-    }
-}
deleted file mode 100644
--- a/testing/config/mozharness/taskcluster_linux_config.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# 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/.
-
-config = {
-    "reftest_options": [
-        "--appname=%(binary_path)s",
-        "--utility-path=tests/bin",
-        "--extra-profile-file=tests/bin/plugins",
-        "--symbols-path=%(symbols_path)s"
-    ],
-    "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",
-        "--setpref=webgl.force-enabled=true",
-        "--quiet",
-        "--log-raw=%(raw_log_file)s",
-        "--log-errorsummary=%(error_summary_file)s",
-        "--screenshot-on-fail",
-    ],
-    "webapprt_options": [
-        "--app=%(app_path)s",
-        "--utility-path=tests/bin",
-        "--extra-profile-file=tests/bin/plugins",
-        "--symbols-path=%(symbols_path)s",
-        "--certificate-path=tests/certs",
-        "--console-level=INFO",
-        "--testing-modules-dir=tests/modules",
-        "--quiet"
-    ],
-    "xpcshell_options": [
-        "--symbols-path=%(symbols_path)s",
-        "--test-plugin-path=%(test_plugin_path)s"
-    ],
-    "cppunittest_options": [
-        "--symbols-path=%(symbols_path)s",
-        "--xre-path=%(abs_app_dir)s"
-    ],
-    "jittest_options": [
-        "tests/bin/js",
-        "--no-slow",
-        "--no-progress",
-        "--format=automation",
-        "--jitflags=all"
-    ],
-    "mozbase_options": [
-        "-b", "%(binary_path)s"
-    ],
-}
deleted file mode 100644
--- a/testing/config/mozharness/try_arguments.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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/.
-
-# Because this list exposes new surface to our interface to try, and could
-# easily produce unexpected results if misused, this should only include
-# arguments likely to work with multiple harnesses, and will have unintended
-# effects if conflicts with TryParser are introduced.
-config = {
-    '--tag': {
-        'action': 'append',
-        'dest': 'tags',
-        'default': None,
-    },
-}
deleted file mode 100644
--- a/testing/config/mozharness/web_platform_tests_config.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# 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/.
-
-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",
-    ],
-}
deleted file mode 100644
--- a/testing/config/mozharness/windows_config.py
+++ /dev/null
@@ -1,93 +0,0 @@
-# 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/.
-
-config = {
-    "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"
-            ],
-            "run_filename": "jit_test.py",
-            "testsdir": "jit-test/jit-test"
-        },
-        "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",
-            ],
-            "run_filename": "runtests.py",
-            "testsdir": "mochitest"
-        },
-        "mozbase": {
-            "options": [
-                "-b",
-                "%(binary_path)s"
-            ],
-            "run_filename": "test.py",
-            "testsdir": "mozbase"
-        },
-        "mozmill": {
-            "options": [
-                "--binary=%(binary_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"
-            ],
-            "run_filename": "runreftest.py",
-            "testsdir": "reftest"
-        },
-        "webapprt": {
-            "options": [
-                "--app=%(app_path)s",
-                "--utility-path=tests/bin",
-                "--extra-profile-file=tests/bin/plugins",
-                "--symbols-path=%(symbols_path)s",
-                "--certificate-path=tests/certs",
-                "--console-level=INFO",
-                "--testing-modules-dir=tests/modules",
-                "--quiet"
-            ],
-            "run_filename": "runtests.py",
-            "testsdir": "mochitest"
-        },
-        "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"
-        }
-    }
-}
--- a/testing/mozharness/configs/android/android_panda_releng.py
+++ b/testing/mozharness/configs/android/android_panda_releng.py
@@ -9,18 +9,16 @@ config = {
     "exes": {
         'python': '/tools/buildbot/bin/python',
         'virtualenv': ['/tools/buildbot/bin/python', '/tools/misc-python/virtualenv.py'],
     },
     "hostutils_url":  "http://talos-remote.pvt.build.mozilla.org/tegra/tegra-host-utils.Linux.1109310.2.zip",
     "verify_path":  "/builds/sut_tools/verify.py",
     "install_app_path":  "/builds/sut_tools/installApp.py",
     "logcat_path":  "/builds/sut_tools/logcat.py",
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/android_panda_config.py",
     "all_mochitest_suites": {
         "mochitest-1": ["--total-chunks=8", "--this-chunk=1"],
         "mochitest-2": ["--total-chunks=8", "--this-chunk=2"],
         "mochitest-3": ["--total-chunks=8", "--this-chunk=3"],
         "mochitest-4": ["--total-chunks=8", "--this-chunk=4"],
         "mochitest-5": ["--total-chunks=8", "--this-chunk=5"],
         "mochitest-6": ["--total-chunks=8", "--this-chunk=6"],
         "mochitest-7": ["--total-chunks=8", "--this-chunk=7"],
@@ -69,16 +67,150 @@ config = {
     },
     "all_cppunittest_suites": {
         "cppunittest": ['cppunittest']
     },
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
+    "suite_definitions": {
+        "cppunittest": {
+            "options": [
+                "--symbols-path=%(symbols_path)s",
+                "--xre-path=tests/bin",
+                "--dm_trans=sut",
+                "--deviceIP=%(device_ip)s",
+                "--localBinDir=../tests/bin",
+                "--apk=%(apk_path)s",
+                "--skip-manifest=../tests/cppunittests/android_cppunittest_manifest.txt"
+            ],
+            "run_filename": "remotecppunittests.py",
+            "testsdir": "cppunittest"
+        },
+        "crashtest": {
+            "options": [
+                "--deviceIP=%(device_ip)s",
+                "--xre-path=../hostutils/xre",
+                "--utility-path=../hostutils/bin",
+                "--app=%(app_name)s",
+                "--ignore-window-size",
+                "--bootstrap",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--symbols-path=%(symbols_path)s",
+                "reftest/tests/testing/crashtest/crashtests.list"
+            ],
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest"
+        },
+        "jittest": {
+            "options": [
+                "bin/js",
+                "--remote",
+                "-j",
+                "1",
+                "--deviceTransport=sut",
+                "--deviceIP=%(device_ip)s",
+                "--localLib=../tests/bin",
+                "--no-slow",
+                "--no-progress",
+                "--format=automation",
+                "--jitflags=all"
+            ],
+            "run_filename": "jit_test.py",
+            "testsdir": "jit-test/jit-test"
+        },
+        "jsreftest": {
+            "options": [
+                "--deviceIP=%(device_ip)s",
+                "--xre-path=../hostutils/xre",
+                "--utility-path=../hostutils/bin",
+                "--app=%(app_name)s",
+                "--ignore-window-size",
+                "--bootstrap",
+                "--extra-profile-file=jsreftest/tests/user.js",
+                "jsreftest/tests/jstests.list",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--symbols-path=%(symbols_path)s"
+            ],
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest"
+        },
+        "mochitest": {
+            "options": [
+                "--dm_trans=sut",
+                "--deviceIP=%(device_ip)s",
+                "--xre-path=../hostutils/xre",
+                "--utility-path=../hostutils/bin",
+                "--certificate-path=certs",
+                "--app=%(app_name)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--symbols-path=%(symbols_path)s",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--screenshot-on-fail",
+            ],
+            "run_filename": "runtestsremote.py",
+            "testsdir": "mochitest"
+        },
+        "reftest": {
+            "options": [
+                "--deviceIP=%(device_ip)s",
+                "--xre-path=../hostutils/xre",
+                "--utility-path=../hostutils/bin",
+                "--app=%(app_name)s",
+                "--ignore-window-size",
+                "--bootstrap",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--symbols-path=%(symbols_path)s",
+                "reftest/tests/layout/reftests/reftest.list"
+            ],
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest"
+        },
+        "robocop": {
+            "options": [
+                "--dm_trans=sut",
+                "--deviceIP=%(device_ip)s",
+                "--xre-path=../hostutils/xre",
+                "--utility-path=../hostutils/bin",
+                "--certificate-path=certs",
+                "--app=%(app_name)s",
+                "--console-level=INFO",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--symbols-path=%(symbols_path)s",
+                "--robocop-ini=mochitest/robocop.ini"
+            ],
+            "run_filename": "runrobocop.py",
+            "testsdir": "mochitest"
+        },
+        "xpcshell": {
+            "options": [
+                "--deviceIP=%(device_ip)s",
+                "--xre-path=../hostutils/xre",
+                "--manifest=xpcshell/tests/xpcshell.ini",
+                "--build-info-json=xpcshell/mozinfo.json",
+                "--testing-modules-dir=modules",
+                "--local-lib-dir=../fennec",
+                "--apk=../%(apk_name)s",
+                "--no-logfiles",
+                "--symbols-path=%(symbols_path)s",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+            ],
+            "run_filename": "remotexpcshelltests.py",
+            "testsdir": "xpcshell"
+        }
+    },
     "pip_index": False,
     "buildbot_json_path": "buildprops.json",
     "mobile_imaging_format": "http://mobile-imaging",
     "mozpool_assignee": socket.gethostname(),
     "default_actions": [
         'clobber',
         'read-buildbot-config',
         'download-and-extract',
--- a/testing/mozharness/configs/android/androidarm.py
+++ b/testing/mozharness/configs/android/androidarm.py
@@ -49,16 +49,166 @@ config = {
             "name": "test-1",
             "device_id": "emulator-5554",
             "http_port": "8854", # starting http port to use for the mochitest server
             "ssl_port": "4454", # starting ssl port to use for the server
             "emulator_port": 5554,
             "sut_port1": 20701,
             "sut_port2": 20700
         },
+    "suite_definitions": {
+        "mochitest": {
+            "run_filename": "runtestsremote.py",
+            "testsdir": "mochitest",
+            "options": [
+                "--dm_trans=sut",
+                "--app=%(app)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--deviceIP=%(device_ip)s",
+                "--devicePort=%(device_port)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--certificate-path=%(certs_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--screenshot-on-fail",
+            ],
+        },
+        "mochitest-gl": {
+            "run_filename": "runtestsremote.py",
+            "testsdir": "mochitest",
+            "options": [
+                "--dm_trans=sut",
+                "--app=%(app)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--deviceIP=%(device_ip)s",
+                "--devicePort=%(device_port)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--certificate-path=%(certs_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--screenshot-on-fail",
+                "--total-chunks=4",
+                "--subsuite=webgl",
+            ],
+        },
+        "robocop": {
+            "run_filename": "runrobocop.py",
+            "testsdir": "mochitest",
+            "options": [
+                "--dm_trans=sut",
+                "--app=%(app)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--deviceIP=%(device_ip)s",
+                "--devicePort=%(device_port)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--certificate-path=%(certs_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--total-chunks=4",
+                "--robocop-apk=../../robocop.apk",
+                "--robocop-ini=robocop.ini",
+            ],
+        },
+        "reftest": {
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest",
+            "options": [
+                "--app=%(app)s",
+                "--ignore-window-size",
+                "--bootstrap",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--deviceIP=%(device_ip)s",
+                "--devicePort=%(device_port)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--httpd-path",
+                "%(modules_dir)s",
+                "--symbols-path=%(symbols_path)s",
+                "--total-chunks=16",
+                "tests/layout/reftests/reftest.list",
+            ],
+        },
+        "crashtest": {
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest",
+            "options": [
+                "--app=%(app)s",
+                "--ignore-window-size",
+                "--bootstrap",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--deviceIP=%(device_ip)s",
+                "--devicePort=%(device_port)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--httpd-path",
+                "%(modules_dir)s",
+                "--symbols-path=%(symbols_path)s",
+                "--total-chunks=2",
+                "tests/testing/crashtest/crashtests.list",
+            ],
+        },
+        "jsreftest": {
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest",
+            "options": [
+                "--app=%(app)s",
+                "--ignore-window-size",
+                "--bootstrap",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--deviceIP=%(device_ip)s",
+                "--devicePort=%(device_port)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--httpd-path",
+                "%(modules_dir)s",
+                "--symbols-path=%(symbols_path)s",
+                "../jsreftest/tests/jstests.list",
+                "--total-chunks=6",
+                "--extra-profile-file=jsreftest/tests/user.js",
+            ],
+        },
+        "xpcshell": {
+            "run_filename": "remotexpcshelltests.py",
+            "testsdir": "xpcshell",
+            "options": [
+                "--deviceIP=%(device_ip)s",
+                "--devicePort=%(device_port)s",
+                "--xre-path=%(xre_path)s",
+                "--testing-modules-dir=%(modules_dir)s",
+                "--apk=%(installer_path)s",
+                "--no-logfiles",
+                "--symbols-path=%(symbols_path)s",
+                "--manifest=tests/xpcshell.ini",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--total-chunks=3",
+            ],
+        },
+    }, # end suite_definitions
     "test_suite_definitions": {
         "jsreftest-1": {
             "category": "jsreftest",
             "extra_args": ["--this-chunk=1"],
         },
         "jsreftest-2": {
             "category": "jsreftest",
             "extra_args": ["--this-chunk=2"],
@@ -275,16 +425,14 @@ config = {
             "category": "robocop",
             "extra_args": ["--this-chunk=3"],
         },
         "robocop-4": {
             "category": "robocop",
             "extra_args": ["--this-chunk=4"],
         },
     }, # end of "test_definitions"
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/android_arm_config.py",
     "download_minidump_stackwalk": True,
     "default_blob_upload_servers": [
          "https://blobupload.elasticbeanstalk.com",
     ],
     "blob_uploader_auth_file" : os.path.join(os.getcwd(), "oauth.txt"),
 }
--- a/testing/mozharness/configs/android/androidarm_4_3.py
+++ b/testing/mozharness/configs/android/androidarm_4_3.py
@@ -55,16 +55,164 @@ config = {
     ],
     "emulator": {
             "name": "test-1",
             "device_id": "emulator-5554",
             "http_port": "8854", # starting http port to use for the mochitest server
             "ssl_port": "4454", # starting ssl port to use for the server
             "emulator_port": 5554,
         },
+    "suite_definitions": {
+        "mochitest": {
+            "run_filename": "runtestsremote.py",
+            "testsdir": "mochitest",
+            "options": [
+                "--dm_trans=adb",
+                "--app=%(app)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--certificate-path=%(certs_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--screenshot-on-fail",
+            ],
+        },
+        "mochitest-gl": {
+            "run_filename": "runtestsremote.py",
+            "testsdir": "mochitest",
+            "options": [
+                "--dm_trans=adb",
+                "--app=%(app)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--certificate-path=%(certs_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--screenshot-on-fail",
+                "--total-chunks=4",
+                "--subsuite=webgl",
+            ],
+        },
+        "robocop": {
+            "run_filename": "runrobocop.py",
+            "testsdir": "mochitest",
+            "options": [
+                "--dm_trans=adb",
+                "--app=%(app)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--certificate-path=%(certs_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--total-chunks=4",
+                "--robocop-apk=../../robocop.apk",
+                "--robocop-ini=robocop.ini",
+            ],
+        },
+        "reftest": {
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest",
+            "options": [
+                "--app=%(app)s",
+                "--ignore-window-size",
+                "--dm_trans=adb",
+                "--bootstrap",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--httpd-path", "%(modules_dir)s",
+                "--symbols-path=%(symbols_path)s",
+                "--total-chunks=16",
+                "tests/layout/reftests/reftest.list",
+            ],
+        },
+        "crashtest": {
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest",
+            "options": [
+                "--app=%(app)s",
+                "--ignore-window-size",
+                "--dm_trans=adb",
+                "--bootstrap",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s",
+                "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s",
+                "--httpd-path",
+                "%(modules_dir)s",
+                "--symbols-path=%(symbols_path)s",
+                "--total-chunks=2",
+                "tests/testing/crashtest/crashtests.list",
+            ],
+        },
+        "jsreftest": {
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest",
+            "options": [
+                "--app=%(app)s",
+                "--ignore-window-size",
+                "--dm_trans=adb",
+                "--bootstrap",
+                "--remote-webserver=%(remote_webserver)s", "--xre-path=%(xre_path)s",
+                "--utility-path=%(utility_path)s", "--http-port=%(http_port)s",
+                "--ssl-port=%(ssl_port)s", "--httpd-path", "%(modules_dir)s",
+                "--symbols-path=%(symbols_path)s",
+                "../jsreftest/tests/jstests.list",
+                "--total-chunks=6",
+                "--extra-profile-file=jsreftest/tests/user.js",
+            ],
+        },
+        "xpcshell": {
+            "run_filename": "remotexpcshelltests.py",
+            "testsdir": "xpcshell",
+            "options": [
+                "--dm_trans=adb",
+                "--xre-path=%(xre_path)s",
+                "--testing-modules-dir=%(modules_dir)s",
+                "--apk=%(installer_path)s",
+                "--no-logfiles",
+                "--symbols-path=%(symbols_path)s",
+                "--manifest=tests/xpcshell.ini",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--total-chunks=3",
+            ],
+        },
+        "cppunittest": {
+            "run_filename": "remotecppunittests.py",
+            "testsdir": "cppunittest",
+            "options": [
+                "--symbols-path=%(symbols_path)s",
+                "--xre-path=%(xre_path)s",
+                "--dm_trans=adb",
+                "--localBinDir=../bin",
+                "--apk=%(installer_path)s",
+                ".",
+            ],
+        },
+
+    }, # end suite_definitions
     "test_suite_definitions": {
         "jsreftest-1": {
             "category": "jsreftest",
             "extra_args": ["--this-chunk=1"],
         },
         "jsreftest-2": {
             "category": "jsreftest",
             "extra_args": ["--this-chunk=2"],
@@ -509,16 +657,14 @@ config = {
             "category": "robocop",
             "extra_args": ["--this-chunk=4"],
         },
         "cppunittest": {
             "category": "cppunittest",
             "extra_args": [],
         },
     }, # end of "test_definitions"
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/android_arm_4_3_config.py",
     "download_minidump_stackwalk": True,
     "default_blob_upload_servers": [
          "https://blobupload.elasticbeanstalk.com",
     ],
     "blob_uploader_auth_file" : os.path.join(os.getcwd(), "oauth.txt"),
 }
--- a/testing/mozharness/configs/android/androidx86.py
+++ b/testing/mozharness/configs/android/androidx86.py
@@ -76,16 +76,67 @@ config = {
             "device_id": "emulator-5560",
             "http_port": "8860", # starting http port to use for the mochitest server
             "ssl_port": "4460", # starting ssl port to use for the server
             "emulator_port": 5560,
             "sut_port1": 20707,
             "sut_port2": 20706
         }
     ],
+    "suite_definitions": {
+        "mochitest": {
+            "run_filename": "runtestsremote.py",
+            "options": ["--dm_trans=sut",
+                        "--app=%(app)s",
+                        "--remote-webserver=%(remote_webserver)s",
+                        "--xre-path=%(xre_path)s",
+                        "--utility-path=%(utility_path)s",
+                        "--deviceIP=%(device_ip)s",
+                        "--devicePort=%(device_port)s",
+                        "--http-port=%(http_port)s",
+                        "--ssl-port=%(ssl_port)s",
+                        "--certificate-path=%(certs_path)s",
+                        "--symbols-path=%(symbols_path)s",
+                        "--quiet",
+                        "--log-raw=%(raw_log_file)s",
+                        "--log-errorsummary=%(error_summary_file)s",
+                        "--screenshot-on-fail",
+                    ],
+        },
+        "reftest": {
+            "run_filename": "remotereftest.py",
+            "options": ["--app=%(app)s",
+                        "--ignore-window-size",
+                        "--bootstrap",
+                        "--remote-webserver=%(remote_webserver)s",
+                        "--xre-path=%(xre_path)s",
+                        "--utility-path=%(utility_path)s",
+                        "--deviceIP=%(device_ip)s",
+                        "--devicePort=%(device_port)s",
+                        "--http-port=%(http_port)s",
+                        "--ssl-port=%(ssl_port)s",
+                        "--httpd-path", "%(modules_dir)s",
+                        "--symbols-path=%(symbols_path)s",
+                    ],
+        },
+        "xpcshell": {
+            "run_filename": "remotexpcshelltests.py",
+            "options": ["--deviceIP=%(device_ip)s",
+                        "--devicePort=%(device_port)s",
+                        "--xre-path=%(xre_path)s",
+                        "--testing-modules-dir=%(modules_dir)s",
+                        "--apk=%(installer_path)s",
+                        "--no-logfiles",
+                        "--symbols-path=%(symbols_path)s",
+                        "--manifest=tests/xpcshell.ini",
+                        "--log-raw=%(raw_log_file)s",
+                        "--log-errorsummary=%(error_summary_file)s",
+                    ],
+        },
+    }, # end suite_definitions
     "test_suite_definitions": {
         "jsreftest": {
             "category": "reftest",
             "extra_args": ["../jsreftest/tests/jstests.list",
                 "--extra-profile-file=jsreftest/tests/user.js"]
         },
         "mochitest-1": {
             "category": "mochitest",
@@ -120,16 +171,14 @@ config = {
         },
         "xpcshell": {
             "category": "xpcshell",
             # XXX --manifest is superceded by testing/config/mozharness/android_x86_config.py.
             # Remove when Gecko 35 no longer in tbpl.
             "extra_args": ["--manifest=tests/xpcshell_android.ini"]
         },
     }, # end of "test_definitions"
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/android_x86_config.py",
     "download_minidump_stackwalk": True,
     "default_blob_upload_servers": [
          "https://blobupload.elasticbeanstalk.com",
     ],
     "blob_uploader_auth_file" : os.path.join(os.getcwd(), "oauth.txt"),
 }
--- a/testing/mozharness/configs/b2g/desktop_automation_config.py
+++ b/testing/mozharness/configs/b2g/desktop_automation_config.py
@@ -35,11 +35,44 @@ config = {
     ],
     "blob_uploader_auth_file": os.path.join(os.getcwd(), "oauth.txt"),
 
     # testsuite options
     "run_file_names": {
         "mochitest": "runtestsb2g.py",
         "reftest": "runreftestb2g.py",
     },
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/b2g_desktop_config.py",
+    "suite_definitions": {
+        "mochitest": {
+            "options": [
+                "--total-chunks=%(total_chunks)s",
+                "--this-chunk=%(this_chunk)s",
+                "--profile=%(gaia_profile)s",
+                "--app=%(application)s",
+                "--desktop",
+                "--utility-path=%(utility_path)s",
+                "--certificate-path=%(cert_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--browser-arg=%(browser_arg)s",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--screenshot-on-fail",
+            ],
+            "run_filename": "runtestsb2g.py",
+            "testsdir": "mochitest"
+        },
+        "reftest": {
+            "options": [
+                "--desktop",
+                "--profile=%(gaia_profile)s",
+                "--appname=%(application)s",
+                "--total-chunks=%(total_chunks)s",
+                "--this-chunk=%(this_chunk)s",
+                "--browser-arg=%(browser_arg)s",
+                "--symbols-path=%(symbols_path)s",
+                "%(test_manifest)s"
+            ],
+            "run_filename": "runreftestsb2g.py",
+            "testsdir": "reftest"
+        }
+    },
 }
--- a/testing/mozharness/configs/b2g/emulator_automation_config.py
+++ b/testing/mozharness/configs/b2g/emulator_automation_config.py
@@ -41,12 +41,148 @@ config = {
         "jsreftest": "runreftestb2g.py",
         "mochitest": "runtestsb2g.py",
         "mochitest-chrome": "runtestsb2g.py",
         "reftest": "runreftestb2g.py",
         "crashtest": "runreftestb2g.py",
         "xpcshell": "runtestsb2g.py",
         "cppunittest": "remotecppunittests.py"
     },
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/b2g_emulator_config.py",
+    "suite_definitions": {
+        "cppunittest": {
+            "options": [
+                "--dm_trans=adb",
+                "--symbols-path=%(symbols_path)s",
+                "--xre-path=%(xre_path)s",
+                "--addEnv",
+                "LD_LIBRARY_PATH=/vendor/lib:/system/lib:/system/b2g",
+                "--with-b2g-emulator=%(b2gpath)s",
+                "."
+            ],
+            "run_filename": "remotecppunittests.py",
+            "testsdir": "cppunittest"
+        },
+        "crashtest": {
+            "options": [
+                "--adbpath=%(adbpath)s",
+                "--b2gpath=%(b2gpath)s",
+                "--emulator=%(emulator)s",
+                "--emulator-res=800x1000",
+                "--logdir=%(logcat_dir)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--ignore-window-size",
+                "--xre-path=%(xre_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--busybox=%(busybox)s",
+                "--total-chunks=%(total_chunks)s",
+                "--this-chunk=%(this_chunk)s",
+                "tests/testing/crashtest/crashtests.list"
+            ],
+            "run_filename": "runreftestb2g.py",
+            "testsdir": "reftest"
+        },
+        "jsreftest": {
+            "options": [
+                "--adbpath=%(adbpath)s",
+                "--b2gpath=%(b2gpath)s",
+                "--emulator=%(emulator)s",
+                "--emulator-res=800x1000",
+                "--logdir=%(logcat_dir)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--ignore-window-size",
+                "--xre-path=%(xre_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--busybox=%(busybox)s",
+                "--total-chunks=%(total_chunks)s",
+                "--this-chunk=%(this_chunk)s",
+                "--extra-profile-file=jsreftest/tests/user.js",
+                "jsreftest/tests/jstests.list"
+            ],
+            "run_filename": "remotereftest.py",
+            "testsdir": "reftest"
+        },
+        "mochitest": {
+            "options": [
+                "--adbpath=%(adbpath)s",
+                "--b2gpath=%(b2gpath)s",
+                "--emulator=%(emulator)s",
+                "--logdir=%(logcat_dir)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--busybox=%(busybox)s",
+                "--total-chunks=%(total_chunks)s",
+                "--this-chunk=%(this_chunk)s",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--certificate-path=%(certificate_path)s",
+                "--screenshot-on-fail",
+                "%(test_path)s"
+            ],
+            "run_filename": "runtestsb2g.py",
+            "testsdir": "mochitest"
+        },
+        "mochitest-chrome": {
+            "options": [
+                "--adbpath=%(adbpath)s",
+                "--b2gpath=%(b2gpath)s",
+                "--emulator=%(emulator)s",
+                "--logdir=%(logcat_dir)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--xre-path=%(xre_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--busybox=%(busybox)s",
+                "--total-chunks=%(total_chunks)s",
+                "--this-chunk=%(this_chunk)s",
+                "--quiet",
+                "--chrome",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--certificate-path=%(certificate_path)s",
+                "--screenshot-on-fail",
+                "%(test_path)s"
+            ],
+            "run_filename": "runtestsb2g.py",
+            "testsdir": "mochitest"
+        },
+        "reftest": {
+            "options": [
+                "--adbpath=%(adbpath)s",
+                "--b2gpath=%(b2gpath)s",
+                "--emulator=%(emulator)s",
+                "--emulator-res=800x1000",
+                "--logdir=%(logcat_dir)s",
+                "--remote-webserver=%(remote_webserver)s",
+                "--ignore-window-size",
+                "--xre-path=%(xre_path)s",
+                "--symbols-path=%(symbols_path)s",
+                "--busybox=%(busybox)s",
+                "--total-chunks=%(total_chunks)s",
+                "--this-chunk=%(this_chunk)s",
+                "--enable-oop",
+                "tests/layout/reftests/reftest.list"
+            ],
+            "run_filename": "runreftestsb2g.py",
+            "testsdir": "reftest"
+        },
+        "xpcshell": {
+            "options": [
+                "--adbpath=%(adbpath)s",
+                "--b2gpath=%(b2gpath)s",
+                "--emulator=%(emulator)s",
+                "--logdir=%(logcat_dir)s",
+                "--manifest=tests/xpcshell.ini",
+                "--use-device-libs",
+                "--testing-modules-dir=%(modules_dir)s",
+                "--symbols-path=%(symbols_path)s",
+                "--busybox=%(busybox)s",
+                "--total-chunks=%(total_chunks)s",
+                "--this-chunk=%(this_chunk)s",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+            ],
+            "run_filename": "runtestsb2g.py",
+            "testsdir": "xpcshell"
+        }
+    },
     "vcs_output_timeout": 1760,
 }
--- a/testing/mozharness/configs/b2g/mulet_config.py
+++ b/testing/mozharness/configs/b2g/mulet_config.py
@@ -4,10 +4,23 @@ config = {
         'clobber',
         'read-buildbot-config',
         'pull',
         'download-and-extract',
         'create-virtualenv',
         'install',
         'run-tests',
     ],
-    "in_tree_config": "config/mozharness/linux_mulet_config.py",
+    # testsuite options
+    "reftest_options": [
+        "--mulet",
+        "--profile=%(gaia_profile)s",
+        "--appname=%(application)s",
+        "--total-chunks=%(total_chunks)s",
+        "--this-chunk=%(this_chunk)s",
+        "--symbols-path=%(symbols_path)s",
+        "--enable-oop",
+        "%(test_manifest)s"
+    ],
+    "run_file_names": {
+        "reftest": "runreftestb2g.py",
+    },
 }
--- a/testing/mozharness/configs/luciddream/linux_config.py
+++ b/testing/mozharness/configs/luciddream/linux_config.py
@@ -24,22 +24,42 @@ config = {
     },
 
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "pip_index": False,
 
-    "in_tree_config": "config/mozharness/linux_config.py",
+    "suite_definitions": {
+        "luciddream-emulator": {
+            "options": [
+                "--startup-timeout=300",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--browser-path=%(browser_path)s",
+                "--b2gpath=%(emulator_path)s",
+                "%(test_manifest)s"
+            ],
+        },
+        "luciddream-b2gdt": {
+            "options": [
+                "--startup-timeout=300",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--browser-path=%(browser_path)s",
+                "--b2g-desktop-path=%(fxos_desktop_path)s",
+                "--gaia-profile=%(gaia_profile)s",
+                "%(test_manifest)s"
+            ],
+        },
+    },
 
     "buildbot_json_path": "buildprops.json",
 
     "default_blob_upload_servers": [
         "https://blobupload.elasticbeanstalk.com",
     ],
     "blob_uploader_auth_file": os.path.join(os.getcwd(), "oauth.txt"),
-    # will handle in-tree config as subsequent patch
-    # "in_tree_config": "config/mozharness/luciddream.py",
     "download_symbols": "ondemand",
     "download_minidump_stackwalk": True,
     "tooltool_cache": "/builds/tooltool_cache",
 }
--- a/testing/mozharness/configs/marionette/automation_emulator_config.py
+++ b/testing/mozharness/configs/marionette/automation_emulator_config.py
@@ -1,11 +1,12 @@
 # This is a template config file for marionette production.
 import os
 
+
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 config = {
     # marionette options
     "test_type": "b2g",
     "emulator": "arm",
     "tooltool_cache": "/builds/tooltool_cache",
     "test_manifest": "unit-tests.ini",
@@ -34,10 +35,95 @@ config = {
         'run-marionette',
     ],
     "download_symbols": "ondemand",
     "download_minidump_stackwalk": True,
     "default_blob_upload_servers": [
          "https://blobupload.elasticbeanstalk.com",
     ],
     "blob_uploader_auth_file" : os.path.join(os.getcwd(), "oauth.txt"),
-    "in_tree_config": "config/mozharness/marionette.py",
+    },
+    "suite_definitions": {
+        "gaiatest_desktop": {
+            "options": [
+                "--restart",
+                "--timeout=%(timeout)s",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--gecko-log=%(gecko_log)s",
+                "--xml-output=%(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",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--xml-output=%(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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": ""
+        }
+    },
 }
--- a/testing/mozharness/configs/marionette/gaia_ui_test_prod_config.py
+++ b/testing/mozharness/configs/marionette/gaia_ui_test_prod_config.py
@@ -1,12 +1,13 @@
 # This is a template config file for marionette production.
 import os
 import platform
 
+
 HG_SHARE_BASE_DIR = "/builds/hg-shared"
 
 if platform.system().lower() == 'darwin':
     xre_url = "https://api.pub.build.mozilla.org/tooltool/sha512/4d8d7a37d90c34a2a2fda3066a8fe85c189b183d05389cb957fc6fed31f10a6924e50c1b84488ff61c015293803f58a3aed5d4819374d04c8e0ee2b9e3997278"
 else:
     xre_url = "https://api.pub.build.mozilla.org/tooltool/sha512/dc9503b21c87b5a469118746f99e4f41d73888972ce735fa10a80f6d218086da0e3da525d9a4cd8e4ea497ec199fef720e4a525873d77a1af304ac505e076462"
 
 config = {
@@ -43,11 +44,95 @@ config = {
     ],
     "download_symbols": "ondemand",
     "download_minidump_stackwalk": True,
     "default_blob_upload_servers": [
         "https://blobupload.elasticbeanstalk.com",
     ],
     "blob_uploader_auth_file": os.path.join(os.getcwd(), "oauth.txt"),
     "vcs_output_timeout": 1760,
-    "in_tree_config": "config/mozharness/marionette.py",
     "tooltool_cache": "/builds/tooltool_cache",
+    "suite_definitions": {
+        "gaiatest_desktop": {
+            "options": [
+                "--restart",
+                "--timeout=%(timeout)s",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--gecko-log=%(gecko_log)s",
+                "--xml-output=%(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",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--xml-output=%(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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": ""
+        }
+    },
 }
--- a/testing/mozharness/configs/marionette/prod_config.py
+++ b/testing/mozharness/configs/marionette/prod_config.py
@@ -31,13 +31,97 @@ config = {
         'create-virtualenv',
         'install',
         'run-marionette',
     ],
     "default_blob_upload_servers": [
          "https://blobupload.elasticbeanstalk.com",
     ],
     "blob_uploader_auth_file" : os.path.join(os.getcwd(), "oauth.txt"),
-    "in_tree_config": "config/mozharness/marionette.py",
     "download_symbols": "ondemand",
     "download_minidump_stackwalk": True,
     "tooltool_cache": "/builds/tooltool_cache",
+    "suite_definitions": {
+        "gaiatest_desktop": {
+            "options": [
+                "--restart",
+                "--timeout=%(timeout)s",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--gecko-log=%(gecko_log)s",
+                "--xml-output=%(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",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--xml-output=%(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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": ""
+        }
+    },
 }
--- a/testing/mozharness/configs/marionette/test_config.py
+++ b/testing/mozharness/configs/marionette/test_config.py
@@ -12,10 +12,94 @@ config = {
 
     "default_actions": [
         'clobber',
         'download-and-extract',
         'create-virtualenv',
         'install',
         'run-marionette',
     ],
-    "in_tree_config": "config/mozharness/marionette.py",
+    "suite_definitions": {
+        "gaiatest_desktop": {
+            "options": [
+                "--restart",
+                "--timeout=%(timeout)s",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--gecko-log=%(gecko_log)s",
+                "--xml-output=%(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",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--xml-output=%(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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": ""
+        }
+    },
 }
--- a/testing/mozharness/configs/marionette/windows_config.py
+++ b/testing/mozharness/configs/marionette/windows_config.py
@@ -34,12 +34,96 @@ config = {
         'create-virtualenv',
         'install',
         'run-marionette',
     ],
     "default_blob_upload_servers": [
          "https://blobupload.elasticbeanstalk.com",
     ],
     "blob_uploader_auth_file" : os.path.join(os.getcwd(), "oauth.txt"),
-    "in_tree_config": "config/mozharness/marionette.py",
     "download_minidump_stackwalk": True,
     "download_symbols": "ondemand",
+    "suite_definitions": {
+        "gaiatest_desktop": {
+            "options": [
+                "--restart",
+                "--timeout=%(timeout)s",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--gecko-log=%(gecko_log)s",
+                "--xml-output=%(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",
+                "--type=%(type)s",
+                "--testvars=%(testvars)s",
+                "--profile=%(profile)s",
+                "--symbols-path=%(symbols_path)s",
+                "--xml-output=%(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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": [
+                "--type=%(type)s",
+                "--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": ""
+        }
+    },
 }
--- a/testing/mozharness/configs/unittests/linux_unittest.py
+++ b/testing/mozharness/configs/unittests/linux_unittest.py
@@ -50,18 +50,126 @@ config = {
         "webapprt": ["mochitest/*"],
         "reftest": ["reftest/*", "jsreftest/*"],
         "xpcshell": ["xpcshell/*"],
         "cppunittest": ["cppunittest/*"],
         "jittest": ["jit-test/*"],
         "mozbase": ["mozbase/*"],
         "mozmill": ["mozmill/*"],
     },
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/linux_config.py",
+    "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"
+            ],
+            "run_filename": "jit_test.py",
+            "testsdir": "jit-test/jit-test"
+        },
+        "luciddream-emulator": {
+            "options": [
+                "--startup-timeout=300",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--browser-path=%(browser_path)s",
+                "--b2gpath=%(emulator_path)s",
+                "%(test_manifest)s"
+            ],
+        },
+        "luciddream-b2gdt": {
+            "options": [
+                "--startup-timeout=300",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--browser-path=%(browser_path)s",
+                "--b2g-desktop-path=%(fxos_desktop_path)s",
+                "--gaia-profile=%(gaia_profile)s",
+                "%(test_manifest)s"
+            ],
+        },
+        "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",
+                "--setpref=webgl.force-enabled=true",
+                "--quiet",
+                "--log-raw=%(raw_log_file)s",
+                "--log-errorsummary=%(error_summary_file)s",
+                "--use-test-media-devices",
+                "--screenshot-on-fail",
+            ],
+            "run_filename": "runtests.py",
+            "testsdir": "mochitest"
+        },
+        "mozbase": {
+            "options": [
+                "-b",
+                "%(binary_path)s"
+            ],
+            "run_filename": "test.py",
+            "testsdir": "mozbase"
+        },
+        "mozmill": {
+            "options": [
+                "--binary=%(binary_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"
+            ],
+            "run_filename": "runreftest.py",
+            "testsdir": "reftest"
+        },
+        "webapprt": {
+            "options": [
+                "--app=%(app_path)s",
+                "--utility-path=tests/bin",
+                "--extra-profile-file=tests/bin/plugins",
+                "--symbols-path=%(symbols_path)s",
+                "--certificate-path=tests/certs",
+                "--console-level=INFO",
+                "--testing-modules-dir=tests/modules",
+                "--quiet"
+            ],
+            "run_filename": "runtests.py",
+            "testsdir": "mochitest"
+        },
+        "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"
+        }
+    },
     # local mochi suites
     "all_mochitest_suites": {
         "plain1": ["--total-chunks=5", "--this-chunk=1", "--chunk-by-dir=4"],
         "plain2": ["--total-chunks=5", "--this-chunk=2", "--chunk-by-dir=4"],
         "plain3": ["--total-chunks=5", "--this-chunk=3", "--chunk-by-dir=4"],
         "plain4": ["--total-chunks=5", "--this-chunk=4", "--chunk-by-dir=4"],
         "plain5": ["--total-chunks=5", "--this-chunk=5", "--chunk-by-dir=4"],
         "plain": [],
--- a/testing/mozharness/configs/unittests/mac_unittest.py
+++ b/testing/mozharness/configs/unittests/mac_unittest.py
@@ -39,18 +39,104 @@ config = {
         "webapprt": ["mochitest/*"],
         "reftest": ["reftest/*", "jsreftest/*"],
         "xpcshell": ["xpcshell/*"],
         "cppunittest": ["cppunittest/*"],
         "jittest": ["jit-test/*"],
         "mozbase": ["mozbase/*"],
         "mozmill": ["mozmill/*"],
     },
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/mac_config.py",
+    "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"
+            ],
+            "run_filename": "jit_test.py",
+            "testsdir": "jit-test/jit-test"
+        },
+        "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",
+            ],
+            "run_filename": "runtests.py",
+            "testsdir": "mochitest"
+        },
+        "mozbase": {
+            "options": [
+                "-b",
+                "%(binary_path)s"
+            ],
+            "run_filename": "test.py",
+            "testsdir": "mozbase"
+        },
+        "mozmill": {
+            "options": [
+                "--binary=%(binary_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"
+            ],
+            "run_filename": "runreftest.py",
+            "testsdir": "reftest"
+        },
+        "webapprt": {
+            "options": [
+                "--app=%(app_path)s",
+                "--xre-path=%(abs_res_dir)s",
+                "--utility-path=tests/bin",
+                "--extra-profile-file=tests/bin/plugins",
+                "--symbols-path=%(symbols_path)s",
+                "--certificate-path=tests/certs",
+                "--console-level=INFO",
+                "--testing-modules-dir=tests/modules",
+                "--quiet"
+            ],
+            "run_filename": "runtests.py",
+            "testsdir": "mochitest"
+        },
+        "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"
+        }
+    },
     # local mochi suites
     "all_mochitest_suites": {
         "plain1": ["--total-chunks=5", "--this-chunk=1", "--chunk-by-dir=4"],
         "plain2": ["--total-chunks=5", "--this-chunk=2", "--chunk-by-dir=4"],
         "plain3": ["--total-chunks=5", "--this-chunk=3", "--chunk-by-dir=4"],
         "plain4": ["--total-chunks=5", "--this-chunk=4", "--chunk-by-dir=4"],
         "plain5": ["--total-chunks=5", "--this-chunk=5", "--chunk-by-dir=4"],
         "plain": [],
--- a/testing/mozharness/configs/unittests/win_unittest.py
+++ b/testing/mozharness/configs/unittests/win_unittest.py
@@ -48,18 +48,103 @@ config = {
         "webapprt": ["mochitest/*"],
         "reftest": ["reftest/*", "jsreftest/*"],
         "xpcshell": ["xpcshell/*"],
         "cppunittest": ["cppunittest/*"],
         "jittest": ["jit-test/*"],
         "mozbase": ["mozbase/*"],
         "mozmill": ["mozmill/*"],
     },
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/windows_config.py",
+    "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"
+            ],
+            "run_filename": "jit_test.py",
+            "testsdir": "jit-test/jit-test"
+        },
+        "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",
+            ],
+            "run_filename": "runtests.py",
+            "testsdir": "mochitest"
+        },
+        "mozbase": {
+            "options": [
+                "-b",
+                "%(binary_path)s"
+            ],
+            "run_filename": "test.py",
+            "testsdir": "mozbase"
+        },
+        "mozmill": {
+            "options": [
+                "--binary=%(binary_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"
+            ],
+            "run_filename": "runreftest.py",
+            "testsdir": "reftest"
+        },
+        "webapprt": {
+            "options": [
+                "--app=%(app_path)s",
+                "--utility-path=tests/bin",
+                "--extra-profile-file=tests/bin/plugins",
+                "--symbols-path=%(symbols_path)s",
+                "--certificate-path=tests/certs",
+                "--console-level=INFO",
+                "--testing-modules-dir=tests/modules",
+                "--quiet"
+            ],
+            "run_filename": "runtests.py",
+            "testsdir": "mochitest"
+        },
+        "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"
+        }
+    },
     # local mochi suites
     "all_mochitest_suites":
     {
         "plain1": ["--total-chunks=5", "--this-chunk=1", "--chunk-by-dir=4"],
         "plain2": ["--total-chunks=5", "--this-chunk=2", "--chunk-by-dir=4"],
         "plain3": ["--total-chunks=5", "--this-chunk=3", "--chunk-by-dir=4"],
         "plain4": ["--total-chunks=5", "--this-chunk=4", "--chunk-by-dir=4"],
         "plain5": ["--total-chunks=5", "--this-chunk=5", "--chunk-by-dir=4"],
--- a/testing/mozharness/configs/web_platform_tests/prod_config.py
+++ b/testing/mozharness/configs/web_platform_tests/prod_config.py
@@ -1,20 +1,25 @@
 # ***** 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 *****
 import os
 
 config = {
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/web_platform_tests_config.py",
-
-    "options": [],
+    "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': '/tools/buildbot/bin/python',
         'virtualenv': ['/tools/buildbot/bin/python', '/tools/misc-python/virtualenv.py'],
         'tooltool.py': "/tools/tooltool.py",
     },
 
     "find_links": [
--- a/testing/mozharness/configs/web_platform_tests/prod_config_windows.py
+++ b/testing/mozharness/configs/web_platform_tests/prod_config_windows.py
@@ -5,30 +5,35 @@
 # ***** END LICENSE BLOCK *****
 
 # This is a template config file for web-platform-tests test.
 
 import os
 import sys
 
 config = {
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/web_platform_tests_config.py",
+    "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, 'c:/mozilla-build/buildbotve/virtualenv.py'],
         'hg': 'c:/mozilla-build/hg/hg',
         'mozinstall': ['%s/build/venv/scripts/python' % os.getcwd(),
                        '%s/build/venv/scripts/mozinstall-script.py' % os.getcwd()],
         'tooltool.py': [sys.executable, 'C:/mozilla-build/tooltool.py'],
     },
 
-    "options": [],
-
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
 
     "pip_index": False,
 
     "buildbot_json_path": "buildprops.json",
--- a/testing/mozharness/configs/web_platform_tests/test_config.py
+++ b/testing/mozharness/configs/web_platform_tests/test_config.py
@@ -1,19 +1,24 @@
 # ***** 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 *****
 
 config = {
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/web_platform_tests_config.py",
-
-    "options": [],
+    "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",
+    ],
 
     "default_actions": [
         'clobber',
         'download-and-extract',
         'create-virtualenv',
         'pull',
         'install',
         'run-tests',
--- a/testing/mozharness/configs/web_platform_tests/test_config_windows.py
+++ b/testing/mozharness/configs/web_platform_tests/test_config_windows.py
@@ -3,29 +3,34 @@
 # 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 *****
 
 import os
 import sys
 
 config = {
-    # test harness options are located in the gecko tree
-    "in_tree_config": "config/mozharness/web_platform_tests_config.py",
+    "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, 'c:/mozilla-source/cedar/python/virtualenv/virtualenv.py'], #'c:/mozilla-build/buildbotve/virtualenv.py'],
         'hg': 'c:/mozilla-build/hg/hg',
         'mozinstall': ['%s/build/venv/scripts/python' % os.getcwd(),
                        '%s/build/venv/scripts/mozinstall-script.py' % os.getcwd()],
     },
 
-    "options": [],
-
     "default_actions": [
         'clobber',
         'download-and-extract',
         'create-virtualenv',
         'pull',
         'install',
         'run-tests',
     ],
--- a/testing/mozharness/mozharness/mozilla/testing/testbase.py
+++ b/testing/mozharness/mozharness/mozilla/testing/testbase.py
@@ -94,17 +94,16 @@ class TestingMixin(VirtualenvMixin, Buil
     """
 
     installer_url = None
     installer_path = None
     binary_path = None
     test_url = None
     test_packages_url = None
     test_zip_path = None
-    tree_config = ReadOnlyDict({})
     symbols_url = None
     symbols_path = None
     jsshell_url = None
     minidump_stackwalk_path = None
     default_tools_repo = 'https://hg.mozilla.org/build/tools'
     proxxy = None
 
     def _query_proxxy(self):
@@ -129,23 +128,16 @@ class TestingMixin(VirtualenvMixin, Buil
         since it does not support authenticated downloads.
         This could be re-factored and fixed in bug 1087664.
         '''
         if self.config.get("developer_mode"):
             return super(TestingMixin, self).download_file(*args, **kwargs)
         else:
             return self.download_proxied_file(*args, **kwargs)
 
-    def query_value(self, key):
-        """
-        This function allows us to check for a value
-        in the self.tree_config first and then on self.config
-        """
-        return self.tree_config.get(key, self.config.get(key))
-
     def query_build_dir_url(self, file_name):
         """
         Resolve a file name to a potential url in the build upload directory where
         that file can be found.
         """
         if self.test_packages_url:
             reference_url = self.test_packages_url
         elif self.installer_url:
@@ -446,57 +438,23 @@ 2. running via buildbot and running the 
         if target_unzip_dirs:
             unzip_cmd.extend(target_unzip_dirs)
         # TODO error_list
         # unzip return code 11 is 'no matching files were found'
         self.run_command(unzip_cmd, cwd=test_install_dir,
                          halt_on_failure=True, success_codes=[0, 11],
                          fatal_exit_code=3)
 
-    def _read_tree_config(self):
-        """Reads an in-tree config file"""
-        dirs = self.query_abs_dirs()
-        test_install_dir = dirs.get('abs_test_install_dir',
-                                    os.path.join(dirs['abs_work_dir'], 'tests'))
-
-        if 'in_tree_config' in self.config:
-            rel_tree_config_path = self.config['in_tree_config']
-            tree_config_path = os.path.join(test_install_dir, rel_tree_config_path)
-
-            if not os.path.isfile(tree_config_path):
-                self.fatal("The in-tree configuration file '%s' does not exist!"
-                           "It must be added to '%s'. See bug 1035551 for more details." %
-                           (tree_config_path, os.path.join('gecko', 'testing', rel_tree_config_path)))
-
-            try:
-                self.tree_config.update(parse_config_file(tree_config_path))
-            except:
-                msg = "There was a problem parsing the in-tree configuration file '%s'!" % \
-                      os.path.join('gecko', 'testing', rel_tree_config_path)
-                self.exception(message=msg, level=FATAL)
-
-            self.dump_config(file_path=os.path.join(dirs['abs_log_dir'], 'treeconfig.json'),
-                             config=self.tree_config)
-
-        if (self.buildbot_config and 'properties' in self.buildbot_config and
-            self.buildbot_config['properties'].get('branch') == 'try'):
-            try_config_path = os.path.join(test_install_dir, 'config', 'mozharness',
-                                           'try_arguments.py')
-            known_try_arguments = parse_config_file(try_config_path)
-            self.set_extra_try_arguments(known_try_arguments)
-
-        self.tree_config.lock()
-
     def structured_output(self, suite_category):
         """Defines whether structured logging is in use in this configuration. This
         may need to be replaced with data from a different config at the resolution
         of bug 1070041 and related bugs.
         """
-        return ('structured_suites' in self.tree_config and
-                suite_category in self.tree_config['structured_suites'])
+        return ('structured_suites' in self.config and
+                suite_category in self.config['structured_suites'])
 
     def get_test_output_parser(self, suite_category, strict=False,
                                fallback_parser_class=DesktopUnittestOutputParser,
                                **kwargs):
         """Derive and return an appropriate output parser, either the structured
         output parser or a fallback based on the type of logging in use as determined by
         configuration.
         """
@@ -567,17 +525,16 @@ 2. running via buildbot and running the 
                 # where the packages manifest is located. This is the case when the
                 # test package manifest isn't set as a buildbot property, which is true
                 # for some self-serve jobs and platforms using parse_make_upload.
                 self.test_packages_url = self.query_build_dir_url('test_packages.json')
 
             suite_categories = suite_categories or ['common']
             self._download_test_packages(suite_categories, target_unzip_dirs)
 
-        self._read_tree_config()
         self._download_installer()
         if self.config.get('download_symbols'):
             self._download_and_extract_symbols()
 
     # create_virtualenv is in VirtualenvMixin.
 
     def preflight_install(self):
         if not self.installer_path:
@@ -727,20 +684,16 @@ Did you run with --create-virtualenv? Is
             self.run_command(cmd,
                              cwd=dirs['abs_work_dir'],
                              error_list=BaseErrorList,
                              halt_on_failure=suite['halt_on_failure'],
                              fatal_exit_code=suite.get('fatal_exit_code', 3))
 
     def preflight_run_tests(self):
         """preflight commands for all tests"""
-        # If the in tree config hasn't been loaded by a previous step, load it here.
-        if len(self.tree_config) == 0:
-            self._read_tree_config()
-
         c = self.config
         if c.get('run_cmd_checks_enabled'):
             self._run_cmd_checks(c.get('preflight_run_cmd_suites', []))
         elif c.get('preflight_run_cmd_suites'):
             self.warning("Proceeding without running prerun test commands."
                          " These are often OS specific and disabling them may"
                          " result in spurious test results!")
 
--- a/testing/mozharness/mozharness/mozilla/testing/try_tools.py
+++ b/testing/mozharness/mozharness/mozilla/testing/try_tools.py
@@ -4,25 +4,33 @@
 # 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 *****
 
 import argparse
 import os
 import re
 
+from mozharness.base.script import PostScriptAction
 from mozharness.base.transfer import TransferMixin
 
 
 class TryToolsMixin(TransferMixin):
     """Utility functions for an interface between try syntax and out test harnesses.
     Requires log and script mixins."""
 
     harness_extra_args = None
     try_test_paths = []
+    known_try_arguments = {
+        '--tag': {
+            'action': 'append',
+            'dest': 'tags',
+            'default': None,
+        },
+    }
 
     def _extract_try_message(self):
         msg = self.buildbot_config['sourcestamp']['changes'][-1]['comments']
         if len(msg) == 1024:
             # This commit message was potentially truncated, get the full message
             # from hg.
             props = self.buildbot_config['properties']
             rev = props['revision']
@@ -36,22 +44,27 @@ class TryToolsMixin(TransferMixin):
 
         if not msg and 'try_syntax' in self.buildbot_config['properties']:
             # If we don't find try syntax in the usual place, check for it in an
             # alternate property available to tools using self-serve.
             msg = self.buildbot_config['properties']['try_syntax']
 
         return msg
 
-    def set_extra_try_arguments(self, known_try_arguments):
+    @PostScriptAction('download-and-extract')
+    def _set_extra_try_arguments(self, action, success=None):
         """Finds a commit message and parses it for extra arguments to pass to the test
         harness command line and test paths used to filter manifests.
 
         Extracting arguments from a commit message taken directly from the try_parser.
         """
+        if (not self.buildbot_config or 'properties' not in self.buildbot_config or
+                self.buildbot_config['properties'].get('branch') != 'try'):
+            return
+
         msg = self._extract_try_message()
         if not msg:
             return
 
         all_try_args = None
         for line in msg.splitlines():
             if 'try: ' in line:
                 # Autoland adds quotes to try strings that will confuse our
@@ -74,17 +87,17 @@ class TryToolsMixin(TransferMixin):
                          ' and forward them to the underlying test harness command.'))
 
         label_dict = {}
         def label_from_val(val):
             if val in label_dict:
                 return label_dict[val]
             return '--%s' % val.replace('_', '-')
 
-        for label, opts in known_try_arguments.iteritems():
+        for label, opts in self.known_try_arguments.iteritems():
             if 'action' in opts and opts['action'] not in ('append', 'store',
                                                            'store_true', 'store_false'):
                 self.fatal('Try syntax does not support passing custom or store_const '
                            'arguments to the harness process.')
             if 'dest' in opts:
                 label_dict[opts['dest']] = label
 
             parser.add_argument(label, **opts)
--- a/testing/mozharness/scripts/android_emulator_unittest.py
+++ b/testing/mozharness/scripts/android_emulator_unittest.py
@@ -118,17 +118,17 @@ class AndroidEmulatorTest(BlobUploadMixi
         self.test_suite_definitions = c['test_suite_definitions']
         self.test_suite = c.get('test_suite')
         assert self.test_suite in self.test_suite_definitions
 
     def _query_tests_dir(self):
         dirs = self.query_abs_dirs()
         suite_category = self.test_suite_definitions[self.test_suite]["category"]
         try:
-            test_dir = self.tree_config["suite_definitions"][suite_category]["testsdir"]
+            test_dir = self.config["suite_definitions"][suite_category]["testsdir"]
         except:
             test_dir = suite_category
         return os.path.join(dirs['abs_test_install_dir'], test_dir)
 
     def query_abs_dirs(self):
         if self.abs_dirs:
             return self.abs_dirs
         abs_dirs = super(AndroidEmulatorTest, self).query_abs_dirs()
@@ -429,26 +429,25 @@ class AndroidEmulatorTest(BlobUploadMixi
         # in the base class, this checks for mozinstall, but we don't use it
         pass
 
     def _build_command(self):
         c = self.config
         dirs = self.query_abs_dirs()
         suite_category = self.test_suite_definitions[self.test_suite]["category"]
 
-        if suite_category not in self.tree_config["suite_definitions"]:
-            self.fatal("Key '%s' not defined in the in-tree config! Please add it to '%s'. "
-                       "See bug 981030 for more details." % (suite_category,
-                       os.path.join('gecko', 'testing', self.config['in_tree_config'])))
+        if suite_category not in self.config["suite_definitions"]:
+            self.fatal("Key '%s' not defined in the config!" % suite_category)
+
         cmd = [
             self.query_python_path('python'),
             '-u',
             os.path.join(
                 self._query_tests_dir(),
-                self.tree_config["suite_definitions"][suite_category]["run_filename"]
+                self.config["suite_definitions"][suite_category]["run_filename"]
             ),
         ]
 
         raw_log_file = os.path.join(dirs['abs_blob_upload_dir'],
                                     '%s_raw.log' % self.test_suite)
 
         error_summary_file = os.path.join(dirs['abs_blob_upload_dir'],
                                           '%s_errorsummary.log' % self.test_suite)
@@ -469,17 +468,17 @@ class AndroidEmulatorTest(BlobUploadMixi
             'error_summary_file': error_summary_file,
             'dm_trans': c['device_manager'],
         }
         if self.config["device_manager"] == "sut":
             str_format_values.update({
                 'device_ip': c['device_ip'],
                 'device_port': str(self.emulator['sut_port1']),
             })
-        for option in self.tree_config["suite_definitions"][suite_category]["options"]:
+        for option in self.config["suite_definitions"][suite_category]["options"]:
             cmd.extend([option % str_format_values])
 
         for arg in self.test_suite_definitions[self.test_suite]["extra_args"]:
             argname = arg.split('=')[0]
             # only add the extra arg if it wasn't already defined by in-tree configs
             if any(a.split('=')[0] == argname for a in cmd):
                 continue
             cmd.append(arg)
--- a/testing/mozharness/scripts/android_panda.py
+++ b/testing/mozharness/scripts/android_panda.py
@@ -427,17 +427,17 @@ class PandaTest(TestingMixin, MercurialS
         if self.symbols_url:
             return self.symbols_url
 
     def _query_abs_base_cmd(self, suite_category, suite):
         #check for apk first with if ?
         c = self.config
         dirs = self.query_abs_dirs()
         options = []
-        run_file = self.tree_config["suite_definitions"][suite_category]["run_filename"]
+        run_file = c["suite_definitions"][suite_category]["run_filename"]
         base_cmd = ['python', '-u']
         base_cmd.append(os.path.join((dirs["abs_%s_dir" % suite_category]), run_file))
         self.device_ip = socket.gethostbyname(self.mozpool_device)
         #applies to mochitest, reftest, jsreftest
         # TestingMixin._download_and_extract_symbols() will set
         # self.symbols_path when downloading/extracting.
         hostnumber = 0
         mozpool_device_list = self.mozpool_device.split('-')
@@ -467,33 +467,27 @@ class PandaTest(TestingMixin, MercurialS
             'http_port': http_port,
             'ssl_port':  ssl_port,
             'app_name':  self.app_name,
             'apk_name':  self.filename_apk,
             'apk_path':  self.apk_path,
             'raw_log_file': raw_log_file,
             'error_summary_file': error_summary_file,
         }
-        if '%s_options' % suite_category in self.tree_config:
-            for option in self.tree_config['%s_options' % suite_category]:
-                options.append(option % str_format_values)
-            abs_base_cmd = base_cmd + options
-            return abs_base_cmd
-        elif "suite_definitions" in self.tree_config and \
-                suite_category in self.tree_config["suite_definitions"]: # new in-tree format
-            for option in self.tree_config["suite_definitions"][suite_category]["options"]:
+        if "suite_definitions" in c and \
+                suite_category in c["suite_definitions"]: # new in-tree format
+            for option in c["suite_definitions"][suite_category]["options"]:
                 options.append(option % str_format_values)
             abs_base_cmd = base_cmd + options
             return abs_base_cmd
         else:
             self.warning("Suite options for %s could not be determined."
                          "\nIf you meant to have options for this suite, "
                          "please make sure they are specified in your "
-                         "tree config under %s_options" %
-                         (suite_category, suite_category))
+                         "config." % suite_category)
 
     ###### helper methods
     def _pre_config_lock(self, rw_config):
         super(PandaTest, self)._pre_config_lock(rw_config)
         c = self.config
         if not c.get('run_all_suites'):
             return  # configs are valid
         for category in SUITE_CATEGORIES:
--- a/testing/mozharness/scripts/androidx86_emulator_unittest.py
+++ b/testing/mozharness/scripts/androidx86_emulator_unittest.py
@@ -119,17 +119,17 @@ class AndroidEmulatorTest(BlobUploadMixi
         self.test_suites = c.get('test_suites')
         for suite in self.test_suites:
             assert suite in self.test_suite_definitions
 
     def _query_tests_dir(self, suite_name):
         dirs = self.query_abs_dirs()
         suite_category = self.test_suite_definitions[suite_name]["category"]
         try:
-            test_dir = self.tree_config["suite_definitions"][suite_category]["testsdir"]
+            test_dir = self.config["suite_definitions"][suite_category]["testsdir"]
         except:
             test_dir = suite_category
 
         return os.path.join(dirs['abs_test_install_dir'], test_dir)
 
     def query_abs_dirs(self):
         if self.abs_dirs:
             return self.abs_dirs
@@ -399,26 +399,25 @@ class AndroidEmulatorTest(BlobUploadMixi
         # in the base class, this checks for mozinstall, but we don't use it
         pass
 
     def _build_command(self, emulator, suite_name):
         c = self.config
         dirs = self.query_abs_dirs()
         suite_category = self.test_suite_definitions[suite_name]["category"]
 
-        if suite_category not in self.tree_config["suite_definitions"]:
-            self.fatal("Key '%s' not defined in the in-tree config! Please add it to '%s'. "
-                       "See bug 981030 for more details." % (suite_category,
-                       os.path.join('gecko', 'testing', self.config['in_tree_config'])))
+        if suite_category not in c["suite_definitions"]:
+            self.fatal("Key '%s' not defined in the config!" % suite_category)
+
         cmd = [
             self.query_python_path('python'),
             '-u',
             os.path.join(
                 self._query_tests_dir(suite_name),
-                self.tree_config["suite_definitions"][suite_category]["run_filename"]
+                c["suite_definitions"][suite_category]["run_filename"]
             ),
         ]
 
         raw_log_file = os.path.join(dirs['abs_blob_upload_dir'],
                                     '%s_raw.log' % suite_name)
         error_summary_file = os.path.join(dirs['abs_blob_upload_dir'],
                                           '%s_errorsummary.log' % suite_name)
         str_format_values = {
@@ -438,17 +437,17 @@ class AndroidEmulatorTest(BlobUploadMixi
             'error_summary_file': error_summary_file,
             'dm_trans': c['device_manager'],
         }
         if self.config["device_manager"] == "sut":
             str_format_values.update({
                 'device_ip': c['device_ip'],
                 'device_port': str(emulator['sut_port1']),
             })
-        for option in self.tree_config["suite_definitions"][suite_category]["options"]:
+        for option in c["suite_definitions"][suite_category]["options"]:
             cmd.extend([option % str_format_values])
 
         for arg in self.test_suite_definitions[suite_name]["extra_args"]:
             argname = arg.split('=')[0]
             # only add the extra arg if it wasn't already defined by in-tree configs
             if any(a.split('=')[0] == argname for a in cmd):
                 continue
             cmd.append(arg)
--- a/testing/mozharness/scripts/b2g_desktop_unittest.py
+++ b/testing/mozharness/scripts/b2g_desktop_unittest.py
@@ -119,36 +119,26 @@ class B2GDesktopTest(BlobUploadMixin, Te
         for key in dirs.keys():
             if key not in abs_dirs:
                 abs_dirs[key] = dirs[key]
         self.abs_dirs = abs_dirs
         return self.abs_dirs
 
     @PreScriptAction('create-virtualenv')
     def _pre_create_virtualenv(self, action):
-        if self.tree_config.get('use_puppetagain_packages'):
-            requirements = [os.path.join('tests', 'b2g',
-                'b2g-unittest-requirements.txt')]
-
-            self.register_virtualenv_module('mozinstall',
-                requirements=requirements)
-            self.register_virtualenv_module('marionette',
-                url=os.path.join('tests', 'marionette'), requirements=requirements)
-            return
-
         dirs = self.query_abs_dirs()
         requirements = os.path.join(dirs['abs_config_dir'],
                                     'marionette_requirements.txt')
         self.register_virtualenv_module(requirements=[requirements],
                                         two_pass=True)
 
     def _query_abs_base_cmd(self, suite):
         dirs = self.query_abs_dirs()
         cmd = [self.query_python_path('python')]
-        cmd.append(self.query_value("run_file_names")[suite])
+        cmd.append(self.config["run_file_names"][suite])
 
         raw_log_file = os.path.join(dirs['abs_blob_upload_dir'],
                                     '%s_raw.log' % suite)
         error_summary_file = os.path.join(dirs['abs_blob_upload_dir'],
                                           '%s_errorsummary.log' % suite)
         str_format_values = {
             'application': self.binary_path,
             'test_manifest': self.test_manifest,
@@ -158,33 +148,20 @@ class B2GDesktopTest(BlobUploadMixin, Te
             'total_chunks': self.config.get('total_chunks'),
             'this_chunk': self.config.get('this_chunk'),
             'cert_path': dirs['abs_certs_dir'],
             'browser_arg': self.config.get('browser_arg'),
             'raw_log_file': raw_log_file,
             'error_summary_file': error_summary_file,
         }
 
-        missing_key = True
-        if "suite_definitions" in self.tree_config: # new structure
-            if suite in self.tree_config["suite_definitions"]:
-                missing_key = False
-            options = self.tree_config["suite_definitions"][suite]["options"]
-        else:
-            suite_options = '%s_options' % suite
-            if suite_options in self.tree_config:
-                missing_key = False
-            options = self.tree_config[suite_options]
+        if suite not in self.config["suite_definitions"]:
+            self.fatal("'%s' not defined in the config!" % suite),
 
-        if missing_key:
-            self.fatal("'%s' not defined in the in-tree config! Please add it to '%s'. "
-                       "See bug 981030 for more details." %
-                       (suite,
-                        os.path.join('gecko', 'testing', self.config['in_tree_config'])))
-
+        options = self.config["suite_definitions"][suite]["options"]
         if options:
             for option in options:
                 option = option % str_format_values
                 if not option.endswith('None'):
                     cmd.append(option)
         return cmd
 
     def download_and_extract(self):
--- a/testing/mozharness/scripts/b2g_emulator_unittest.py
+++ b/testing/mozharness/scripts/b2g_emulator_unittest.py
@@ -207,31 +207,16 @@ class B2GEmulatorTest(TestingMixin, VCSM
         if self.config.get('busybox_url'):
             self.download_file(self.config['busybox_url'],
                                file_name='busybox',
                                parent_dir=dirs['abs_work_dir'])
             self.busybox_path = os.path.join(dirs['abs_work_dir'], 'busybox')
 
     @PreScriptAction('create-virtualenv')
     def _pre_create_virtualenv(self, action):
-        if self.tree_config.get('use_puppetagain_packages'):
-            requirements = [os.path.join('tests', 'b2g',
-                            'b2g-unittest-requirements.txt')]
-
-            self.register_virtualenv_module(
-                'mozinstall',
-                requirements=requirements
-            )
-            self.register_virtualenv_module(
-                'marionette',
-                url=os.path.join('tests', 'marionette'),
-                requirements=requirements
-            )
-            return
-
         dirs = self.query_abs_dirs()
         requirements = os.path.join(dirs['abs_test_install_dir'],
                                     'config',
                                     'marionette_requirements.txt')
         if os.path.isfile(requirements):
             self.register_virtualenv_module(requirements=[requirements],
                                             two_pass=True)
             return
@@ -281,32 +266,20 @@ class B2GEmulatorTest(TestingMixin, VCSM
             'total_chunks': self.config.get('total_chunks'),
             'this_chunk': self.config.get('this_chunk'),
             'test_path': self.config.get('test_path'),
             'certificate_path': dirs['abs_certs_dir'],
             'raw_log_file': raw_log_file,
             'error_summary_file': error_summary_file,
         }
 
-        missing_key = True
-        if "suite_definitions" in self.tree_config: # new structure
-            if suite in self.tree_config["suite_definitions"]:
-                missing_key = False
-            options = self.tree_config["suite_definitions"][suite]["options"]
-        else:
-            suite_options = '%s_options' % suite
-            if suite_options in self.tree_config:
-                missing_key = False
-            options = self.tree_config[suite_options]
+        if suite not in self.config["suite_definitions"]:
+            self.fatal("Key '%s' not defined in the config!" % suite)
 
-        if missing_key:
-            self.fatal("Key '%s' not defined in the in-tree config! Please add it to '%s'." \
-                       "See bug 981030 for more details." % (suite,
-                       os.path.join('gecko', 'testing', self.config['in_tree_config'])))
-
+        options = self.config["suite_definitions"][suite]["options"]
         if options:
             for option in options:
                 option = option % str_format_values
                 if not option.endswith('None'):
                     cmd.append(option)
         return cmd
 
     def _query_adb(self):
--- a/testing/mozharness/scripts/desktop_unittest.py
+++ b/testing/mozharness/scripts/desktop_unittest.py
@@ -241,17 +241,17 @@ class DesktopUnittest(TestingMixin, Merc
         As with the app dir, we can't set this in advance, because OSX install
         directories change depending on branding and opt/debug.
         """
         if self.abs_res_dir:
             return self.abs_res_dir
 
         abs_app_dir = self.query_abs_app_dir()
         if self._is_darwin():
-            res_subdir = self.tree_config.get("mac_res_subdir", "Resources")
+            res_subdir = self.config.get("mac_res_subdir", "Resources")
             self.abs_res_dir = os.path.join(os.path.dirname(abs_app_dir), res_subdir)
         else:
             self.abs_res_dir = abs_app_dir
         return self.abs_res_dir
 
     @PreScriptAction('create-virtualenv')
     def _pre_create_virtualenv(self, action):
         dirs = self.query_abs_dirs()
@@ -363,33 +363,20 @@ class DesktopUnittest(TestingMixin, Merc
                     base_cmd.append('--bisect-chunk=default')
                 else:
                     self.warning("--no-random does not currently work with suites other than mochitest.")
 
             # set pluginsPath
             abs_res_plugins_dir = os.path.join(abs_res_dir, 'plugins')
             str_format_values['test_plugin_path'] = abs_res_plugins_dir
 
-            missing_key = True
-            if "suite_definitions" in self.tree_config: # new structure
-                if suite_category in self.tree_config["suite_definitions"]:
-                    missing_key = False
-                options = self.tree_config["suite_definitions"][suite_category]["options"]
-            else:
-                suite_options = '%s_options' % suite_category
-                if suite_options in self.tree_config:
-                    missing_key = False
-                options = self.tree_config[suite_options]
+            if suite_category not in c["suite_definitions"]:
+                self.fatal("'%s' not defined in the config!")
 
-            if missing_key:
-                self.fatal("'%s' not defined in the in-tree config! Please add it to '%s'. "
-                           "See bug 981030 for more details." %
-                           (suite_category,
-                            os.path.join('gecko', 'testing', self.config['in_tree_config'])))
-
+            options = c["suite_definitions"][suite_category]["options"]
             if options:
                 for option in options:
                     option = option % str_format_values
                     if not option.endswith('None'):
                         base_cmd.append(option)
                 return base_cmd
             else:
                 self.warning("Suite options for %s could not be determined."
--- a/testing/mozharness/scripts/luciddream_unittest.py
+++ b/testing/mozharness/scripts/luciddream_unittest.py
@@ -245,17 +245,17 @@ class LuciddreamTest(TestingMixin, Mercu
         else:
             if self.config.get('b2gdesktop_url'):
                 str_format_values['fxos_desktop_path'] = os.path.join(dirs['abs_b2g_desktop'], 'b2g', 'b2g')
             else:
                 str_format_values['fxos_desktop_path'] = self.config.get('b2gdesktop_path')
             str_format_values['gaia_profile'] = os.path.join(dirs['abs_gaia_dir'], 'profile')
 
         suite = 'luciddream-emulator' if self.config.get('emulator_url') else 'luciddream-b2gdt'
-        options = self.tree_config['suite_definitions'][suite]['options']
+        options = self.config['suite_definitions'][suite]['options']
         for option in options:
             option = option % str_format_values
             if not option.endswith('None'):
                 cmd.append(option)
 
         code = self.run_command(cmd, env=env,
                                 output_timeout=1000,
                                 output_parser=ld_parser,
--- a/testing/mozharness/scripts/marionette.py
+++ b/testing/mozharness/scripts/marionette.py
@@ -221,28 +221,16 @@ class MarionetteTest(TestingMixin, Mercu
         for key in dirs.keys():
             if key not in abs_dirs:
                 abs_dirs[key] = dirs[key]
         self.abs_dirs = abs_dirs
         return self.abs_dirs
 
     @PreScriptAction('create-virtualenv')
     def _configure_marionette_virtualenv(self, action):
-        # XXX Bug 981030 - hack to unbreak b2g18. Remove when b2g18 no longer supported
-        try:
-            branch = self.buildbot_config['properties']['branch']
-        except:
-            branch = None
-        if self.tree_config.get('use_puppetagain_packages') or branch in ('mozilla-b2g18', 'mozilla-b2g18_v1_1_0_hd'):
-            self.register_virtualenv_module('mozinstall')
-            self.register_virtualenv_module(
-                'marionette', os.path.join('tests', 'marionette'))
-
-            return
-
         dirs = self.query_abs_dirs()
         requirements = os.path.join(dirs['abs_test_install_dir'],
                                     'config',
                                     'marionette_requirements.txt')
         if os.access(requirements, os.F_OK):
             self.register_virtualenv_module(requirements=[requirements],
                                             two_pass=True)
         else:
@@ -302,17 +290,17 @@ class MarionetteTest(TestingMixin, Mercu
         appropriate key.
         """
         platform = 'emulator' if is_emulator else 'desktop'
         testsuite = 'gaiatest' if is_gaiatest else 'marionette'
         # Currently running marionette on an emulator means webapi
         # tests. This method will need to change if this does.
         if is_emulator and not is_gaiatest:
             testsuite = 'webapi'
-        return '_'.join([testsuite, platform, 'options'])
+        return '{}_{}'.format(testsuite, platform)
 
     def download_and_extract(self):
         super(MarionetteTest, self).download_and_extract()
 
         if self.config.get('emulator'):
             dirs = self.query_abs_dirs()
 
             self.mkdir_p(dirs['abs_emulator_dir'])
@@ -323,22 +311,16 @@ class MarionetteTest(TestingMixin, Mercu
                              halt_on_failure=True, fatal_exit_code=3)
 
     def install(self):
         if self.config.get('emulator'):
             self.info("Emulator tests; skipping.")
         else:
             super(MarionetteTest, self).install()
 
-    def preflight_run_marionette(self):
-        """preflight commands for all tests"""
-        # If the in tree config hasn't been loaded by a previous step, load it here.
-        if not self.tree_config:
-            self._read_tree_config()
-
     def run_marionette(self):
         """
         Run the Marionette tests
         """
         dirs = self.query_abs_dirs()
 
         raw_log_file = os.path.join(dirs['abs_blob_upload_dir'],
                                     'marionette_raw.log')
@@ -435,33 +417,27 @@ class MarionetteTest(TestingMixin, Mercu
                 config_fmt_args['app_arg'] = self.config['app_arg']
 
             if self.config.get('e10s'):
                 cmd.append('--e10s')
 
             cmd.append('--gecko-log=%s' % os.path.join(dirs["abs_blob_upload_dir"],
                                                        'gecko.log'))
 
-        options_group = self._get_options_group(self.config.get('emulator'),
-                                                self.config.get('gaiatest'))
-
         if self.config.get("structured_output"):
             config_fmt_args["raw_log_file"]= "-"
 
-        if options_group not in self.tree_config:
-            # This allows using the new in-tree format
-            options_group = options_group.split("_options")[0]
-            if options_group not in self.tree_config["suite_definitions"]:
-                self.fatal("%s is not defined in the in-tree config" %
-                           options_group)
-            for s in self.tree_config["suite_definitions"][options_group]["options"]:
-                cmd.append(s % config_fmt_args)
-        else:
-            for s in self.tree_config[options_group]:
-                cmd.append(s % config_fmt_args)
+        options_group = self._get_options_group(self.config.get('emulator'),
+                                                self.config.get('gaiatest'))
+
+        if options_group not in self.config["suite_definitions"]:
+            self.fatal("%s is not defined in the config!" % options_group)
+
+        for s in self.config["suite_definitions"][options_group]["options"]:
+            cmd.append(s % config_fmt_args)
 
         if self.mkdir_p(dirs["abs_blob_upload_dir"]) == -1:
             # Make sure that the logging directory exists
             self.fatal("Could not create blobber upload directory")
 
         cmd.append(manifest)
         cmd = self.append_harness_extra_args(cmd)
 
--- a/testing/mozharness/scripts/mulet_unittest.py
+++ b/testing/mozharness/scripts/mulet_unittest.py
@@ -54,21 +54,16 @@ class MuletUnittest(B2GDesktopTest, Gaia
         # This is if we don't run all actions since we set this inside
         # of download-and-extract()
         if self.config.get("binary_path"):
             self.binary_path = self.config["binary_path"]
 
         if not self.binary_path:
             self.fatal("Use --binary-path as it is needed for _query_abs_dir().")
 
-        # This is if we don't run all actions since we set this inside
-        # of download-and-extract()
-        if not self.tree_config:
-            self._read_tree_config()
-
     def run_tests(self):
         """
         Run the unit test suite.
         """
         dirs = self.query_abs_dirs()
 
         # NOTE: We currently don't clobber the checkout or the profile
         if not os.path.isdir(dirs['abs_gaia_profile']):
--- a/testing/mozharness/scripts/web_platform_tests.py
+++ b/testing/mozharness/scripts/web_platform_tests.py
@@ -128,17 +128,17 @@ class WebPlatformTest(TestingMixin, Merc
         for test_type in c.get("test_type", []):
             base_cmd.append("--test-type=%s" % test_type)
 
         for opt in ["total_chunks", "this_chunk"]:
             val = c.get(opt)
             if val:
                 base_cmd.append("--%s=%s" % (opt.replace("_", "-"), val))
 
-        options = list(c.get("options", [])) + list(self.tree_config["options"])
+        options = list(c.get("options", []))
 
         str_format_values = {
             'binary_path': self.binary_path,
             'test_path': dirs["abs_wpttest_dir"],
             'test_install_path': dirs["abs_test_install_dir"],
             'abs_app_dir': abs_app_dir,
             'abs_work_dir': dirs["abs_work_dir"]
             }