2016-07-16 23:00:20 +02:00
|
|
|
import pytest
|
2016-08-28 07:43:21 +02:00
|
|
|
import time
|
2016-08-03 05:29:52 +02:00
|
|
|
''' conftest.py provides the defaults through fixtures '''
|
2016-08-28 07:43:21 +02:00
|
|
|
''' Note, testinfra builtins don't seem fully compatible with
|
2016-08-03 05:29:52 +02:00
|
|
|
docker containers (esp. alpine) stripped down nature '''
|
2016-07-16 23:00:20 +02:00
|
|
|
|
2016-08-03 05:29:52 +02:00
|
|
|
def test_pihole_default_run_command(Docker):
|
|
|
|
expected_proc = '/sbin/tini -- /start.sh'
|
|
|
|
pgrep = 'pgrep -f "{}" | wc -l || echo 0'.format(expected_proc)
|
|
|
|
find_proc = Docker.run(pgrep).stdout
|
|
|
|
if int(find_proc) < 1:
|
|
|
|
print Docker.run('ps -ef')
|
|
|
|
print "{} : {}".format(pgrep, find_proc)
|
|
|
|
assert False, '{}: Couldn\'t find proc {}'.format(tag, expected_proc)
|
|
|
|
|
|
|
|
@pytest.mark.parametrize('args', [ '' ])
|
|
|
|
@pytest.mark.parametrize('cmd', [ 'tail -f /dev/null' ])
|
|
|
|
def test_ServerIP_missing_triggers_start_error(Docker):
|
|
|
|
''' When args to docker are empty start.sh exits saying ServerIP is required '''
|
|
|
|
start = Docker.run('/start.sh')
|
2016-07-16 23:00:20 +02:00
|
|
|
error_msg = "ERROR: To function correctly you must pass an environment variables of 'ServerIP' into the docker container"
|
|
|
|
assert start.rc == 1
|
|
|
|
assert error_msg in start.stdout
|
|
|
|
|
2016-08-28 07:43:21 +02:00
|
|
|
@pytest.fixture
|
|
|
|
def RunningPiHole(DockerPersist, Slow, persist_webserver):
|
|
|
|
''' Persist a docker and provide some parameterized data for re-use '''
|
|
|
|
Slow(lambda: DockerPersist.run( 'pgrep {}'.format(persist_webserver) ).rc == 0)
|
|
|
|
return DockerPersist
|
|
|
|
|
|
|
|
def test_indecies_are_present(RunningPiHole):
|
|
|
|
File = RunningPiHole.get_module('File')
|
|
|
|
File('/var/www/html/pihole/index.html').exists
|
|
|
|
File('/var/www/html/pihole/index.js').exists
|
|
|
|
|
2016-09-08 03:39:01 +02:00
|
|
|
@pytest.mark.parametrize('ip', [ '127.0.0.1', '[::]' ] )
|
2016-08-28 08:11:55 +02:00
|
|
|
@pytest.mark.parametrize('url', [ '/', '/index.html', '/any.html' ] )
|
2016-09-08 03:39:01 +02:00
|
|
|
def test_html_index_requests_load_as_expected(RunningPiHole, ip, url):
|
|
|
|
command = 'curl -s -o /tmp/curled_file -w "%{{http_code}}" http://{}{}'.format(ip, url)
|
2016-08-28 07:43:21 +02:00
|
|
|
http_rc = RunningPiHole.run(command)
|
|
|
|
assert RunningPiHole.run('md5sum /tmp/curled_file /var/www/html/pihole/index.html').rc == 0
|
|
|
|
assert int(http_rc.stdout) == 200
|
|
|
|
|
2016-09-08 03:39:01 +02:00
|
|
|
@pytest.mark.parametrize('ip', [ '127.0.0.1', '[::]' ] )
|
2016-08-28 08:11:55 +02:00
|
|
|
@pytest.mark.parametrize('url', [ '/index.js', '/any.js'] )
|
2016-09-08 03:39:01 +02:00
|
|
|
def test_javascript_requests_load_as_expected(RunningPiHole, ip, url):
|
|
|
|
command = 'curl -s -o /tmp/curled_file -w "%{{http_code}}" http://{}{}'.format(ip, url)
|
2016-08-28 07:43:21 +02:00
|
|
|
print command
|
|
|
|
http_rc = RunningPiHole.run(command)
|
|
|
|
assert RunningPiHole.run('md5sum /tmp/curled_file /var/www/html/pihole/index.js').rc == 0
|
|
|
|
assert int(http_rc.stdout) == 200
|
2016-08-28 09:01:48 +02:00
|
|
|
|
2016-09-08 03:39:01 +02:00
|
|
|
@pytest.mark.parametrize('ip', [ '127.0.0.1', '[::]' ] )
|
2016-08-28 09:01:48 +02:00
|
|
|
@pytest.mark.parametrize('url', [ '/admin/', '/admin/index.php' ] )
|
2016-09-08 03:39:01 +02:00
|
|
|
def test_admin_requests_load_as_expected(RunningPiHole, ip, url):
|
|
|
|
command = 'curl -s -o /tmp/curled_file -w "%{{http_code}}" http://{}{}'.format(ip, url)
|
2016-08-28 09:01:48 +02:00
|
|
|
http_rc = RunningPiHole.run(command)
|
|
|
|
assert int(http_rc.stdout) == 200
|
|
|
|
assert RunningPiHole.run('wc -l /tmp/curled_file ') > 10
|
|
|
|
assert RunningPiHole.run('grep -q "Content-Security-Policy" /tmp/curled_file ').rc == 0
|
|
|
|
assert RunningPiHole.run('grep -q "js/pihole/footer.js" /tmp/curled_file ').rc == 0
|