Bug 1298715 - Add taskcluster specific scripts and config for external media tests. r?grenade draft
authorBryce Van Dyk <bvandyk@mozilla.com>
Tue, 01 Nov 2016 00:16:00 +1300
changeset 431831 7b8b449415563a28282f4f9df5428b09c8ce65a6
parent 431640 e3279760cd977aac30bd9e8032d3ee71f55d2a67
child 431832 4ce248f40e5cbb09216b53b89ef0bdf444baef6d
push id34122
push userbvandyk@mozilla.com
push dateMon, 31 Oct 2016 18:56:12 +0000
reviewersgrenade
bugs1298715
milestone52.0a1
Bug 1298715 - Add taskcluster specific scripts and config for external media tests. r?grenade This changeset adds a taskcluster specific mozharness script and posix config for the external media tests. It also removes some of the no longer needed config from the windows task cluster config for these tests. MozReview-Commit-ID: 1E5fkFV5DeV
testing/mozharness/configs/mediatests/taskcluster_posix_config.py
testing/mozharness/configs/mediatests/taskcluster_windows_config.py
testing/mozharness/scripts/firefox_media_tests_taskcluster.py
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/configs/mediatests/taskcluster_posix_config.py
@@ -0,0 +1,47 @@
+import os
+import mozharness
+
+external_tools_path = os.path.join(
+    os.path.abspath(os.path.dirname(os.path.dirname(mozharness.__file__))),
+    'external_tools',
+)
+
+config = {
+    # Python env
+    "virtualenv_path": 'venv',
+    "exes": {
+        'python': '/tools/buildbot/bin/python',
+        'virtualenv': ['/tools/buildbot/bin/python', '/tools/misc-python/virtualenv.py'],
+        'tooltool.py': "/tools/tooltool.py",
+    },
+
+    # PIP
+    "find_links": [
+        "http://pypi.pvt.build.mozilla.org/pub",
+        "http://pypi.pub.build.mozilla.org/pub",
+    ],
+    "pip_index": False,
+
+    #mozcrash support
+    "download_minidump_stackwalk": True,
+    "download_symbols": "ondemand",
+
+    "default_actions": [
+        'clobber',
+        'download-and-extract',
+        'create-virtualenv',
+        'install',
+        'run-media-tests',
+    ],
+
+    "suite_definitions": {
+        "media-tests": {
+            "options": [],
+        },
+        "media-youtube-tests": {
+            "options": [
+                "%(test_manifest)s"
+            ],
+        },
+    },
+}
--- a/testing/mozharness/configs/mediatests/taskcluster_windows_config.py
+++ b/testing/mozharness/configs/mediatests/taskcluster_windows_config.py
@@ -21,30 +21,26 @@ config = {
         'hg': os.path.join(os.environ['PROGRAMFILES'], 'Mercurial', 'hg')
     },
     "find_links": [
         "http://pypi.pvt.build.mozilla.org/pub",
         "http://pypi.pub.build.mozilla.org/pub",
     ],
     "pip_index": False,
 
+    "download_minidump_stackwalk": True,
+    "download_symbols": "ondemand",
+
     "default_actions": [
         'clobber',
         'download-and-extract',
         'create-virtualenv',
         'install',
         'run-media-tests',
     ],
