diff --git a/test/centos.Dockerfile b/test/centos.Dockerfile index 00543b67..7444551b 100644 --- a/test/centos.Dockerfile +++ b/test/centos.Dockerfile @@ -1,4 +1,4 @@ -FROM centos:7 +FROM centos:8 ENV GITDIR /etc/.pihole ENV SCRIPTDIR /opt/pihole diff --git a/test/centos7.Dockerfile b/test/centos7.Dockerfile new file mode 100644 index 00000000..00543b67 --- /dev/null +++ b/test/centos7.Dockerfile @@ -0,0 +1,16 @@ +FROM centos:7 + +ENV GITDIR /etc/.pihole +ENV SCRIPTDIR /opt/pihole + +RUN mkdir -p $GITDIR $SCRIPTDIR /etc/pihole +ADD . $GITDIR +RUN cp $GITDIR/advanced/Scripts/*.sh $GITDIR/gravity.sh $GITDIR/pihole $GITDIR/automated\ install/*.sh $SCRIPTDIR/ +ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$SCRIPTDIR + +RUN true && \ + chmod +x $SCRIPTDIR/* + +ENV PH_TEST true + +#sed '/# Start the installer/Q' /opt/pihole/basic-install.sh > /opt/pihole/stub_basic-install.sh && \ diff --git a/test/conftest.py b/test/conftest.py index 5b8be41e..69926eaf 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -69,7 +69,7 @@ def args(request): return '-t -d' -@pytest.fixture(params=['debian', 'centos', 'fedora']) +@pytest.fixture(params=['debian', 'centos7', 'centos', 'fedora']) def tag(request): ''' consumed by image to make the test matrix diff --git a/test/debian.Dockerfile b/test/debian.Dockerfile index 66436f1a..d6609ba3 100644 --- a/test/debian.Dockerfile +++ b/test/debian.Dockerfile @@ -1,4 +1,4 @@ -FROM buildpack-deps:jessie-scm +FROM buildpack-deps:stretch-scm ENV GITDIR /etc/.pihole ENV SCRIPTDIR /opt/pihole diff --git a/test/fedora.Dockerfile b/test/fedora.Dockerfile index a06fc007..02dcb733 100644 --- a/test/fedora.Dockerfile +++ b/test/fedora.Dockerfile @@ -1,4 +1,4 @@ -FROM fedora:30 +FROM fedora:31 ENV GITDIR /etc/.pihole ENV SCRIPTDIR /opt/pihole diff --git a/test/test_000_build_containers.py b/test/test_000_build_containers.py index 184052f3..0f3e2d1a 100644 --- a/test/test_000_build_containers.py +++ b/test/test_000_build_containers.py @@ -9,6 +9,7 @@ run_local = testinfra.get_backend( @pytest.mark.parametrize("image,tag", [ ('test/debian.Dockerfile', 'pytest_pihole:debian'), + ('test/centos7.Dockerfile', 'pytest_pihole:centos7'), ('test/centos.Dockerfile', 'pytest_pihole:centos'), ('test/fedora.Dockerfile', 'pytest_pihole:fedora'), ]) diff --git a/test/test_automated_install.py b/test/test_automated_install.py index 342d8a3c..f6b5a87e 100644 --- a/test/test_automated_install.py +++ b/test/test_automated_install.py @@ -561,3 +561,37 @@ def test_validate_ip_invalid_letters(Pihole): ''') assert output.rc == 1 + + +def test_os_check_fails(Pihole): + ''' Confirms install fails on unsupported OS ''' + Pihole.run(''' + source /opt/pihole/basic-install.sh + distro_check + install_dependent_packages ${INSTALLER_DEPS[@]} + cat < /etc/os-release + ID=UnsupportedOS + VERSION_ID="2" + EOT + ''') + detectOS = Pihole.run('''t + source /opt/pihole/basic-install.sh + os_check + ''') + expected_stdout = 'Unsupported OS detected: UnsupportedOS' + assert expected_stdout in detectOS.stdout + + +def test_os_check_passes(Pihole): + ''' Confirms OS meets the requirements ''' + Pihole.run(''' + source /opt/pihole/basic-install.sh + distro_check + install_dependent_packages ${INSTALLER_DEPS[@]} + ''') + detectOS = Pihole.run(''' + source /opt/pihole/basic-install.sh + os_check + ''') + expected_stdout = 'Supported OS detected' + assert expected_stdout in detectOS.stdout diff --git a/test/test_centos_fedora_support.py b/test/test_centos_fedora_support.py index 4b405920..b4ae7c89 100644 --- a/test/test_centos_fedora_support.py +++ b/test/test_centos_fedora_support.py @@ -88,7 +88,7 @@ def test_epel_and_remi_not_installed_fedora(Pihole): assert not remi_package.is_installed -@pytest.mark.parametrize("tag", [('centos'), ]) +@pytest.mark.parametrize("tag", [('centos7'), ('centos'), ]) def test_release_supported_version_check_centos(Pihole): ''' confirms installer exits on unsupported releases of CentOS @@ -105,7 +105,7 @@ def test_release_supported_version_check_centos(Pihole): assert expected_stdout in distro_check.stdout -@pytest.mark.parametrize("tag", [('centos'), ]) +@pytest.mark.parametrize("tag", [('centos7'), ('centos'), ]) def test_enable_epel_repository_centos(Pihole): ''' confirms the EPEL package repository is enabled when installed on CentOS @@ -123,8 +123,8 @@ def test_enable_epel_repository_centos(Pihole): assert epel_package.is_installed -@pytest.mark.parametrize("tag", [('centos'), ]) -def test_php_upgrade_default_optout_centos(Pihole): +@pytest.mark.parametrize("tag", [('centos7'), ]) +def test_php_upgrade_default_optout_centos_eq_7(Pihole): ''' confirms the default behavior to opt-out of installing PHP7 from REMI ''' @@ -140,7 +140,25 @@ def test_php_upgrade_default_optout_centos(Pihole): @pytest.mark.parametrize("tag", [('centos'), ]) -def test_php_upgrade_user_optout_centos(Pihole): +def test_php_upgrade_default_continue_centos_gte_8(Pihole): + ''' + confirms the latest version of CentOS continues / does not optout + (should trigger on CentOS7 only) + ''' + distro_check = Pihole.run(''' + source /opt/pihole/basic-install.sh + distro_check + ''') + unexpected_stdout = info_box + (' User opt-out of PHP 7 upgrade on CentOS.' + ' Deprecated PHP may be in use.') + assert unexpected_stdout not in distro_check.stdout + # ensure remi was not installed on latest CentOS + remi_package = Pihole.package('remi-release') + assert not remi_package.is_installed + + +@pytest.mark.parametrize("tag", [('centos7'), ]) +def test_php_upgrade_user_optout_centos_eq_7(Pihole): ''' confirms installer behavior when user opt-out of installing PHP7 from REMI (php not currently installed) @@ -159,7 +177,28 @@ def test_php_upgrade_user_optout_centos(Pihole): @pytest.mark.parametrize("tag", [('centos'), ]) -def test_php_upgrade_user_optin_centos(Pihole): +def test_php_upgrade_user_optout_skipped_centos_gte_8(Pihole): + ''' + confirms installer skips user opt-out of installing PHP7 from REMI on + latest CentOS (should trigger on CentOS7 only) + (php not currently installed) + ''' + # Whiptail dialog returns Cancel for user prompt + mock_command('whiptail', {'*': ('', '1')}, Pihole) + distro_check = Pihole.run(''' + source /opt/pihole/basic-install.sh + distro_check + ''') + unexpected_stdout = info_box + (' User opt-out of PHP 7 upgrade on CentOS.' + ' Deprecated PHP may be in use.') + assert unexpected_stdout not in distro_check.stdout + # ensure remi was not installed on latest CentOS + remi_package = Pihole.package('remi-release') + assert not remi_package.is_installed + + +@pytest.mark.parametrize("tag", [('centos7'), ]) +def test_php_upgrade_user_optin_centos_eq_7(Pihole): ''' confirms installer behavior when user opt-in to installing PHP7 from REMI (php not currently installed) @@ -182,6 +221,30 @@ def test_php_upgrade_user_optin_centos(Pihole): @pytest.mark.parametrize("tag", [('centos'), ]) +def test_php_upgrade_user_optin_skipped_centos_gte_8(Pihole): + ''' + confirms installer skips user opt-in to installing PHP7 from REMI on + latest CentOS (should trigger on CentOS7 only) + (php not currently installed) + ''' + # Whiptail dialog returns Continue for user prompt + mock_command('whiptail', {'*': ('', '0')}, Pihole) + distro_check = Pihole.run(''' + source /opt/pihole/basic-install.sh + distro_check + ''') + assert 'opt-out' not in distro_check.stdout + unexpected_stdout = info_box + (' Enabling Remi\'s RPM repository ' + '(https://rpms.remirepo.net)') + assert unexpected_stdout not in distro_check.stdout + unexpected_stdout = tick_box + (' Remi\'s RPM repository has ' + 'been enabled for PHP7') + assert unexpected_stdout not in distro_check.stdout + remi_package = Pihole.package('remi-release') + assert not remi_package.is_installed + + +@pytest.mark.parametrize("tag", [('centos7'), ('centos'), ]) def test_php_version_lt_7_detected_upgrade_default_optout_centos(Pihole): ''' confirms the default behavior to opt-out of upgrading to PHP7 from REMI @@ -204,7 +267,7 @@ def test_php_version_lt_7_detected_upgrade_default_optout_centos(Pihole): assert not remi_package.is_installed -@pytest.mark.parametrize("tag", [('centos'), ]) +@pytest.mark.parametrize("tag", [('centos7'), ('centos'), ]) def test_php_version_lt_7_detected_upgrade_user_optout_centos(Pihole): ''' confirms installer behavior when user opt-out to upgrade to PHP7 via REMI @@ -229,7 +292,7 @@ def test_php_version_lt_7_detected_upgrade_user_optout_centos(Pihole): assert not remi_package.is_installed -@pytest.mark.parametrize("tag", [('centos'), ]) +@pytest.mark.parametrize("tag", [('centos7'), ('centos'), ]) def test_php_version_lt_7_detected_upgrade_user_optin_centos(Pihole): ''' confirms installer behavior when user opt-in to upgrade to PHP7 via REMI diff --git a/tox.ini b/tox.ini index 249575b6..49c99066 100644 --- a/tox.ini +++ b/tox.ini @@ -1,10 +1,11 @@ [tox] -envlist = py36 +envlist = py37 [testenv] whitelist_externals = docker deps = -rrequirements.txt commands = docker build -f test/debian.Dockerfile -t pytest_pihole:debian . + docker build -f test/centos7.Dockerfile -t pytest_pihole:centos7 . docker build -f test/centos.Dockerfile -t pytest_pihole:centos . docker build -f test/fedora.Dockerfile -t pytest_pihole:fedora . pytest {posargs:-vv -n auto} -m "not build_stage" ./test/