From 64abb1ed52cdfcb8f7f54f0c7e19a91dbc00eadb Mon Sep 17 00:00:00 2001 From: BritishTeapot Date: Tue, 18 Mar 2025 09:48:05 +0100 Subject: [PATCH] Added test scrpt and a mockup of zenity --- test/mock/zenity | 23 +++++++++++++++ test/test.bash | 73 ++++++++++++++++++++++++++---------------------- 2 files changed, 62 insertions(+), 34 deletions(-) create mode 100755 test/mock/zenity diff --git a/test/mock/zenity b/test/mock/zenity new file mode 100755 index 0000000..be62934 --- /dev/null +++ b/test/mock/zenity @@ -0,0 +1,23 @@ +#!/bin/bash + +# fake-zenity: script that mocks the behavior of zenity based on the ./.fake-zenity-response file + +if [[ $1 == "--set-fake-response" ]]; then + #someone knows we are fake :) + echo $2 >~/.fake_zenity_response +else + if [ -f ~/.fake_zenity_response ]; then + FAKE_ZENITY_RESPONSE=$(cat ~/.fake_zenity_response) + + if [[ $FAKE_ZENITY_RESPONSE == "yes_tmp" ]]; then + printf "Allow this time\n" + exit 1 + elif [[ $FAKE_ZENITY_RESPONSE == "no" ]]; then + exit 1 + elif [[ $FAKE_ZENITY_RESPONSE == "yes" ]]; then + exit 0 + fi + fi +fi + +exit -1 # TODO: call actual zenity here diff --git a/test/test.bash b/test/test.bash index 7b1efe2..3cfc42e 100755 --- a/test/test.bash +++ b/test/test.bash @@ -2,8 +2,14 @@ # clean what was left from previous tests -rm ./protected/first ./protected/second -touch ./protected/this-only ./protected/do-not-remove ./protected/should-be-removed +rm -rf ./protected +mkdir protected +touch ./protected/do-not-remove ./protected/should-be-removed +echo "Free code, free world." >./protected/this-only + +# set up the fake-zenity + +PATH="$(realpath ./mock/):$PATH" # mount the filesystem @@ -12,40 +18,36 @@ valgrind -s ../build/icfs -o default_permissions ./protected & sleep 1 -# set up the fake-zenity - -#export PATH="$(realpath ./mock/):$PATH" - # Try to touch files in the directory #echo \"manual\" >./protected/manual -#export FAKE_ZENITY_RESPONSE="0" -parallel ::: "echo \"first\" >./protected/first 2> /dev/null \ - && echo \"[ICFS-TEST]: echo can create protected/first despite access being denied!\" \ - || echo \"[ICFS-TEST]: OK\"" \ - "sleep 0.7 && xdotool key Escape" # EACCESS +zenity --set-fake-response no +echo "first" >./protected/first 2>/dev/null && + echo "[ICFS-TEST]: echo can create protected/first despite access being denied!" || + echo "[ICFS-TEST]: OK" # EACCESS -parallel ::: "echo \"second\" >./protected/second 2> /dev/null \ - && echo \"[ICFS-TEST]: OK\" \ - || echo \"[ICFS-TEST]: echo cannot create protected/second despite access being permitted!\"" \ - "sleep 0.7 && xdotool key KP_Enter" # OK +zenity --set-fake-response yes_tmp +echo "second" >./protected/second 2>/dev/null && + echo "[ICFS-TEST]: OK" || + echo "[ICFS-TEST]: echo cannot create protected/second despite access being permitted!" # OK # Test whether permissons work -parallel ::: "cat ./protected/first > /dev/null 2> /dev/null \ - && echo \"[ICFS-TEST]: cat can read a non-existant file ./protected/first!\" \ - || echo \"[ICFS-TEST]: OK\"" # ENOENT +zenity --set-fake-response yes_tmp +cat ./protected/first >/dev/null 2>/dev/null && + echo "[ICFS-TEST]: cat can read a non-existant file ./protected/first!" || + echo "[ICFS-TEST]: OK" # ENOENT -parallel ::: "cat ./protected/second > /dev/null 2> /dev/null \ - && echo \"[ICFS-TEST]: OK\" \ - || echo \"[ICFS-TEST]: cat cannot open protected/second despite access being permitted!\"" \ - "sleep 0.7 && xdotool key KP_Enter" # "second" +zenity --set-fake-response yes_tmp +cat ./protected/second >/dev/null 2>/dev/null && + echo "[ICFS-TEST]: OK" || + echo "[ICFS-TEST]: cat cannot open protected/second despite access being permitted!" # "second" -parallel ::: "cat ./protected/this-only > /dev/null 2> /dev/null \ - && echo \"[ICFS-TEST]: OK\" \ - || echo \"[ICFS-TEST]: echo cannot create protected/second despite access being permitted!\"" \ - "sleep 0.7 && xdotool key KP_Enter" # "Free code, free world." +zenity --set-fake-response yes_tmp +cat ./protected/this-only >/dev/null 2>/dev/null && + echo "[ICFS-TEST]: OK" || + echo "[ICFS-TEST]: echo cannot create protected/second despite access being permitted!" # "Free code, free world." #parallel ::: "cat ./protected/sudo-only > /dev/null 2> /dev/null \ # && echo \"[ICFS-TEST]: cat can access files owned by root!\" \ @@ -53,16 +55,19 @@ parallel ::: "cat ./protected/this-only > /dev/null 2> /dev/null \ # test the removal -parallel ::: "rm ./protected/do-not-remove > /dev/null 2> /dev/null \ - && echo \"[ICFS-TEST]: rm can unlink protected/do-not-remove despite access being denied!\" \ - || echo \"[ICFS-TEST]: OK\"" \ - "sleep 0.7 && xdotool key Escape" # EACCESS +zenity --set-fake-response no +rm ./protected/do-not-remove >/dev/null 2>/dev/null && + echo "[ICFS-TEST]: rm can unlink protected/do-not-remove despite access being denied!" || + echo "[ICFS-TEST]: OK" # EACCESS -parallel ::: "rm ./protected/should-be-removed > /dev/null 2> /dev/null \ - && echo \"[ICFS-TEST]: OK\" \ - || echo \"[ICFS-TEST]: rm cannot unlink protected/should-be-removed despite access being permitted!\"" \ - "sleep 0.7 && xdotool key KP_Enter" # OK +zenity --set-fake-response yes_tmp +rm ./protected/should-be-removed >/dev/null 2>/dev/null && + echo "[ICFS-TEST]: OK" || + echo "[ICFS-TEST]: rm cannot unlink protected/should-be-removed despite access being permitted!" # OK # unmount +sleep 0.5 +#lsof +f -- $(realpath ./protected) umount $(realpath ./protected) +sleep 0.5