diff options
Diffstat (limited to 'testing/condprofile/condprof/tests')
-rw-r--r-- | testing/condprofile/condprof/tests/__init__.py | 0 | ||||
-rwxr-xr-x | testing/condprofile/condprof/tests/fakefirefox.py | 7 | ||||
-rwxr-xr-x | testing/condprofile/condprof/tests/fakegeckodriver.py | 144 | ||||
-rw-r--r-- | testing/condprofile/condprof/tests/ftp_mozilla.html | 1484 | ||||
-rw-r--r-- | testing/condprofile/condprof/tests/profile/prefs.js | 1 | ||||
-rw-r--r-- | testing/condprofile/condprof/tests/profile/user.js | 9 | ||||
-rw-r--r-- | testing/condprofile/condprof/tests/python.ini | 4 | ||||
-rw-r--r-- | testing/condprofile/condprof/tests/test_client.py | 126 | ||||
-rw-r--r-- | testing/condprofile/condprof/tests/test_runner.py | 123 |
9 files changed, 1898 insertions, 0 deletions
diff --git a/testing/condprofile/condprof/tests/__init__.py b/testing/condprofile/condprof/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 --- /dev/null +++ b/testing/condprofile/condprof/tests/__init__.py diff --git a/testing/condprofile/condprof/tests/fakefirefox.py b/testing/condprofile/condprof/tests/fakefirefox.py new file mode 100755 index 0000000000..82e24dd081 --- /dev/null +++ b/testing/condprofile/condprof/tests/fakefirefox.py @@ -0,0 +1,7 @@ +#!/usr/bin/env python3 +VERSION = """\ +Mozilla Firefox 70.0\ +""" + +if __name__ == "__main__": + print(VERSION) diff --git a/testing/condprofile/condprof/tests/fakegeckodriver.py b/testing/condprofile/condprof/tests/fakegeckodriver.py new file mode 100755 index 0000000000..ab40401aaf --- /dev/null +++ b/testing/condprofile/condprof/tests/fakegeckodriver.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python3 +import argparse +import json +from http.server import BaseHTTPRequestHandler, HTTPServer +from uuid import uuid4 + +_SESSIONS = {} + + +class Window: + def __init__(self, handle, title="about:blank"): + self.handle = handle + self.title = title + + def visit_url(self, url): + print("Visiting %s" % url) + # XXX todo, load the URL for real + self.url = url + + +class Session: + def __init__(self, uuid): + self.session_id = uuid + self.autoinc = 0 + self.windows = {} + self.active_handle = self.new_window() + + def visit(self, url): + self.windows[self.active_handle].visit_url(url) + + def new_window(self): + w = Window(self.autoinc) + self.windows[w.handle] = w + self.autoinc += 1 + return w.handle + + +class RequestHandler(BaseHTTPRequestHandler): + def _set_headers(self, status=200): + self.send_response(status) + self.send_header("Content-type", "application/json") + self.end_headers() + + def _send_response(self, status=200, data=None): + if data is None: + data = {} + data = json.dumps(data).encode("utf8") + self._set_headers(status) + self.wfile.write(data) + + def _parse_path(self): + path = self.path.lstrip("/") + sections = path.split("/") + session = None + action = [] + if len(sections) > 1: + session_id = sections[1] + if session_id in _SESSIONS: + session = _SESSIONS[session_id] + action = sections[2:] + return session, action + + def do_GET(self): + print("GET " + self.path) + if self.path == "/status": + return self._send_response(data={"ready": "OK"}) + + session, action = self._parse_path() + if action == ["window", "handles"]: + data = {"value": list(session.windows.keys())} + return self._send_response(data=data) + + if action == ["moz", "context"]: + data = {"value": "chrome"} + return self._send_response(data=data) + + return self._send_response(status=404) + + def do_POST(self): + print("POST " + self.path) + content_length = int(self.headers["Content-Length"]) + post_data = json.loads(self.rfile.read(content_length)) + + # new session + if self.path == "/session": + uuid = str(uuid4()) + _SESSIONS[uuid] = Session(uuid) + return self._send_response(data={"sessionId": uuid}) + + session, action = self._parse_path() + if action == ["url"]: + session.visit(post_data["url"]) + return self._send_response() + + if action == ["window", "new"]: + if session is None: + return self._send_response(404) + handle = session.new_window() + return self._send_response(data={"handle": handle, "type": "tab"}) + + if action == ["timeouts"]: + return self._send_response() + + if action == ["execute", "async"]: + return self._send_response(data={"logs": []}) + + # other commands not supported yet, we just return 200s + return self._send_response() + + def do_DELETE(self): + return self._send_response() + session, action = self._parse_path() + if session is not None: + del _SESSIONS[session.session_id] + return self._send_response() + return self._send_response(status=404) + + +VERSION = """\ +geckodriver 0.24.0 ( 2019-01-28) + +The source code of this program is available from +testing/geckodriver in https://hg.mozilla.org/mozilla-central. + +This program is subject to the terms of the Mozilla Public License 2.0. +You can obtain a copy of the license at https://mozilla.org/MPL/2.0/.\ +""" + + +if __name__ == "__main__": + parser = argparse.ArgumentParser(description="FakeGeckodriver") + parser.add_argument("--log", type=str, default=None) + parser.add_argument("--port", type=int, default=4444) + parser.add_argument("--marionette-port", type=int, default=2828) + parser.add_argument("--version", action="store_true", default=False) + parser.add_argument("--verbose", "-v", action="count") + args = parser.parse_args() + + if args.version: + print(VERSION) + else: + HTTPServer.allow_reuse_address = True + server = HTTPServer(("127.0.0.1", args.port), RequestHandler) + server.serve_forever() diff --git a/testing/condprofile/condprof/tests/ftp_mozilla.html b/testing/condprofile/condprof/tests/ftp_mozilla.html new file mode 100644 index 0000000000..c970f8483b --- /dev/null +++ b/testing/condprofile/condprof/tests/ftp_mozilla.html @@ -0,0 +1,1484 @@ +<!DOCTYPE html> +<html> + <head> + <meta charset="UTF-8"> + <title>Directory Listing: /pub/firefox/nightly/latest-mozilla-central/</title> + </head> + <body> + <h1>Index of /pub/firefox/nightly/latest-mozilla-central/</h1> + <table> + <tr> + <th>Type</th> + <th>Name</th> + <th>Size</th> + <th>Last Modified</th> + </tr> + + <tr> + <td>Dir</td> + <td><a href="/pub/firefox/nightly/">..</a></td> + <td></td> + <td></td> + </tr> + + + <tr> + <td>Dir</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/mar-tools/">mar-tools/</a></td> + <td></td> + <td></td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/Firefox%20Installer.en-US.exe">Firefox Installer.en-US.exe</a></td> + <td>294K</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.langpack.xpi">firefox-70.0a1.en-US.langpack.xpi</a></td> + <td>453K</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.awsy.tests.tar.gz">firefox-70.0a1.en-US.linux-i686.awsy.tests.tar.gz</a></td> + <td>20K</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.buildhub.json">firefox-70.0a1.en-US.linux-i686.buildhub.json</a></td> + <td>1K</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.checksums">firefox-70.0a1.en-US.linux-i686.checksums</a></td> + <td>8K</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.common.tests.tar.gz">firefox-70.0a1.en-US.linux-i686.common.tests.tar.gz</a></td> + <td>45M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.complete.mar">firefox-70.0a1.en-US.linux-i686.complete.mar</a></td> + <td>57M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.cppunittest.tests.tar.gz">firefox-70.0a1.en-US.linux-i686.cppunittest.tests.tar.gz</a></td> + <td>12M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.crashreporter-symbols.zip">firefox-70.0a1.en-US.linux-i686.crashreporter-symbols.zip</a></td> + <td>79M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.json">firefox-70.0a1.en-US.linux-i686.json</a></td> + <td>855</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.mochitest.tests.tar.gz">firefox-70.0a1.en-US.linux-i686.mochitest.tests.tar.gz</a></td> + <td>65M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.mozinfo.json">firefox-70.0a1.en-US.linux-i686.mozinfo.json</a></td> + <td>916</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.reftest.tests.tar.gz">firefox-70.0a1.en-US.linux-i686.reftest.tests.tar.gz</a></td> + <td>53M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.talos.tests.tar.gz">firefox-70.0a1.en-US.linux-i686.talos.tests.tar.gz</a></td> + <td>18M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.tar.bz2">firefox-70.0a1.en-US.linux-i686.tar.bz2</a></td> + <td>71M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.tar.bz2.asc">firefox-70.0a1.en-US.linux-i686.tar.bz2.asc</a></td> + <td>833</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.test_packages.json">firefox-70.0a1.en-US.linux-i686.test_packages.json</a></td> + <td>1K</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.txt">firefox-70.0a1.en-US.linux-i686.txt</a></td> + <td>99</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.web-platform.tests.tar.gz">firefox-70.0a1.en-US.linux-i686.web-platform.tests.tar.gz</a></td> + <td>53M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686.xpcshell.tests.tar.gz">firefox-70.0a1.en-US.linux-i686.xpcshell.tests.tar.gz</a></td> + <td>9M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-i686_info.txt">firefox-70.0a1.en-US.linux-i686_info.txt</a></td> + <td>23</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.awsy.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.awsy.tests.tar.gz</a></td> + <td>20K</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.buildhub.json">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.buildhub.json</a></td> + <td>1K</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.checksums">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.checksums</a></td> + <td>8K</td> + <td>02-Sep-2019 01:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.common.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.common.tests.tar.gz</a></td> + <td>55M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.complete.mar">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.complete.mar</a></td> + <td>208M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.cppunittest.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.cppunittest.tests.tar.gz</a></td> + <td>118M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.json">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.json</a></td> + <td>860</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.mochitest.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.mochitest.tests.tar.gz</a></td> + <td>65M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.mozinfo.json">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.mozinfo.json</a></td> + <td>927</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.reftest.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.reftest.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.talos.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.talos.tests.tar.gz</a></td> + <td>18M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.tar.bz2">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.tar.bz2</a></td> + <td>276M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.tar.bz2.asc">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.tar.bz2.asc</a></td> + <td>833</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.test_packages.json">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.test_packages.json</a></td> + <td>1K</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.txt">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.txt</a></td> + <td>99</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.web-platform.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.web-platform.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter.xpcshell.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64-asan-reporter.xpcshell.tests.tar.gz</a></td> + <td>10M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64-asan-reporter_info.txt">firefox-70.0a1.en-US.linux-x86_64-asan-reporter_info.txt</a></td> + <td>23</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.awsy.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64.awsy.tests.tar.gz</a></td> + <td>20K</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.buildhub.json">firefox-70.0a1.en-US.linux-x86_64.buildhub.json</a></td> + <td>1K</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.checksums">firefox-70.0a1.en-US.linux-x86_64.checksums</a></td> + <td>8K</td> + <td>02-Sep-2019 00:07</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.common.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64.common.tests.tar.gz</a></td> + <td>45M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.complete.mar">firefox-70.0a1.en-US.linux-x86_64.complete.mar</a></td> + <td>57M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.cppunittest.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64.cppunittest.tests.tar.gz</a></td> + <td>12M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.crashreporter-symbols.zip">firefox-70.0a1.en-US.linux-x86_64.crashreporter-symbols.zip</a></td> + <td>74M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.json">firefox-70.0a1.en-US.linux-x86_64.json</a></td> + <td>846</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.mochitest.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64.mochitest.tests.tar.gz</a></td> + <td>65M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.mozinfo.json">firefox-70.0a1.en-US.linux-x86_64.mozinfo.json</a></td> + <td>921</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.reftest.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64.reftest.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.talos.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64.talos.tests.tar.gz</a></td> + <td>18M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.tar.bz2">firefox-70.0a1.en-US.linux-x86_64.tar.bz2</a></td> + <td>71M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.tar.bz2.asc">firefox-70.0a1.en-US.linux-x86_64.tar.bz2.asc</a></td> + <td>833</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.test_packages.json">firefox-70.0a1.en-US.linux-x86_64.test_packages.json</a></td> + <td>1K</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.txt">firefox-70.0a1.en-US.linux-x86_64.txt</a></td> + <td>99</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.web-platform.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64.web-platform.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64.xpcshell.tests.tar.gz">firefox-70.0a1.en-US.linux-x86_64.xpcshell.tests.tar.gz</a></td> + <td>9M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.linux-x86_64_info.txt">firefox-70.0a1.en-US.linux-x86_64_info.txt</a></td> + <td>23</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.awsy.tests.tar.gz">firefox-70.0a1.en-US.mac.awsy.tests.tar.gz</a></td> + <td>20K</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.buildhub.json">firefox-70.0a1.en-US.mac.buildhub.json</a></td> + <td>1K</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.checksums">firefox-70.0a1.en-US.mac.checksums</a></td> + <td>7K</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.common.tests.tar.gz">firefox-70.0a1.en-US.mac.common.tests.tar.gz</a></td> + <td>20M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.complete.mar">firefox-70.0a1.en-US.mac.complete.mar</a></td> + <td>60M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.cppunittest.tests.tar.gz">firefox-70.0a1.en-US.mac.cppunittest.tests.tar.gz</a></td> + <td>10M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.crashreporter-symbols.zip">firefox-70.0a1.en-US.mac.crashreporter-symbols.zip</a></td> + <td>54M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.dmg">firefox-70.0a1.en-US.mac.dmg</a></td> + <td>79M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.json">firefox-70.0a1.en-US.mac.json</a></td> + <td>1K</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.mochitest.tests.tar.gz">firefox-70.0a1.en-US.mac.mochitest.tests.tar.gz</a></td> + <td>65M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.mozinfo.json">firefox-70.0a1.en-US.mac.mozinfo.json</a></td> + <td>923</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.pkg">firefox-70.0a1.en-US.mac.pkg</a></td> + <td>83M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.reftest.tests.tar.gz">firefox-70.0a1.en-US.mac.reftest.tests.tar.gz</a></td> + <td>53M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.talos.tests.tar.gz">firefox-70.0a1.en-US.mac.talos.tests.tar.gz</a></td> + <td>18M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.test_packages.json">firefox-70.0a1.en-US.mac.test_packages.json</a></td> + <td>1K</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.txt">firefox-70.0a1.en-US.mac.txt</a></td> + <td>99</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.web-platform.tests.tar.gz">firefox-70.0a1.en-US.mac.web-platform.tests.tar.gz</a></td> + <td>53M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac.xpcshell.tests.tar.gz">firefox-70.0a1.en-US.mac.xpcshell.tests.tar.gz</a></td> + <td>9M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.mac_info.txt">firefox-70.0a1.en-US.mac_info.txt</a></td> + <td>23</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.awsy.tests.tar.gz">firefox-70.0a1.en-US.win32.awsy.tests.tar.gz</a></td> + <td>20K</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.buildhub.json">firefox-70.0a1.en-US.win32.buildhub.json</a></td> + <td>1K</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.checksums">firefox-70.0a1.en-US.win32.checksums</a></td> + <td>8K</td> + <td>02-Sep-2019 00:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.common.tests.tar.gz">firefox-70.0a1.en-US.win32.common.tests.tar.gz</a></td> + <td>22M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.complete.mar">firefox-70.0a1.en-US.win32.complete.mar</a></td> + <td>51M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.cppunittest.tests.tar.gz">firefox-70.0a1.en-US.win32.cppunittest.tests.tar.gz</a></td> + <td>10M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.crashreporter-symbols.zip">firefox-70.0a1.en-US.win32.crashreporter-symbols.zip</a></td> + <td>34M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.installer.exe">firefox-70.0a1.en-US.win32.installer.exe</a></td> + <td>48M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.installer.msi">firefox-70.0a1.en-US.win32.installer.msi</a></td> + <td>48M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.json">firefox-70.0a1.en-US.win32.json</a></td> + <td>884</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.mochitest.tests.tar.gz">firefox-70.0a1.en-US.win32.mochitest.tests.tar.gz</a></td> + <td>65M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.mozinfo.json">firefox-70.0a1.en-US.win32.mozinfo.json</a></td> + <td>948</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.reftest.tests.tar.gz">firefox-70.0a1.en-US.win32.reftest.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.talos.tests.tar.gz">firefox-70.0a1.en-US.win32.talos.tests.tar.gz</a></td> + <td>18M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.test_packages.json">firefox-70.0a1.en-US.win32.test_packages.json</a></td> + <td>1K</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.txt">firefox-70.0a1.en-US.win32.txt</a></td> + <td>99</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.web-platform.tests.tar.gz">firefox-70.0a1.en-US.win32.web-platform.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.xpcshell.tests.tar.gz">firefox-70.0a1.en-US.win32.xpcshell.tests.tar.gz</a></td> + <td>9M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32.zip">firefox-70.0a1.en-US.win32.zip</a></td> + <td>70M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win32_info.txt">firefox-70.0a1.en-US.win32_info.txt</a></td> + <td>23</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.awsy.tests.tar.gz">firefox-70.0a1.en-US.win64-aarch64.awsy.tests.tar.gz</a></td> + <td>20K</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.buildhub.json">firefox-70.0a1.en-US.win64-aarch64.buildhub.json</a></td> + <td>914</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.checksums">firefox-70.0a1.en-US.win64-aarch64.checksums</a></td> + <td>8K</td> + <td>02-Sep-2019 01:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.common.tests.tar.gz">firefox-70.0a1.en-US.win64-aarch64.common.tests.tar.gz</a></td> + <td>20M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.complete.mar">firefox-70.0a1.en-US.win64-aarch64.complete.mar</a></td> + <td>78M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.cppunittest.tests.tar.gz">firefox-70.0a1.en-US.win64-aarch64.cppunittest.tests.tar.gz</a></td> + <td>10M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.crashreporter-symbols.zip">firefox-70.0a1.en-US.win64-aarch64.crashreporter-symbols.zip</a></td> + <td>20M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.installer.exe">firefox-70.0a1.en-US.win64-aarch64.installer.exe</a></td> + <td>74M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.json">firefox-70.0a1.en-US.win64-aarch64.json</a></td> + <td>705</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.mochitest.tests.tar.gz">firefox-70.0a1.en-US.win64-aarch64.mochitest.tests.tar.gz</a></td> + <td>65M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.mozinfo.json">firefox-70.0a1.en-US.win64-aarch64.mozinfo.json</a></td> + <td>946</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.reftest.tests.tar.gz">firefox-70.0a1.en-US.win64-aarch64.reftest.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.talos.tests.tar.gz">firefox-70.0a1.en-US.win64-aarch64.talos.tests.tar.gz</a></td> + <td>18M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.test_packages.json">firefox-70.0a1.en-US.win64-aarch64.test_packages.json</a></td> + <td>1K</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.txt">firefox-70.0a1.en-US.win64-aarch64.txt</a></td> + <td>99</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.web-platform.tests.tar.gz">firefox-70.0a1.en-US.win64-aarch64.web-platform.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.xpcshell.tests.tar.gz">firefox-70.0a1.en-US.win64-aarch64.xpcshell.tests.tar.gz</a></td> + <td>9M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64.zip">firefox-70.0a1.en-US.win64-aarch64.zip</a></td> + <td>110M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-aarch64_info.txt">firefox-70.0a1.en-US.win64-aarch64_info.txt</a></td> + <td>23</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.awsy.tests.tar.gz">firefox-70.0a1.en-US.win64-asan-reporter.awsy.tests.tar.gz</a></td> + <td>20K</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.buildhub.json">firefox-70.0a1.en-US.win64-asan-reporter.buildhub.json</a></td> + <td>1K</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.checksums">firefox-70.0a1.en-US.win64-asan-reporter.checksums</a></td> + <td>7K</td> + <td>02-Sep-2019 00:17</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.common.tests.tar.gz">firefox-70.0a1.en-US.win64-asan-reporter.common.tests.tar.gz</a></td> + <td>22M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.complete.mar">firefox-70.0a1.en-US.win64-asan-reporter.complete.mar</a></td> + <td>201M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.cppunittest.tests.tar.gz">firefox-70.0a1.en-US.win64-asan-reporter.cppunittest.tests.tar.gz</a></td> + <td>56M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.installer.exe">firefox-70.0a1.en-US.win64-asan-reporter.installer.exe</a></td> + <td>191M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.json">firefox-70.0a1.en-US.win64-asan-reporter.json</a></td> + <td>894</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.mochitest.tests.tar.gz">firefox-70.0a1.en-US.win64-asan-reporter.mochitest.tests.tar.gz</a></td> + <td>65M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.mozinfo.json">firefox-70.0a1.en-US.win64-asan-reporter.mozinfo.json</a></td> + <td>957</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.reftest.tests.tar.gz">firefox-70.0a1.en-US.win64-asan-reporter.reftest.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.talos.tests.tar.gz">firefox-70.0a1.en-US.win64-asan-reporter.talos.tests.tar.gz</a></td> + <td>18M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.test_packages.json">firefox-70.0a1.en-US.win64-asan-reporter.test_packages.json</a></td> + <td>1K</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.txt">firefox-70.0a1.en-US.win64-asan-reporter.txt</a></td> + <td>99</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.web-platform.tests.tar.gz">firefox-70.0a1.en-US.win64-asan-reporter.web-platform.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.xpcshell.tests.tar.gz">firefox-70.0a1.en-US.win64-asan-reporter.xpcshell.tests.tar.gz</a></td> + <td>9M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter.zip">firefox-70.0a1.en-US.win64-asan-reporter.zip</a></td> + <td>307M</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64-asan-reporter_info.txt">firefox-70.0a1.en-US.win64-asan-reporter_info.txt</a></td> + <td>23</td> + <td>02-Sep-2019 00:16</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.awsy.tests.tar.gz">firefox-70.0a1.en-US.win64.awsy.tests.tar.gz</a></td> + <td>20K</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.buildhub.json">firefox-70.0a1.en-US.win64.buildhub.json</a></td> + <td>1K</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.checksums">firefox-70.0a1.en-US.win64.checksums</a></td> + <td>8K</td> + <td>02-Sep-2019 00:45</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.common.tests.tar.gz">firefox-70.0a1.en-US.win64.common.tests.tar.gz</a></td> + <td>22M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.complete.mar">firefox-70.0a1.en-US.win64.complete.mar</a></td> + <td>53M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.cppunittest.tests.tar.gz">firefox-70.0a1.en-US.win64.cppunittest.tests.tar.gz</a></td> + <td>11M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.crashreporter-symbols.zip">firefox-70.0a1.en-US.win64.crashreporter-symbols.zip</a></td> + <td>25M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.installer.exe">firefox-70.0a1.en-US.win64.installer.exe</a></td> + <td>50M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.installer.msi">firefox-70.0a1.en-US.win64.installer.msi</a></td> + <td>50M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.json">firefox-70.0a1.en-US.win64.json</a></td> + <td>880</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.mochitest.tests.tar.gz">firefox-70.0a1.en-US.win64.mochitest.tests.tar.gz</a></td> + <td>65M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.mozinfo.json">firefox-70.0a1.en-US.win64.mozinfo.json</a></td> + <td>951</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.reftest.tests.tar.gz">firefox-70.0a1.en-US.win64.reftest.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.talos.tests.tar.gz">firefox-70.0a1.en-US.win64.talos.tests.tar.gz</a></td> + <td>18M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.test_packages.json">firefox-70.0a1.en-US.win64.test_packages.json</a></td> + <td>1K</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.txt">firefox-70.0a1.en-US.win64.txt</a></td> + <td>99</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.web-platform.tests.tar.gz">firefox-70.0a1.en-US.win64.web-platform.tests.tar.gz</a></td> + <td>53M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.xpcshell.tests.tar.gz">firefox-70.0a1.en-US.win64.xpcshell.tests.tar.gz</a></td> + <td>9M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64.zip">firefox-70.0a1.en-US.win64.zip</a></td> + <td>73M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/firefox-70.0a1.en-US.win64_info.txt">firefox-70.0a1.en-US.win64_info.txt</a></td> + <td>23</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/jsshell-linux-i686.zip">jsshell-linux-i686.zip</a></td> + <td>11M</td> + <td>01-Sep-2019 23:49</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/jsshell-linux-x86_64.zip">jsshell-linux-x86_64.zip</a></td> + <td>11M</td> + <td>02-Sep-2019 00:06</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/jsshell-mac.zip">jsshell-mac.zip</a></td> + <td>11M</td> + <td>01-Sep-2019 23:19</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/jsshell-win32.zip">jsshell-win32.zip</a></td> + <td>10M</td> + <td>02-Sep-2019 00:48</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/jsshell-win64-aarch64.zip">jsshell-win64-aarch64.zip</a></td> + <td>1M</td> + <td>02-Sep-2019 01:15</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/jsshell-win64.zip">jsshell-win64.zip</a></td> + <td>11M</td> + <td>02-Sep-2019 00:44</td> + </tr> + + + + <tr> + <td>File</td> + <td><a href="/pub/firefox/nightly/latest-mozilla-central/mozharness.zip">mozharness.zip</a></td> + <td>2M</td> + <td>02-Sep-2019 01:43</td> + </tr> + + + </table> + </body> +</html> diff --git a/testing/condprofile/condprof/tests/profile/prefs.js b/testing/condprofile/condprof/tests/profile/prefs.js new file mode 100644 index 0000000000..abbe0fb70b --- /dev/null +++ b/testing/condprofile/condprof/tests/profile/prefs.js @@ -0,0 +1 @@ +user_pref("gfx.blacklist.direct2d", 1); diff --git a/testing/condprofile/condprof/tests/profile/user.js b/testing/condprofile/condprof/tests/profile/user.js new file mode 100644 index 0000000000..c1efc79c10 --- /dev/null +++ b/testing/condprofile/condprof/tests/profile/user.js @@ -0,0 +1,9 @@ + +#Prefs used for the unit test +user_pref("focusmanager.testmode", true); +user_pref("marionette.defaultPrefs.port", 2828); +user_pref("marionette.port", 2828); +user_pref("remote.log.level", "Trace"); +user_pref("marionette.log.truncate", false); +user_pref("extensions.autoDisableScopes", 0); +user_pref("devtools.debugger.remote-enabled", true); diff --git a/testing/condprofile/condprof/tests/python.ini b/testing/condprofile/condprof/tests/python.ini new file mode 100644 index 0000000000..ec105582f1 --- /dev/null +++ b/testing/condprofile/condprof/tests/python.ini @@ -0,0 +1,4 @@ +[DEFAULT] +subsuite = condprof + +[test_client.py] diff --git a/testing/condprofile/condprof/tests/test_client.py b/testing/condprofile/condprof/tests/test_client.py new file mode 100644 index 0000000000..8410133e16 --- /dev/null +++ b/testing/condprofile/condprof/tests/test_client.py @@ -0,0 +1,126 @@ +import json +import os +import re +import shutil +import tarfile +import tempfile +import unittest + +import responses +from mozprofile.prefs import Preferences + +from condprof.client import ROOT_URL, TC_SERVICE, get_profile +from condprof.util import _DEFAULT_SERVER + +PROFILE = re.compile(ROOT_URL + "/.*/.*tgz") +PROFILE_FOR_TESTS = os.path.join(os.path.dirname(__file__), "profile") +SECRETS = re.compile(_DEFAULT_SERVER + "/.*") +SECRETS_PROXY = re.compile("http://taskcluster/secrets/.*") + + +class TestClient(unittest.TestCase): + def setUp(self): + self.profile_dir = tempfile.mkdtemp() + + # creating profile.tgz on the fly for serving it + profile_tgz = os.path.join(self.profile_dir, "profile.tgz") + with tarfile.open(profile_tgz, "w:gz") as tar: + tar.add(PROFILE_FOR_TESTS, arcname=".") + + # self.profile_data is the tarball we're sending back via HTTP + with open(profile_tgz, "rb") as f: + self.profile_data = f.read() + + self.target = tempfile.mkdtemp() + self.download_dir = os.path.expanduser("~/.condprof-cache") + if os.path.exists(self.download_dir): + shutil.rmtree(self.download_dir) + + responses.add( + responses.GET, + PROFILE, + body=self.profile_data, + headers={"content-length": str(len(self.profile_data)), "ETag": "'12345'"}, + status=200, + ) + + responses.add( + responses.HEAD, + PROFILE, + body="", + headers={"content-length": str(len(self.profile_data)), "ETag": "'12345'"}, + status=200, + ) + + responses.add(responses.HEAD, TC_SERVICE, body="", status=200) + + secret = {"secret": {"username": "user", "password": "pass"}} + secret = json.dumps(secret) + for pattern in (SECRETS, SECRETS_PROXY): + responses.add( + responses.GET, + pattern, + body=secret, + headers={"content-length": str(len(secret))}, + status=200, + ) + + def tearDown(self): + shutil.rmtree(self.target) + shutil.rmtree(self.download_dir) + shutil.rmtree(self.profile_dir) + + @responses.activate + def test_cache(self): + download_dir = os.path.expanduser("~/.condprof-cache") + if os.path.exists(download_dir): + num_elmts = len(os.listdir(download_dir)) + else: + num_elmts = 0 + + get_profile(self.target, "win64", "settled", "default") + + # grabbing a profile should generate two files + self.assertEqual(len(os.listdir(download_dir)), num_elmts + 2) + + # we do at least two network calls when getting a file, + # a HEAD and a GET and possibly a TC secret + self.assertTrue(len(responses.calls) >= 2) + + # reseting the response counters + responses.calls.reset() + + # and we should reuse them without downloading the file again + get_profile(self.target, "win64", "settled", "default") + + # grabbing a profile should not download new stuff + self.assertEqual(len(os.listdir(download_dir)), num_elmts + 2) + + # and do a single extra HEAD call, everything else is cached, + # even the TC secret + self.assertEqual(len(responses.calls), 2) + + prefs_js = os.path.join(self.target, "prefs.js") + prefs = Preferences.read_prefs(prefs_js) + + # check that the gfx.blacklist prefs where cleaned out + for name, value in prefs: + self.assertFalse(name.startswith("gfx.blacklist")) + + # check that we have the startupScanScopes option forced + prefs = dict(prefs) + self.assertEqual(prefs["extensions.startupScanScopes"], 1) + + # make sure we don't have any marionette option set + user_js = os.path.join(self.target, "user.js") + for name, value in Preferences.read_prefs(user_js): + self.assertFalse(name.startswith("marionette.")) + + +if __name__ == "__main__": + try: + import mozunit + except ImportError: + pass + else: + mozunit.main(runwith="unittest") diff --git a/testing/condprofile/condprof/tests/test_runner.py b/testing/condprofile/condprof/tests/test_runner.py new file mode 100644 index 0000000000..e200a537e1 --- /dev/null +++ b/testing/condprofile/condprof/tests/test_runner.py @@ -0,0 +1,123 @@ +import asyncio +import os +import re +import shutil +import tarfile +import tempfile +import unittest + +import responses + +from condprof import client +from condprof.client import ROOT_URL, TC_SERVICE +from condprof.main import main + +client.RETRIES = 1 +client.RETRY_PAUSE = 0 +GECKODRIVER = os.path.join(os.path.dirname(__file__), "fakegeckodriver.py") +FIREFOX = os.path.join(os.path.dirname(__file__), "fakefirefox.py") +CHANGELOG = re.compile(ROOT_URL + "/.*/changelog.json") +FTP = "https://ftp.mozilla.org/pub/firefox/nightly/latest-mozilla-central/" +PROFILE = re.compile(ROOT_URL + "/.*/.*tgz") + + +with open(os.path.join(os.path.dirname(__file__), "ftp_mozilla.html")) as f: + FTP_PAGE = f.read() + +FTP_ARCHIVE = re.compile( + "https://ftp.mozilla.org/pub/firefox/nightly/" "latest-mozilla-central/firefox.*" +) + +ADDON = re.compile("https://addons.mozilla.org/.*/.*xpi") + + +async def fakesleep(duration): + if duration > 1: + duration = 1 + await asyncio.realsleep(duration) + + +asyncio.realsleep = asyncio.sleep +asyncio.sleep = fakesleep + + +class TestRunner(unittest.TestCase): + def setUp(self): + self.archive_dir = tempfile.mkdtemp() + responses.add(responses.GET, CHANGELOG, json={"error": "not found"}, status=404) + responses.add( + responses.GET, FTP, content_type="text/html", body=FTP_PAGE, status=200 + ) + + profile_tgz = os.path.join(os.path.dirname(__file__), "profile.tgz") + profile = os.path.join(os.path.dirname(__file__), "profile") + + with tarfile.open(profile_tgz, "w:gz") as tar: + tar.add(profile, arcname=".") + + with open(profile_tgz, "rb") as f: + PROFILE_DATA = f.read() + + os.remove(profile_tgz) + + responses.add( + responses.GET, + FTP_ARCHIVE, + body="1", + headers={"content-length": "1"}, + status=200, + ) + + responses.add( + responses.GET, + PROFILE, + body=PROFILE_DATA, + headers={"content-length": str(len(PROFILE_DATA))}, + status=200, + ) + + responses.add( + responses.HEAD, + PROFILE, + body="", + headers={"content-length": str(len(PROFILE_DATA))}, + status=200, + ) + + responses.add(responses.HEAD, FTP_ARCHIVE, body="", status=200) + + responses.add( + responses.GET, ADDON, body="1", headers={"content-length": "1"}, status=200 + ) + + responses.add( + responses.HEAD, ADDON, body="", headers={"content-length": "1"}, status=200 + ) + + responses.add(responses.HEAD, TC_SERVICE, body="", status=200) + + def tearDown(self): + shutil.rmtree(self.archive_dir) + + @responses.activate + def test_runner(self): + if "FXA_USERNAME" not in os.environ: + os.environ["FXA_USERNAME"] = "me" + if "FXA_PASSWORD" not in os.environ: + os.environ["FXA_PASSWORD"] = "password" + try: + args = [ + "--geckodriver", + GECKODRIVER, + "--firefox", + FIREFOX, + self.archive_dir, + ] + main(args) + # XXX we want a bunch of assertions here to check + # that the archives dir gets filled correctly + finally: + if os.environ["FXA_USERNAME"] == "me": + del os.environ["FXA_USERNAME"] + if os.environ["FXA_PASSWORD"] == "password": + del os.environ["FXA_PASSWORD"] |