tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

conftest.py (2200B)


      1 # This Source Code Form is subject to the terms of the Mozilla Public
      2 # License, v. 2.0. If a copy of the MPL was not distributed with this file,
      3 # You can obtain one at http://mozilla.org/MPL/2.0/.
      4 
      5 import os
      6 import threading
      7 from time import sleep
      8 
      9 import mozrunner
     10 import pytest
     11 from moztest.selftest import fixtures
     12 
     13 
     14 @pytest.fixture(scope="session")
     15 def get_binary():
     16    if "BROWSER_PATH" in os.environ:
     17        os.environ["GECKO_BINARY_PATH"] = os.environ["BROWSER_PATH"]
     18 
     19    def inner(app):
     20        if app not in ("chrome", "chromium", "firefox"):
     21            pytest.xfail(reason=f"{app} support not implemented")
     22 
     23        if app == "firefox":
     24            binary = fixtures.binary()
     25        elif app == "chrome":
     26            binary = os.environ.get("CHROME_BINARY_PATH")
     27        elif app == "chromium":
     28            binary = os.environ.get("CHROMIUM_BINARY_PATH")
     29 
     30        if not binary:
     31            pytest.skip(f"could not find a {app} binary")
     32        return binary
     33 
     34    return inner
     35 
     36 
     37 @pytest.fixture(params=["firefox", "chrome", "chromium"])
     38 def runner(request, get_binary):
     39    app = request.param
     40    binary = get_binary(app)
     41 
     42    cmdargs = ["--headless"]
     43    if app in ["chrome", "chromium"]:
     44        # prevents headless chromium from exiting after loading the page
     45        cmdargs.append("--remote-debugging-port=9222")
     46        # only needed on Windows, but no harm in specifying it everywhere
     47        cmdargs.append("--disable-gpu")
     48    runner = mozrunner.runners[app](binary, cmdargs=cmdargs)
     49    runner.app = app
     50    yield runner
     51    runner.stop()
     52 
     53 
     54 class RunnerThread(threading.Thread):
     55    def __init__(self, runner, start=False, timeout=1):
     56        threading.Thread.__init__(self)
     57        self.runner = runner
     58        self.timeout = timeout
     59        self.do_start = start
     60 
     61    def run(self):
     62        sleep(self.timeout)
     63        if self.do_start:
     64            self.runner.start()
     65        else:
     66            self.runner.stop()
     67 
     68 
     69 @pytest.fixture
     70 def create_thread():
     71    threads = []
     72 
     73    def inner(*args, **kwargs):
     74        thread = RunnerThread(*args, **kwargs)
     75        threads.append(thread)
     76        return thread
     77 
     78    yield inner
     79 
     80    for thread in threads:
     81        thread.join()