summaryrefslogtreecommitdiffstats
path: root/testing/condprofile/condprof/tests
diff options
context:
space:
mode:
Diffstat (limited to 'testing/condprofile/condprof/tests')
-rw-r--r--testing/condprofile/condprof/tests/__init__.py0
-rwxr-xr-xtesting/condprofile/condprof/tests/fakefirefox.py7
-rwxr-xr-xtesting/condprofile/condprof/tests/fakegeckodriver.py146
-rw-r--r--testing/condprofile/condprof/tests/ftp_mozilla.html1484
-rw-r--r--testing/condprofile/condprof/tests/profile/prefs.js1
-rw-r--r--testing/condprofile/condprof/tests/profile/user.js11
-rw-r--r--testing/condprofile/condprof/tests/python.ini6
-rw-r--r--testing/condprofile/condprof/tests/test_client.py128
-rw-r--r--testing/condprofile/condprof/tests/test_runner.py125
9 files changed, 1908 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..35159cb7b7
--- /dev/null
+++ b/testing/condprofile/condprof/tests/fakegeckodriver.py
@@ -0,0 +1,146 @@
+#!/usr/bin/env python3
+from __future__ import absolute_import
+from uuid import uuid4
+import json
+from http.server import BaseHTTPRequestHandler, HTTPServer
+import argparse
+
+
+_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..0cb9754ce9
--- /dev/null
+++ b/testing/condprofile/condprof/tests/profile/user.js
@@ -0,0 +1,11 @@
+
+#Prefs used for the unit test
+user_pref("focusmanager.testmode", true);
+user_pref("marionette.defaultPrefs.port", 2828);
+user_pref("marionette.port", 2828);
+user_pref("marionette.enabled", true);
+user_pref("marionette.log.level", "Trace");
+user_pref("marionette.log.truncate", false);
+user_pref("marionette.contentListener", 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..bc5ded0e52
--- /dev/null
+++ b/testing/condprofile/condprof/tests/python.ini
@@ -0,0 +1,6 @@
+[DEFAULT]
+subsuite = condprof
+skip-if = python == 3
+
+[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..82aac59d4d
--- /dev/null
+++ b/testing/condprofile/condprof/tests/test_client.py
@@ -0,0 +1,128 @@
+from __future__ import absolute_import
+import unittest
+import os
+import tempfile
+import shutil
+import responses
+import re
+import json
+import tarfile
+
+from mozprofile.prefs import Preferences
+
+from condprof.client import get_profile, TC_SERVICE, ROOT_URL
+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..70b373d348
--- /dev/null
+++ b/testing/condprofile/condprof/tests/test_runner.py
@@ -0,0 +1,125 @@
+from __future__ import absolute_import
+import os
+import unittest
+import tempfile
+import shutil
+import re
+import asyncio
+import tarfile
+
+import responses
+
+from condprof.main import main
+from condprof.client import ROOT_URL, TC_SERVICE
+from condprof import client
+
+
+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"]