summaryrefslogtreecommitdiffstats
path: root/fb-smoke.sh
diff options
context:
space:
mode:
authorkrad <krad@fb.com>2017-08-17 14:09:13 -0700
committerJeff Darcy <jeff@pl.atyp.us>2017-08-18 12:28:02 +0000
commit2f343120302e7ed3ea42f276a0a92e557582ad51 (patch)
tree51f2b83e4df7ba4f11ed224ffb893661c89dff1c /fb-smoke.sh
parent233156d6fc1eabed41fcae6a877db3d66ff6f073 (diff)
fb-smoke: Add fb-smoke, build and build_env to r-3.8
Summary: The new plan is to keep fb-smoke, build and build_env in every version of gluster. Changes in r-3.6 will be ported to r-3.8 henceforth. We reference fbcode for remote testing. Test Plan: Run unit, asan, valgrind Reviewers: junsongli, sshreyas, jdarcy Reviewed By: jdarcy Subscribers: #posix_storage Differential Revision: https://phabricator.intern.facebook.com/D5653092 Tasks: T20082902 Change-Id: Iebf4cfc1752e97d6f9efe80af88ee06c21103d83 Signature: t1:5653092:1503006640:642f075cba3a7295af42638e100d2e48f426f07a Reviewed-on: https://review.gluster.org/18055 Smoke: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Jeff Darcy <jeff@pl.atyp.us> Tested-by: Jeff Darcy <jeff@pl.atyp.us> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'fb-smoke.sh')
-rwxr-xr-xfb-smoke.sh207
1 files changed, 207 insertions, 0 deletions
diff --git a/fb-smoke.sh b/fb-smoke.sh
new file mode 100755
index 00000000000..72299a6a041
--- /dev/null
+++ b/fb-smoke.sh
@@ -0,0 +1,207 @@
+#!/bin/bash
+
+#
+# Tests
+#
+DESIRED_TESTS="\
+ tests/basic/*.t\
+ tests/basic/afr/*.t\
+ tests/basic/distribute/*.t\
+ tests/basic/dht/*.t\
+ tests/features/brick-min-free-space.t\
+ "
+
+KNOWN_FLAKY_TESTS="\
+ tests/basic/afr/shd-autofix-nogfid.t\
+ tests/basic/accept-v6v4.t\
+ tests/basic/bd.t\
+ tests/basic/fop-throttling.t\
+ tests/basic/fops-sanity.t\
+ tests/basic/mgmt_v3-locks.t\
+ tests/basic/mount.t\
+ tests/basic/pump.t\
+ tests/basic/rpm.t\
+ tests/basic/uss.t\
+ tests/basic/volume-snapshot.t\
+"
+
+#
+# Helpers
+#
+function elapsed_since {
+ start=$1
+ (("$SECONDS" - "$start"))
+}
+
+function flaky {
+ local f
+ for f in ${KNOWN_FLAKY_TESTS}; do
+ if [ "$f" == "$1" ]; then
+ return 0
+ fi
+ done
+ return 1
+}
+
+function outfile {
+ printf "/tmp/%s.out" "$(echo "$f" | tr / -)"
+}
+
+function exit_test {
+ if [ "$STOP_ON_FAIL" -eq "1" ]; then
+ print_result
+ exit "$1"
+ fi
+}
+
+function test {
+ f=$1
+ printf "%s" "$f"
+ local start
+ start=$SECONDS
+ local out
+ out=$(outfile "$f")
+
+ for i in $(seq 1 "$ATTEMPT"); do
+ DEBUG=1 timeout --foreground "$TEST_TIMEOUT" prove -v "$f" &> "$out.$i"
+
+ if [ "$?" -eq "0" ]; then
+ SUCCESS=$SUCCESS+1
+ printf " PASS (%s s)\n" "$(elapsed_since $start)"
+ rm -f "$out.$i"
+ return 0
+ else
+ printf " %s" "($i/$ATTEMPT)"
+ fi
+ done
+
+ if [[ $? -eq 124 || $? -eq 137 ]]; then
+ FAILED_TESTS+=($f)
+ FAIL=$FAIL+1
+ printf " TIMEOUT (%s s)\n" "$(elapsed_since $start)"
+ exit_test 1
+ else
+ FAILED_TESTS+=($f)
+ FAIL=$FAIL+1
+ printf " FAIL (%s s)\n" "$(elapsed_since $start)"
+ exit_test 1
+ fi
+}
+
+function flakytest {
+ f=$1
+
+ if [ "$SKIP_FLAKY" -eq "1" ]; then
+ SKIP=$SKIP+1
+ else
+ printf "<flaky> "
+ test "$f"
+ fi
+}
+
+function print_result {
+ echo
+ echo "== RESULTS =="
+ echo "TESTS : $TOTAL"
+ echo "SUCCESS : $SUCCESS"
+ echo "FAIL : $FAIL"
+ echo "SKIP : $SKIP"
+
+ if [ "$FAIL" -gt "0" ]; then
+ echo
+ echo "== FAILED TESTS =="
+ echo "${FAILED_TESTS[@]}"
+ echo
+ echo "== LOGS =="
+ "ls /tmp/*.out.*"
+ echo
+ echo "== END =="
+ fi
+}
+
+function run_remote {
+ if [ ! -d "$FBCODE" ]; then
+ echo "fbcode does not exists. Please checkout fbcode"
+ return 1
+ fi
+
+ local flags=''
+ if [ "$VERBOSE" -eq "1" ]; then
+ flags="$flags -v"
+ fi
+
+ if [ "$VALGRIND" -eq "1" ]; then
+ flags="$flags --valgrind"
+ fi
+
+ if [ "$ASAN" -eq "1" ]; then
+ flags="$flags --asan"
+ fi
+
+ "$FBCODE/storage/gluster/gluster-build/fb-gluster-test.py" $flags --tester --n "$N" --hosts "$REMOTE_HOSTS" --tests "$REMOTE_TESTS"
+}
+
+#
+# Main
+#
+declare -i TOTAL=0
+declare -i SUCCESS=0
+declare -i FAIL=0
+declare -i SKIP=0
+declare -a FAILED_TESTS
+
+TEST_TIMEOUT=${TEST_TIMEOUT:=300}
+SKIP_FLAKY=${SKIP_FLAKY:=1}
+STOP_ON_FAIL=${STOP_ON_FAIL:=0}
+FBCODE=${FBCODE:="$HOME/fbsource/fbcode"}
+N=${N:=0}
+REMOTE_HOSTS=${REMOTE_HOSTS:="$(smcc ls-hosts -s gluster.build.ash | xargs)"}
+REMOTE=${REMOTE:=0}
+REMOTE_TESTS=${REMOTE_TESTS:='smoke'}
+VERBOSE=${VERBOSE:=0}
+VALGRIND=${VALGRIND:=0}
+ASAN=${ASAN:=0}
+
+if [ "$REMOTE" -eq "1" ]; then
+ run_remote
+ exit $?
+fi
+
+if [ "$SKIP_FLAKY" -eq "0" ]; then
+ ATTEMPT=${ATTEMPT:=3}
+else
+ ATTEMPT=${ATTEMPT:=1}
+fi
+
+echo "== SETTINGS =="
+echo "TEST_TIMEOUT = $TEST_TIMEOUT s"
+echo "SKIP_FLAKY = $SKIP_FLAKY"
+echo "STOP_ON_FAIL = $STOP_ON_FAIL"
+echo "ATTEMPT = $ATTEMPT"
+echo "REMOTE = $REMOTE"
+echo "FBCODE = $FBCODE"
+echo
+
+# try cleaning up the environment
+rm -f /tmp/*.out.* || true
+
+# sanity check
+if ! cmp -s ./glusterfsd/src/.libs/glusterfsd $(which glusterfsd)
+then
+ echo "Installed gluster does not match local, perhaps you ought make install?"
+ exit 1
+fi
+
+echo "== TESTS =="
+for f in ${DESIRED_TESTS}
+do
+ TOTAL=$TOTAL+1
+ if flaky "$f"; then
+ flakytest "$f"
+ else
+ test "$f"
+ fi
+done
+
+print_result
+exit $FAIL