mirror of https://gitee.com/bigwinds/arangodb
327 lines
7.6 KiB
Bash
Executable File
327 lines
7.6 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Author Jan Christoph Uhde
|
|
|
|
main(){
|
|
source_file=~/.tmux_starter_suites #may not contain spaces
|
|
if [[ -f $source_file ]]; then
|
|
. $source_file
|
|
fi
|
|
|
|
local suite=${1:-all}
|
|
shift
|
|
|
|
local tasks="suite_$suite"
|
|
type -t function $tasks &>/dev/null|| die "suite $suite not defined"
|
|
echo "using function name: $tasks"
|
|
local session_name="$($tasks 'name')"
|
|
echo "using session name: $session_name"
|
|
local panes=$($tasks 'num')
|
|
echo "using $panes panes"
|
|
kill_old_session "$session_name"
|
|
tmux new-session -d -s "$session_name" || die "unable to spawn session"
|
|
local rows=$(( (panes+1) / 2 ))
|
|
local cols=$((((panes>1)) * 2))
|
|
spawn_panes "$session_name" $rows $cols
|
|
tmux select-pane -t $session_name.0
|
|
execute_tasks "$(pwd)" "$tasks" "$@"
|
|
tmux -2 attach-session -t $session_name
|
|
}
|
|
|
|
# task definitions
|
|
|
|
suite_all(){
|
|
local count="$1"
|
|
shift 1
|
|
local args="$@"
|
|
local args_default=( '--cluster' 'false' )
|
|
|
|
local tests=""
|
|
case $count in
|
|
num)
|
|
echo "12"
|
|
return
|
|
;;
|
|
name)
|
|
echo "test_all"
|
|
return
|
|
;;
|
|
delay)
|
|
return
|
|
;;
|
|
0)
|
|
echo "./scripts/quickieTest.sh ${args[@]} && exit 0"
|
|
return
|
|
;;
|
|
1)
|
|
tests="shell_server"
|
|
;;
|
|
2)
|
|
tests="shell_client"
|
|
;;
|
|
3)
|
|
tests="shell_server_aql --testBuckets 2/0"
|
|
;;
|
|
4)
|
|
tests="shell_server_aql --testBuckets 2/1"
|
|
;;
|
|
5)
|
|
tests="http_server"
|
|
;;
|
|
6)
|
|
tests="server_http"
|
|
;;
|
|
7)
|
|
tests="dump importing"
|
|
;;
|
|
8)
|
|
tests="export arangobench upgrade"
|
|
;;
|
|
9)
|
|
tests="replication_sync replication_static"
|
|
;;
|
|
10)
|
|
tests="replication_ongoing http_replication shell_replication"
|
|
;;
|
|
11)
|
|
tests="agency cluster_sync"
|
|
;;
|
|
*)
|
|
esac
|
|
|
|
echoerr "./scripts/unittest $tests ${args_default[@]} ${args[@]} && exit 0"
|
|
echo "./scripts/unittest $tests ${args_default[@]} ${args[@]} && exit 0"
|
|
}
|
|
|
|
portrange() {
|
|
local count="$1"
|
|
local portStart=1240
|
|
local portOffset=20
|
|
echo "--minPort $(( portStart + count * portOffset )) --maxPort $(( portStart + (count + 1) * portOffset - 1))"
|
|
}
|
|
|
|
## suite_all_cluster(){
|
|
## local count="$1"
|
|
## shift 1
|
|
## local args="$@"
|
|
## local args_default=( '--cluster' 'true' )
|
|
##
|
|
## local tests=""
|
|
## case $count in
|
|
## num)
|
|
## echo "12"
|
|
## return
|
|
## ;;
|
|
## name)
|
|
## echo "test_all_cluster"
|
|
## return
|
|
## ;;
|
|
## delay)
|
|
## echo "10"
|
|
## return
|
|
## ;;
|
|
## 0)
|
|
## echo "./scripts/quickieTest.sh ${args[@]} && exit 0"
|
|
## return
|
|
## ;;
|
|
## 1)
|
|
## tests="shell_server $(portrange $count)"
|
|
## ;;
|
|
## 2)
|
|
## tests="shell_client $(portrange $count)"
|
|
## ;;
|
|
## 3)
|
|
## tests="shell_server_aql --testBuckets 3/0 $(portrange $count)"
|
|
## ;;
|
|
## 4)
|
|
## tests="shell_server_aql --testBuckets 3/1 $(portrange $count)"
|
|
## ;;
|
|
## 5)
|
|
## tests="shell_server_aql --testBuckets 3/2 $(portrange $count)"
|
|
## ;;
|
|
## 6)
|
|
## tests="http_server $(portrange $count)"
|
|
## ;;
|
|
## 7)
|
|
## tests="ssl_server $(portrange $count)"
|
|
## ;;
|
|
## 8)
|
|
## tests="server_http $(portrange $count)"
|
|
## ;;
|
|
## 9)
|
|
## tests="dump $(portrange $count)"
|
|
## ;;
|
|
## 10)
|
|
## tests="agency $(portrange $count)"
|
|
## ;;
|
|
## 11)
|
|
## tests="resilience $(portrange $count)"
|
|
## ;;
|
|
## *)
|
|
## echo "exit 0"
|
|
## return
|
|
## esac
|
|
##
|
|
## echo "./scripts/unittest $tests ${args_default[@]} ${args[@]} && exit 0"
|
|
## }
|
|
|
|
|
|
suite_all_cluster(){
|
|
local count="$1"
|
|
shift 1
|
|
local args="$@"
|
|
local args_default=( '--cluster' 'true' )
|
|
|
|
local tests=""
|
|
case $count in
|
|
num)
|
|
echo "6"
|
|
return
|
|
;;
|
|
name)
|
|
echo "test_all_cluster"
|
|
return
|
|
;;
|
|
delay)
|
|
echo "10"
|
|
return
|
|
;;
|
|
0)
|
|
echo "./scripts/quickieTest.sh ${args[@]} && exit 0"
|
|
return
|
|
;;
|
|
1)
|
|
tests="shell_server $(portrange $count)"
|
|
;;
|
|
2)
|
|
tests="shell_client $(portrange $count)"
|
|
;;
|
|
3)
|
|
tests="shell_server_aql $(portrange $count)"
|
|
;;
|
|
4)
|
|
tests="http_server ssl_server server_http $(portrange $count)"
|
|
;;
|
|
5)
|
|
tests="dump agency resilience $(portrange $count)"
|
|
;;
|
|
*)
|
|
echo "exit 0"
|
|
return
|
|
esac
|
|
|
|
echo "./scripts/unittest $tests ${args_default[@]} ${args[@]} && exit 0"
|
|
}
|
|
|
|
suite_all_rocksdb(){
|
|
local count="$1"
|
|
shift 1
|
|
local args="$@"
|
|
|
|
case $count in
|
|
name)
|
|
echo "test_all_rocksdb"
|
|
return
|
|
;;
|
|
*)
|
|
suite_all "$count" "--storageEngine rocksdb" "${args[@]}"
|
|
;;
|
|
esac
|
|
}
|
|
|
|
suite_all_rocksdb_cluster(){
|
|
local count="$1"
|
|
shift 1
|
|
local args="$@"
|
|
|
|
case $count in
|
|
name)
|
|
echo "test_all_rocksdb_cluster"
|
|
return
|
|
;;
|
|
*)
|
|
suite_all_cluster "$count" "--storageEngine rocksdb" "${args[@]}"
|
|
;;
|
|
esac
|
|
}
|
|
# tmux
|
|
kill_old_session(){
|
|
local session_name="$1"
|
|
if tmux has-session -t $session_name 2> /dev/null; then
|
|
echo "Session $session_name exists. Kill it? [y/N]"
|
|
read kill_sess
|
|
echo "killsess '$kill_sess'"
|
|
if [[ ($kill_sess == "y") || ($kill_sess == "Y") ]]; then
|
|
tmux kill-session -t $session_name
|
|
else
|
|
die "Session not created because it already exists. Exiting."
|
|
fi
|
|
fi
|
|
}
|
|
|
|
spawn_panes(){
|
|
local session_name="$1"
|
|
local rows=$2
|
|
local cols=$3
|
|
|
|
# Create rows
|
|
local row=$rows
|
|
while (( row > 1 )); do
|
|
frac=$(echo "scale=2;1/$row" | bc)
|
|
percent=$(echo "($frac * 100)/1" | bc)
|
|
tmux select-pane -t $session_name.0 || die "could not select pane 0 of session $session_name"
|
|
tmux split-window -v -p $percent
|
|
((row--))
|
|
done
|
|
|
|
# Create columns
|
|
if ((cols > 1)); then
|
|
local count=$((rows - 1))
|
|
while ((count >= 0)); do
|
|
tmux select-pane -t $session_name.$count || die "could not select pane $session_name.$count"
|
|
tmux split-window -h -p 50
|
|
(( count-- ))
|
|
done
|
|
fi
|
|
}
|
|
|
|
execute_tasks(){
|
|
cd $1 || die
|
|
local tasks="$2"
|
|
shift 2
|
|
local args="$@"
|
|
local count=0
|
|
local delay=""
|
|
delay="$($tasks 'delay')"
|
|
while (( count < $($tasks 'num') )); do
|
|
local exec_cmd="$($tasks $count "${args[@]}")"
|
|
echo "running: ${exec_cmd[@]}"
|
|
if [[ -n "$delay" ]]; then
|
|
echo "sleep for $delay"
|
|
sleep "$delay"
|
|
fi
|
|
tmux send-keys -t $session_name.$count "${exec_cmd[@]}" Enter
|
|
(( count++ ))
|
|
done
|
|
}
|
|
|
|
# helper
|
|
echoerr() { printf "%s\n" "$*" >&2; }
|
|
|
|
die(){
|
|
echo "FATAL: ${1-this should not happen}"
|
|
exit 1
|
|
}
|
|
|
|
|
|
cores(){
|
|
# Determine automatically on Mac or Linux
|
|
if [[ $(uname) == 'Darwin' ]]; then
|
|
echo "$(sysctl hw.ncpu | awk '{print $2}')"
|
|
else
|
|
echo "$(nproc)"
|
|
fi
|
|
}
|
|
|
|
main "$@"
|
|
exit 0
|