diff --git a/Makefile b/Makefile index 9436664..0eca789 100644 --- a/Makefile +++ b/Makefile @@ -21,14 +21,14 @@ endif # set up cflags and libs -CFLAGS := -D_FILE_OFFSET_BITS=64 +CFLAGS := -D_FILE_OFFSET_BITS=64 -g LDFLAGS := CFLAGS += $(shell pkg-config --cflags $(PACKAGE_NAMES)) LDFLAGS += $(shell pkg-config --libs $(PACKAGE_NAMES)) ifeq ($(DEBUG),1) - CFLAGS += -O0 -pedantic -g -Wall -Wextra -Wcast-align \ + CFLAGS += -O0 -pedantic -Wall -Wextra -Wcast-align \ -Wcast-qual -Wdisabled-optimization -Wformat=2 \ -Winit-self -Wlogical-op -Wmissing-declarations \ -Wmissing-include-dirs -Wredundant-decls -Wshadow \ diff --git a/test/mock/zenity b/test/mock/zenity index 769de25..e89173c 100755 --- a/test/mock/zenity +++ b/test/mock/zenity @@ -12,10 +12,17 @@ else if [[ $FAKE_ZENITY_RESPONSE == "yes_tmp" ]]; then printf "Allow this time\n" exit 1 + elif [[ $FAKE_ZENITY_RESPONSE == "yes_tmp_alt" ]]; then + printf "Allow this time\n" + echo "yes_alt" >~/.fake_zenity_response + exit 1 elif [[ $FAKE_ZENITY_RESPONSE == "no" ]]; then exit 1 elif [[ $FAKE_ZENITY_RESPONSE == "yes" ]]; then exit 0 + elif [[ $FAKE_ZENITY_RESPONSE == "yes_alt" ]]; then + echo "yes_tmp_alt" >~/.fake_zenity_response + exit 0 fi fi fi diff --git a/test/test.bash b/test/test.bash index eeb9782..055113c 100755 --- a/test/test.bash +++ b/test/test.bash @@ -25,10 +25,18 @@ if [[ $1 == "--setuid" ]]; then echo "Valgrind will not be used due to setuid compatibility issues." ../build/icfs -o default_permissions ./protected ./.pt.db & sleep 1 +elif [[ $1 == "--perf" ]]; then + echo "Profiling with perf..." + ../build/icfs -o default_permissions ./protected ./.pt.db & + echo "Profiling will require root privilieges." + sleep 3 + echo "Attaching to $(pgrep icfs)" + sudo perf record -g -e cycles:u --call-graph dwarf -p $(pgrep icfs) & + sleep 10 else echo "Database protection will not be tested due to the lack of setuid capabilites." echo "To test it, run this script with '--setuid'." - valgrind -s ../build/icfs -o default_permissions ./protected ./.pt.db & + valgrind --leak-check=full -s ../build/icfs -o default_permissions ./protected ./.pt.db & sleep 5 fi @@ -126,9 +134,29 @@ else echo "[ICFS-TEST]: OK" fi +if [[ $1 == "--perf" ]]; then + zenity --set-fake-response yes_tmp + rm -rf ./protected/* + zenity --set-fake-response yes_alt + bonnie++ -p 4 + bonnie++ -d ./protected -c 4 -r 256 -y s >/dev/null & + bonnie++ -d ./protected -c 4 -r 256 -y s >/dev/null & + bonnie++ -d ./protected -c 4 -r 256 -y s >/dev/null & + bonnie++ -d ./protected -c 4 -r 256 -y s >/dev/null + bonnie++ -p -1 +fi + # unmount sleep 0.5 #lsof +f -- $(realpath ./protected) umount $(realpath ./protected) sleep 0.5 + +if [[ $1 == "--perf" ]]; then + mv ./callgraph.png ./callgraph_old.png + real_user=$USER + sudo chown "$real_user" ./perf.data + perf script --dsos=icfs | gprof2dot -f perf | dot -Tpng -o callgraph.png + echo "Profile graph was written to \"callgraph.png\"" +fi