testing/hghave.py (78 lines of code) (raw):

#!/usr/bin/env python # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. # This script supplements ``hghave`` from Mercurial testing environment to # support requirements specific to Mozilla. Some of the tests should # arguably be added upstream. Until then, this file and the hacks around it # exist. # The way Mercurial's test runner processes ``#require`` directives is that # it invokes an ``hghave`` script in the same directory as the test. # This repository has numerous ``hghave`` scripts scattered about in # directories containing tests that use ``#require``. Those scripts simply # find this file and ``execfile()`` it (effectively doing a #include). # Hacky, but it works. import os import sys HERE = os.path.abspath(os.path.dirname(__file__)) REPO_ROOT = os.path.abspath(os.path.join(HERE, "..")) # We import Mercurial's own ``hghave.py`` so we can declare our own checks. HGHAVE_PY = os.path.join(REPO_ROOT, "pylib", "mercurial-support", "hghave.py") with open(HGHAVE_PY) as f: exec(f.read()) def have_docker_images(images): from vcttesting.docker import Docker, params_from_env url, tls = params_from_env(os.environ) d = Docker(url, tls=tls) for image in images: try: d.client.images.get("%s:%s" % (image, image)) except Exception: return False return True # Define custom checks for our environment. @check("docker", "We can talk to Docker") def has_docker(): if "SKIP_DOCKER_TESTS" in os.environ: return False from vcttesting.docker import Docker, params_from_env url, tls = params_from_env(os.environ) d = Docker(url, tls=tls) return d.is_alive() @check("hgmodocker", "Require hgmo Docker pieces") def has_hgmodocker(): images = ( "ldap", "hgmaster", "hgweb", "pulse", ) return has_docker() and have_docker_images(images) @check("eslint", "Require eslint") def has_eslint(): from distutils.spawn import find_executable return find_executable("eslint") is not None @check("vcsreplicator", "vcsreplicator Python modules") def has_vcsreplicator(): try: from vcsreplicator.config import Config return True except ImportError: return False @check("watchman", "Require watchman") def has_watchman(): from distutils.spawn import find_executable return find_executable("watchman") is not None @check("internet", "Require internet connectivity") def has_internet(): try: import socket host = socket.gethostbyname("www.mozilla.org") socket.create_connection( ( host, 80, ), 2, ) return True except OSError: return False @check("motoserver", "moto AWS mock server") def has_s3(): """Assert the boto3 mock library `moto` is available, as well as the `Flask` dependency which enables running a mock S3 server """ try: import moto moto.mock_s3 import flask flask.Flask import simplejson simplejson.__version__ return True except (ImportError, AttributeError): pass return False require(sys.argv[1:])