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