From 74b0904af412112eb6c3fc8e0c962539162884b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Christian=20K=C3=B6nig?= Date: Tue, 29 Nov 2022 22:32:51 +0100 Subject: [PATCH] Tweak tests to allow systemd as init system MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Christian König --- test/conftest.py | 2 +- test/test_any_automated_install.py | 168 +++++++++++++++-------------- test/test_any_utils.py | 3 + 3 files changed, 91 insertions(+), 82 deletions(-) diff --git a/test/conftest.py b/test/conftest.py index e395ec27..2248ae5a 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -39,7 +39,7 @@ testinfra.backend.docker.DockerBackend.run = run_bash def host(): # run a container docker_id = ( - subprocess.check_output(["docker", "run", "-t", "-d", "--cap-add=ALL", IMAGE]) + subprocess.check_output(["docker", "run", "-t", "-d", "--privileged", IMAGE]) .decode() .strip() ) diff --git a/test/test_any_automated_install.py b/test/test_any_automated_install.py index 2ea619f7..1b9fb77f 100644 --- a/test/test_any_automated_install.py +++ b/test/test_any_automated_install.py @@ -168,20 +168,23 @@ def test_installPihole_fresh_install_readableFiles(host): mock_command("dialog", {"*": ("", "0")}, host) # mock git pull mock_command_passthrough("git", {"pull": ("", "0")}, host) - # mock systemctl to not start lighttpd and FTL - mock_command_2( - "systemctl", - { - "enable lighttpd": ("", "0"), - "restart lighttpd": ("", "0"), - "start lighttpd": ("", "0"), - "enable pihole-FTL": ("", "0"), - "restart pihole-FTL": ("", "0"), - "start pihole-FTL": ("", "0"), - "*": ('echo "systemctl call with $@"', "0"), - }, - host, - ) + # if systemd is not PID 1 mock systemctl to not start lighttpd and FTL + init_system = host.run("cat /proc/1/comm") + print(init_system.stdout) + if "systemd" not in init_system.stdout: + mock_command_2( + "systemctl", + { + "enable lighttpd": ("", "0"), + "restart lighttpd": ("", "0"), + "start lighttpd": ("", "0"), + "enable pihole-FTL": ("", "0"), + "restart pihole-FTL": ("", "0"), + "start pihole-FTL": ("", "0"), + "*": ('echo "systemctl call with $@"', "0"), + }, + host, + ) # try to install man host.run("command -v apt-get > /dev/null && apt-get install -qq man") host.run("command -v dnf > /dev/null && dnf install -y man") @@ -278,13 +281,14 @@ def test_installPihole_fresh_install_readableFiles(host): ) actual_rc = host.run(check_dnsmasqconf).rc assert exit_status_success == actual_rc - # check readable and executable /etc/init.d/pihole-FTL - check_init = test_cmd.format("x", "/etc/init.d/pihole-FTL", piholeuser) - actual_rc = host.run(check_init).rc - assert exit_status_success == actual_rc - check_init = test_cmd.format("r", "/etc/init.d/pihole-FTL", piholeuser) - actual_rc = host.run(check_init).rc - assert exit_status_success == actual_rc + if "systemd" not in init_system.stdout: + # check readable and executable /etc/init.d/pihole-FTL + check_init = test_cmd.format("x", "/etc/init.d/pihole-FTL", piholeuser) + actual_rc = host.run(check_init).rc + assert exit_status_success == actual_rc + check_init = test_cmd.format("r", "/etc/init.d/pihole-FTL", piholeuser) + actual_rc = host.run(check_init).rc + assert exit_status_success == actual_rc # check readable /etc/lighttpd/lighttpd.conf check_lighttpd = test_cmd.format("r", "/etc/lighttpd/lighttpd.conf", piholeuser) actual_rc = host.run(check_lighttpd).rc @@ -362,67 +366,69 @@ def test_installPihole_fresh_install_readableBlockpage(host, test_webpage): # mock git pull mock_command_passthrough("git", {"pull": ("", "0")}, host) - # mock systemctl to start lighttpd and FTL - ligthttpdcommand = dedent( - r'''\"\" - echo 'starting lighttpd with {}' - if [ command -v "apt-get" >/dev/null 2>&1 ]; then - LIGHTTPD_USER="www-data" - LIGHTTPD_GROUP="www-data" - else - LIGHTTPD_USER="lighttpd" - LIGHTTPD_GROUP="lighttpd" - fi - mkdir -p "{run}" - chown {usergroup} "{run}" - mkdir -p "{cache}" - chown {usergroup} "/var/cache" - chown {usergroup} "{cache}" - mkdir -p "{compress}" - chown {usergroup} "{compress}" - mkdir -p "{uploads}" - chown {usergroup} "{uploads}" - chmod 0777 /var - chmod 0777 /var/cache - chmod 0777 "{cache}" - find "{run}" -type d -exec chmod 0777 {chmodarg} \;; - find "{run}" -type f -exec chmod 0666 {chmodarg} \;; - find "{compress}" -type d -exec chmod 0777 {chmodarg} \;; - find "{compress}" -type f -exec chmod 0666 {chmodarg} \;; - find "{uploads}" -type d -exec chmod 0777 {chmodarg} \;; - find "{uploads}" -type f -exec chmod 0666 {chmodarg} \;; - /usr/sbin/lighttpd -tt -f '{config}' - /usr/sbin/lighttpd -f '{config}' - echo \"\"'''.format( - "{}", - usergroup="${{LIGHTTPD_USER}}:${{LIGHTTPD_GROUP}}", - chmodarg="{{}}", - config="/etc/lighttpd/lighttpd.conf", - run="/var/run/lighttpd", - cache="/var/cache/lighttpd", - uploads="/var/cache/lighttpd/uploads", - compress="/var/cache/lighttpd/compress", + init_system = host.run("cat /proc/1/comm") + if "systemd" not in init_system.stdout: + # if systemd is not PID 1 mock systemctl to not start lighttpd and FTL + ligthttpdcommand = dedent( + r'''\"\" + echo 'starting lighttpd with {}' + if [ command -v "apt-get" >/dev/null 2>&1 ]; then + LIGHTTPD_USER="www-data" + LIGHTTPD_GROUP="www-data" + else + LIGHTTPD_USER="lighttpd" + LIGHTTPD_GROUP="lighttpd" + fi + mkdir -p "{run}" + chown {usergroup} "{run}" + mkdir -p "{cache}" + chown {usergroup} "/var/cache" + chown {usergroup} "{cache}" + mkdir -p "{compress}" + chown {usergroup} "{compress}" + mkdir -p "{uploads}" + chown {usergroup} "{uploads}" + chmod 0777 /var + chmod 0777 /var/cache + chmod 0777 "{cache}" + find "{run}" -type d -exec chmod 0777 {chmodarg} \;; + find "{run}" -type f -exec chmod 0666 {chmodarg} \;; + find "{compress}" -type d -exec chmod 0777 {chmodarg} \;; + find "{compress}" -type f -exec chmod 0666 {chmodarg} \;; + find "{uploads}" -type d -exec chmod 0777 {chmodarg} \;; + find "{uploads}" -type f -exec chmod 0666 {chmodarg} \;; + /usr/sbin/lighttpd -tt -f '{config}' + /usr/sbin/lighttpd -f '{config}' + echo \"\"'''.format( + "{}", + usergroup="${{LIGHTTPD_USER}}:${{LIGHTTPD_GROUP}}", + chmodarg="{{}}", + config="/etc/lighttpd/lighttpd.conf", + run="/var/run/lighttpd", + cache="/var/cache/lighttpd", + uploads="/var/cache/lighttpd/uploads", + compress="/var/cache/lighttpd/compress", + ) + ) + FTLcommand = dedent( + '''\"\" + set -x + /etc/init.d/pihole-FTL restart + echo \"\"''' + ) + mock_command_run( + "systemctl", + { + "enable lighttpd": ("", "0"), + "restart lighttpd": (ligthttpdcommand.format("restart"), "0"), + "start lighttpd": (ligthttpdcommand.format("start"), "0"), + "enable pihole-FTL": ("", "0"), + "restart pihole-FTL": (FTLcommand, "0"), + "start pihole-FTL": (FTLcommand, "0"), + "*": ('echo "systemctl call with $@"', "0"), + }, + host, ) - ) - FTLcommand = dedent( - '''\"\" - set -x - /etc/init.d/pihole-FTL restart - echo \"\"''' - ) - mock_command_run( - "systemctl", - { - "enable lighttpd": ("", "0"), - "restart lighttpd": (ligthttpdcommand.format("restart"), "0"), - "start lighttpd": (ligthttpdcommand.format("start"), "0"), - "enable pihole-FTL": ("", "0"), - "restart pihole-FTL": (FTLcommand, "0"), - "start pihole-FTL": (FTLcommand, "0"), - "*": ('echo "systemctl call with $@"', "0"), - }, - host, - ) # create configuration file setup_var_file = "cat < /etc/pihole/setupVars.conf\n" for k, v in SETUPVARS.items(): diff --git a/test/test_any_utils.py b/test/test_any_utils.py index 5b4075d9..e334286e 100644 --- a/test/test_any_utils.py +++ b/test/test_any_utils.py @@ -137,6 +137,9 @@ def test_getFTLPIDFile_and_getFTLPID_custom(host): host.run( """ tmpfile=$(mktemp) + # adding a small delay here because otherwise there is some kind of + # race condition with systemd deleting files in /tmp + sleep 1 echo "PIDFILE=${tmpfile}" > /etc/pihole/pihole-FTL.conf echo "1234" > ${tmpfile} """