diff options
Diffstat (limited to 'tests/stress_tests/extractloop.bash')
-rwxr-xr-x | tests/stress_tests/extractloop.bash | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/tests/stress_tests/extractloop.bash b/tests/stress_tests/extractloop.bash new file mode 100755 index 0000000..c488707 --- /dev/null +++ b/tests/stress_tests/extractloop.bash @@ -0,0 +1,56 @@ +#!/bin/bash +# +# Mount a gocryptfs filesystem somewhere on /tmp, then run two parallel +# infinite loops inside that do the following: +# 1) Extract linux-3.0.tar.gz +# 2) Verify the md5sums +# 3) Delete, go to (1) +# +# This test is good at discovering inode-related memory leaks because it creates +# huge numbers of files. + +set -eu + +cd "$(dirname "$0")" +MD5="$PWD/extractloop.md5sums" + +# Setup +cd /tmp +wget -nv --show-progress -c https://www.kernel.org/pub/linux/kernel/v3.0/linux-3.0.tar.gz +DIR1=$(mktemp -d) +DIR2=$(mktemp -d) +gocryptfs -q -init -extpass="echo test" $DIR1 +gocryptfs -q -extpass="echo test" -nosyslog $DIR1 $DIR2 +#gocryptfs -q -extpass="echo test" -nosyslog -memprofile /tmp/extractloop-mem $DIR1 $DIR2 +cd $DIR2 + +# Cleanup trap +# Note: gocryptfs may have already umounted itself because bash relays SIGINT +# Just ignore fusermount errors. +trap "cd /; fusermount -u -z $DIR2; rm -rf $DIR1 $DIR2" EXIT + +function loop { + # Note: In a subshell, $$ returns the PID of the *parent* shell, + # we need our own, which is why we have to use $BASHPID. + mkdir $BASHPID + cd $BASHPID + + echo "[pid $BASHPID] Starting loop" + + N=1 + while true + do + t1=$SECONDS + tar xf /tmp/linux-3.0.tar.gz + md5sum --status -c $MD5 + rm -Rf linux-3.0 + t2=$SECONDS + delta=$((t2-t1)) + echo "[pid $BASHPID] Iteration $N done, $delta seconds" + let N=$N+1 + done +} + +loop & +loop & +wait |