import six
import py
import pytest
import execnet

pytest_plugins = "pytester"

if six.PY2:

    @pytest.fixture(scope="session", autouse=True)
    def _ensure_imports():
        # we import some modules because pytest-2.8's testdir fixture
        # will unload all modules after each test and this cause
        # (unknown) problems with execnet.Group()
        execnet.Group
        execnet.makegateway


@pytest.fixture(autouse=True)
def _divert_atexit(request, monkeypatch):
    import atexit

    finalizers = []

    def finish():
        while finalizers:
            finalizers.pop()()

    monkeypatch.setattr(atexit, "register", finalizers.append)
    request.addfinalizer(finish)


def pytest_addoption(parser):
    parser.addoption(
        "--gx",
        action="append",
        dest="gspecs",
        help="add a global test environment, XSpec-syntax. ",
    )


@pytest.fixture
def specssh(request):
    return getspecssh(request.config)


# configuration information for tests
def getgspecs(config):
    return [execnet.XSpec(spec) for spec in config.getvalueorskip("gspecs")]


def getspecssh(config):
    xspecs = getgspecs(config)
    for spec in xspecs:
        if spec.ssh:
            if not py.path.local.sysfind("ssh"):
                py.test.skip("command not found: ssh")
            return str(spec)
    py.test.skip("need '--gx ssh=...'")


def getsocketspec(config):
    xspecs = getgspecs(config)
    for spec in xspecs:
        if spec.socket:
            return spec
    py.test.skip("need '--gx socket=...'")
