Bug 1240120 - Move external-media-tests to subdirectory to generate correct packaging; r=maja_zf,whimboo
authorSyd Polk <spolk@mozilla.com>
Thu, 21 Jan 2016 23:00:59 -0600
changeset 281256 5d8658bcefdc6cf8a5ad1608684cdbf5ca661b81
parent 281255 728ed80f10650c1774ca12b5825c568f86b18372
child 281257 1dcd651f539ae52dfd2fca54ef6a88773ed8b80b
push id70723
push userspolk@mozilla.com
push dateFri, 22 Jan 2016 17:14:59 +0000
treeherdermozilla-inbound@5d8658bcefdc [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersmaja_zf, whimboo
bugs1240120
milestone46.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 1240120 - Move external-media-tests to subdirectory to generate correct packaging; r=maja_zf,whimboo
dom/media/test/external-media-tests/MANIFEST.in
dom/media/test/external-media-tests/README.md
dom/media/test/external-media-tests/harness/__init__.py
dom/media/test/external-media-tests/harness/runtests.py
dom/media/test/external-media-tests/harness/testcase.py
dom/media/test/external-media-tests/media_tests/__init__.py
dom/media/test/external-media-tests/media_tests/manifest.ini
dom/media/test/external-media-tests/media_tests/playback/eme.ini
dom/media/test/external-media-tests/media_tests/playback/limiting_bandwidth.ini
dom/media/test/external-media-tests/media_tests/playback/manifest.ini
dom/media/test/external-media-tests/media_tests/playback/netflix_limiting_bandwidth.ini
dom/media/test/external-media-tests/media_tests/playback/test_eme_playback.py
dom/media/test/external-media-tests/media_tests/playback/test_full_playback.py
dom/media/test/external-media-tests/media_tests/playback/test_playback_limiting_bandwidth.py
dom/media/test/external-media-tests/media_tests/playback/test_ultra_low_bandwidth.py
dom/media/test/external-media-tests/media_tests/playback/test_video_playback.py
dom/media/test/external-media-tests/media_tests/playback/youtube/manifest.ini
dom/media/test/external-media-tests/media_tests/playback/youtube/test_basic_playback.py
dom/media/test/external-media-tests/media_tests/playback/youtube/test_prefs.py
dom/media/test/external-media-tests/media_tests/resources/mozilla.html
dom/media/test/external-media-tests/media_tests/test_example.py
dom/media/test/external-media-tests/media_tests/urls/default.ini
dom/media/test/external-media-tests/media_tests/urls/netflix/default.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/archive/crash_videos.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/archive/other_videos.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/archive/video_data.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/archive/youtube.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/long1-720.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/long2-720.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/long3-crashes-720.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/long4-crashes-900.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/massive-6000.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/medium1-60.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/medium2-60.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/medium3-120.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/short0-10.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/short1-15.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/short2-15.ini
dom/media/test/external-media-tests/media_tests/urls/youtube/short3-crashes-15.ini
dom/media/test/external-media-tests/media_tests/utils.py
dom/media/test/external-media-tests/media_utils/__init__.py
dom/media/test/external-media-tests/media_utils/video_puppeteer.py
dom/media/test/external-media-tests/media_utils/youtube_puppeteer.py
dom/media/test/external-media-tests/requirements.txt
dom/media/test/external-media-tests/setup.py
dom/media/test/external/MANIFEST.in
dom/media/test/external/README.md
dom/media/test/external/external_media_harness/__init__.py
dom/media/test/external/external_media_harness/runtests.py
dom/media/test/external/external_media_harness/testcase.py
dom/media/test/external/external_media_tests/__init__.py
dom/media/test/external/external_media_tests/manifest.ini
dom/media/test/external/external_media_tests/media_utils/__init__.py
dom/media/test/external/external_media_tests/media_utils/video_puppeteer.py
dom/media/test/external/external_media_tests/media_utils/youtube_puppeteer.py
dom/media/test/external/external_media_tests/playback/eme.ini
dom/media/test/external/external_media_tests/playback/limiting_bandwidth.ini
dom/media/test/external/external_media_tests/playback/manifest.ini
dom/media/test/external/external_media_tests/playback/netflix_limiting_bandwidth.ini
dom/media/test/external/external_media_tests/playback/test_eme_playback.py
dom/media/test/external/external_media_tests/playback/test_full_playback.py
dom/media/test/external/external_media_tests/playback/test_playback_limiting_bandwidth.py
dom/media/test/external/external_media_tests/playback/test_ultra_low_bandwidth.py
dom/media/test/external/external_media_tests/playback/test_video_playback.py
dom/media/test/external/external_media_tests/playback/youtube/manifest.ini
dom/media/test/external/external_media_tests/playback/youtube/test_basic_playback.py
dom/media/test/external/external_media_tests/playback/youtube/test_prefs.py
dom/media/test/external/external_media_tests/resources/mozilla.html
dom/media/test/external/external_media_tests/test_example.py
dom/media/test/external/external_media_tests/urls/default.ini
dom/media/test/external/external_media_tests/urls/netflix/default.ini
dom/media/test/external/external_media_tests/urls/youtube/archive/crash_videos.ini
dom/media/test/external/external_media_tests/urls/youtube/archive/other_videos.ini
dom/media/test/external/external_media_tests/urls/youtube/archive/video_data.ini
dom/media/test/external/external_media_tests/urls/youtube/archive/youtube.ini
dom/media/test/external/external_media_tests/urls/youtube/long1-720.ini
dom/media/test/external/external_media_tests/urls/youtube/long2-720.ini
dom/media/test/external/external_media_tests/urls/youtube/long3-crashes-720.ini
dom/media/test/external/external_media_tests/urls/youtube/long4-crashes-900.ini
dom/media/test/external/external_media_tests/urls/youtube/massive-6000.ini
dom/media/test/external/external_media_tests/urls/youtube/medium1-60.ini
dom/media/test/external/external_media_tests/urls/youtube/medium2-60.ini
dom/media/test/external/external_media_tests/urls/youtube/medium3-120.ini
dom/media/test/external/external_media_tests/urls/youtube/short0-10.ini
dom/media/test/external/external_media_tests/urls/youtube/short1-15.ini
dom/media/test/external/external_media_tests/urls/youtube/short2-15.ini
dom/media/test/external/external_media_tests/urls/youtube/short3-crashes-15.ini
dom/media/test/external/external_media_tests/utils.py
dom/media/test/external/requirements.txt
dom/media/test/external/setup.py
python/mozbuild/mozbuild/action/test_archive.py
rename from dom/media/test/external-media-tests/MANIFEST.in
rename to dom/media/test/external/MANIFEST.in
--- a/dom/media/test/external-media-tests/MANIFEST.in
+++ b/dom/media/test/external/MANIFEST.in
@@ -1,7 +1,5 @@
 exclude MANIFEST.in
-include requirements.txt
-include setup.py
-recursive-include firefox_media_tests *
-recursive-include media_utils *
+recursive-include external_media_harness *
+recursive-include external_media_tests *
 
 
rename from dom/media/test/external-media-tests/README.md
rename to dom/media/test/external/README.md
--- a/dom/media/test/external-media-tests/README.md
+++ b/dom/media/test/external/README.md
@@ -1,69 +1,69 @@
-firefox-media-tests
+external-media-tests
 ===================
 
 [Marionette Python tests][marionette-python-tests] for media playback in Mozilla Firefox. MediaTestCase uses [Firefox Puppeteer][ff-puppeteer-docs] library.
 
 Setup
 -----
 
-The instructions below assume you have a copy of the project in `some/path/firefox-media-tests` and they refer to this path as `$PROJECT_HOME`.
+Normally, you get this source by cloning a firefox repo such as mozilla-central. The path to these tests would be in <mozilla-central>/dom/media/test/external, and these instuctions refer to this path as '$PROJECT_HOME'.
 
 * Create a virtualenv called `foo`.
 
    ```sh
    $ virtualenv foo
    $ source foo/bin/activate #or `foo\Scripts\activate` on Windows
    ```
 
-* Install `firefox-media-tests` in development mode. (To get an environment that is closer to what is actually used in Mozilla's automation jobs, run `pip install -r requirements.txt` first.)
+* Install `external-media-tests` in development mode. (To get an environment that is closer to what is actually used in Mozilla's automation jobs, run `pip install -r requirements.txt` first.)
 
    ```sh
    $ python setup.py develop
    ```
 
-Now `firefox-media-tests` should be a recognized command. Try `firefox-media-tests --help` to see if it works.
+Now `external-media-tests` should be a recognized command. Try `external-media-tests --help` to see if it works.
 
 
 Running the Tests
 -----------------
 
 In the examples below, `$FF_PATH` is a path to a recent Firefox binary.
 
-This runs all the tests listed in `$PROJECT_HOME/firefox_media_tests/manifest.ini`:
+This runs all the tests listed in `$PROJECT_HOME/external_media_tests/manifest.ini`:
 
    ```sh
-   $ firefox-media-tests --binary $FF_PATH
+   $ external-media-tests --binary $FF_PATH
    ```
 
 You can also run all the tests at a particular path:
 
    ```sh
-   $ firefox-media-tests --binary $FF_PATH some/path/foo
+   $ external-media-tests --binary $FF_PATH some/path/foo
    ```
 
 Or you can run the tests that are listed in a manifest file of your choice.
 
    ```sh
-   $ firefox-media-tests --binary $FF_PATH some/other/path/manifest.ini
+   $ external-media-tests --binary $FF_PATH some/other/path/manifest.ini
    ```
 
-By default, the urls listed in `firefox_media_tests/urls/default.ini` are used for the tests, but you can also supply your own ini file of urls:
+By default, the urls listed in `external_media_tests/urls/default.ini` are used for the tests, but you can also supply your own ini file of urls:
 
    ```sh
-   $ firefox-media-tests --binary $FF_PATH --urls some/other/path/my_urls.ini
+   $ external-media-tests --binary $FF_PATH --urls some/other/path/my_urls.ini
    ```
 
 ### Running EME tests
 
 In order to run EME tests, you must use a Firefox profile that has a signed plugin-container.exe and voucher.bin. With Netflix, this will be created when you log in and save the credentials. You must also use a custom .ini file for urls to the provider's content and indicate which test to run, like above. Ex:
 
    ```sh
-   $ firefox-media-tests --binary $FF_PATH some/path/tests.ini --profile custom_profile --urls some/path/provider-urls.ini
+   $ external-media-tests --binary $FF_PATH some/path/tests.ini --profile custom_profile --urls some/path/provider-urls.ini
    ```
 
 
 ### Running tests in a way that provides information about a crash
 
 What if Firefox crashes during a test run? You want to know why! To report useful crash data, the test runner needs access to a "minidump_stackwalk" binary and a "symbols.zip" file.
 
 1. Download a `minidump_stackwalk` binary for your platform (save it whereever). Get it from http://hg.mozilla.org/build/tools/file/tip/breakpad/.
@@ -79,34 +79,34 @@ 3. Create an environment variable called
    $ export MINIDUMP_STACKWALK=path/to/minidump_stackwalk
    ```
 
 4. Download the `crashreporter-symbols.zip` file for the Firefox build you are testing and extract it. Example: ftp://ftp.mozilla.org/pub/firefox/tinderbox-builds/mozilla-aurora-win32/1427442016/firefox-38.0a2.en-US.win32.crashreporter-symbols.zip
 
 5. Run the tests with a `--symbols-path` flag
 
   ```sh
-   $ firefox-media-tests --binary $FF_PATH --symbols-path path/to/example/firefox-38.0a2.en-US.win32.crashreporter-symbols
+   $ external-media-tests --binary $FF_PATH --symbols-path path/to/example/firefox-38.0a2.en-US.win32.crashreporter-symbols
   ```
 
 To check whether the above setup is working for you, trigger a (silly) Firefox crash while the tests are running. One way to do this is with the [crashme add-on](https://github.com/luser/crashme) -- you can add it to Firefox even while the tests are running. Another way on Linux and Mac OS systems:
 
 1. Find the process id (PID) of the Firefox process being used by the tests.
 
   ```sh
    $ ps x | grep 'Firefox'
   ```
 
 2. Kill the Firefox process with SIGABRT.
   ```sh
   # 1234 is an example of a PID
    $ kill -6 1234
   ```
 
-Somewhere in the output produced by `firefox-media-tests`, you should see something like:
+Somewhere in the output produced by `external-media-tests`, you should see something like:
 
 ```
 0:12.68 CRASH: MainThread pid:1234. Test:test_basic_playback.py TestVideoPlayback.test_playback_starts.
 Minidump anaylsed:False.
 Signature:[@ XUL + 0x2a65900]
 Crash dump filename:
 /var/folders/5k/xmn_fndx0qs2jcpcwhzl86wm0000gn/T/tmpB4Bolj.mozrunner/minidumps/DA3BB025-8302-4F96-8DF3-A97E424C877A.dmp
 Operating system: Mac OS X
@@ -132,21 +132,21 @@ 5. Tell marionette where browsermobproxy
 --browsermob-script <browsermob>/bin/browsermob-proxy --browsermob-port 999 --profile <your saved profile>
 </code></pre>
 
 On Windows, use browsermob-proxy.bat.
 
 You can then call browsermob to shape the network. You can find an example in firefox_media_tests/playback/test_playback_limiting_bandwidth.py. Another example can be found at https://dxr.mozilla.org/mozilla-central/source/testing/marionette/client/marionette/tests/unit/test_browsermobproxy.py.
 
 ### A warning about video URLs
-The ini files in `firefox_media_tests/urls` may contain URLs pulled from Firefox crash or bug data. Automated tests don't care about video content, but you might: visit these at your own risk and be aware that they may be NSFW. We do not intend to ever moderate or filter these URLs.
+The ini files in `external_media_tests/urls` may contain URLs pulled from Firefox crash or bug data. Automated tests don't care about video content, but you might: visit these at your own risk and be aware that they may be NSFW. We do not intend to ever moderate or filter these URLs.
 
 Writing a test
 --------------
-Write your test in a new or existing `test_*.py` file under `$PROJECT_HOME/firefox_media_tests`. Add it to the appropriate `manifest.ini` file(s) as well. Look in `media_utils` for useful video-playback functions.
+Write your test in a new or existing `test_*.py` file under `$PROJECT_HOME/external_media_tests`. Add it to the appropriate `manifest.ini` file(s) as well. Look in `media_utils` for useful video-playback functions.
 
 * [Marionette docs][marionette-docs]
   - [Marionette Command Line Options](https://developer.mozilla.org/en-US/docs/Mozilla/Command_Line_Options)
 * [Firefox Puppeteer docs][ff-puppeteer-docs]
 
 License
 -------
 This software is licensed under the [Mozilla Public License v. 2.0](http://mozilla.org/MPL/2.0/).
rename from dom/media/test/external-media-tests/harness/__init__.py
rename to dom/media/test/external/external_media_harness/__init__.py
rename from dom/media/test/external-media-tests/harness/runtests.py
rename to dom/media/test/external/external_media_harness/runtests.py
--- a/dom/media/test/external-media-tests/harness/runtests.py
+++ b/dom/media/test/external/external_media_harness/runtests.py
@@ -6,41 +6,41 @@ from manifestparser import read_ini
 import os
 import sys
 
 from marionette import BaseMarionetteTestRunner, BaseMarionetteArguments
 from marionette.runner import BrowserMobProxyArguments
 from marionette.runtests import MarionetteHarness, cli as mn_cli
 import mozlog
 
-import media_tests
+import external_media_tests
 from testcase import MediaTestCase
-from media_utils.video_puppeteer import debug_script
+from external_media_tests.media_utils.video_puppeteer import debug_script
 
 
 class MediaTestArgumentsBase(object):
     name = 'Firefox Media Tests'
     args = [
         [['--urls'], {
             'help': 'ini file of urls to make available to all tests',
-            'default': os.path.join(media_tests.urls, 'default.ini'),
+            'default': os.path.join(external_media_tests.urls, 'default.ini'),
         }],
     ]
 
     def verify_usage_handler(self, args):
         if args.urls:
            if not os.path.isfile(args.urls):
                raise ValueError('--urls must provide a path to an ini file')
            else:
                path = os.path.abspath(args.urls)
                args.video_urls = MediaTestArgumentsBase.get_urls(path)
 
     def parse_args_handler(self, args):
         if not args.tests:
-           args.tests = [media_tests.manifest]
+           args.tests = [external_media_tests.manifest]
 
 
     @staticmethod
     def get_urls(manifest):
         with open(manifest, 'r'):
             return [line[0] for line in read_ini(manifest)]
 
 
@@ -50,17 +50,17 @@ class MediaTestArguments(BaseMarionetteA
         self.register_argument_container(MediaTestArgumentsBase())
         self.register_argument_container(BrowserMobProxyArguments())
 
 
 class MediaTestRunner(BaseMarionetteTestRunner):
     def __init__(self, **kwargs):
         BaseMarionetteTestRunner.__init__(self, **kwargs)
         if not self.server_root:
-            self.server_root = media_tests.resources
+            self.server_root = external_media_tests.resources
         # pick up prefs from marionette_driver.geckoinstance.DesktopInstance
         self.app = 'fxdesktop'
         self.test_handlers = [MediaTestCase]
 
         # Used in HTML report (--log-html)
         def gather_media_debug(test, status):
             rv = {}
             marionette = test._marionette_weakref()
@@ -82,18 +82,18 @@ class MediaTestRunner(BaseMarionetteTest
                                    exc_info=True)
             return rv
 
         self.result_callbacks.append(gather_media_debug)
 
 
 class FirefoxMediaHarness(MarionetteHarness):
     def __init__(self,
-                 runner_class=MediaTestRunner,
-                 parser_class=MediaTestArguments):
+             runner_class=MediaTestRunner,
+             parser_class=MediaTestArguments):
         # workaround until next marionette-client release - Bug 1227918
         try:
             MarionetteHarness.__init__(self, runner_class, parser_class)
         except Exception:
             logger = mozlog.commandline.setup_logging('Media-test harness', {})
             logger.error('Failure setting up harness', exc_info=True)
             raise
 
rename from dom/media/test/external-media-tests/harness/testcase.py
rename to dom/media/test/external/external_media_harness/testcase.py
--- a/dom/media/test/external-media-tests/harness/testcase.py
+++ b/dom/media/test/external/external_media_harness/testcase.py
@@ -5,18 +5,18 @@
 import os
 
 from marionette import BrowserMobProxyTestCaseMixin
 from marionette_driver import Wait
 from marionette_driver.errors import TimeoutException
 from marionette.marionette_test import SkipTest
 
 from firefox_puppeteer.testcases import FirefoxTestCase
-from media_tests.utils import (timestamp_now, verbose_until)
-from media_utils.video_puppeteer import (playback_done, playback_started,
+from external_media_tests.utils import (timestamp_now, verbose_until)
+from external_media_tests.media_utils.video_puppeteer import (playback_done, playback_started,
                                          VideoException, VideoPuppeteer as VP)
 
 
 class MediaTestCase(FirefoxTestCase):
 
     def __init__(self, *args, **kwargs):
         self.video_urls = kwargs.pop('video_urls', False)
         FirefoxTestCase.__init__(self, *args, **kwargs)
rename from dom/media/test/external-media-tests/media_tests/__init__.py
rename to dom/media/test/external/external_media_tests/__init__.py
rename from dom/media/test/external-media-tests/media_tests/manifest.ini
rename to dom/media/test/external/external_media_tests/manifest.ini
rename from dom/media/test/external-media-tests/media_utils/__init__.py
rename to dom/media/test/external/external_media_tests/media_utils/__init__.py
rename from dom/media/test/external-media-tests/media_utils/video_puppeteer.py
rename to dom/media/test/external/external_media_tests/media_utils/video_puppeteer.py
--- a/dom/media/test/external-media-tests/media_utils/video_puppeteer.py
+++ b/dom/media/test/external/external_media_tests/media_utils/video_puppeteer.py
@@ -1,17 +1,17 @@
 # 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/.
 
 from time import clock, sleep
 
 from marionette_driver import By, expected, Wait
 
-from media_tests.utils import verbose_until
+from external_media_tests.utils import verbose_until
 
 
 # Adapted from
 # https://github.com/gavinsharp/aboutmedia/blob/master/chrome/content/aboutmedia.xhtml
 debug_script = """
 var mainWindow = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
     .getInterface(Components.interfaces.nsIWebNavigation)
     .QueryInterface(Components.interfaces.nsIDocShellTreeItem)
rename from dom/media/test/external-media-tests/media_utils/youtube_puppeteer.py
rename to dom/media/test/external/external_media_tests/media_utils/youtube_puppeteer.py
--- a/dom/media/test/external-media-tests/media_utils/youtube_puppeteer.py
+++ b/dom/media/test/external/external_media_tests/media_utils/youtube_puppeteer.py
@@ -4,17 +4,17 @@
 
 from time import sleep
 import re
 from json import loads
 
 from marionette_driver import By, expected, Wait
 from marionette_driver.errors import TimeoutException, NoSuchElementException
 from video_puppeteer import VideoPuppeteer, VideoException
-from media_tests.utils import verbose_until
+from external_media_tests.utils import verbose_until
 
 
 class YouTubePuppeteer(VideoPuppeteer):
     """
     Wrapper around a YouTube #movie_player element
 
     Partial reference: https://developers.google.com/youtube/js_api_reference
     """
rename from dom/media/test/external-media-tests/media_tests/playback/eme.ini
rename to dom/media/test/external/external_media_tests/playback/eme.ini
rename from dom/media/test/external-media-tests/media_tests/playback/limiting_bandwidth.ini
rename to dom/media/test/external/external_media_tests/playback/limiting_bandwidth.ini
rename from dom/media/test/external-media-tests/media_tests/playback/manifest.ini
rename to dom/media/test/external/external_media_tests/playback/manifest.ini
rename from dom/media/test/external-media-tests/media_tests/playback/netflix_limiting_bandwidth.ini
rename to dom/media/test/external/external_media_tests/playback/netflix_limiting_bandwidth.ini
rename from dom/media/test/external-media-tests/media_tests/playback/test_eme_playback.py
rename to dom/media/test/external/external_media_tests/playback/test_eme_playback.py
--- a/dom/media/test/external-media-tests/media_tests/playback/test_eme_playback.py
+++ b/dom/media/test/external/external_media_tests/playback/test_eme_playback.py
@@ -1,15 +1,15 @@
 # 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/.
 
 import re
 
-from harness.testcase import MediaTestCase, VideoPlaybackTestsMixin
+from external_media_harness.testcase import MediaTestCase, VideoPlaybackTestsMixin
 
 
 class TestEMEPlayback(MediaTestCase, VideoPlaybackTestsMixin):
 
     def setUp(self):
         super(TestEMEPlayback, self).setUp()
         self.set_eme_prefs()
         assert(self.check_eme_prefs())
rename from dom/media/test/external-media-tests/media_tests/playback/test_full_playback.py
rename to dom/media/test/external/external_media_tests/playback/test_full_playback.py
--- a/dom/media/test/external-media-tests/media_tests/playback/test_full_playback.py
+++ b/dom/media/test/external/external_media_tests/playback/test_full_playback.py
@@ -1,15 +1,15 @@
 # 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/.
 
 
-from harness.testcase import MediaTestCase
-from media_utils.video_puppeteer import VideoPuppeteer
+from external_media_harness.testcase import MediaTestCase
+from external_media_tests.media_utils.video_puppeteer import VideoPuppeteer
 
 
 class TestFullPlayback(MediaTestCase):
     """ Test MSE playback in HTML5 video element.
 
     These tests should pass on any site where a single video element plays
     upon loading and is uninterrupted (by ads, for example). This will play
     the full videos, so it could take a while depending on the videos playing.
rename from dom/media/test/external-media-tests/media_tests/playback/test_playback_limiting_bandwidth.py
rename to dom/media/test/external/external_media_tests/playback/test_playback_limiting_bandwidth.py
--- a/dom/media/test/external-media-tests/media_tests/playback/test_playback_limiting_bandwidth.py
+++ b/dom/media/test/external/external_media_tests/playback/test_playback_limiting_bandwidth.py
@@ -1,15 +1,15 @@
 # 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/.
 
 from marionette import BrowserMobProxyTestCaseMixin
 
-from harness.testcase import NetworkBandwidthTestCase
+from external_media_harness.testcase import NetworkBandwidthTestCase
 
 
 class TestPlaybackLimitingBandwidth(NetworkBandwidthTestCase,
                                     BrowserMobProxyTestCaseMixin):
 
     def test_playback_limiting_bandwidth_250(self):
         self.proxy.limits({'downstream_kbps': 250})
         self.run_videos()
rename from dom/media/test/external-media-tests/media_tests/playback/test_ultra_low_bandwidth.py
rename to dom/media/test/external/external_media_tests/playback/test_ultra_low_bandwidth.py
--- a/dom/media/test/external-media-tests/media_tests/playback/test_ultra_low_bandwidth.py
+++ b/dom/media/test/external/external_media_tests/playback/test_ultra_low_bandwidth.py
@@ -1,15 +1,15 @@
 # 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/.
 
 from marionette import BrowserMobProxyTestCaseMixin
 
-from harness.testcase import NetworkBandwidthTestCase
+from external_media_harness.testcase import NetworkBandwidthTestCase
 
 
 class TestUltraLowBandwidth(NetworkBandwidthTestCase,
                                     BrowserMobProxyTestCaseMixin):
 
     def test_playback_limiting_bandwidth_160(self):
         self.proxy.limits({'downstream_kbps': 160})
         self.run_videos()
rename from dom/media/test/external-media-tests/media_tests/playback/test_video_playback.py
rename to dom/media/test/external/external_media_tests/playback/test_video_playback.py
--- a/dom/media/test/external-media-tests/media_tests/playback/test_video_playback.py
+++ b/dom/media/test/external/external_media_tests/playback/test_video_playback.py
@@ -1,13 +1,13 @@
 # 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/.
 
-from harness.testcase import (
+from external_media_harness.testcase import (
     MediaTestCase,
     VideoPlaybackTestsMixin
 )
 
 
 class TestVideoPlayback(MediaTestCase, VideoPlaybackTestsMixin):
 
     # Tests are actually implemented in VideoPlaybackTestsMixin.
rename from dom/media/test/external-media-tests/media_tests/playback/youtube/manifest.ini
rename to dom/media/test/external/external_media_tests/playback/youtube/manifest.ini
rename from dom/media/test/external-media-tests/media_tests/playback/youtube/test_basic_playback.py
rename to dom/media/test/external/external_media_tests/playback/youtube/test_basic_playback.py
--- a/dom/media/test/external-media-tests/media_tests/playback/youtube/test_basic_playback.py
+++ b/dom/media/test/external/external_media_tests/playback/youtube/test_basic_playback.py
@@ -1,19 +1,19 @@
 # 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/.
 
 from marionette_driver import Wait
 from marionette_driver.errors import TimeoutException
 
-from media_tests.utils import verbose_until
-from harness.testcase import MediaTestCase
-from media_utils.video_puppeteer import VideoException
-from media_utils.youtube_puppeteer import (YouTubePuppeteer, playback_done,
+from external_media_tests.utils import verbose_until
+from external_media_harness.testcase import MediaTestCase
+from external_media_tests.media_utils.video_puppeteer import VideoException
+from external_media_tests.media_utils.youtube_puppeteer import (YouTubePuppeteer, playback_done,
                                            wait_for_almost_done)
 
 
 class TestBasicYouTubePlayback(MediaTestCase):
     def test_mse_is_enabled_by_default(self):
         with self.marionette.using_context('content'):
             youtube = YouTubePuppeteer(self.marionette, self.video_urls[0],
                                        timeout=60)
rename from dom/media/test/external-media-tests/media_tests/playback/youtube/test_prefs.py
rename to dom/media/test/external/external_media_tests/playback/youtube/test_prefs.py
--- a/dom/media/test/external-media-tests/media_tests/playback/youtube/test_prefs.py
+++ b/dom/media/test/external/external_media_tests/playback/youtube/test_prefs.py
@@ -1,17 +1,17 @@
 # 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/.
 
-from harness.testcase import MediaTestCase
+from external_media_harness.testcase import MediaTestCase
 from marionette_driver import Wait
 
-from media_tests.utils import verbose_until
-from media_utils.youtube_puppeteer import YouTubePuppeteer
+from external_media_tests.utils import verbose_until
+from external_media_tests.media_utils.youtube_puppeteer import YouTubePuppeteer
 
 
 class TestMediaSourcePrefs(MediaTestCase):
     def setUp(self):
         MediaTestCase.setUp(self)
         self.test_urls = self.video_urls[:2]
         self.max_timeout = 60
 
rename from dom/media/test/external-media-tests/media_tests/resources/mozilla.html
rename to dom/media/test/external/external_media_tests/resources/mozilla.html
rename from dom/media/test/external-media-tests/media_tests/test_example.py
rename to dom/media/test/external/external_media_tests/test_example.py
--- a/dom/media/test/external-media-tests/media_tests/test_example.py
+++ b/dom/media/test/external/external_media_tests/test_example.py
@@ -1,9 +1,9 @@
-from harness.testcase import MediaTestCase
+from external_media_harness.testcase import MediaTestCase
 
 
 class TestSomethingElse(MediaTestCase):
     def setUp(self):
         MediaTestCase.setUp(self)
         self.test_urls = [
             'mozilla.html',
             ]
rename from dom/media/test/external-media-tests/media_tests/urls/default.ini
rename to dom/media/test/external/external_media_tests/urls/default.ini
rename from dom/media/test/external-media-tests/media_tests/urls/netflix/default.ini
rename to dom/media/test/external/external_media_tests/urls/netflix/default.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/archive/crash_videos.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/archive/crash_videos.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/archive/other_videos.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/archive/other_videos.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/archive/video_data.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/archive/video_data.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/archive/youtube.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/archive/youtube.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/long1-720.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/long1-720.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/long2-720.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/long2-720.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/long3-crashes-720.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/long3-crashes-720.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/long4-crashes-900.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/long4-crashes-900.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/massive-6000.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/massive-6000.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/medium1-60.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/medium1-60.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/medium2-60.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/medium2-60.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/medium3-120.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/medium3-120.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/short0-10.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/short0-10.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/short1-15.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/short1-15.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/short2-15.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/short2-15.ini
rename from dom/media/test/external-media-tests/media_tests/urls/youtube/short3-crashes-15.ini
rename to dom/media/test/external/external_media_tests/urls/youtube/short3-crashes-15.ini
rename from dom/media/test/external-media-tests/media_tests/utils.py
rename to dom/media/test/external/external_media_tests/utils.py
rename from dom/media/test/external-media-tests/requirements.txt
rename to dom/media/test/external/requirements.txt
rename from dom/media/test/external-media-tests/setup.py
rename to dom/media/test/external/setup.py
--- a/dom/media/test/external-media-tests/setup.py
+++ b/dom/media/test/external/setup.py
@@ -1,42 +1,42 @@
 # 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/.
 
 from setuptools import setup, find_packages
 
-PACKAGE_VERSION = '0.4'
+PACKAGE_VERSION = '1.0'
 
 deps = [
     'marionette-client == 2.0.0',
     'marionette-driver == 1.1.1',
     'mozlog == 3.0',
     'manifestparser == 1.1',
     'firefox-puppeteer >= 3.1.0, <4.0.0',
 ]
 
-setup(name='firefox-media-tests',
+setup(name='external-media-tests',
       version=PACKAGE_VERSION,
       description=('A collection of Mozilla Firefox media playback tests run '
                    'with Marionette'),
       classifiers=[
           'Environment :: Console',
           'Intended Audience :: Developers',
           'License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)',
           'Natural Language :: English',
           'Operating System :: OS Independent',
           'Programming Language :: Python',
           'Topic :: Software Development :: Libraries :: Python Modules',
       ],
       keywords='mozilla',
       author='Mozilla Automation and Tools Team',
       author_email='tools@lists.mozilla.org',
-      url='https://github.com/mjzffr/firefox-media-tests',
+      url='https://hg.mozilla.org/mozilla-central/dom/media/test/external/',
       license='MPL 2.0',
       packages=find_packages(),
       zip_safe=False,
       install_requires=deps,
       include_package_data=True,
       entry_points="""
         [console_scripts]
-        firefox-media-tests = harness:cli
+        external-media-tests = external_media_harness:cli
     """)
--- a/python/mozbuild/mozbuild/action/test_archive.py
+++ b/python/mozbuild/mozbuild/action/test_archive.py
@@ -54,18 +54,19 @@ ARCHIVE_FILES = {
         },
         {
             'source': buildconfig.topsrcdir,
             'base': 'testing',
             'pattern': 'firefox-ui/**',
         },
         {
             'source': buildconfig.topsrcdir,
-            'base': 'dom/media/test',
-            'pattern': 'external-media-tests/**',
+            'base': 'dom/media/test/external',
+            'pattern': '**',
+            'dest': 'external-media-tests',
         },
         {
             'source': buildconfig.topsrcdir,
             'base': 'js/src',
             'pattern': 'jit-test/**',
             'dest': 'jit-test',
         },
         {