summaryrefslogtreecommitdiff
path: root/ctdb/tests
diff options
context:
space:
mode:
authorMartin Schwenke <martin@meltin.net>2017-08-31 17:00:03 +1000
committerMartin Schwenke <martins@samba.org>2017-09-01 00:13:06 +0200
commitef46d352e4e6c41d47c3e41394428e1e88c1ead5 (patch)
tree7bcf0fcd12adae58fac1ac60791972e36a15f8e8 /ctdb/tests
parentfc493780cf1ccd8b164cd3606a8c64715d33cf2f (diff)
downloadsamba-ef46d352e4e6c41d47c3e41394428e1e88c1ead5.tar.gz
ctdb-tests: Drop onnode test README file and buggy onnode example
These are of no value. The test system is documented elsewhere. An old version of onnode can always be retrieved from git. Signed-off-by: Martin Schwenke <martin@meltin.net> Reviewed-by: Amitay Isaacs <amitay@gmail.com>
Diffstat (limited to 'ctdb/tests')
-rw-r--r--ctdb/tests/onnode/README36
-rwxr-xr-xctdb/tests/onnode/stubs/onnode-buggy-001376
2 files changed, 0 insertions, 412 deletions
diff --git a/ctdb/tests/onnode/README b/ctdb/tests/onnode/README
deleted file mode 100644
index 5bb69524df2..00000000000
--- a/ctdb/tests/onnode/README
+++ /dev/null
@@ -1,36 +0,0 @@
-onnode unit tests
-=================
-
-Examples:
-
-* ../run_tests.sh .
-
- Run all tests, displaying output.
-
-* ../run_tests.sh -s .
-
- Run all tests, displaying output and a summary.
-
-* ../run_tests.sh -sq .
-
- Run all tests, displaying only a summary.
-
-* ONNODE=onnode-buggy-001 ../run_tests.sh -s .
-
- Run against stubs/onnode-buggy-001 instead of default onnode version.
-
- Add more buggy versions of onnode to this directory as bugs are
- fixed to enable test validation using this feature.
-
-* ../run_tests.sh ./009*.sh
-
- Run only the specified tests.
-
-* ONNODE="stubs/onnode-buggy-001" ../run_tests.sh -X ./0090.sh
- ../run_tests.sh -X ./0090.sh
-
- Debug the specified test or test failure by tracing onnode with
- "bash -x". The test will fail because the bash trace output will be
- included in the test output.
-
- To see if the test pases, the -X can be dropped...
diff --git a/ctdb/tests/onnode/stubs/onnode-buggy-001 b/ctdb/tests/onnode/stubs/onnode-buggy-001
deleted file mode 100755
index e044ee33a18..00000000000
--- a/ctdb/tests/onnode/stubs/onnode-buggy-001
+++ /dev/null
@@ -1,376 +0,0 @@
-#!/bin/bash
-
-# Run commands on CTDB nodes.
-
-# See http://ctdb.samba.org/ for more information about CTDB.
-
-# Copyright (C) Martin Schwenke 2008
-
-# Based on an earlier script by Andrew Tridgell and Ronnie Sahlberg.
-
-# Copyright (C) Andrew Tridgell 2007
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
-
-prog=$(basename $0)
-
-usage ()
-{
- cat >&2 <<EOF
-Usage: onnode [OPTION] ... <NODES> <COMMAND> ...
- options:
- -c Run in current working directory on specified nodes.
- -o <prefix> Save standard output from each node to file <prefix>.<ip>
- -p Run command in parallel on specified nodes.
- -q Do not print node addresses (overrides -v).
- -n Allow nodes to be specified by name.
- -f Specify nodes file, overrides CTDB_NODES_FILE.
- -v Print node address even for a single node.
- <NODES> "all", "any", "ok" (or "healthy"), "con" (or "connected"),
- "rm" (or "recmaster"), "lvs" (or "lvsmaster"),
- "natgw" (or "natgwlist"); or
- a node number (0 base); or
- a hostname (if -n is specified); or
- list (comma separated) of <NODES>; or
- range (hyphen separated) of node numbers.
-EOF
- exit 1
-
-}
-
-invalid_nodespec ()
-{
- echo "Invalid <nodespec>" >&2 ; echo >&2
- usage
-}
-
-# Defaults.
-current=false
-parallel=false
-verbose=false
-quiet=false
-prefix=""
-names_ok=false
-
-ctdb_base="${CTDB_BASE:-/etc/ctdb}"
-
-parse_options ()
-{
- # $POSIXLY_CORRECT means that the command passed to onnode can
- # take options and getopt won't reorder things to make them
- # options ot onnode.
- local temp
- # Not on the previous line - local returns 0!
- temp=$(POSIXLY_CORRECT=1 getopt -n "$prog" -o "cf:hno:pqv" -l help -- "$@")
-
- [ $? != 0 ] && usage
-
- eval set -- "$temp"
-
- while true ; do
- case "$1" in
- -c) current=true ; shift ;;
- -f) CTDB_NODES_FILE="$2" ; shift 2 ;;
- -n) names_ok=true ; shift ;;
- -o) prefix="$2" ; shift 2 ;;
- -p) parallel=true ; shift ;;
- -q) quiet=true ; shift ;;
- -v) verbose=true ; shift ;;
- --) shift ; break ;;
- -h|--help|*) usage ;; # Shouldn't happen, so this is reasonable.
- esac
- done
-
- [ $# -lt 2 ] && usage
-
- nodespec="$1" ; shift
- command="$@"
-}
-
-echo_nth ()
-{
- local n="$1" ; shift
-
- shift $n
- local node="$1"
-
- if [ -n "$node" -a "$node" != "#DEAD" ] ; then
- echo $node
- else
- echo "${prog}: \"node ${n}\" does not exist" >&2
- exit 1
- fi
-}
-
-parse_nodespec ()
-{
- # Subshell avoids hacks to restore $IFS.
- (
- IFS=","
- for i in $1 ; do
- case "$i" in
- *-*) seq "${i%-*}" "${i#*-}" 2>/dev/null || invalid_nodespec ;;
- # Separate lines for readability.
- all|any|ok|healthy|con|connected) echo "$i" ;;
- rm|recmaster|lvs|lvsmaster|natgw|natgwlist) echo "$i" ;;
- *)
- [ $i -gt -1 ] 2>/dev/null || $names_ok || invalid_nodespec
- echo $i
- esac
- done
- )
-}
-
-ctdb_status_output="" # cache
-get_nodes_with_status ()
-{
- local all_nodes="$1"
- local status="$2"
-
- local bits
- case "$status" in
- healthy)
- bits="0|0|0|0|0|0"
- ;;
- connected)
- bits="0|[0-1]|[0-1]|[0-1]|[0-1]|[0-1]"
- ;;
- *)
- invalid_nodespec
- esac
-
- if [ -z "$ctdb_status_output" ] ; then
- # FIXME: need to do something if $CTDB_NODES_SOCKETS is set.
- ctdb_status_output=$(ctdb -X status 2>/dev/null)
- if [ $? -ne 0 ] ; then
- echo "${prog}: unable to get status of CTDB nodes" >&2
- exit 1
- fi
- ctdb_status_output="${ctdb_status_output#* }"
- fi
-
- local nodes=""
- local i
- for i in $ctdb_status_output ; do
- # Try removing bits from end.
- local t="${i%|${bits}|}"
- if [ "$t" != "$i" ] ; then
- # Succeeded. Get address. NOTE: this is an optimisation.
- # It might be better to get the node number and then get
- # the nth node to get the address. This would make things
- # more consistent if $ctdb_base/nodes actually contained
- # hostnames.
- nodes="${nodes} ${t#|*|}"
- fi
- done
-
- echo $nodes
-}
-
-ctdb_props="" # cache
-get_node_with_property ()
-{
- local all_nodes="$1"
- local prop="$2"
-
- local prop_node=""
- if [ "${ctdb_props##:${prop}:}" = "$ctdb_props" ] ; then
- prop_node=$(ctdb "$prop" -X 2>/dev/null)
- # We only want the first line.
- local nl="
-"
- prop_node="${prop_node%%${nl}*}"
- if [ $? -eq 0 ] ; then
- ctdb_props="${ctdb_props}${ctdb_props:+ }:${prop}:${prop_node}"
- else
- prop_node=""
- fi
- else
- prop_node="${ctdb_props##:${prop}:}"
- prop_node="${prop_node%% *}"
- fi
- if [ -n "$prop_node" ] ; then
- echo_nth "$prop_node" $all_nodes
- else
- echo "${prog}: No ${prop} available" >&2
- exit 1
- fi
-}
-
-get_any_available_node ()
-{
- local all_nodes="$1"
-
- # We do a recursive onnode to find which nodes are up and running.
- local out=$($0 -pq all ctdb pnn 2>&1)
- local line
- while read line ; do
- local pnn="${line#PNN:}"
- if [ "$pnn" != "$line" ] ; then
- echo_nth "$pnn" $all_nodes
- return 0
- fi
- # Else must be an error message from a down node.
- done <<<"$out"
- return 1
-}
-
-get_nodes ()
-{
- local all_nodes
-
- if [ -n "$CTDB_NODES_SOCKETS" ] ; then
- all_nodes="$CTDB_NODES_SOCKETS"
- else
- local f="${ctdb_base}/nodes"
- if [ -n "$CTDB_NODES_FILE" ] ; then
- f="$CTDB_NODES_FILE"
- if [ ! -e "$f" -a "${f#/}" = "$f" ] ; then
- # $f is relative, try in $ctdb_base
- f="${ctdb_base}/${f}"
- fi
- fi
-
- if [ ! -r "$f" ] ; then
- echo "${prog}: unable to open nodes file \"${f}\"" >&2
- exit 1
- fi
-
- all_nodes=$(sed -e 's@#.*@@g' -e 's@ *@@g' -e 's@^$@#DEAD@' "$f")
- fi
-
- local nodes=""
- local n
- for n in $(parse_nodespec "$1") ; do
- [ $? != 0 ] && exit 1 # Required to catch exit in above subshell.
- case "$n" in
- all)
- echo "${all_nodes//#DEAD/}"
- ;;
- any)
- get_any_available_node "$all_nodes" || exit 1
- ;;
- ok|healthy)
- get_nodes_with_status "$all_nodes" "healthy" || exit 1
- ;;
- con|connected)
- get_nodes_with_status "$all_nodes" "connected" || exit 1
- ;;
- rm|recmaster)
- get_node_with_property "$all_nodes" "recmaster" || exit 1
- ;;
- lvs|lvsmaster)
- get_node_with_property "$all_nodes" "lvsmaster" || exit 1
- ;;
- natgw|natgwlist)
- get_node_with_property "$all_nodes" "natgwlist" || exit 1
- ;;
- [0-9]|[0-9][0-9]|[0-9][0-9][0-9])
- echo_nth $n $all_nodes
- ;;
- *)
- $names_ok || invalid_nodespec
- echo $n
- esac
- done
-}
-
-fakessh ()
-{
- CTDB_SOCKET="$1" sh -c "$2" 3>/dev/null
-}
-
-stdout_filter ()
-{
- if [ -n "$prefix" ] ; then
- cat >"${prefix}.${n//\//_}"
- elif $verbose && $parallel ; then
- sed -e "s@^@[$n] @"
- else
- cat
- fi
-}
-
-stderr_filter ()
-{
- if $verbose && $parallel ; then
- sed -e "s@^@[$n] @"
- else
- cat
- fi
-}
-
-######################################################################
-
-parse_options "$@"
-
-$current && command="cd $PWD && $command"
-
-ssh_opts=
-if [ -n "$CTDB_NODES_SOCKETS" ] ; then
- SSH=fakessh
-else
- # Could "2>/dev/null || true" but want to see errors from typos in file.
- [ -r "${ctdb_base}/onnode.conf" ] && . "${ctdb_base}/onnode.conf"
- [ -n "$SSH" ] || SSH=ssh
- if [ "$SSH" = "ssh" ] ; then
- ssh_opts="-n"
- else
- : # rsh? All bets are off!
- fi
-fi
-
-######################################################################
-
-nodes=$(get_nodes "$nodespec")
-[ $? != 0 ] && exit 1 # Required to catch exit in above subshell.
-
-if $quiet ; then
- verbose=false
-else
- # If $nodes contains a space or a newline then assume multiple nodes.
- nl="
-"
- [ "$nodes" != "${nodes%[ ${nl}]*}" ] && verbose=true
-fi
-
-pids=""
-trap 'kill -TERM $pids 2>/dev/null' INT TERM
-# There's a small race here where the kill can fail if no processes
-# have been added to $pids and the script is interrupted. However,
-# the part of the window where it matter is very small.
-retcode=0
-for n in $nodes ; do
- set -o pipefail 2>/dev/null
- if $parallel ; then
- { exec 3>&1 ; { $SSH $ssh_opts $EXTRA_SSH_OPTS $n "$command" | stdout_filter >&3 ; } 2>&1 | stderr_filter ; } &
- pids="${pids} $!"
- else
- if $verbose ; then
- echo >&2 ; echo ">> NODE: $n <<" >&2
- fi
-
- { exec 3>&1 ; { $SSH $ssh_opts $EXTRA_SSH_OPTS $n "$command" | stdout_filter >&3 ; } 2>&1 | stderr_filter ; }
- [ $? = 0 ] || retcode=$?
- fi
-done
-
-$parallel && {
- for p in $pids; do
- wait $p
- [ $? = 0 ] || retcode=$?
- done
-}
-
-exit $retcode