2016-10-11 06:14:39 +02:00
|
|
|
import pytest
|
|
|
|
import testinfra
|
|
|
|
|
|
|
|
check_output = testinfra.get_backend(
|
|
|
|
"local://"
|
|
|
|
).get_module("Command").check_output
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def Pihole(Docker):
|
2016-11-03 06:05:19 +01:00
|
|
|
''' used to contain some script stubbing, now pretty much an alias.
|
|
|
|
Also provides bash as the default run function shell '''
|
2016-11-03 05:58:54 +01:00
|
|
|
def run_bash(self, command, *args, **kwargs):
|
|
|
|
cmd = self.get_command(command, *args)
|
|
|
|
if self.user is not None:
|
|
|
|
out = self.run_local(
|
|
|
|
"docker exec -u %s %s /bin/bash -c %s",
|
|
|
|
self.user, self.name, cmd)
|
|
|
|
else:
|
|
|
|
out = self.run_local(
|
|
|
|
"docker exec %s /bin/bash -c %s", self.name, cmd)
|
|
|
|
out.command = self.encode(cmd)
|
|
|
|
return out
|
|
|
|
|
|
|
|
funcType = type(Docker.run)
|
|
|
|
Docker.run = funcType(run_bash, Docker, testinfra.backend.docker.DockerBackend)
|
2016-10-11 06:14:39 +02:00
|
|
|
return Docker
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def Docker(request, args, image, cmd):
|
|
|
|
''' combine our fixtures into a docker run command and setup finalizer to cleanup '''
|
|
|
|
assert 'docker' in check_output('id'), "Are you in the docker group?"
|
|
|
|
docker_run = "docker run {} {} {}".format(args, image, cmd)
|
|
|
|
docker_id = check_output(docker_run)
|
|
|
|
|
|
|
|
def teardown():
|
|
|
|
check_output("docker rm -f %s", docker_id)
|
|
|
|
request.addfinalizer(teardown)
|
|
|
|
|
|
|
|
docker_container = testinfra.get_backend("docker://" + docker_id)
|
|
|
|
docker_container.id = docker_id
|
|
|
|
return docker_container
|
|
|
|
|
|
|
|
@pytest.fixture
|
|
|
|
def args(request):
|
|
|
|
''' -t became required when tput began being used '''
|
|
|
|
return '-t -d'
|
|
|
|
|
|
|
|
@pytest.fixture(params=['debian', 'centos'])
|
|
|
|
def tag(request):
|
|
|
|
''' consumed by image to make the test matrix '''
|
|
|
|
return request.param
|
|
|
|
|
|
|
|
@pytest.fixture()
|
|
|
|
def image(request, tag):
|
|
|
|
''' built by test_000_build_containers.py '''
|
|
|
|
return 'pytest_pihole:{}'.format(tag)
|
|
|
|
|
|
|
|
@pytest.fixture()
|
|
|
|
def cmd(request):
|
|
|
|
''' default to doing nothing by tailing null, but don't exit '''
|
|
|
|
return 'tail -f /dev/null'
|