update comments, add configureFirewall test

* Comments to clarify some of the existing tests
* mock_command to allow recording of calls and mocking return calls in bash
* new configureFirewall test (only the first one of it's many paths)
This commit is contained in:
diginc 2016-11-02 23:25:13 -05:00
parent 0d7e06a141
commit 05e114173d

View file

@ -11,7 +11,8 @@ SETUPVARS = {
def test_setupVars_are_sourced_to_global_scope(Pihole):
''' currently update_dialogs sources setupVars with a dot,
then various other functions use the variables '''
then various other functions use the variables.
This confirms the sourced variables are in scope between functions '''
setup_var_file = 'cat <<EOF> /etc/pihole/setupVars.conf\n'
for k,v in SETUPVARS.iteritems():
setup_var_file += "{}={}\n".format(k, v)
@ -64,6 +65,42 @@ def test_setupVars_saved_to_file(Pihole):
for k,v in SETUPVARS.iteritems():
assert "{}={}".format(k, v) in output
def test_configureFirewall_firewalld_no_errors(Pihole):
''' confirms firewalld rules are applied when appopriate '''
mock_command('firewall-cmd', '0', Pihole)
configureFirewall = Pihole.run('''
bash -c "
PHTEST=TRUE
source /opt/pihole/basic-install.sh
configureFirewall
" ''')
expected_stdout = '::: Configuring firewalld for httpd and dnsmasq.'
assert expected_stdout in configureFirewall.stdout
firewall_calls = Pihole.run('cat /var/log/firewall-cmd').stdout
assert 'firewall-cmd --state' in firewall_calls
assert 'firewall-cmd --permanent --add-port=80/tcp' in firewall_calls
assert 'firewall-cmd --permanent --add-port=53/tcp' in firewall_calls
assert 'firewall-cmd --permanent --add-port=53/udp' in firewall_calls
assert 'firewall-cmd --reload' in firewall_calls
# Helper functions
def mock_command(script, result, container):
''' Allows for setup of commands we don't really want to have to run for real in unit tests '''
''' TODO: support array of results that enable the results to change over multiple executions of a command '''
full_script_path = '/usr/local/bin/{}'.format(script)
mock_script = dedent('''\
#!/bin/bash -e
echo "\$0 \$@" >> /var/log/{script}
exit {retcode}
'''.format(script=script, retcode=result))
container.run('''
cat <<EOF> {script}\n{content}\nEOF
chmod +x {script}
'''.format(script=full_script_path, content=mock_script))
print container.run('cat {}'.format(full_script_path)).stdout
def run_script(Pihole, script, file="/test.sh"):
_write_test_script(Pihole, script, file=file)
result = Pihole.run(file)