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"]