-    "default_blob_upload_servers": [
-         "https://blobupload.elasticbeanstalk.com",
-    ],
-    "blob_uploader_auth_file" : 'C:/builds/oauth.txt',
-    "in_tree_config": "config/mozharness/marionette.py",
-    "download_minidump_stackwalk": True,
-    "download_symbols": "ondemand",
 
     "suite_definitions": {
         "media-tests": {
             "options": [],
         },
         "media-youtube-tests": {
             "options": [
                 "%(test_manifest)s"
new file mode 100644
--- /dev/null
+++ b/testing/mozharness/scripts/firefox_media_tests_taskcluster.py
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+# ***** 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/.
+# ***** BEGIN LICENSE BLOCK *****
+"""firefox_media_tests_taskcluster.py
+
+Adapted from firefox_media_tests_buildbot.py
+
+Author: Bryce Van Dyk
+"""
+import copy
+import glob
+import os
+import sys
+
+sys.path.insert(1, os.path.dirname(sys.path[0]))
+
+from mozharness.base.log import DEBUG, ERROR, INFO
+from mozharness.base.script import PostScriptAction
+from mozharness.mozilla.blob_upload import (
+    BlobUploadMixin,
+    blobupload_config_options
+)
+from mozharness.mozilla.testing.firefox_media_tests import (
+    FirefoxMediaTestsBase, TESTFAILED, SUCCESS
+)
+
+
+class FirefoxMediaTestsTaskcluster(FirefoxMediaTestsBase):
+
+    def __init__(self):
+        config_options = copy.deepcopy(blobupload_config_options)
+        super(FirefoxMediaTestsTaskcluster, self).__init__(
+            config_options=config_options,
+            all_actions=['clobber',
+                         'download-and-extract',
+                         'create-virtualenv',
+                         'install',
+                         'run-media-tests',
+                         ],
+        )
+
+    def query_abs_dirs(self):
+        if self.abs_dirs:
+            return self.abs_dirs
+        abs_dirs = super(FirefoxMediaTestsTaskcluster, self).query_abs_dirs()
+        dirs = {
+            'abs_blob_upload_dir': os.path.join(abs_dirs['abs_work_dir'],
+                                                   'blobber_upload_dir')
+        }
+        abs_dirs.update(dirs)
+        self.abs_dirs = abs_dirs
+        return self.abs_dirs
+
+    def _query_cmd(self):
+        cmd = super(FirefoxMediaTestsTaskcluster, self)._query_cmd()
+        dirs = self.query_abs_dirs()
+        # configure logging
+        blob_upload_dir = dirs.get('abs_blob_upload_dir')
+        cmd += ['--gecko-log', os.path.join(blob_upload_dir, 'gecko.log')]
+        cmd += ['--log-html', os.path.join(blob_upload_dir, 'media_tests.html')]
+        cmd += ['--log-mach', os.path.join(blob_upload_dir, 'media_tests_mach.log')]
+        return cmd
+
+    @PostScriptAction('run-media-tests')
+    def _collect_uploads(self, action, success=None):
+        """ Copy extra (log) files to blob upload dir. """
+        dirs = self.query_abs_dirs()
+        log_dir = dirs.get('abs_log_dir')
+        blob_upload_dir = dirs.get('abs_blob_upload_dir')
+        if not log_dir or not blob_upload_dir:
+            return
+        self.mkdir_p(blob_upload_dir)
+        # Move firefox-media-test screenshots into log_dir
+        screenshots_dir = os.path.join(dirs['base_work_dir'],
+                                       'screenshots')
+        log_screenshots_dir = os.path.join(log_dir, 'screenshots')
+        if os.access(log_screenshots_dir, os.F_OK):
+            self.rmtree(log_screenshots_dir)
+        if os.access(screenshots_dir, os.F_OK):
+            self.move(screenshots_dir, log_screenshots_dir)
+
+        # logs to upload: broadest level (info), error, screenshots
+        uploads = glob.glob(os.path.join(log_screenshots_dir, '*'))
+        log_files = self.log_obj.log_files
+        log_level = self.log_obj.log_level
+
+        def append_path(filename, dir=log_dir):
+            if filename:
+                uploads.append(os.path.join(dir, filename))
+
+        append_path(log_files.get(ERROR))
+        # never upload debug logs
+        if log_level == DEBUG:
+            append_path(log_files.get(INFO))
+        else:
+            append_path(log_files.get(log_level))
+        # in case of SimpleFileLogger
+        append_path(log_files.get('default'))
+        for f in uploads:
+            if os.access(f, os.F_OK):
+                dest = os.path.join(blob_upload_dir, os.path.basename(f))
+                self.copyfile(f, dest)
+
+
+if __name__ == '__main__':
+    media_test = FirefoxMediaTestsTaskcluster()
+    media_test.run_and_exit()