tests: Extend ctdb stub to support "ptrans", "pdelete", "catdb"
authorMartin Schwenke <martin@meltin.net>
Fri, 27 Feb 2015 04:13:23 +0000 (15:13 +1100)
committerAmitay Isaacs <amitay@gmail.com>
Thu, 5 Mar 2015 00:43:29 +0000 (11:43 +1100)
Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Amitay Isaacs <amitay@gmail.com>
(Imported from commit d057ca04a9eec0f2aa3d792da0a4648e3716685a)

tests/eventscripts/stubs/ctdb

index cdb60134d69d0091188e5e3ac7e3f51a1b4e227d..5baef4a9ce67cabee615c11159ae4e7af49949fe 100755 (executable)
@@ -66,12 +66,6 @@ ctdb_killtcp ()
     done
 }
 
-setup_pstore ()
-{
-    pstore_dir="$CTDB_VARDIR/fake-ctdb/pstore/$1"
-    mkdir -p "$pstore_dir"
-}
-
 parse_nodespec ()
 {
     if [ "$nodespec" = "all" ] ; then
@@ -326,6 +320,88 @@ ctdb_setvar ()
     return 1
 }
 
+######################################################################
+
+_t_setup ()
+{
+    _t_dir="$CTDB_VARDIR/fake-ctdb/fake-tdb/$1"
+    mkdir -p "$_t_dir"
+}
+
+_t_put ()
+{
+    echo "$2" >"${_t_dir}/$1"
+}
+
+_t_get ()
+{
+    cat "${_t_dir}/$1"
+}
+
+_t_del ()
+{
+    rm -f "${_t_dir}/$1"
+}
+
+ctdb_pstore ()
+{
+    _t_setup "$2"
+    _t_put "$3" "$4"
+}
+
+ctdb_pdelete ()
+{
+    _t_setup "$2"
+    _t_del "$3"
+}
+
+ctdb_pfetch ()
+{
+    _t_setup "$2"
+    _t_get "$3" >"$4" 2>/dev/null
+}
+
+ctdb_ptrans ()
+{
+    _t_setup "$2"
+
+    while IFS="" read _line ; do
+       _k=$(echo "$_line" | sed -n -e 's@^"\([^"]*\)" "[^"]*"$@\1@p')
+       _v=$(echo "$_line" | sed -e 's@^"[^"]*" "\([^"]*\)"$@\1@')
+       [ -n "$_k" ] || die "ctdb ptrans: bad line \"${line}\""
+       if [ -n "$_v" ] ; then
+           _t_put "$_k" "$_v"
+       else
+           _t_del "$_k"
+       fi
+    done
+}
+
+ctdb_catdb ()
+{
+    _t_setup "$2"
+
+    # This will break on keys with spaces but we don't have any of
+    # those yet.
+    _count=0
+    for _i in "${_t_dir}/"* ; do
+       [ -r "$_i" ] || continue
+       _k="${_i##*/}" # basename
+       _v=$(_t_get "$_k")
+       _kn=$(echo -n "$_k" | wc -c)
+       _vn=$(echo -n "$_v" | wc -c)
+       cat <<EOF
+key(${_kn}) = "${_k}"
+dmaster: 0
+rsn: 1
+data(${_vn}) = "${_v}"
+
+EOF
+       _count=$(($_count + 1))
+    done
+
+    echo "Dumped ${_count} records"
+}
 
 ######################################################################
 
@@ -346,14 +422,11 @@ case "$1" in
        _t=$(grep -F -v "$2 $3" "$tickles_file")
        echo "$_t" >"$tickles_file"
        ;;
-    pstore)
-       setup_pstore "$2"
-       cat "$4" >"${pstore_dir}/$3"
-       ;;
-    pfetch)
-       setup_pstore "$2"
-       cat "${pstore_dir}/$3" >"$4" 2>/dev/null
-       ;;
+    pstore)  ctdb_pstore  "$@" ;;
+    pdelete) ctdb_pdelete "$@" ;;
+    pfetch)  ctdb_pfetch  "$@" ;;
+    ptrans)  ctdb_ptrans  "$@" ;;
+    catdb)   ctdb_catdb   "$@" ;;
     ifaces)
        # Assume -Y.
        echo "|Name|LinkStatus|References|"