from .conftest import ( tick_box, cross_box, mock_command, ) def mock_selinux_config(state, host): ''' Creates a mock SELinux config file with expected content ''' # validate state string valid_states = ['enforcing', 'permissive', 'disabled'] assert state in valid_states # getenforce returns the running state of SELinux mock_command('getenforce', {'*': (state.capitalize(), '0')}, host) # create mock configuration with desired content host.run(''' mkdir /etc/selinux echo "SELINUX={state}" > /etc/selinux/config '''.format(state=state.lower())) def test_selinux_enforcing_exit(host): ''' confirms installer prompts to exit when SELinux is Enforcing by default ''' mock_selinux_config("enforcing", host) check_selinux = host.run(''' source /opt/pihole/basic-install.sh checkSelinux ''') expected_stdout = cross_box + ' Current SELinux: enforcing' assert expected_stdout in check_selinux.stdout expected_stdout = 'SELinux Enforcing detected, exiting installer' assert expected_stdout in check_selinux.stdout assert check_selinux.rc == 1 def test_selinux_permissive(host): ''' confirms installer continues when SELinux is Permissive ''' mock_selinux_config("permissive", host) check_selinux = host.run(''' source /opt/pihole/basic-install.sh checkSelinux ''') expected_stdout = tick_box + ' Current SELinux: permissive' assert expected_stdout in check_selinux.stdout assert check_selinux.rc == 0 def test_selinux_disabled(host): ''' confirms installer continues when SELinux is Disabled ''' mock_selinux_config("disabled", host) check_selinux = host.run(''' source /opt/pihole/basic-install.sh checkSelinux ''') expected_stdout = tick_box + ' Current SELinux: disabled' assert expected_stdout in check_selinux.stdout assert check_selinux.rc == 0