#! /bin/sh
# Generated from ovsdb-cluster-testsuite.at by GNU Autoconf 2.71.
#
# Copyright (C) 2009-2017, 2020-2021 Free Software Foundation, Inc.
#
# This test suite is free software; the Free Software Foundation gives
# unlimited permission to copy, distribute and modify it.
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##

# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
as_nop=:
if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else $as_nop
  case `(set -o) 2>/dev/null` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi



# Reset variables that may have inherited troublesome values from
# the environment.

# IFS needs to be set, to space, tab, and newline, in precisely that order.
# (If _AS_PATH_WALK were called with IFS unset, it would have the
# side effect of setting IFS to empty, thus disabling word splitting.)
# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
IFS=" ""	$as_nl"

PS1='$ '
PS2='> '
PS4='+ '

# Ensure predictable behavior from utilities with locale-dependent output.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# We cannot yet rely on "unset" to work, but we need these variables
# to be unset--not just set to an empty or harmless value--now, to
# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
# also avoids known problems related to "unset" and subshell syntax
# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
do eval test \${$as_var+y} \
  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done

# Ensure that fds 0, 1, and 2 are open.
if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi

# The user is always right.
if ${PATH_SEPARATOR+false} :; then
  PATH_SEPARATOR=:
  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
      PATH_SEPARATOR=';'
  }
fi


# Find who we are.  Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
  *[\\/]* ) as_myself=$0 ;;
  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
  done
IFS=$as_save_IFS

     ;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
  as_myself=$0
fi
if test ! -f "$as_myself"; then
  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  exit 1
fi


if test "x$CONFIG_SHELL" = x; then
  as_bourne_compatible="as_nop=:
if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '\${1+\"\$@\"}'='\"\$@\"'
  setopt NO_GLOB_SUBST
else \$as_nop
  case \`(set -o) 2>/dev/null\` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi
"
  as_required="as_fn_return () { (exit \$1); }
as_fn_success () { as_fn_return 0; }
as_fn_failure () { as_fn_return 1; }
as_fn_ret_success () { return 0; }
as_fn_ret_failure () { return 1; }

exitcode=0
as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
if ( set x; as_fn_ret_success y && test x = \"\$1\" )
then :

else \$as_nop
  exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
blah=\$(echo \$(echo blah))
test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
test \$(( 1 + 1 )) = 2 || exit 1"
  if (eval "$as_required") 2>/dev/null
then :
  as_have_required=yes
else $as_nop
  as_have_required=no
fi
  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
then :

else $as_nop
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
  as_found=:
  case $as_dir in #(
	 /*)
	   for as_base in sh bash ksh sh5; do
	     # Try only shells that exist, to save several forks.
	     as_shell=$as_dir$as_base
	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
		    as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
then :
  CONFIG_SHELL=$as_shell as_have_required=yes
		   if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
then :
  break 2
fi
fi
	   done;;
       esac
  as_found=false
done
IFS=$as_save_IFS
if $as_found
then :

else $as_nop
  if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
	      as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
then :
  CONFIG_SHELL=$SHELL as_have_required=yes
fi
fi


      if test "x$CONFIG_SHELL" != x
then :
  export CONFIG_SHELL
             # We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
  *v*x* | *x*v* ) as_opts=-vx ;;
  *v* ) as_opts=-v ;;
  *x* ) as_opts=-x ;;
  * ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi

    if test x$as_have_required = xno
then :
  printf "%s\n" "$0: This script requires a shell more modern than all"
  printf "%s\n" "$0: the shells that I found on your system."
  if test ${ZSH_VERSION+y} ; then
    printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
    printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
  else
    printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
  fi
  exit 1
fi
fi
fi
SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
# Unset more variables known to interfere with behavior of common tools.
CLICOLOR_FORCE= GREP_OPTIONS=
unset CLICOLOR_FORCE GREP_OPTIONS

## --------------------- ##
## M4sh Shell Functions. ##
## --------------------- ##
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
  { eval $1=; unset $1;}
}
as_unset=as_fn_unset


# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
  return $1
} # as_fn_set_status

# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
  set +e
  as_fn_set_status $1
  exit $1
} # as_fn_exit
# as_fn_nop
# ---------
# Do nothing but, unlike ":", preserve the value of $?.
as_fn_nop ()
{
  return $?
}
as_nop=as_fn_nop

# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{

  case $as_dir in #(
  -*) as_dir=./$as_dir;;
  esac
  test -d "$as_dir" || eval $as_mkdir_p || {
    as_dirs=
    while :; do
      case $as_dir in #(
      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
      *) as_qdir=$as_dir;;
      esac
      as_dirs="'$as_qdir' $as_dirs"
      as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_dir" : 'X\(//\)[^/]' \| \
	 X"$as_dir" : 'X\(//\)$' \| \
	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X"$as_dir" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
      test -d "$as_dir" && break
    done
    test -z "$as_dirs" || eval "mkdir $as_dirs"
  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"


} # as_fn_mkdir_p

# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
  test -f "$1" && test -x "$1"
} # as_fn_executable_p
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
then :
  eval 'as_fn_append ()
  {
    eval $1+=\$2
  }'
else $as_nop
  as_fn_append ()
  {
    eval $1=\$$1\$2
  }
fi # as_fn_append

# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
then :
  eval 'as_fn_arith ()
  {
    as_val=$(( $* ))
  }'
else $as_nop
  as_fn_arith ()
  {
    as_val=`expr "$@" || test $? -eq 1`
  }
fi # as_fn_arith


# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
  as_status=$1; test $as_status -eq 0 && as_status=1
  if test "$4"; then
    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
  fi
  printf "%s\n" "$as_me: error: $2" >&2
  as_fn_exit $as_status
} # as_fn_error

if expr a : '\(a\)' >/dev/null 2>&1 &&
   test "X`expr 00001 : '.*\(...\)'`" = X001; then
  as_expr=expr
else
  as_expr=false
fi

if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
  as_basename=basename
else
  as_basename=false
fi

as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
	 X"$0" : 'X\(//\)$' \| \
	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X/"$0" |
    sed '/^.*\/\([^/][^/]*\)\/*$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`

if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
  as_dirname=dirname
else
  as_dirname=false
fi

# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits


  as_lineno_1=$LINENO as_lineno_1a=$LINENO
  as_lineno_2=$LINENO as_lineno_2a=$LINENO
  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
  sed -n '
    p
    /[$]LINENO/=
  ' <$as_myself |
    sed '
      s/[$]LINENO.*/&-/
      t lineno
      b
      :lineno
      N
      :loop
      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
      t loop
      s/-\n.*//
    ' >$as_me.lineno &&
  chmod +x "$as_me.lineno" ||
    { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }

  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
  # already done that, so ensure we don't try to do so again and fall
  # in an infinite loop.  This has already happened in practice.
  _as_can_reexec=no; export _as_can_reexec
  # Don't try to exec as it changes $[0], causing all sort of problems
  # (the dirname of $[0] is not the place where we might find the
  # original and so on.  Autoconf is especially sensitive to this).
  . "./$as_me.lineno"
  # Exit status is that of the last command.
  exit
}


# Determine whether it's possible to make 'echo' print without a newline.
# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
  case `echo 'xy\c'` in
  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
  xy)  ECHO_C='\c';;
  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
       ECHO_T='	';;
  esac;;
*)
  ECHO_N='-n';;
esac

# For backward compatibility with old third-party macros, we provide
# the shell variables $as_echo and $as_echo_n.  New code should use
# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
as_echo='printf %s\n'
as_echo_n='printf %s'


rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
  rm -f conf$$.dir/conf$$.file
else
  rm -f conf$$.dir
  mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
  if ln -s conf$$.file conf$$ 2>/dev/null; then
    as_ln_s='ln -s'
    # ... but there are two gotchas:
    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
    # In both cases, we have to default to `cp -pR'.
    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
      as_ln_s='cp -pR'
  elif ln conf$$.file conf$$ 2>/dev/null; then
    as_ln_s=ln
  else
    as_ln_s='cp -pR'
  fi
else
  as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null

if mkdir -p . 2>/dev/null; then
  as_mkdir_p='mkdir -p "$as_dir"'
else
  test -d ./-p && rmdir ./-p
  as_mkdir_p=false
fi

as_test_x='test -x'
as_executable_p=as_fn_executable_p

# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"

# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"





SHELL=${CONFIG_SHELL-/bin/sh}

# How were we run?
at_cli_args="$@"


# Not all shells have the 'times' builtin; the subshell is needed to make
# sure we discard the 'times: not found' message from the shell.
at_times_p=false
(times) >/dev/null 2>&1 && at_times_p=:

# CLI Arguments to pass to the debugging scripts.
at_debug_args=
# -e sets to true
at_errexit_p=false
# Shall we be verbose?  ':' means no, empty means yes.
at_verbose=:
at_quiet=
# Running several jobs in parallel, 0 means as many as test groups.
at_jobs=1
at_traceon=:
at_trace_echo=:
at_check_filter_trace=:

# Shall we keep the debug scripts?  Must be `:' when the suite is
# run by a debug script, so that the script doesn't remove itself.
at_debug_p=false
# Display help message?
at_help_p=false
# Display the version message?
at_version_p=false
# List test groups?
at_list_p=false
# --clean
at_clean=false
# Test groups to run
at_groups=
# Whether to rerun failed tests.
at_recheck=
# Whether a write failure occurred
at_write_fail=0

# The directory we run the suite in.  Default to . if no -C option.
at_dir=`pwd`
# An absolute reference to this testsuite script.
case $as_myself in
  [\\/]* | ?:[\\/]* ) at_myself=$as_myself ;;
  * ) at_myself=$at_dir/$as_myself ;;
esac
# Whether -C is in effect.
at_change_dir=false

# Whether to enable colored test results.
at_color=auto
# As many question marks as there are digits in the last test group number.
# Used to normalize the test group numbers so that `ls' lists them in
# numerical order.
at_format='???'
# Description of all the test groups.
at_help_all="1;ovsdb-execution.at:147;block insert on read only DB;ovsdb execute execution positive;
2;ovsdb-execution.at:156;allow select on read only DB;ovsdb execute execution positive;
3;ovsdb-execution.at:185;uuid-name must be <id>;ovsdb execute execution positive;
4;ovsdb-execution.at:195;named-uuid must be <id>;ovsdb execute execution positive;
5;ovsdb-execution.at:204;duplicate uuid-name not allowed;ovsdb execute execution positive;
6;ovsdb-execution.at:1204;insert default row, query table;ovsdb execute execution positive;
7;ovsdb-execution.at:1204;insert row, query table;ovsdb execute execution positive;
8;ovsdb-execution.at:1204;insert row with uuid, query table;ovsdb execute execution positive;
9;ovsdb-execution.at:1204;insert rows, query by value;ovsdb execute execution positive;
10;ovsdb-execution.at:1204;insert rows, query by named-uuid;ovsdb execute execution positive;
11;ovsdb-execution.at:1204;insert rows, update rows by value;ovsdb execute execution positive;
12;ovsdb-execution.at:1204;insert rows, mutate rows;ovsdb execute execution positive;
13;ovsdb-execution.at:1204;insert rows, delete by named-uuid;ovsdb execute execution positive;
14;ovsdb-execution.at:1204;insert rows, delete rows by value;ovsdb execute execution positive;
15;ovsdb-execution.at:1204;insert rows, delete by (non-matching) value;ovsdb execute execution positive;
16;ovsdb-execution.at:1204;insert rows, delete all;ovsdb execute execution positive;
17;ovsdb-execution.at:1204;insert row, query table, commit;ovsdb execute execution positive;
18;ovsdb-execution.at:1204;insert row, query table, commit durably;ovsdb execute execution positive;
19;ovsdb-execution.at:1204;equality wait with correct rows;ovsdb execute execution positive;
20;ovsdb-execution.at:1204;equality wait with extra row;ovsdb execute execution positive;
21;ovsdb-execution.at:1204;equality wait with missing row;ovsdb execute execution positive;
22;ovsdb-execution.at:1204;inequality wait with correct rows;ovsdb execute execution positive;
23;ovsdb-execution.at:1204;inequality wait with extra row;ovsdb execute execution positive;
24;ovsdb-execution.at:1204;inequality wait with missing row;ovsdb execute execution positive;
25;ovsdb-execution.at:1204;insert and update constraints;ovsdb execute execution positive;
26;ovsdb-execution.at:1204;index uniqueness checking;ovsdb execute execution positive;
27;ovsdb-execution.at:1204;size constraints on sets;ovsdb execute execution positive;
28;ovsdb-execution.at:1204;referential integrity -- simple;ovsdb execute execution positive;
29;ovsdb-execution.at:1204;referential integrity -- mutual references;ovsdb execute execution positive;
30;ovsdb-execution.at:1204;weak references;ovsdb execute execution positive;
31;ovsdb-execution.at:1204;immutable columns;ovsdb execute execution positive;
32;ovsdb-execution.at:1204;garbage collection;ovsdb execute execution positive;
33;ovsdb-cluster.at:64;insert default row, query table - cluster of 1;ovsdb server positive unix cluster cluster1;
34;ovsdb-cluster.at:64;insert row, query table - cluster of 1;ovsdb server positive unix cluster cluster1;
35;ovsdb-cluster.at:64;insert row with uuid, query table - cluster of 1;ovsdb server positive unix cluster cluster1;
36;ovsdb-cluster.at:64;insert rows, query by value - cluster of 1;ovsdb server positive unix cluster cluster1;
37;ovsdb-cluster.at:64;insert rows, query by named-uuid - cluster of 1;ovsdb server positive unix cluster cluster1;
38;ovsdb-cluster.at:64;insert rows, update rows by value - cluster of 1;ovsdb server positive unix cluster cluster1;
39;ovsdb-cluster.at:64;insert rows, mutate rows - cluster of 1;ovsdb server positive unix cluster cluster1;
40;ovsdb-cluster.at:64;insert rows, delete by named-uuid - cluster of 1;ovsdb server positive unix cluster cluster1;
41;ovsdb-cluster.at:64;insert rows, delete rows by value - cluster of 1;ovsdb server positive unix cluster cluster1;
42;ovsdb-cluster.at:64;insert rows, delete by (non-matching) value - cluster of 1;ovsdb server positive unix cluster cluster1;
43;ovsdb-cluster.at:64;insert rows, delete all - cluster of 1;ovsdb server positive unix cluster cluster1;
44;ovsdb-cluster.at:64;insert row, query table, commit - cluster of 1;ovsdb server positive unix cluster cluster1;
45;ovsdb-cluster.at:64;insert row, query table, commit durably - cluster of 1;ovsdb server positive unix cluster cluster1;
46;ovsdb-cluster.at:64;equality wait with correct rows - cluster of 1;ovsdb server positive unix cluster cluster1;
47;ovsdb-cluster.at:64;equality wait with extra row - cluster of 1;ovsdb server positive unix cluster cluster1;
48;ovsdb-cluster.at:64;equality wait with missing row - cluster of 1;ovsdb server positive unix cluster cluster1;
49;ovsdb-cluster.at:64;inequality wait with correct rows - cluster of 1;ovsdb server positive unix cluster cluster1;
50;ovsdb-cluster.at:64;inequality wait with extra row - cluster of 1;ovsdb server positive unix cluster cluster1;
51;ovsdb-cluster.at:64;inequality wait with missing row - cluster of 1;ovsdb server positive unix cluster cluster1;
52;ovsdb-cluster.at:64;insert and update constraints - cluster of 1;ovsdb server positive unix cluster cluster1;
53;ovsdb-cluster.at:64;index uniqueness checking - cluster of 1;ovsdb server positive unix cluster cluster1;
54;ovsdb-cluster.at:64;size constraints on sets - cluster of 1;ovsdb server positive unix cluster cluster1;
55;ovsdb-cluster.at:64;referential integrity -- simple - cluster of 1;ovsdb server positive unix cluster cluster1;
56;ovsdb-cluster.at:64;referential integrity -- mutual references - cluster of 1;ovsdb server positive unix cluster cluster1;
57;ovsdb-cluster.at:64;weak references - cluster of 1;ovsdb server positive unix cluster cluster1;
58;ovsdb-cluster.at:64;immutable columns - cluster of 1;ovsdb server positive unix cluster cluster1;
59;ovsdb-cluster.at:64;garbage collection - cluster of 1;ovsdb server positive unix cluster cluster1;
60;ovsdb-cluster.at:73;insert default row, query table - cluster of 3;ovsdb server positive unix cluster cluster3;
61;ovsdb-cluster.at:73;insert row, query table - cluster of 3;ovsdb server positive unix cluster cluster3;
62;ovsdb-cluster.at:73;insert row with uuid, query table - cluster of 3;ovsdb server positive unix cluster cluster3;
63;ovsdb-cluster.at:73;insert rows, query by value - cluster of 3;ovsdb server positive unix cluster cluster3;
64;ovsdb-cluster.at:73;insert rows, query by named-uuid - cluster of 3;ovsdb server positive unix cluster cluster3;
65;ovsdb-cluster.at:73;insert rows, update rows by value - cluster of 3;ovsdb server positive unix cluster cluster3;
66;ovsdb-cluster.at:73;insert rows, mutate rows - cluster of 3;ovsdb server positive unix cluster cluster3;
67;ovsdb-cluster.at:73;insert rows, delete by named-uuid - cluster of 3;ovsdb server positive unix cluster cluster3;
68;ovsdb-cluster.at:73;insert rows, delete rows by value - cluster of 3;ovsdb server positive unix cluster cluster3;
69;ovsdb-cluster.at:73;insert rows, delete by (non-matching) value - cluster of 3;ovsdb server positive unix cluster cluster3;
70;ovsdb-cluster.at:73;insert rows, delete all - cluster of 3;ovsdb server positive unix cluster cluster3;
71;ovsdb-cluster.at:73;insert row, query table, commit - cluster of 3;ovsdb server positive unix cluster cluster3;
72;ovsdb-cluster.at:73;insert row, query table, commit durably - cluster of 3;ovsdb server positive unix cluster cluster3;
73;ovsdb-cluster.at:73;equality wait with correct rows - cluster of 3;ovsdb server positive unix cluster cluster3;
74;ovsdb-cluster.at:73;equality wait with extra row - cluster of 3;ovsdb server positive unix cluster cluster3;
75;ovsdb-cluster.at:73;equality wait with missing row - cluster of 3;ovsdb server positive unix cluster cluster3;
76;ovsdb-cluster.at:73;inequality wait with correct rows - cluster of 3;ovsdb server positive unix cluster cluster3;
77;ovsdb-cluster.at:73;inequality wait with extra row - cluster of 3;ovsdb server positive unix cluster cluster3;
78;ovsdb-cluster.at:73;inequality wait with missing row - cluster of 3;ovsdb server positive unix cluster cluster3;
79;ovsdb-cluster.at:73;insert and update constraints - cluster of 3;ovsdb server positive unix cluster cluster3;
80;ovsdb-cluster.at:73;index uniqueness checking - cluster of 3;ovsdb server positive unix cluster cluster3;
81;ovsdb-cluster.at:73;size constraints on sets - cluster of 3;ovsdb server positive unix cluster cluster3;
82;ovsdb-cluster.at:73;referential integrity -- simple - cluster of 3;ovsdb server positive unix cluster cluster3;
83;ovsdb-cluster.at:73;referential integrity -- mutual references - cluster of 3;ovsdb server positive unix cluster cluster3;
84;ovsdb-cluster.at:73;weak references - cluster of 3;ovsdb server positive unix cluster cluster3;
85;ovsdb-cluster.at:73;immutable columns - cluster of 3;ovsdb server positive unix cluster cluster3;
86;ovsdb-cluster.at:73;garbage collection - cluster of 3;ovsdb server positive unix cluster cluster3;
87;ovsdb-cluster.at:82;insert default row, query table - cluster of 5;ovsdb server positive unix cluster cluster5;
88;ovsdb-cluster.at:82;insert row, query table - cluster of 5;ovsdb server positive unix cluster cluster5;
89;ovsdb-cluster.at:82;insert row with uuid, query table - cluster of 5;ovsdb server positive unix cluster cluster5;
90;ovsdb-cluster.at:82;insert rows, query by value - cluster of 5;ovsdb server positive unix cluster cluster5;
91;ovsdb-cluster.at:82;insert rows, query by named-uuid - cluster of 5;ovsdb server positive unix cluster cluster5;
92;ovsdb-cluster.at:82;insert rows, update rows by value - cluster of 5;ovsdb server positive unix cluster cluster5;
93;ovsdb-cluster.at:82;insert rows, mutate rows - cluster of 5;ovsdb server positive unix cluster cluster5;
94;ovsdb-cluster.at:82;insert rows, delete by named-uuid - cluster of 5;ovsdb server positive unix cluster cluster5;
95;ovsdb-cluster.at:82;insert rows, delete rows by value - cluster of 5;ovsdb server positive unix cluster cluster5;
96;ovsdb-cluster.at:82;insert rows, delete by (non-matching) value - cluster of 5;ovsdb server positive unix cluster cluster5;
97;ovsdb-cluster.at:82;insert rows, delete all - cluster of 5;ovsdb server positive unix cluster cluster5;
98;ovsdb-cluster.at:82;insert row, query table, commit - cluster of 5;ovsdb server positive unix cluster cluster5;
99;ovsdb-cluster.at:82;insert row, query table, commit durably - cluster of 5;ovsdb server positive unix cluster cluster5;
100;ovsdb-cluster.at:82;equality wait with correct rows - cluster of 5;ovsdb server positive unix cluster cluster5;
101;ovsdb-cluster.at:82;equality wait with extra row - cluster of 5;ovsdb server positive unix cluster cluster5;
102;ovsdb-cluster.at:82;equality wait with missing row - cluster of 5;ovsdb server positive unix cluster cluster5;
103;ovsdb-cluster.at:82;inequality wait with correct rows - cluster of 5;ovsdb server positive unix cluster cluster5;
104;ovsdb-cluster.at:82;inequality wait with extra row - cluster of 5;ovsdb server positive unix cluster cluster5;
105;ovsdb-cluster.at:82;inequality wait with missing row - cluster of 5;ovsdb server positive unix cluster cluster5;
106;ovsdb-cluster.at:82;insert and update constraints - cluster of 5;ovsdb server positive unix cluster cluster5;
107;ovsdb-cluster.at:82;index uniqueness checking - cluster of 5;ovsdb server positive unix cluster cluster5;
108;ovsdb-cluster.at:82;size constraints on sets - cluster of 5;ovsdb server positive unix cluster cluster5;
109;ovsdb-cluster.at:82;referential integrity -- simple - cluster of 5;ovsdb server positive unix cluster cluster5;
110;ovsdb-cluster.at:82;referential integrity -- mutual references - cluster of 5;ovsdb server positive unix cluster cluster5;
111;ovsdb-cluster.at:82;weak references - cluster of 5;ovsdb server positive unix cluster cluster5;
112;ovsdb-cluster.at:82;immutable columns - cluster of 5;ovsdb server positive unix cluster cluster5;
113;ovsdb-cluster.at:82;garbage collection - cluster of 5;ovsdb server positive unix cluster cluster5;
114;ovsdb-cluster.at:91;insert default row, query table - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
115;ovsdb-cluster.at:91;insert row, query table - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
116;ovsdb-cluster.at:91;insert row with uuid, query table - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
117;ovsdb-cluster.at:91;insert rows, query by value - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
118;ovsdb-cluster.at:91;insert rows, query by named-uuid - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
119;ovsdb-cluster.at:91;insert rows, update rows by value - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
120;ovsdb-cluster.at:91;insert rows, mutate rows - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
121;ovsdb-cluster.at:91;insert rows, delete by named-uuid - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
122;ovsdb-cluster.at:91;insert rows, delete rows by value - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
123;ovsdb-cluster.at:91;insert rows, delete by (non-matching) value - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
124;ovsdb-cluster.at:91;insert rows, delete all - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
125;ovsdb-cluster.at:91;insert row, query table, commit - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
126;ovsdb-cluster.at:91;insert row, query table, commit durably - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
127;ovsdb-cluster.at:91;equality wait with correct rows - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
128;ovsdb-cluster.at:91;equality wait with extra row - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
129;ovsdb-cluster.at:91;equality wait with missing row - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
130;ovsdb-cluster.at:91;inequality wait with correct rows - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
131;ovsdb-cluster.at:91;inequality wait with extra row - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
132;ovsdb-cluster.at:91;inequality wait with missing row - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
133;ovsdb-cluster.at:91;insert and update constraints - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
134;ovsdb-cluster.at:91;index uniqueness checking - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
135;ovsdb-cluster.at:91;size constraints on sets - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
136;ovsdb-cluster.at:91;referential integrity -- simple - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
137;ovsdb-cluster.at:91;referential integrity -- mutual references - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
138;ovsdb-cluster.at:91;weak references - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
139;ovsdb-cluster.at:91;immutable columns - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
140;ovsdb-cluster.at:91;garbage collection - cluster of 3;ovsdb server positive unix cluster cluster3 local_config;
141;ovsdb-cluster.at:205;OVSDB cluster - follower disconnect from cluster, single remote;ovsdb server negative unix cluster disconnect;
142;ovsdb-cluster.at:210;OVSDB cluster - leader disconnect from cluster, single remote;ovsdb server negative unix cluster disconnect;
143;ovsdb-cluster.at:215;OVSDB cluster - leader disconnect from cluster, check flapping;ovsdb server negative unix cluster disconnect;
144;ovsdb-cluster.at:220;OVSDB cluster - initial status should be disconnected;ovsdb server negative unix cluster disconnect;
145;ovsdb-cluster.at:259;OVSDB cluster - election timer change;ovsdb server positive unix cluster timer;
146;ovsdb-cluster.at:352;OVSDB cluster - install snapshot RPC;ovsdb server positive unix cluster snapshot;
147;ovsdb-cluster.at:432;OVSDB cluster - follower crash while joining;ovsdb server negative unix cluster join;
148;ovsdb-cluster.at:486;OVSDB cluster - leadership change after replication while joining;ovsdb server negative unix cluster join;
149;ovsdb-cluster.at:540;OVSDB cluster - leadership change before replication while joining;ovsdb server negative unix cluster join;
150;ovsdb-cluster.at:676;OVSDB cluster - txn on follower-2, leader crash before sending appendReq, follower-2 becomes leader;ovsdb server negative unix cluster pending-txn;
151;ovsdb-cluster.at:681;OVSDB cluster - txn on follower-2, leader crash before sending appendReq, follower-3 becomes leader;ovsdb server negative unix cluster pending-txn;
152;ovsdb-cluster.at:686;OVSDB cluster - txn on follower-2, leader crash before sending execRep, follower-2 becomes leader;ovsdb server negative unix cluster pending-txn;
153;ovsdb-cluster.at:691;OVSDB cluster - txn on follower-2, leader crash before sending execRep, follower-3 becomes leader;ovsdb server negative unix cluster pending-txn;
154;ovsdb-cluster.at:696;OVSDB cluster - txn on follower-2, leader crash after sending execRep, follower-2 becomes leader;ovsdb server negative unix cluster pending-txn;
155;ovsdb-cluster.at:701;OVSDB cluster - txn on follower-2, leader crash after sending execRep, follower-3 becomes leader;ovsdb server negative unix cluster pending-txn;
156;ovsdb-cluster.at:706;OVSDB cluster - txn on leader, leader crash before sending appendReq, follower-2 becomes leader;ovsdb server negative unix cluster pending-txn;
157;ovsdb-cluster.at:711;OVSDB cluster - txn on leader, leader crash before sending appendReq, follower-3 becomes leader;ovsdb server negative unix cluster pending-txn;
158;ovsdb-cluster.at:716;OVSDB cluster - txn on leader, leader crash after sending appendReq, follower-2 becomes leader;ovsdb server negative unix cluster pending-txn;
159;ovsdb-cluster.at:723;OVSDB cluster - txn on leader, leader crash after sending appendReq, follower-3 becomes leader;ovsdb server negative unix cluster pending-txn;
160;ovsdb-cluster.at:730;OVSDB cluster - txn on follower-2, follower-2 crash before sending execReq, reconnect to follower-3;ovsdb server negative unix cluster pending-txn;
161;ovsdb-cluster.at:735;OVSDB cluster - txn on follower-2, follower-2 crash before sending execReq, reconnect to leader;ovsdb server negative unix cluster pending-txn;
162;ovsdb-cluster.at:740;OVSDB cluster - txn on follower-2, follower-2 crash after sending execReq, reconnect to follower-3;ovsdb server negative unix cluster pending-txn;
163;ovsdb-cluster.at:747;OVSDB cluster - txn on follower-2, follower-2 crash after sending execReq, reconnect to leader;ovsdb server negative unix cluster pending-txn;
164;ovsdb-cluster.at:754;OVSDB cluster - txn on leader, follower-2 crash after receiving appendReq for the update;ovsdb server negative unix cluster pending-txn;
165;ovsdb-cluster.at:759;OVSDB cluster - txn on follower-2, follower-3 crash after receiving appendReq for the update;ovsdb server negative unix cluster pending-txn;
166;ovsdb-cluster.at:764;OVSDB cluster - txn on leader, leader transfers leadership after sending appendReq;ovsdb server negative unix cluster pending-txn transfer;
167;ovsdb-cluster.at:770;OVSDB cluster - competing candidates;ovsdb server negative unix cluster competing-candidates;
168;ovsdb-cluster.at:981;OVSDB 3-server torture test - kill/restart leader;ovsdb server positive unix cluster cluster3;
169;ovsdb-cluster.at:985;OVSDB 3-server torture test - kill/restart follower 1;ovsdb server positive unix cluster cluster3;
170;ovsdb-cluster.at:989;OVSDB 3-server torture test - kill/restart follower 2;ovsdb server positive unix cluster cluster3;
171;ovsdb-cluster.at:993;OVSDB 5-server torture test - kill/restart leader;ovsdb server positive unix cluster cluster5;
172;ovsdb-cluster.at:997;OVSDB 5-server torture test - kill/restart follower 1;ovsdb server positive unix cluster cluster5;
173;ovsdb-cluster.at:1001;OVSDB 5-server torture test - kill/restart follower 2;ovsdb server positive unix cluster cluster5;
174;ovsdb-cluster.at:1005;OVSDB 5-server torture test - kill/restart follower 3;ovsdb server positive unix cluster cluster5;
175;ovsdb-cluster.at:1009;OVSDB 5-server torture test - kill/restart follower 4;ovsdb server positive unix cluster cluster5;
176;ovsdb-cluster.at:1014;OVSDB 3-server torture test - remove/re-add leader;ovsdb server positive unix cluster cluster3;
177;ovsdb-cluster.at:1018;OVSDB 3-server torture test - remove/re-add follower 1;ovsdb server positive unix cluster cluster3;
178;ovsdb-cluster.at:1022;OVSDB 3-server torture test - remove/re-add follower 2;ovsdb server positive unix cluster cluster3;
179;ovsdb-cluster.at:1026;OVSDB 5-server torture test - remove/re-add leader;ovsdb server positive unix cluster cluster5;
180;ovsdb-cluster.at:1030;OVSDB 5-server torture test - remove/re-add follower 1;ovsdb server positive unix cluster cluster5;
181;ovsdb-cluster.at:1034;OVSDB 5-server torture test - remove/re-add follower 2;ovsdb server positive unix cluster cluster5;
182;ovsdb-cluster.at:1038;OVSDB 5-server torture test - remove/re-add follower 3;ovsdb server positive unix cluster cluster5;
183;ovsdb-cluster.at:1042;OVSDB 5-server torture test - remove/re-add follower 4;ovsdb server positive unix cluster cluster5;
"
# List of the all the test groups.
at_groups_all=`printf "%s\n" "$at_help_all" | sed 's/;.*//'`

# at_fn_validate_ranges NAME...
# -----------------------------
# Validate and normalize the test group number contained in each variable
# NAME. Leading zeroes are treated as decimal.
at_fn_validate_ranges ()
{
  for at_grp
  do
    eval at_value=\$$at_grp
    if test $at_value -lt 1 || test $at_value -gt 183; then
      printf "%s\n" "invalid test group: $at_value" >&2
      exit 1
    fi
    case $at_value in
      0*) # We want to treat leading 0 as decimal, like expr and test, but
	  # AS_VAR_ARITH treats it as octal if it uses $(( )).
	  # With XSI shells, ${at_value#${at_value%%[1-9]*}} avoids the
	  # expr fork, but it is not worth the effort to determine if the
	  # shell supports XSI when the user can just avoid leading 0.
	  eval $at_grp='`expr $at_value + 0`' ;;
    esac
  done
}
# List of the tested programs.
at_tested='"ovs-vswitchd"
"ovs-vsctl"'


at_prev=
for at_option
do
  # If the previous option needs an argument, assign it.
  if test -n "$at_prev"; then
    at_option=$at_prev=$at_option
    at_prev=
  fi

  case $at_option in
  *=?*) at_optarg=`expr "X$at_option" : '[^=]*=\(.*\)'` ;;
  *)    at_optarg= ;;
  esac

  case $at_option in
    --help | -h )
	at_help_p=:
	;;

    --list | -l )
	at_list_p=:
	;;

    --version | -V )
	at_version_p=:
	;;

    --clean | -c )
	at_clean=:
	;;

    --color )
	at_color=always
	;;
    --color=* )
	case $at_optarg in
	no | never | none) at_color=never ;;
	auto | tty | if-tty) at_color=auto ;;
	always | yes | force) at_color=always ;;
	*) at_optname=`echo " $at_option" | sed 's/^ //; s/=.*//'`
	   as_fn_error $? "unrecognized argument to $at_optname: $at_optarg" ;;
	esac
	;;

    --debug | -d )
	at_debug_p=:
	;;

    --errexit | -e )
	at_debug_p=:
	at_errexit_p=:
	;;

    --verbose | -v )
	at_verbose=; at_quiet=:
	;;

    --trace | -x )
	at_traceon='set -x'
	at_trace_echo=echo
	at_check_filter_trace=at_fn_filter_trace
	;;

    [0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9])
	at_fn_validate_ranges at_option
	as_fn_append at_groups "$at_option$as_nl"
	;;

    # Ranges
    [0-9]- | [0-9][0-9]- | [0-9][0-9][0-9]- | [0-9][0-9][0-9][0-9]-)
	at_range_start=`echo $at_option |tr -d X-`
	at_fn_validate_ranges at_range_start
	at_range=`printf "%s\n" "$at_groups_all" | \
	  sed -ne '/^'$at_range_start'$/,$p'`
	as_fn_append at_groups "$at_range$as_nl"
	;;

    -[0-9] | -[0-9][0-9] | -[0-9][0-9][0-9] | -[0-9][0-9][0-9][0-9])
	at_range_end=`echo $at_option |tr -d X-`
	at_fn_validate_ranges at_range_end
	at_range=`printf "%s\n" "$at_groups_all" | \
	  sed -ne '1,/^'$at_range_end'$/p'`
	as_fn_append at_groups "$at_range$as_nl"
	;;

    [0-9]-[0-9] | [0-9]-[0-9][0-9] | [0-9]-[0-9][0-9][0-9] | \
    [0-9]-[0-9][0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9] | \
    [0-9][0-9]-[0-9][0-9][0-9] | [0-9][0-9]-[0-9][0-9][0-9][0-9] | \
    [0-9][0-9][0-9]-[0-9][0-9][0-9] | \
    [0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] | \
    [0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9] )
	at_range_start=`expr $at_option : '\(.*\)-'`
	at_range_end=`expr $at_option : '.*-\(.*\)'`
	if test $at_range_start -gt $at_range_end; then
	  at_tmp=$at_range_end
	  at_range_end=$at_range_start
	  at_range_start=$at_tmp
	fi
	at_fn_validate_ranges at_range_start at_range_end
	at_range=`printf "%s\n" "$at_groups_all" | \
	  sed -ne '/^'$at_range_start'$/,/^'$at_range_end'$/p'`
	as_fn_append at_groups "$at_range$as_nl"
	;;

    # Directory selection.
    --directory | -C )
	at_prev=--directory
	;;
    --directory=* )
	at_change_dir=:
	at_dir=$at_optarg
	if test x- = "x$at_dir" ; then
	  at_dir=./-
	fi
	;;

    # Parallel execution.
    --jobs | -j )
	at_jobs=0
	;;
    --jobs=* | -j[0-9]* )
	if test -n "$at_optarg"; then
	  at_jobs=$at_optarg
	else
	  at_jobs=`expr X$at_option : 'X-j\(.*\)'`
	fi
	case $at_jobs in *[!0-9]*)
	  at_optname=`echo " $at_option" | sed 's/^ //; s/[0-9=].*//'`
	  as_fn_error $? "non-numeric argument to $at_optname: $at_jobs" ;;
	esac
	;;

    # Keywords.
    --keywords | -k )
	at_prev=--keywords
	;;
    --keywords=* )
	at_groups_selected=$at_help_all
	at_save_IFS=$IFS
	IFS=,
	set X $at_optarg
	shift
	IFS=$at_save_IFS
	for at_keyword
	do
	  at_invert=
	  case $at_keyword in
	  '!'*)
	    at_invert="-v"
	    at_keyword=`expr "X$at_keyword" : 'X!\(.*\)'`
	    ;;
	  esac
	  # It is on purpose that we match the test group titles too.
	  at_groups_selected=`printf "%s\n" "$at_groups_selected" |
	      grep -i $at_invert "^[1-9][^;]*;.*[; ]$at_keyword[ ;]"`
	done
	# Smash the keywords.
	at_groups_selected=`printf "%s\n" "$at_groups_selected" | sed 's/;.*//'`
	as_fn_append at_groups "$at_groups_selected$as_nl"
	;;
    --recheck)
	at_recheck=:
	;;

    *=*)
	at_envvar=`expr "x$at_option" : 'x\([^=]*\)='`
	# Reject names that are not valid shell variable names.
	case $at_envvar in
	  '' | [0-9]* | *[!_$as_cr_alnum]* )
	    as_fn_error $? "invalid variable name: \`$at_envvar'" ;;
	esac
	at_value=`printf "%s\n" "$at_optarg" | sed "s/'/'\\\\\\\\''/g"`
	# Export now, but save eval for later and for debug scripts.
	export $at_envvar
	as_fn_append at_debug_args " $at_envvar='$at_value'"
	;;

     *) printf "%s\n" "$as_me: invalid option: $at_option" >&2
	printf "%s\n" "Try \`$0 --help' for more information." >&2
	exit 1
	;;
  esac
done

# Verify our last option didn't require an argument
if test -n "$at_prev"
then :
  as_fn_error $? "\`$at_prev' requires an argument"
fi

# The file containing the suite.
at_suite_log=$at_dir/$as_me.log

# Selected test groups.
if test -z "$at_groups$at_recheck"; then
  at_groups=$at_groups_all
else
  if test -n "$at_recheck" && test -r "$at_suite_log"; then
    at_oldfails=`sed -n '
      /^Failed tests:$/,/^Skipped tests:$/{
	s/^[ ]*\([1-9][0-9]*\):.*/\1/p
      }
      /^Unexpected passes:$/,/^## Detailed failed tests/{
	s/^[ ]*\([1-9][0-9]*\):.*/\1/p
      }
      /^## Detailed failed tests/q
      ' "$at_suite_log"`
    as_fn_append at_groups "$at_oldfails$as_nl"
  fi
  # Sort the tests, removing duplicates.
  at_groups=`printf "%s\n" "$at_groups" | sort -nu | sed '/^$/d'`
fi

if test x"$at_color" = xalways \
   || { test x"$at_color" = xauto && test -t 1; }; then
  at_red=`printf '\033[0;31m'`
  at_grn=`printf '\033[0;32m'`
  at_lgn=`printf '\033[1;32m'`
  at_blu=`printf '\033[1;34m'`
  at_std=`printf '\033[m'`
else
  at_red= at_grn= at_lgn= at_blu= at_std=
fi

# Help message.
if $at_help_p; then
  cat <<_ATEOF || at_write_fail=1
Usage: $0 [OPTION]... [VARIABLE=VALUE]... [TESTS]

Run all the tests, or the selected TESTS, given by numeric ranges, and
save a detailed log file.  Upon failure, create debugging scripts.

Do not change environment variables directly.  Instead, set them via
command line arguments.  Set \`AUTOTEST_PATH' to select the executables
to exercise.  Each relative directory is expanded as build and source
directories relative to the top level of this distribution.
E.g., from within the build directory /tmp/foo-1.0, invoking this:

  $ $0 AUTOTEST_PATH=bin

is equivalent to the following, assuming the source directory is /src/foo-1.0:

  PATH=/tmp/foo-1.0/bin:/src/foo-1.0/bin:\$PATH $0
_ATEOF
cat <<_ATEOF || at_write_fail=1

Operation modes:
  -h, --help     print the help message, then exit
  -V, --version  print version number, then exit
  -c, --clean    remove all the files this test suite might create and exit
  -l, --list     describes all the tests, or the selected TESTS
_ATEOF
cat <<_ATEOF || at_write_fail=1

Execution tuning:
  -C, --directory=DIR
                 change to directory DIR before starting
      --color[=never|auto|always]
                 disable colored test results, or enable even without terminal
  -j, --jobs[=N]
                 Allow N jobs at once; infinite jobs with no arg (default 1)
  -k, --keywords=KEYWORDS
                 select the tests matching all the comma-separated KEYWORDS
                 multiple \`-k' accumulate; prefixed \`!' negates a KEYWORD
      --recheck  select all tests that failed or passed unexpectedly last time
  -e, --errexit  abort as soon as a test fails; implies --debug
  -v, --verbose  force more detailed output
                 default for debugging scripts
  -d, --debug    inhibit clean up and top-level logging
                 default for debugging scripts
  -x, --trace    enable tests shell tracing
_ATEOF
cat <<_ATEOF || at_write_fail=1

Report bugs to <bugs@openvswitch.org>.
_ATEOF
  exit $at_write_fail
fi

# List of tests.
if $at_list_p; then
  cat <<_ATEOF || at_write_fail=1
openvswitch 2.17.12 test suite test groups:

 NUM: FILE-NAME:LINE     TEST-GROUP-NAME
      KEYWORDS

_ATEOF
  # Pass an empty line as separator between selected groups and help.
  printf "%s\n" "$at_groups$as_nl$as_nl$at_help_all" |
    awk 'NF == 1 && FS != ";" {
	   selected[$ 1] = 1
	   next
	 }
	 /^$/ { FS = ";" }
	 NF > 0 {
	   if (selected[$ 1]) {
	     printf " %3d: %-18s %s\n", $ 1, $ 2, $ 3
	     if ($ 4) {
	       lmax = 79
	       indent = "     "
	       line = indent
	       len = length (line)
	       n = split ($ 4, a, " ")
	       for (i = 1; i <= n; i++) {
		 l = length (a[i]) + 1
		 if (i > 1 && len + l > lmax) {
		   print line
		   line = indent " " a[i]
		   len = length (line)
		 } else {
		   line = line " " a[i]
		   len += l
		 }
	       }
	       if (n)
		 print line
	     }
	   }
	 }' || at_write_fail=1
  exit $at_write_fail
fi
if $at_version_p; then
  printf "%s\n" "$as_me (openvswitch 2.17.12)" &&
  cat <<\_ATEOF || at_write_fail=1

Copyright (C) 2021 Free Software Foundation, Inc.
This test suite is free software; the Free Software Foundation gives
unlimited permission to copy, distribute and modify it.
_ATEOF
  exit $at_write_fail
fi

# Should we print banners?  Yes if more than one test is run.
case $at_groups in #(
  *$as_nl* )
      at_print_banners=: ;; #(
  * ) at_print_banners=false ;;
esac
# Text for banner N, set to a single space once printed.
# Banner 1. ovsdb-execution.at:1
# Category starts at test group 1.
at_banner_text_1="OVSDB -- execution"
# Banner 2. ovsdb-cluster.at:58
# Category starts at test group 33.
at_banner_text_2="OVSDB - clustered transactions (1 server)"
# Banner 3. ovsdb-cluster.at:67
# Category starts at test group 60.
at_banner_text_3="OVSDB - clustered transactions (3 servers)"
# Banner 4. ovsdb-cluster.at:76
# Category starts at test group 87.
at_banner_text_4="OVSDB - clustered transactions (5 servers)"
# Banner 5. ovsdb-cluster.at:85
# Category starts at test group 114.
at_banner_text_5="OVSDB - clustered transactions Local_Config (3 servers)"
# Banner 6. ovsdb-cluster.at:94
# Category starts at test group 141.
at_banner_text_6="OVSDB - disconnect from cluster"
# Banner 7. ovsdb-cluster.at:257
# Category starts at test group 145.
at_banner_text_7="OVSDB cluster election timer change"
# Banner 8. ovsdb-cluster.at:350
# Category starts at test group 146.
at_banner_text_8="OVSDB cluster install snapshot RPC"
# Banner 9. ovsdb-cluster.at:431
# Category starts at test group 147.
at_banner_text_9="OVSDB - cluster failure while joining"
# Banner 10. ovsdb-cluster.at:674
# Category starts at test group 150.
at_banner_text_10="OVSDB - cluster failure with pending transaction"
# Banner 11. ovsdb-cluster.at:825
# Category starts at test group 168.
at_banner_text_11="OVSDB - cluster tests"

# Take any -C into account.
if $at_change_dir ; then
  test x != "x$at_dir" && cd "$at_dir" \
    || as_fn_error $? "unable to change directory"
  at_dir=`pwd`
fi

# Load the config files for any default variable assignments.
for at_file in atconfig atlocal
do
  test -r $at_file || continue
  . ./$at_file || as_fn_error $? "invalid content: $at_file"
done

# Autoconf <=2.59b set at_top_builddir instead of at_top_build_prefix:
: "${at_top_build_prefix=$at_top_builddir}"

# Perform any assignments requested during argument parsing.
eval "$at_debug_args"

# atconfig delivers names relative to the directory the test suite is
# in, but the groups themselves are run in testsuite-dir/group-dir.
if test -n "$at_top_srcdir"; then
  builddir=../..
  for at_dir_var in srcdir top_srcdir top_build_prefix
  do
    eval at_val=\$at_$at_dir_var
    case $at_val in
      [\\/$]* | ?:[\\/]* ) at_prefix= ;;
      *) at_prefix=../../ ;;
    esac
    eval "$at_dir_var=\$at_prefix\$at_val"
  done
fi

## -------------------- ##
## Directory structure. ##
## -------------------- ##

# This is the set of directories and files used by this script
# (non-literals are capitalized):
#
# TESTSUITE         - the testsuite
# TESTSUITE.log     - summarizes the complete testsuite run
# TESTSUITE.dir/    - created during a run, remains after -d or failed test
# + at-groups/      - during a run: status of all groups in run
# | + NNN/          - during a run: meta-data about test group NNN
# | | + check-line  - location (source file and line) of current AT_CHECK
# | | + status      - exit status of current AT_CHECK
# | | + stdout      - stdout of current AT_CHECK
# | | + stder1      - stderr, including trace
# | | + stderr      - stderr, with trace filtered out
# | | + test-source - portion of testsuite that defines group
# | | + times       - timestamps for computing duration
# | | + pass        - created if group passed
# | | + xpass       - created if group xpassed
# | | + fail        - created if group failed
# | | + xfail       - created if group xfailed
# | | + skip        - created if group skipped
# + at-stop         - during a run: end the run if this file exists
# + at-source-lines - during a run: cache of TESTSUITE line numbers for extraction
# + 0..NNN/         - created for each group NNN, remains after -d or failed test
# | + TESTSUITE.log - summarizes the group results
# | + ...           - files created during the group

# The directory the whole suite works in.
# Should be absolute to let the user `cd' at will.
at_suite_dir=$at_dir/$as_me.dir
# The file containing the suite ($at_dir might have changed since earlier).
at_suite_log=$at_dir/$as_me.log
# The directory containing helper files per test group.
at_helper_dir=$at_suite_dir/at-groups
# Stop file: if it exists, do not start new jobs.
at_stop_file=$at_suite_dir/at-stop
# The fifo used for the job dispatcher.
at_job_fifo=$at_suite_dir/at-job-fifo

if $at_clean; then
  test -d "$at_suite_dir" &&
    find "$at_suite_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
  rm -f -r "$at_suite_dir" "$at_suite_log"
  exit $?
fi

# Don't take risks: use only absolute directories in PATH.
#
# For stand-alone test suites (ie. atconfig was not found),
# AUTOTEST_PATH is relative to `.'.
#
# For embedded test suites, AUTOTEST_PATH is relative to the top level
# of the package.  Then expand it into build/src parts, since users
# may create executables in both places.
AUTOTEST_PATH=`printf "%s\n" "$AUTOTEST_PATH" | sed "s|:|$PATH_SEPARATOR|g"`
at_path=
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $AUTOTEST_PATH $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -n "$at_path" && as_fn_append at_path $PATH_SEPARATOR
case $as_dir in
  [\\/]* | ?:[\\/]* )
    as_fn_append at_path "$as_dir"
    ;;
  * )
    if test -z "$at_top_build_prefix"; then
      # Stand-alone test suite.
      as_fn_append at_path "$as_dir"
    else
      # Embedded test suite.
      as_fn_append at_path "$at_top_build_prefix$as_dir$PATH_SEPARATOR"
      as_fn_append at_path "$at_top_srcdir/$as_dir"
    fi
    ;;
esac
  done
IFS=$as_save_IFS


# Now build and simplify PATH.
#
# There might be directories that don't exist, but don't redirect
# builtins' (eg., cd) stderr directly: Ultrix's sh hates that.
at_new_path=
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $at_path
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -d "$as_dir" || continue
case $as_dir in
  [\\/]* | ?:[\\/]* ) ;;
  * ) as_dir=`(cd "$as_dir" && pwd) 2>/dev/null` ;;
esac
case $PATH_SEPARATOR$at_new_path$PATH_SEPARATOR in
  *$PATH_SEPARATOR$as_dir$PATH_SEPARATOR*) ;;
  $PATH_SEPARATOR$PATH_SEPARATOR) at_new_path=$as_dir ;;
  *) as_fn_append at_new_path "$PATH_SEPARATOR$as_dir" ;;
esac
  done
IFS=$as_save_IFS

PATH=$at_new_path
export PATH

# Setting up the FDs.



# 5 is the log file.  Not to be overwritten if `-d'.
if $at_debug_p; then
  at_suite_log=/dev/null
else
  : >"$at_suite_log"
fi
exec 5>>"$at_suite_log"

# Banners and logs.
printf "%s\n" "## ------------------------------- ##
## openvswitch 2.17.12 test suite. ##
## ------------------------------- ##"
{
  printf "%s\n" "## ------------------------------- ##
## openvswitch 2.17.12 test suite. ##
## ------------------------------- ##"
  echo

  printf "%s\n" "$as_me: command line was:"
  printf "%s\n" "  \$ $0 $at_cli_args"
  echo

  # If ChangeLog exists, list a few lines in case it might help determining
  # the exact version.
  if test -n "$at_top_srcdir" && test -f "$at_top_srcdir/ChangeLog"; then
    printf "%s\n" "## ---------- ##
## ChangeLog. ##
## ---------- ##"
    echo
    sed 's/^/| /;10q' "$at_top_srcdir/ChangeLog"
    echo
  fi

  {
cat <<_ASUNAME
## --------- ##
## Platform. ##
## --------- ##

hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`

/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`

/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`

_ASUNAME

as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    printf "%s\n" "PATH: $as_dir"
  done
IFS=$as_save_IFS

}
  echo

  # Contents of the config files.
  for at_file in atconfig atlocal
  do
    test -r $at_file || continue
    printf "%s\n" "$as_me: $at_file:"
    sed 's/^/| /' $at_file
    echo
  done
} >&5


## ------------------------- ##
## Autotest shell functions. ##
## ------------------------- ##

# at_fn_banner NUMBER
# -------------------
# Output banner NUMBER, provided the testsuite is running multiple groups and
# this particular banner has not yet been printed.
at_fn_banner ()
{
  $at_print_banners || return 0
  eval at_banner_text=\$at_banner_text_$1
  test "x$at_banner_text" = "x " && return 0
  eval "at_banner_text_$1=\" \""
  if test -z "$at_banner_text"; then
    $at_first || echo
  else
    printf "%s\n" "$as_nl$at_banner_text$as_nl"
  fi
} # at_fn_banner

# at_fn_check_prepare_notrace REASON LINE
# ---------------------------------------
# Perform AT_CHECK preparations for the command at LINE for an untraceable
# command; REASON is the reason for disabling tracing.
at_fn_check_prepare_notrace ()
{
  $at_trace_echo "Not enabling shell tracing (command contains $1)"
  printf "%s\n" "$2" >"$at_check_line_file"
  at_check_trace=: at_check_filter=:
  : >"$at_stdout"; : >"$at_stderr"
}

# at_fn_check_prepare_trace LINE
# ------------------------------
# Perform AT_CHECK preparations for the command at LINE for a traceable
# command.
at_fn_check_prepare_trace ()
{
  printf "%s\n" "$1" >"$at_check_line_file"
  at_check_trace=$at_traceon at_check_filter=$at_check_filter_trace
  : >"$at_stdout"; : >"$at_stderr"
}

# at_fn_check_prepare_dynamic COMMAND LINE
# ----------------------------------------
# Decide if COMMAND at LINE is traceable at runtime, and call the appropriate
# preparation function.
at_fn_check_prepare_dynamic ()
{
  case $1 in
    *$as_nl*)
      at_fn_check_prepare_notrace 'an embedded newline' "$2" ;;
    *)
      at_fn_check_prepare_trace "$2" ;;
  esac
}

# at_fn_filter_trace
# ------------------
# Remove the lines in the file "$at_stderr" generated by "set -x" and print
# them to stderr.
at_fn_filter_trace ()
{
  mv "$at_stderr" "$at_stder1"
  grep '^ *+' "$at_stder1" >&2
  grep -v '^ *+' "$at_stder1" >"$at_stderr"
}

# at_fn_log_failure FILE-LIST
# ---------------------------
# Copy the files in the list on stdout with a "> " prefix, and exit the shell
# with a failure exit code.
at_fn_log_failure ()
{
  for file
    do printf "%s\n" "$file:"; sed 's/^/> /' "$file"; done
  echo 1 > "$at_status_file"
  exit 1
}

# at_fn_check_skip EXIT-CODE LINE
# -------------------------------
# Check whether EXIT-CODE is a special exit code (77 or 99), and if so exit
# the test group subshell with that same exit code. Use LINE in any report
# about test failure.
at_fn_check_skip ()
{
  case $1 in
    99) echo 99 > "$at_status_file"; at_failed=:
	printf "%s\n" "$2: hard failure"; exit 99;;
    77) echo 77 > "$at_status_file"; exit 77;;
  esac
}

# at_fn_check_status EXPECTED EXIT-CODE LINE
# ------------------------------------------
# Check whether EXIT-CODE is the EXPECTED exit code, and if so do nothing.
# Otherwise, if it is 77 or 99, exit the test group subshell with that same
# exit code; if it is anything else print an error message referring to LINE,
# and fail the test.
at_fn_check_status ()
{
  case $2 in
    $1 ) ;;
    77) echo 77 > "$at_status_file"; exit 77;;
    99) echo 99 > "$at_status_file"; at_failed=:
	printf "%s\n" "$3: hard failure"; exit 99;;
    *) printf "%s\n" "$3: exit code was $2, expected $1"
      at_failed=:;;
  esac
}

# at_fn_diff_devnull FILE
# -----------------------
# Emit a diff between /dev/null and FILE. Uses "test -s" to avoid useless diff
# invocations.
at_fn_diff_devnull ()
{
  test -s "$1" || return 0
  $at_diff "$at_devnull" "$1"
}

# at_fn_test NUMBER
# -----------------
# Parse out test NUMBER from the tail of this file.
at_fn_test ()
{
  eval at_sed=\$at_sed$1
  sed "$at_sed" "$at_myself" > "$at_test_source"
}

# at_fn_create_debugging_script
# -----------------------------
# Create the debugging script $at_group_dir/run which will reproduce the
# current test group.
at_fn_create_debugging_script ()
{
  {
    echo "#! /bin/sh" &&
    echo 'test ${ZSH_VERSION+y} && alias -g '\''${1+"$@"}'\''='\''"$@"'\''' &&
    printf "%s\n" "cd '$at_dir'" &&
    printf "%s\n" "exec \${CONFIG_SHELL-$SHELL} \"$at_myself\" -v -d $at_debug_args $at_group \${1+\"\$@\"}" &&
    echo 'exit 1'
  } >"$at_group_dir/run" &&
  chmod +x "$at_group_dir/run"
}

## -------------------------------- ##
## End of autotest shell functions. ##
## -------------------------------- ##


# Set ovs_base to the base directory in which the test is running and
# initialize the OVS_*DIR environment variables to point to this
# directory.
ovs_init() {
    ovs_base=`pwd`
    trap ovs_on_exit 0
    : > cleanup
    ovs_setenv
}

# Catch testsuite error condition and cleanup test environment by tearing down
# all interfaces and processes spawned.
# User has an option to leave the test environment in error state so that system
# can be poked around to get more information. User can enable this option by setting
# environment variable OVS_PAUSE_TEST=1. User needs to press CTRL-D to resume the
# cleanup operation.
ovs_pause() {
    echo "====================================================="
    echo "Set following environment variable to use various ovs utilities"
    echo "export OVS_RUNDIR=$ovs_base"
    echo "Press ENTER to continue: "
    read
}

ovs_on_exit () {
    if [ ! -z "${OVS_PAUSE_TEST}" ] && [ -z $at_verbose ]; then
        trap '' INT
        ovs_pause
    fi
    . "$ovs_base/cleanup"
}

# With no parameter or an empty parameter, sets the OVS_*DIR
# environment variables to point to $ovs_base, the base directory in
# which the test is running.
#
# With a parameter, sets them to $ovs_base/$1.
ovs_setenv() {
    sandbox=$1
    ovs_dir=$ovs_base${1:+/$1}
    OVS_RUNDIR=$ovs_dir; export OVS_RUNDIR
    OVS_LOGDIR=$ovs_dir; export OVS_LOGDIR
    OVS_DBDIR=$ovs_dir; export OVS_DBDIR
    OVS_SYSCONFDIR=$ovs_dir; export OVS_SYSCONFDIR
    OVS_PKGDATADIR=$ovs_dir; export OVS_PKGDATADIR
}

# Prints the integers from $1 to $2, increasing by $3 (default 1) on stdout.
seq () {
    if test $# = 1; then
        set 1 $1
    fi
    while test $1 -le $2; do
        echo $1
        set `expr $1 + ${3-1}` $2 $3
    done
}

if test "$IS_WIN32" = "yes"; then
    pwd () {
        command pwd -W "$@"
    }

    diff () {
        command diff --strip-trailing-cr "$@"
    }

    # tskill is more effective than taskkill but it isn't always installed.
    if (tskill //?) >/dev/null 2>&1; then :; else
        tskill () { taskkill //F //PID $1 >/dev/null; }
    fi

    kill () {
        signal=
        retval=0
        for arg; do
            arg=$(echo $arg | tr -d '\n\r')
            case $arg in
            -*) signal=$arg ;;
            [1-9][0-9]*)
                # tasklist always returns 0.
                # If pid does exist, there will be a line with the pid.
                if tasklist //fi "PID eq $arg" | grep $arg >/dev/null; then
                    if test "X$signal" != "X-0"; then
                        tskill $arg
                    fi
                else
                    retval=1
                fi
                ;;
            esac
        done
        return $retval
    }
fi

# parent_pid PID
#
# Prints the PID of the parent of process PID.
parent_pid () {
    # Using "ps" is portable to any POSIX system, but busybox "ps" (used in
    # e.g. Alpine Linux) is noncompliant, so we use a Linux-specific approach
    # when it's available.  We check the format of the status file to avoid
    # the NetBSD file with the same name but different contents.
    if grep -E '^PPid:[[:space:]]*[0-9]*$' /proc/$1/status > /dev/null 2>&1; then
        sed -n 's/^PPid:	\([0-9]*\)/\1/p' /proc/$1/status
    else
        ps -o ppid= -p $1
    fi
}

# kill_ovs_vswitchd [PID]
#
# Signal the ovs-vswitchd daemon to exit gracefully and wait for it to
# terminate or kill it if that takes too long.
#
# It is used to cleanup all sorts of tests and results. It can't assume
# any state, including the availability of PID file which can be provided.
kill_ovs_vswitchd () {
    # Use provided PID or save the current PID if available.
    TMPPID=$1
    if test -z "$TMPPID"; then
        TMPPID=$(cat $OVS_RUNDIR/ovs-vswitchd.pid 2>/dev/null)
    fi

    # Tell the daemon to terminate gracefully
    ovs-appctl -t ovs-vswitchd exit --cleanup 2>/dev/null

    # Nothing else to be done if there is no PID
    test -z "$TMPPID" && return

    for i in 1 2 3 4 5 6 7 8 9; do
        # Check if the daemon is alive.
        kill -0 $TMPPID 2>/dev/null || return

        # Fallback to whole number since POSIX doesn't require
        # fractional times to work.
        sleep 0.1 || sleep 1
    done

    # Make sure it is terminated.
    kill $TMPPID
}

# Normalize the output of 'wc' to match POSIX.
# POSIX says 'wc' should print "%d %d %d", but GNU prints "%7d %7d %7d".
# POSIX says 'wc -l' should print "%d %s", but BSD prints "%8d".
#
# This fixes all of those (it will screw up filenames that contain
# multiple sequential spaces, but that doesn't really matter).
wc () {
   command wc "$@" | tr -s ' ' ' ' | sed 's/^ *//'
}

uuidfilt () {
    $PYTHON3 "$top_srcdir"/tests/uuidfilt.py "$@"
}

# run_as PROGRAM_NAME COMMAND [ARG...]
#
# Runs a command with argv[0] set to PROGRAM_NAME, if possible, in a
# subshell.  Most utilities print argc[0] as part of their messages,
# so this makes it easier to figure out which particular utility
# prints a message if a bunch of identical processes are running.
#
# Not all shells support "exec -a NAME", so test for it.
if (exec -a myname true 2>/dev/null); then
    run_as () {
        (exec -a "$@")
    }
else
    run_as () {
        shift
        (exec "$@")
    }
fi


ovs_cleanup() {
    if test "$(echo asan.*)" != 'asan.*'; then
        echo "Address Sanitizer reported errors in:" asan.*
        cat asan.*
        printf "%s\n" "ovs-macros.at:217" >"$at_check_line_file"
at_fn_check_skip 99 "$at_srcdir/ovs-macros.at:217"
    fi
}

ovs_wait () {
    echo "$1: waiting $2..." >&5

    # First try the condition without waiting.
    if ovs_wait_cond; then echo "$1: wait succeeded immediately" >&5; return 0; fi

    # Try a quick sleep, so that the test completes very quickly
    # in the normal case.  POSIX doesn't require fractional times to
    # work, so this might not work.
    sleep 0.1
    if ovs_wait_cond; then echo "$1: wait succeeded quickly" >&5; return 0; fi

    # Then wait up to OVS_CTL_TIMEOUT seconds.
    local d
    for d in `seq 1 "$OVS_CTL_TIMEOUT"`; do
        sleep 1
        if ovs_wait_cond; then echo "$1: wait succeeded after $d seconds" >&5; return 0; fi
    done

    echo "$1: wait failed after $d seconds" >&5
    ovs_wait_failed
    printf "%s\n" "ovs-macros.at:242" >"$at_check_line_file"
at_fn_check_skip 99 "$at_srcdir/ovs-macros.at:242"
}

   on_exit () {
    (echo "$1"; cat cleanup) > cleanup.tmp
    mv cleanup.tmp cleanup
}


ovsdb_client_wait() {
    ovsdb-client -vconsole:warn -vreconnect:err -vjsonrpc:err -vtimeval:off -vfile -vsyslog:off -vvlog:off wait "$@"
}



# Strips out uninteresting parts of ovs-ofctl output, as well as parts
# that vary from one run to another.
ofctl_strip () {
    sed '
s/ (xid=0x[0-9a-fA-F]*)//
s/ duration=[0-9.]*s,//
s/ cookie=0x0,//
s/ table=0,//
s/ n_packets=0,//
s/ n_bytes=0,//
s/ idle_age=[0-9]*,//
s/ hard_age=[0-9]*,//
s/dp_hash=0x[0-9a-f]*\//dp_hash=0x0\//
s/recirc_id=0x[0-9a-f]*,/recirc_id=0x0,/
s/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[0-9][0-9]:[0-9][0-9]Z|//
s/dir\/[0-9]*\/br0.mgmt/dir\/XXXX\/br0.mgmt/
'
}

# Filter (multiline) vconn debug messages from ovs-vswitchd.log.
# Use with vconn_sub() and ofctl_strip()
print_vconn_debug () { awk -F\| < ovs-vswitchd.log '
BEGIN { prt=0 }
/\|vconn\|DBG\|/ { sub(/[ \t]*$/, ""); print $3 "|" $4 "|" $5; prt=1; next }
$4 != "" { prt=0; next }
prt==1 { sub(/[ \t]*$/, ""); print $0 }
'
}

vconn_sub() {
    sed '
s/tcp:127.0.0.1:[0-9][0-9]*:/unix:/
s/unix#[0-9]*:/unix:/
'
}


# PARSE_LISTENING_PORT LOGFILE VARIABLE
#
# Parses the TCP or SSL port on which a server is listening from
# LOGFILE, given that the server was told to listen on a kernel-chosen
# port, and assigns the port number to shell VARIABLE.  You should
# specify the listening remote as ptcp:0:127.0.0.1 or
# pssl:0:127.0.0.1, or the equivalent with [::1] instead of 127.0.0.1.
#
# Here's an example of how to use this with ovsdb-server:
#
#    ovsdb-server --log-file --remote=ptcp:0:127.0.0.1 ...
#    PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
#    # Now $TCP_PORT holds the listening port.


start_daemon () {
    "$@" -vconsole:off --detach --no-chdir --pidfile --log-file
    pidfile="$OVS_RUNDIR"/$1.pid
    on_exit "test -e \"$pidfile\" && kill \`cat \"$pidfile\"\`"
}

# sim_add SANDBOX
#
# Starts a new simulated Open vSwitch instance named SANDBOX.  Files related to
# the instance, such as logs, databases, sockets, and pidfiles, are created in
# a subdirectory of the main test directory also named SANDBOX.  Afterward, the
# "as" command (see below) can be used to run Open vSwitch utilities in the
# context of the new sandbox.
#
# The new sandbox starts out without any bridges.  Use ovs-vsctl in the context
# of the new sandbox to create a bridge, e.g.:
#
#     sim_add hv0           # Create sandbox hv0.
#     as hv0                # Set hv0 as default sandbox.
#     ovs-vsctl add-br br0  # Add bridge br0 inside hv0.
#
# or:
#
#     sim_add hv0
#     as hv0 ovs-vsctl add-br br0
sims=
sim_add () {
   echo "adding simulator '$1'"

   sims="$sims $1"

   # Create sandbox.
   local d="$ovs_base"/$1
   mkdir "$d" || return 1
   ovs_setenv $1

   # Create database and start ovsdb-server.
   : > "$d"/.conf.db.~lock~
   as $1 ovsdb-tool create "$d"/conf.db "$abs_top_srcdir"/vswitchd/vswitch.ovsschema || return 1
   as $1 start_daemon ovsdb-server --remote=punix:"$d"/db.sock || return 1

   # Initialize database.
   as $1 ovs-vsctl --no-wait -- init || return 1

   # Start ovs-vswitchd
   as $1 start_daemon ovs-vswitchd --enable-dummy=system -vvconn -vofproto_dpif -vunixctl
}

# "as $1" sets the OVS_*DIR environment variables to point to $ovs_base/$1.
#
# "as $1 COMMAND..." sets those variables in a subshell and invokes COMMAND
# there.
as() {
    if test "X$2" != X; then
        (ovs_setenv $1; shift; "$@")
    else
        ovs_setenv $1
    fi
}

# Strips 'xid=0x1234' from ovs-ofctl output.
strip_xids () {
    sed 's/ (xid=0x[0-9a-fA-F]*)//'
}

# Changes all 'used:...' to say 'used:0.0', to make output easier to compare.
strip_used () {
    sed 's/used:[0-9]\.[0-9]*/used:0.0/'
}

# Removes all 'duration=...' to make output easier to compare.
strip_duration () {
    sed 's/duration=[0-9]*\.[0-9]*s,//'
}

# Strips 'ufid:...' from output, to make it easier to compare.
# (ufids are random.)
strip_ufid () {
    sed 's/mega_ufid:[-0-9a-f]* //
    s/ufid:[-0-9a-f]* //'
}

# Strips packets: and bytes: from output
strip_stats () {
    sed 's/packets:[0-9]*/packets:0/
    s/bytes:[0-9]*/bytes:0/'
}

# Strips key32 field from output.
strip_key32 () {
    sed 's/key32([0-9 \/]*),//'
}

# Strips packet-type from output.
strip_ptype () {
    sed 's/packet_type(ns=[0-9]*,id=[0-9]*),//'
}

# Strips bare eth from output.
strip_eth () {
    sed 's/eth(),//'
}

# Changes all 'recirc(...)' and 'recirc=...' to say 'recirc(<recirc_id>)' and
# 'recirc=<recirc_id>' respectively.  This should make output easier to
# compare.
strip_recirc() {
   sed 's/recirc_id([x0-9]*)/recirc_id(<recirc>)/
        s/recirc_id=[x0-9]*/recirc_id=<recirc>/
        s/recirc([x0-9]*)/recirc(<recirc>)/'
}

# Strips dp_hash from output.
strip_dp_hash() {
    sed 's/dp_hash([0-9a-fx/]*),//'
}

check_logs () {
    local logs
    for log in *.log; do
        case ${log} in # (
            '*.log'|testsuite.log) ;; # (
            *) logs="${logs} ${log}" ;;
        esac
    done

    # We most notably ignore 'Broken pipe' warnings.  These often and
    # intermittently appear in ovsdb-server.log, because *ctl commands
    # (e.g. ovs-vsctl) exit right after committing a change to the
    # database.  However, in reaction, some daemon may immediately update the
    # database, and this later update may cause database sending update back to
    # *ctl command if *ctl has not exited yet.  If *ctl command exits before
    # the database calls send, the send fails with 'Broken pipe' or
    # 'not connected' depending on system.  Also removes all 'connection reset'
    # warning logs for similar reasons (EPIPE, ENOTCONN or ECONNRESET can be
    # returned on a send depending on whether the peer had unconsumed data
    # when it closed the socket).
    #
    # We also ignore "Dropped # log messages..." messages.  Otherwise, even if
    # we ignore the messages that were rate-limited, we can end up failing just
    # because of the announcement that rate-limiting happened (and in a racy,
    # timing-dependent way, too).
    sed -n "$1
/reset by peer/d
/Broken pipe/d
/is not connected/d
/timeval.*Unreasonably long [0-9]*ms poll interval/d
/timeval.*faults: [0-9]* minor, [0-9]* major/d
/timeval.*disk: [0-9]* reads, [0-9]* writes/d
/timeval.*context switches: [0-9]* voluntary, [0-9]* involuntary/d
/ovs_rcu.*blocked [0-9]* ms waiting for .* to quiesce/d
/Dropped [0-9]* log messages/d
/setting extended ack support failed/d
/|WARN|/p
/|ERR|/p
/|EMER|/p" ${logs}
}

# add_of_br BRNUM [ARG...]
add_of_br () {
    local brnum=$1; shift
    local br=br$brnum
    local dpid=fedcba987654321$brnum
    local mac=aa:55:aa:55:00:0$brnum
    ovs-vsctl \
        -- add-br $br \
        -- set bridge $br datapath-type=dummy \
                          fail-mode=secure \
                          other-config:datapath-id=$dpid \
                          other-config:hwaddr=$mac \
                          protocols="[OpenFlow10,OpenFlow11,OpenFlow12,\
                                       OpenFlow13,OpenFlow14,OpenFlow15]" \
        -- "$@"
}

# add_of_ports__ PORT_TYPE [--pcap] BRIDGE PNUM...
#
# Creates PORT_TYPE interfaces in BRIDGE named pPNUM, OpenFlow port number
# PNUM, and datapath port number PNUM (the latter is a consequence of
# the dummy implementation, which tries to assign datapath port
# numbers based on port names).
#
# If --pcap is supplied then packets received from the interface will
# be written to $port-rx.pcap and those sent to it to $port-tx.pcap.
add_of_ports__ () {
    local args
    local pcap=false
    local ptype=$1
    shift
    if test "$1" = --pcap; then
        pcap=:
    shift
    fi
    local br=$1; shift
    for pnum; do
        as_fn_append args " -- add-port $br p$pnum -- set Interface p$pnum type=$ptype ofport_request=$pnum"
    if $pcap; then
        as_fn_append args " -- set Interface p$pnum options:rxq_pcap=p$pnum-rx.pcap options:tx_pcap=p$pnum-tx.pcap"
    fi
    done
    echo ovs-vsctl $args
    ovs-vsctl $args
}

# add_of_ports [--pcap] BRIDGE PNUM...
#
add_of_ports () {
    add_of_ports__ dummy $@
}

# add_pmd_of_ports [--pcap] BRIDGE PNUM...
#
add_pmd_of_ports () {
    add_of_ports__ dummy-pmd $@
}




ordinal_schema () {
    cat <<'EOF'
    {"name": "ordinals",
     "tables": {
       "ordinals": {
         "columns": {
           "number": {"type": "integer"},
           "name": {"type": "string"}},
         "indexes": [["number"]]}},
     "version": "5.1.3",
     "cksum": "12345678 9"}
EOF
}

constraint_schema () {
    cat << 'EOF'
    {"name": "constraints",
     "tables": {
       "a": {
         "columns": {
           "a": {"type": "integer"},
           "a2a": {"type": {"key": {"type": "uuid", "refTable": "a"},
                            "min": 0, "max": "unlimited"}},
           "a2b": {"type": {"key": {"type": "uuid", "refTable": "b"},
                            "min": 0, "max": "unlimited"}}}},
       "b": {
         "columns": {
           "b": {"type": "integer"},
           "b2a": {"type": {"key": {"type": "uuid", "refTable": "a"},
                            "min": 0, "max": "unlimited"}},
           "b2b": {"type": {"key": {"type": "uuid", "refTable": "b"},
                            "min": 0, "max": "unlimited"}},
           "x": {"type": {"key": "integer", "min": 1, "max": 2}}}},
       "constrained": {
         "columns": {
           "positive": {"type": {"key": {"type": "integer",
                                         "minInteger": 1}}}},
         "maxRows": 1}}}
EOF
}

weak_schema () {
    cat <<'EOF'
    {"name": "weak",
     "tables": {
       "a": {
         "columns": {
           "a": {"type": "integer"},
           "a2a": {"type": {"key": {"type": "uuid",
                                    "refTable": "a",
                                    "refType": "weak"},
                            "min": 0, "max": "unlimited"}},
           "a2a1": {"type": {"key": {"type": "uuid",
                                     "refTable": "a",
                                     "refType": "weak"}}},
           "a2b": {"type": {"key": {"type": "uuid",
                                    "refTable": "b",
                                    "refType": "weak"}}}}},
       "b": {
         "columns": {
           "b": {"type": "integer"},
           "b2a": {"type": {"key": {"type": "uuid",
                                    "refTable": "a",
                                    "refType": "weak"},
                            "min": 0, "max": "unlimited"}}}}}}
EOF
}

gc_schema () {
    cat <<'EOF'
    {"name": "gc",
     "tables": {
       "root": {
         "columns": {
           "a": {"type": {"key": {"type": "uuid",
                                  "refTable": "a"},
                            "min": 0, "max": "unlimited"}}},
         "isRoot": true},
       "a": {
         "columns": {
           "a": {"type": "integer"},
           "a2a": {"type": {"key": {"type": "uuid",
                                    "refTable": "a"},
                            "min": 0, "max": "unlimited"}},
           "a2b": {"type": {"key": {"type": "uuid",
                                    "refTable": "b"},
                            "min": 0, "max": "unlimited"}},
           "wa2a": {"type": {"key": {"type": "uuid",
                                     "refTable": "a",
                                     "refType": "weak"},
                             "min": 0, "max": "unlimited"}},
           "wa2b": {"type": {"key": {"type": "uuid",
                                    "refTable": "b",
                                    "refType": "weak"},
                             "min": 0, "max": "unlimited"}}}},
       "b": {
         "columns": {
           "b": {"type": "integer"},
           "b2a": {"type": {"key": {"type": "uuid",
                                    "refTable": "a"},
                            "min": 0, "max": "unlimited"}},
           "wb2a": {"type": {"key": {"type": "uuid",
                                     "refTable": "a",
                                     "refType": "weak"},
                             "min": 0, "max": "unlimited"}}},
         "isRoot": false}}}
EOF
}

immutable_schema () {
    cat <<'EOF'
{"name": "immutable",
 "tables": {
    "a": {
        "columns": {"i": {"type": "integer", "mutable": false}}}}}
EOF
}


# ovsdb_check_cluster N_SERVERS SCHEMA_FUNC OUTPUT USE_LOCAL_CONFIG TRANSACTION...
ovsdb_check_cluster () {
    set -x
    local n=$1 schema_func=$2 output=$3 local_config=$4
    shift; shift; shift; shift

    $schema_func > schema
    schema=`ovsdb-tool schema-name schema`
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:10: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db schema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:10"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db schema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:10"
$at_failed && at_fn_log_failure
$at_traceon; }

    if test X$local_config = X"yes"; then
        for i in `seq $n`; do
            { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:13: ovsdb-tool create c\$i.db \$top_srcdir/ovsdb/local-config.ovsschema"
at_fn_check_prepare_dynamic "ovsdb-tool create c$i.db $top_srcdir/ovsdb/local-config.ovsschema" "ovsdb-cluster.at:13"
( $at_check_trace; ovsdb-tool create c$i.db $top_srcdir/ovsdb/local-config.ovsschema
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:13"
$at_failed && at_fn_log_failure
$at_traceon; }

            local ctxn="[\"Local_Config\",
                         {\"op\": \"insert\", \"table\": \"Config\",
                          \"row\": {\"connections\": [\"named-uuid\",\"conn$n\"]}},
                         {\"op\": \"insert\", \"table\": \"Connection\", \"uuid-name\": \"conn$n\",
                          \"row\": {\"target\": \"punix:s$i.ovsdb\"}}]"

            { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:20: ovsdb-tool transact c\$i.db \"\$ctxn\""
at_fn_check_prepare_dynamic "ovsdb-tool transact c$i.db \"$ctxn\"" "ovsdb-cluster.at:20"
( $at_check_trace; ovsdb-tool transact c$i.db "$ctxn"
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:20"
$at_failed && at_fn_log_failure
$at_traceon; }

        done
    fi
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:23: grep -v 'from ephemeral to persistent' stderr"
at_fn_check_prepare_trace "ovsdb-cluster.at:23"
( $at_check_trace; grep -v 'from ephemeral to persistent' stderr
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 1 $at_status "$at_srcdir/ovsdb-cluster.at:23"
$at_failed && at_fn_log_failure
$at_traceon; }

    cid=`ovsdb-tool db-cid s1.db`
    for i in `seq 2 $n`; do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:26: ovsdb-tool join-cluster s\$i.db \$schema unix:s\$i.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema unix:s$i.raft unix:s1.raft" "ovsdb-cluster.at:26"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema unix:s$i.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:26"
$at_failed && at_fn_log_failure
$at_traceon; }

    done

    on_exit 'kill `cat *.pid`'
    for i in `seq $n`; do
        local remote=punix:s$i.ovsdb
        local config_db=
        if test X$local_config = X"yes"; then
            remote=db:Local_Config,Config,connections
            config_db=c$i.db
        fi
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:37: ovsdb-server -vraft -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=\$remote s\$i.db \$config_db"
at_fn_check_prepare_dynamic "ovsdb-server -vraft -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=$remote s$i.db $config_db" "ovsdb-cluster.at:37"
( $at_check_trace; ovsdb-server -vraft -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=$remote s$i.db $config_db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:37"
$at_failed && at_fn_log_failure
$at_traceon; }

    done
    for i in `seq $n`; do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:40: ovsdb_client_wait unix:s\$i.ovsdb \$schema connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema connected" "ovsdb-cluster.at:40"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:40"
$at_failed && at_fn_log_failure
$at_traceon; }

    done

    for txn
    do
      { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:45: ovsdb-client -vjsonrpc -vconsole:off -vsyslog:off -vvlog:off --log-file transact unix:s1.ovsdb,unix:s2.ovsdb,unix:s3.ovsdb \"\$txn\""
at_fn_check_prepare_dynamic "ovsdb-client -vjsonrpc -vconsole:off -vsyslog:off -vvlog:off --log-file transact unix:s1.ovsdb,unix:s2.ovsdb,unix:s3.ovsdb \"$txn\"" "ovsdb-cluster.at:45"
( $at_check_trace; ovsdb-client -vjsonrpc -vconsole:off -vsyslog:off -vvlog:off --log-file transact unix:s1.ovsdb,unix:s2.ovsdb,unix:s3.ovsdb "$txn"
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:45"
$at_failed && at_fn_log_failure
$at_traceon; }

      cat stdout >> output
    done
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:48: uuidfilt output"
at_fn_check_prepare_trace "ovsdb-cluster.at:48"
( $at_check_trace; uuidfilt output
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "$output" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:48"
$at_failed && at_fn_log_failure
$at_traceon; }

    for i in `seq $n`; do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:50: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:50"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:50"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:50: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:50"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:50"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:50" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:50"
      printf "%s\n" "ovsdb-cluster.at:50" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:50"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:50" "while kill -0 \$TMPPID 2>/dev/null"

    done

    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:53: ovsdb-tool check-cluster s*.db"
at_fn_check_prepare_trace "ovsdb-cluster.at:53"
( $at_check_trace; ovsdb-tool check-cluster s*.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:53"
$at_failed && at_fn_log_failure
$at_traceon; }

}


# ovsdb_test_cluster_disconnect N_SERVERS LEADER_OR_FOLLOWER [CHECK_FLAPPING]
# Test server disconnected from the cluster.
# N_SERVERS: Number of servers in the cluster.
# LEADER_OR_FOLLOWER: The role of the server that is disconnected from the
#                     cluster: "leader" or "follower".
# CHECK_FLAPPING: Whether to check if is_disconnected flapped. "yes", "no".
ovsdb_test_cluster_disconnect () {
    n=$1
    leader_or_follower=$2
    check_flapping=$3
    schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
    ordinal_schema > schema
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:109: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db \$abs_srcdir/idltest.ovsschema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:109"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:109"
$at_failed && at_fn_log_failure
$at_traceon; }

    cid=`ovsdb-tool db-cid s1.db`
    schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
    for i in `seq 2 $n`; do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:113: ovsdb-tool join-cluster s\$i.db \$schema_name unix:s\$i.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft" "ovsdb-cluster.at:113"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:113"
$at_failed && at_fn_log_failure
$at_traceon; }

    done

    on_exit 'kill `cat *.pid`'
    for i in `seq $n`; do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:118: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:118"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:118"
$at_failed && at_fn_log_failure
$at_traceon; }

    done
    for i in `seq $n`; do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:121: ovsdb_client_wait unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:121"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:121"
$at_failed && at_fn_log_failure
$at_traceon; }

    done

    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:124: ovsdb-client transact unix:s1.ovsdb '[\"idltest\",
          {\"op\": \"insert\",
           \"table\": \"simple\",
           \"row\": {\"i\": 1}}]'"
at_fn_check_prepare_notrace 'an embedded newline' "ovsdb-cluster.at:124"
( $at_check_trace; ovsdb-client transact unix:s1.ovsdb '["idltest",
          {"op": "insert",
           "table": "simple",
           "row": {"i": 1}}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:124"
$at_failed && at_fn_log_failure
$at_traceon; }


    # When a node is disconnected from the cluster, the IDL should disconnect
    # and retry even if it uses a single remote, because the remote IP can be
    # a VIP on a load-balance. So we use single remote to test here.
    if test $leader_or_follower = "leader"; then
        target=1
        shutdown=`seq $(($n/2 + 1)) $n`
        cleanup=`seq $(($n/2))`
    else
        target=$n

        # shutdown followers before the leader (s1) so that there is no chance for
        # s$n to become leader during the process.
        shutdown="`seq 2 $(($n/2 + 1))` 1"
        cleanup=`seq $(($n/2 + 2)) $n`
    fi
    echo shutdown=$shutdown
    echo cleanup=$cleanup

    # Connect to $target.  Use "wait" to trigger a non-op transaction so
    # that test-ovsdb will not quit.

    txn='["idltest",
          {"op": "wait",
           "table": "simple",
           "where": [["i", "==", 1]],
           "columns": ["i"],
           "until": "==",
           "rows": [{"i": 1}]}]'

    test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -v -t10 idl \
               unix:s$target.ovsdb "$txn" > test-ovsdb.log 2>&1 &
    echo $! > test-ovsdb.pid

    printf "%s\n" "ovsdb-cluster.at:162" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:162"
      printf "%s\n" "ovsdb-cluster.at:162" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:162"
   ovs_wait_cond () {
    grep "000: table simple: i=1" test-ovsdb.log
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:162" "until grep \"000: table simple: i=1\" test-ovsdb.log"


    $PYTHON3 $srcdir/test-ovsdb.py -t10 idl $abs_srcdir/idltest.ovsschema \
               unix:s$target.ovsdb "$txn" > test-ovsdb-py.log 2>&1 &
    echo $! > test-ovsdb-py.pid

    printf "%s\n" "ovsdb-cluster.at:168" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:168"
      printf "%s\n" "ovsdb-cluster.at:168" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:168"
   ovs_wait_cond () {
    grep "000: table simple: i=1" test-ovsdb-py.log
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:168" "until grep \"000: table simple: i=1\" test-ovsdb-py.log"


    # Start collecting raft_is_connected logs for $target before shutting down
    # any servers.
    tail -f s$target.log > raft_is_connected.log &
    echo $! > tail.pid

    # Shutdown the other servers so that $target is disconnected from the cluster.
    for i in $shutdown; do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:177: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:177"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:177"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:177: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:177"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:177"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:177" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:177"
      printf "%s\n" "ovsdb-cluster.at:177" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:177"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:177" "while kill -0 \$TMPPID 2>/dev/null"

    done

    # The test-ovsdb should detect the disconnect and retry.
    printf "%s\n" "ovsdb-cluster.at:181" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:181"
      printf "%s\n" "ovsdb-cluster.at:181" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:181"
   ovs_wait_cond () {
    grep disconnect test-ovsdb.log
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:181" "until grep disconnect test-ovsdb.log"

    printf "%s\n" "ovsdb-cluster.at:182" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:182"
      printf "%s\n" "ovsdb-cluster.at:182" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:182"
   ovs_wait_cond () {
    grep disconnect test-ovsdb-py.log
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:182" "until grep disconnect test-ovsdb-py.log"


    # The $target debug log should show raft_is_connected: false.
    printf "%s\n" "ovsdb-cluster.at:185" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:185"
      printf "%s\n" "ovsdb-cluster.at:185" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:185"
   ovs_wait_cond () {
    grep "raft_is_connected: false" raft_is_connected.log
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:185" "until grep \"raft_is_connected: false\" raft_is_connected.log"


    # Save the current count of "raft_is_connected: true"
    count_old=`grep "raft_is_connected: true" raft_is_connected.log | wc -l`
    echo count_old $count_old

    if test X$check_flapping = X"yes"; then
        sleep 10
    fi
    # Make sure raft_is_connected didn't flap from false to true.
    count_new=`grep "raft_is_connected: true" raft_is_connected.log | wc -l`
    echo count_new $count_new
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:197: test \$count_new = \$count_old"
at_fn_check_prepare_dynamic "test $count_new = $count_old" "ovsdb-cluster.at:197"
( $at_check_trace; test $count_new = $count_old
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:197"
$at_failed && at_fn_log_failure
$at_traceon; }


    for i in $cleanup; do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:200: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:200"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:200"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:200: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:200"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:200"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:200" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:200"
      printf "%s\n" "ovsdb-cluster.at:200" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:200"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:200" "while kill -0 \$TMPPID 2>/dev/null"

    done
}


# ovsdb_cluster_failure_test SCHEMA_FUNC OUTPUT TRANSACTION...
ovsdb_cluster_failure_test () {
    # Initial state: s1 is leader, s2 and s3 are followers
    remote_1=$1
    remote_2=$2
    crash_node=$3
    crash_command=$4
    if test "$crash_node" = "1"; then
        new_leader=$5
    fi
    log_grep=$6

    cp $top_srcdir/vswitchd/vswitch.ovsschema schema
    schema=`ovsdb-tool schema-name schema`
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:609: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db schema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:609"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db schema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:609"
$at_failed && at_fn_log_failure
$at_traceon; }

    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:610: sed < stderr \"/ovsdb|WARN|schema: changed .* columns in 'Open_vSwitch' database from ephemeral to persistent/d\""
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:610"
( $at_check_trace; sed < stderr "/ovsdb|WARN|schema: changed .* columns in 'Open_vSwitch' database from ephemeral to persistent/d"
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:610"
$at_failed && at_fn_log_failure
$at_traceon; }


    n=3
    join_cluster() {
        local i=$1
        others=
        for j in `seq 1 $n`; do
            if test $i != $j; then
                others="$others unix:s$j.raft"
            fi
        done
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:621: ovsdb-tool join-cluster s\$i.db \$schema unix:s\$i.raft \$others"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema unix:s$i.raft $others" "ovsdb-cluster.at:621"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema unix:s$i.raft $others
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:621"
$at_failed && at_fn_log_failure
$at_traceon; }

    }
    start_server() {
        local i=$1
        printf "\ns$i: starting\n"
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:626: ovsdb-server -vjsonrpc -vraft -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -vjsonrpc -vraft -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:626"
( $at_check_trace; ovsdb-server -vjsonrpc -vraft -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:626"
$at_failed && at_fn_log_failure
$at_traceon; }

    }
    connect_server() {
        local i=$1
        printf "\ns$i: waiting to connect to storage\n"
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:631: ovsdb_client_wait --log-file=connect\$i.log unix:s\$i.ovsdb \$schema connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait --log-file=connect$i.log unix:s$i.ovsdb $schema connected" "ovsdb-cluster.at:631"
( $at_check_trace; ovsdb_client_wait --log-file=connect$i.log unix:s$i.ovsdb $schema connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:631"
$at_failed && at_fn_log_failure
$at_traceon; }

    }
    cid=`ovsdb-tool db-cid s1.db`
    for i in `seq 2 $n`; do join_cluster $i; done

    on_exit 'kill `cat *.pid`'
    for i in `seq $n`; do start_server $i; done
    for i in `seq $n`; do connect_server $i; done

    db=unix:s$remote_1.ovsdb,unix:s$remote_2.ovsdb

    # To ensure $new_leader node the new leader, we delay election timer for
    # the other follower.
    if test -n "$new_leader"; then
        if test "$new_leader" = "2"; then
            delay_election_node=3
        else
            delay_election_node=2
        fi
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:650: ovs-appctl -t \"\`pwd\`\"/s\$delay_election_node cluster/failure-test delay-election"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:650"
( $at_check_trace; ovs-appctl -t "`pwd`"/s$delay_election_node cluster/failure-test delay-election
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:650"
$at_failed && at_fn_log_failure
$at_traceon; }

    fi

    # Initializing the database separately to avoid extra 'wait' operation
    # in later transactions.
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:655: ovs-vsctl -v --db=\"\$db\" --no-leader-only --no-shuffle-remotes --no-wait init"
at_fn_check_prepare_dynamic "ovs-vsctl -v --db=\"$db\" --no-leader-only --no-shuffle-remotes --no-wait init" "ovsdb-cluster.at:655"
( $at_check_trace; ovs-vsctl -v --db="$db" --no-leader-only --no-shuffle-remotes --no-wait init
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:655"
$at_failed && at_fn_log_failure
$at_traceon; }


    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:657: ovs-appctl -t \"\`pwd\`\"/s\$crash_node cluster/failure-test \$crash_command"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:657"
( $at_check_trace; ovs-appctl -t "`pwd`"/s$crash_node cluster/failure-test $crash_command
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:657"
$at_failed && at_fn_log_failure
$at_traceon; }

    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:658: ovs-vsctl -v --db=\"\$db\" --no-leader-only --no-shuffle-remotes --no-wait create QoS type=x"
at_fn_check_prepare_dynamic "ovs-vsctl -v --db=\"$db\" --no-leader-only --no-shuffle-remotes --no-wait create QoS type=x" "ovsdb-cluster.at:658"
( $at_check_trace; ovs-vsctl -v --db="$db" --no-leader-only --no-shuffle-remotes --no-wait create QoS type=x
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:658"
$at_failed && at_fn_log_failure
$at_traceon; }


    # Make sure that the node really crashed or has specific log message.
    if test -z "$log_grep"; then
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:662: ls s\$crash_node.ovsdb"
at_fn_check_prepare_dynamic "ls s$crash_node.ovsdb" "ovsdb-cluster.at:662"
( $at_check_trace; ls s$crash_node.ovsdb
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 2 $at_status "$at_srcdir/ovsdb-cluster.at:662"
$at_failed && at_fn_log_failure
$at_traceon; }

        # XXX: Client will fail if remotes contains unix socket that doesn't exist (killed).
        if test "$remote_1" = "$crash_node"; then
            db=unix:s$remote_2.ovsdb
        fi
    else
        printf "%s\n" "ovsdb-cluster.at:668" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:668"
      printf "%s\n" "ovsdb-cluster.at:668" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:668"
   ovs_wait_cond () {
    grep -q "$log_grep" s${crash_node}.log
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:668" "until grep -q \"\$log_grep\" s\${crash_node}.log"

    fi
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:670: ovs-vsctl --db=\"\$db\" --no-leader-only --no-wait --columns=type --bare list QoS"
at_fn_check_prepare_dynamic "ovs-vsctl --db=\"$db\" --no-leader-only --no-wait --columns=type --bare list QoS" "ovsdb-cluster.at:670"
( $at_check_trace; ovs-vsctl --db="$db" --no-leader-only --no-wait --columns=type --bare list QoS
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "x
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:670"
$at_failed && at_fn_log_failure
$at_traceon; }

}


ovsdb_torture_test () {
    local n=$1                  # Number of cluster members
    local victim=$2             # Cluster member to kill or remove
    local variant=$3            # 'kill' and restart or 'remove' and add
    cp $top_srcdir/vswitchd/vswitch.ovsschema schema
    schema=`ovsdb-tool schema-name schema`
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:835: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db schema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:835"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db schema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:835"
$at_failed && at_fn_log_failure
$at_traceon; }

    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:836: sed < stderr \"/ovsdb|WARN|schema: changed .* columns in 'Open_vSwitch' database from ephemeral to persistent/d\""
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:836"
( $at_check_trace; sed < stderr "/ovsdb|WARN|schema: changed .* columns in 'Open_vSwitch' database from ephemeral to persistent/d"
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:836"
$at_failed && at_fn_log_failure
$at_traceon; }


    join_cluster() {
        local i=$1
        others=
        for j in `seq 1 $n`; do
            if test $i != $j; then
                others="$others unix:s$j.raft"
            fi
        done
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:846: ovsdb-tool join-cluster s\$i.db \$schema unix:s\$i.raft \$others"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema unix:s$i.raft $others" "ovsdb-cluster.at:846"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema unix:s$i.raft $others
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:846"
$at_failed && at_fn_log_failure
$at_traceon; }

    }

    start_server() {
        local i=$1
        printf "\ns$i: starting\n"
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:852: ovsdb-server -vjsonrpc -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -vjsonrpc -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:852"
( $at_check_trace; ovsdb-server -vjsonrpc -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:852"
$at_failed && at_fn_log_failure
$at_traceon; }

    }
    stop_server() {
        local i=$1
        printf "\ns$i: stopping\n"
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:857: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:857"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:857"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:857: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:857"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:857"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:857" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:857"
      printf "%s\n" "ovsdb-cluster.at:857" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:857"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:857" "while kill -0 \$TMPPID 2>/dev/null"

    }
    connect_server() {
        local i=$1
        printf "\ns$i: waiting to connect to storage\n"
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:862: ovsdb_client_wait --log-file=connect\$i.log unix:s\$i.ovsdb \$schema connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait --log-file=connect$i.log unix:s$i.ovsdb $schema connected" "ovsdb-cluster.at:862"
( $at_check_trace; ovsdb_client_wait --log-file=connect$i.log unix:s$i.ovsdb $schema connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:862"
$at_failed && at_fn_log_failure
$at_traceon; }

    }
    remove_server() {
        local i=$1
        printf "\ns$i: removing from cluster\n"
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:867: ovs-appctl -t \"\`pwd\`\"/s\$i cluster/leave Open_vSwitch"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:867"
( $at_check_trace; ovs-appctl -t "`pwd`"/s$i cluster/leave Open_vSwitch
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:867"
$at_failed && at_fn_log_failure
$at_traceon; }

        printf "\ns$i: waiting for removal to complete\n"
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:869: ovsdb_client_wait --log-file=remove\$i.log unix:s\$i.ovsdb \$schema removed"
at_fn_check_prepare_dynamic "ovsdb_client_wait --log-file=remove$i.log unix:s$i.ovsdb $schema removed" "ovsdb-cluster.at:869"
( $at_check_trace; ovsdb_client_wait --log-file=remove$i.log unix:s$i.ovsdb $schema removed
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:869"
$at_failed && at_fn_log_failure
$at_traceon; }

        stop_server $i
    }
    add_server() {
        local i=$1
        rm s$i.db
        join_cluster $i
        start_server $i
        connect_server $i
    }

    cid=`ovsdb-tool db-cid s1.db`
    for i in `seq 2 $n`; do join_cluster $i; done

    on_exit 'kill `cat *.pid`'
    for i in `seq $n`; do start_server $i; done
    for i in `seq $n`; do connect_server $i; done

    db=unix:s1.ovsdb
    for i in `seq 2 $n`; do
        db=$db,unix:s$i.ovsdb
    done

    n1=10 n2=5 n3=50
    echo "starting $n1*$n2 ovs-vsctl processes..."
    for i in $(seq 0 $(expr $n1 - 1) ); do
        (for j in $(seq $n2); do
             : > $i-$j.running
             txn="add Open_vSwitch . external_ids $i-$j=$i-$j"
             for k in $(seq $n3); do
                 txn="$txn -- add Open_vSwitch . external_ids $i-$j-$k=$i-$j-$k"
             done
             run_as "ovs-vsctl($i-$j)" ovs-vsctl "-vPATTERN:console:ovs-vsctl($i-$j)|%D{%H:%M:%S}|%05N|%c|%p|%m" --log-file=$i-$j.log -vfile -vsyslog:off -vtimeval:off --timeout=120 --db="$db" --no-leader-only --no-wait $txn
             status=$?
             if test $status != 0; then
                 echo "$i-$j exited with status $status" > $i-$j:$status
             fi
             rm $i-$j.running
         done
         : > $i.done)&
    done
    echo "...done"

    echo "waiting for ovs-vsctl processes to exit..."
    # Use file instead of var because code inside "while" runs in a subshell.
    echo 0 > phase
    i=0
    (while :; do echo || exit 0; sleep 0.1; done) | while read REPLY; do
        printf "t=%2d s:" $i
        done=0
        for j in $(seq 0 $(expr $n1 - 1)); do
            if test -f $j.done; then
                printf " $j"
                done=$(expr $done + 1)
            fi
        done
        printf '\n'
        if test $done = $n1; then
            break
        fi

        case $(cat phase) in # (
        0)
            if test $done -ge $(expr $n1 / 10); then
                if test $variant = kill; then
                    stop_server $victim
                else
                    remove_server $victim
                fi
                echo 1 > phase
                next=$(expr $i + 2)
            fi
            ;; # (
        1)
            if test $i -ge $next; then
                if test $variant = kill; then
                    start_server $victim
                    connect_server $victim
                else
                    add_server $victim
                fi
                echo 2 > phase
            fi
            ;;
        esac

        i=$(expr $i + 1)
    done
    echo "...done"
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:958: if test \$(cat phase) != 2; then exit 77; fi"
at_fn_check_prepare_notrace 'a $(...) command substitution' "ovsdb-cluster.at:958"
( $at_check_trace; if test $(cat phase) != 2; then exit 77; fi
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:958"
$at_failed && at_fn_log_failure
$at_traceon; }


    for i in $(seq 0 $(expr $n1 - 1) ); do
        for j in `seq $n2`; do
            echo "$i-$j=$i-$j"
            for k in `seq $n3`; do
                echo "$i-$j-$k=$i-$j-$k"
            done
        done
    done | sort > expout
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:968: ovs-vsctl --db=\"\$db\" --no-wait --log-file=finalize.log -vtimeval:off -vfile -vsyslog:off --bare get Open_vSwitch . external-ids | tr ',' '\\n' | sed 's/[{}\"\" ]//g' | sort"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:968"
( $at_check_trace; ovs-vsctl --db="$db" --no-wait --log-file=finalize.log -vtimeval:off -vfile -vsyslog:off --bare get Open_vSwitch . external-ids | tr ',' '\n' | sed 's/[{}"" ]//g' | sort
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
$at_diff expout "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:968"
$at_failed && at_fn_log_failure
$at_traceon; }


    for i in `seq $n`; do
        if test $i != $victim || test $(cat phase) != 1; then
            stop_server $i
        fi
    done

    # We ignore stdout because non-fatal warnings get printed there.
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:977: ovsdb-tool check-cluster s*.db"
at_fn_check_prepare_trace "ovsdb-cluster.at:977"
( $at_check_trace; ovsdb-tool check-cluster s*.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:977"
$at_failed && at_fn_log_failure
$at_traceon; }

}

   {
  printf "%s\n" "## ---------------- ##
## Tested programs. ##
## ---------------- ##"
  echo
} >&5

# Report what programs are being tested.
for at_program in : `eval echo $at_tested`
do
  case $at_program in #(
  :) :
    continue ;; #(
  [\\/]* | ?:[\\/]*) :
    at_program_=$at_program ;; #(
  *) :
    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -f "$as_dir$at_program" && break
  done
IFS=$as_save_IFS

    at_program_=$as_dir$at_program ;;
esac

  if test -f "$at_program_"; then
    {
      printf "%s\n" "$at_srcdir/ovsdb-cluster-testsuite.at:1: $at_program_ --version"
      "$at_program_" --version </dev/null
      echo
    } >&5 2>&1
  else
    as_fn_error $? "cannot find $at_program" "$LINENO" 5
  fi
done

{
  printf "%s\n" "## ------------------ ##
## Running the tests. ##
## ------------------ ##"
} >&5

at_start_date=`date`
at_start_time=`date +%s 2>/dev/null`
printf "%s\n" "$as_me: starting at: $at_start_date" >&5

# Create the master directory if it doesn't already exist.
as_dir="$at_suite_dir"; as_fn_mkdir_p ||
  as_fn_error $? "cannot create \`$at_suite_dir'" "$LINENO" 5

# Can we diff with `/dev/null'?  DU 5.0 refuses.
if diff /dev/null /dev/null >/dev/null 2>&1; then
  at_devnull=/dev/null
else
  at_devnull=$at_suite_dir/devnull
  >"$at_devnull"
fi

# Use `diff -u' when possible.
if at_diff=`diff -u "$at_devnull" "$at_devnull" 2>&1` && test -z "$at_diff"
then
  at_diff='diff -u'
else
  at_diff=diff
fi

# Get the last needed group.
for at_group in : $at_groups; do :; done

# Extract the start and end lines of each test group at the tail
# of this file
awk '
BEGIN { FS="" }
/^#AT_START_/ {
  start = NR
}
/^#AT_STOP_/ {
  test = substr ($ 0, 10)
  print "at_sed" test "=\"1," start "d;" (NR-1) "q\""
  if (test == "'"$at_group"'") exit
}' "$at_myself" > "$at_suite_dir/at-source-lines" &&
. "$at_suite_dir/at-source-lines" ||
  as_fn_error $? "cannot create test line number cache" "$LINENO" 5
rm -f "$at_suite_dir/at-source-lines"

# Set number of jobs for `-j'; avoid more jobs than test groups.
set X $at_groups; shift; at_max_jobs=$#
if test $at_max_jobs -eq 0; then
  at_jobs=1
fi
if test $at_jobs -ne 1 &&
   { test $at_jobs -eq 0 || test $at_jobs -gt $at_max_jobs; }; then
  at_jobs=$at_max_jobs
fi

# If parallel mode, don't output banners, don't split summary lines.
if test $at_jobs -ne 1; then
  at_print_banners=false
  at_quiet=:
fi

# Set up helper dirs.
rm -rf "$at_helper_dir" &&
mkdir "$at_helper_dir" &&
cd "$at_helper_dir" &&
{ test -z "$at_groups" || mkdir $at_groups; } ||
as_fn_error $? "testsuite directory setup failed" "$LINENO" 5

# Functions for running a test group.  We leave the actual
# test group execution outside of a shell function in order
# to avoid hitting zsh 4.x exit status bugs.

# at_fn_group_prepare
# -------------------
# Prepare for running a test group.
at_fn_group_prepare ()
{
  # The directory for additional per-group helper files.
  at_job_dir=$at_helper_dir/$at_group
  # The file containing the location of the last AT_CHECK.
  at_check_line_file=$at_job_dir/check-line
  # The file containing the exit status of the last command.
  at_status_file=$at_job_dir/status
  # The files containing the output of the tested commands.
  at_stdout=$at_job_dir/stdout
  at_stder1=$at_job_dir/stder1
  at_stderr=$at_job_dir/stderr
  # The file containing the code for a test group.
  at_test_source=$at_job_dir/test-source
  # The file containing dates.
  at_times_file=$at_job_dir/times

  # Be sure to come back to the top test directory.
  cd "$at_suite_dir"

  # Clearly separate the test groups when verbose.
  $at_first || $at_verbose echo

  at_group_normalized=$at_group

  eval 'while :; do
    case $at_group_normalized in #(
    '"$at_format"'*) break;;
    esac
    at_group_normalized=0$at_group_normalized
  done'


  # Create a fresh directory for the next test group, and enter.
  # If one already exists, the user may have invoked ./run from
  # within that directory; we remove the contents, but not the
  # directory itself, so that we aren't pulling the rug out from
  # under the shell's notion of the current directory.
  at_group_dir=$at_suite_dir/$at_group_normalized
  at_group_log=$at_group_dir/$as_me.log
  if test -d "$at_group_dir"
then
  find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx {} \;
  rm -fr "$at_group_dir"/* "$at_group_dir"/.[!.] "$at_group_dir"/.??*
fi ||
    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: test directory for $at_group_normalized could not be cleaned" >&5
printf "%s\n" "$as_me: WARNING: test directory for $at_group_normalized could not be cleaned" >&2;}
  # Be tolerant if the above `rm' was not able to remove the directory.
  as_dir="$at_group_dir"; as_fn_mkdir_p

  echo 0 > "$at_status_file"

  # In verbose mode, append to the log file *and* show on
  # the standard output; in quiet mode only write to the log.
  if test -z "$at_verbose"; then
    at_tee_pipe='tee -a "$at_group_log"'
  else
    at_tee_pipe='cat >> "$at_group_log"'
  fi
}

# at_fn_group_banner ORDINAL LINE DESC PAD [BANNER]
# -------------------------------------------------
# Declare the test group ORDINAL, located at LINE with group description DESC,
# and residing under BANNER. Use PAD to align the status column.
at_fn_group_banner ()
{
  at_setup_line="$2"
  test -n "$5" && at_fn_banner $5
  at_desc="$3"
  case $1 in
    [0-9])      at_desc_line="  $1: ";;
    [0-9][0-9]) at_desc_line=" $1: " ;;
    *)          at_desc_line="$1: "  ;;
  esac
  as_fn_append at_desc_line "$3$4"
  $at_quiet printf %s "$at_desc_line"
  echo "#                             -*- compilation -*-" >> "$at_group_log"
}

# at_fn_group_postprocess
# -----------------------
# Perform cleanup after running a test group.
at_fn_group_postprocess ()
{
  # Be sure to come back to the suite directory, in particular
  # since below we might `rm' the group directory we are in currently.
  cd "$at_suite_dir"

  if test ! -f "$at_check_line_file"; then
    sed "s/^ */$as_me: WARNING: /" <<_ATEOF
      A failure happened in a test group before any test could be
      run. This means that test suite is improperly designed.  Please
      report this failure to <bugs@openvswitch.org>.
_ATEOF
    printf "%s\n" "$at_setup_line" >"$at_check_line_file"
    at_status=99
  fi
  $at_verbose printf %s "$at_group. $at_setup_line: "
  printf %s "$at_group. $at_setup_line: " >> "$at_group_log"
  case $at_xfail:$at_status in
    yes:0)
	at_msg="UNEXPECTED PASS"
	at_res=xpass
	at_errexit=$at_errexit_p
	at_color=$at_red
	;;
    no:0)
	at_msg="ok"
	at_res=pass
	at_errexit=false
	at_color=$at_grn
	;;
    *:77)
	at_msg='skipped ('`cat "$at_check_line_file"`')'
	at_res=skip
	at_errexit=false
	at_color=$at_blu
	;;
    no:* | *:99)
	at_msg='FAILED ('`cat "$at_check_line_file"`')'
	at_res=fail
	at_errexit=$at_errexit_p
	at_color=$at_red
	;;
    yes:*)
	at_msg='expected failure ('`cat "$at_check_line_file"`')'
	at_res=xfail
	at_errexit=false
	at_color=$at_lgn
	;;
  esac
  echo "$at_res" > "$at_job_dir/$at_res"
  # In parallel mode, output the summary line only afterwards.
  if test $at_jobs -ne 1 && test -n "$at_verbose"; then
    printf "%s\n" "$at_desc_line $at_color$at_msg$at_std"
  else
    # Make sure there is a separator even with long titles.
    printf "%s\n" " $at_color$at_msg$at_std"
  fi
  at_log_msg="$at_group. $at_desc ($at_setup_line): $at_msg"
  case $at_status in
    0|77)
      # $at_times_file is only available if the group succeeded.
      # We're not including the group log, so the success message
      # is written in the global log separately.  But we also
      # write to the group log in case they're using -d.
      if test -f "$at_times_file"; then
	at_log_msg="$at_log_msg     ("`sed 1d "$at_times_file"`')'
	rm -f "$at_times_file"
      fi
      printf "%s\n" "$at_log_msg" >> "$at_group_log"
      printf "%s\n" "$at_log_msg" >&5

      # Cleanup the group directory, unless the user wants the files
      # or the success was unexpected.
      if $at_debug_p || test $at_res = xpass; then
	at_fn_create_debugging_script
	if test $at_res = xpass && $at_errexit; then
	  echo stop > "$at_stop_file"
	fi
      else
	if test -d "$at_group_dir"; then
	  find "$at_group_dir" -type d ! -perm -700 -exec chmod u+rwx \{\} \;
	  rm -fr "$at_group_dir"
	fi
	rm -f "$at_test_source"
      fi
      ;;
    *)
      # Upon failure, include the log into the testsuite's global
      # log.  The failure message is written in the group log.  It
      # is later included in the global log.
      printf "%s\n" "$at_log_msg" >> "$at_group_log"

      # Upon failure, keep the group directory for autopsy, and create
      # the debugging script.  With -e, do not start any further tests.
      at_fn_create_debugging_script
      if $at_errexit; then
	echo stop > "$at_stop_file"
      fi
      ;;
  esac
}


## ------------ ##
## Driver loop. ##
## ------------ ##


if (set -m && set +m && set +b) >/dev/null 2>&1; then
  set +b
  at_job_control_on='set -m' at_job_control_off='set +m' at_job_group=-
else
  at_job_control_on=: at_job_control_off=: at_job_group=
fi

for at_signal in 1 2 15; do
  trap 'set +x; set +e
	$at_job_control_off
	at_signal='"$at_signal"'
	echo stop > "$at_stop_file"
	trap "" $at_signal
	at_pgids=
	for at_pgid in `jobs -p 2>/dev/null`; do
	  at_pgids="$at_pgids $at_job_group$at_pgid"
	done
	test -z "$at_pgids" || kill -$at_signal $at_pgids 2>/dev/null
	wait
	if test "$at_jobs" -eq 1 || test -z "$at_verbose"; then
	  echo >&2
	fi
	at_signame=`kill -l $at_signal 2>&1 || echo $at_signal`
	set x $at_signame
	test 0 -gt 2 && at_signame=$at_signal
	{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: caught signal $at_signame, bailing out" >&5
printf "%s\n" "$as_me: WARNING: caught signal $at_signame, bailing out" >&2;}
	as_fn_arith 128 + $at_signal && exit_status=$as_val
	as_fn_exit $exit_status' $at_signal
done

rm -f "$at_stop_file"
at_first=:

if test $at_jobs -ne 1 &&
     rm -f "$at_job_fifo" &&
     test -n "$at_job_group" &&
     ( mkfifo "$at_job_fifo" && trap 'exit 1' PIPE STOP TSTP ) 2>/dev/null
then
  # FIFO job dispatcher.

  trap 'at_pids=
	for at_pid in `jobs -p`; do
	  at_pids="$at_pids $at_job_group$at_pid"
	done
	if test -n "$at_pids"; then
	  at_sig=TSTP
	  test ${TMOUT+y} && at_sig=STOP
	  kill -$at_sig $at_pids 2>/dev/null
	fi
	kill -STOP $$
	test -z "$at_pids" || kill -CONT $at_pids 2>/dev/null' TSTP

  echo
  # Turn jobs into a list of numbers, starting from 1.
  at_joblist=`printf "%s\n" "$at_groups" | sed -n 1,${at_jobs}p`

  set X $at_joblist
  shift
  for at_group in $at_groups; do
    $at_job_control_on 2>/dev/null
    (
      # Start one test group.
      $at_job_control_off
      if $at_first; then
	exec 7>"$at_job_fifo"
      else
	exec 6<&-
      fi
      trap 'set +x; set +e
	    trap "" PIPE
	    echo stop > "$at_stop_file"
	    echo >&7
	    as_fn_exit 141' PIPE
      at_fn_group_prepare
      if cd "$at_group_dir" &&
	 at_fn_test $at_group &&
	 . "$at_test_source"
      then :; else
	{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5
printf "%s\n" "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
	at_failed=:
      fi
      at_fn_group_postprocess
      echo >&7
    ) &
    $at_job_control_off
    if $at_first; then
      at_first=false
      exec 6<"$at_job_fifo" 7>"$at_job_fifo"
    fi
    shift # Consume one token.
    if test $# -gt 0; then :; else
      read at_token <&6 || break
      set x $*
    fi
    test -f "$at_stop_file" && break
  done
  exec 7>&-
  # Read back the remaining ($at_jobs - 1) tokens.
  set X $at_joblist
  shift
  if test $# -gt 0; then
    shift
    for at_job
    do
      read at_token
    done <&6
  fi
  exec 6<&-
  wait
else
  # Run serially, avoid forks and other potential surprises.
  for at_group in $at_groups; do
    at_fn_group_prepare
    if cd "$at_group_dir" &&
       at_fn_test $at_group &&
       . "$at_test_source"; then :; else
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unable to parse test group: $at_group" >&5
printf "%s\n" "$as_me: WARNING: unable to parse test group: $at_group" >&2;}
      at_failed=:
    fi
    at_fn_group_postprocess
    test -f "$at_stop_file" && break
    at_first=false
  done
fi

# Wrap up the test suite with summary statistics.
cd "$at_helper_dir"

# Use ?..???? when the list must remain sorted, the faster * otherwise.
at_pass_list=`for f in */pass; do echo $f; done | sed '/\*/d; s,/pass,,'`
at_skip_list=`for f in */skip; do echo $f; done | sed '/\*/d; s,/skip,,'`
at_xfail_list=`for f in */xfail; do echo $f; done | sed '/\*/d; s,/xfail,,'`
at_xpass_list=`for f in ?/xpass ??/xpass ???/xpass ????/xpass; do
		 echo $f; done | sed '/?/d; s,/xpass,,'`
at_fail_list=`for f in ?/fail ??/fail ???/fail ????/fail; do
		echo $f; done | sed '/?/d; s,/fail,,'`

set X $at_pass_list $at_xpass_list $at_xfail_list $at_fail_list $at_skip_list
shift; at_group_count=$#
set X $at_xpass_list; shift; at_xpass_count=$#; at_xpass_list=$*
set X $at_xfail_list; shift; at_xfail_count=$#
set X $at_fail_list; shift; at_fail_count=$#; at_fail_list=$*
set X $at_skip_list; shift; at_skip_count=$#

as_fn_arith $at_group_count - $at_skip_count && at_run_count=$as_val
as_fn_arith $at_xpass_count + $at_fail_count && at_unexpected_count=$as_val
as_fn_arith $at_xfail_count + $at_fail_count && at_total_fail_count=$as_val

# Back to the top directory.
cd "$at_dir"
rm -rf "$at_helper_dir"

# Compute the duration of the suite.
at_stop_date=`date`
at_stop_time=`date +%s 2>/dev/null`
printf "%s\n" "$as_me: ending at: $at_stop_date" >&5
case $at_start_time,$at_stop_time in
  [0-9]*,[0-9]*)
    as_fn_arith $at_stop_time - $at_start_time && at_duration_s=$as_val
    as_fn_arith $at_duration_s / 60 && at_duration_m=$as_val
    as_fn_arith $at_duration_m / 60 && at_duration_h=$as_val
    as_fn_arith $at_duration_s % 60 && at_duration_s=$as_val
    as_fn_arith $at_duration_m % 60 && at_duration_m=$as_val
    at_duration="${at_duration_h}h ${at_duration_m}m ${at_duration_s}s"
    printf "%s\n" "$as_me: test suite duration: $at_duration" >&5
    ;;
esac

echo
printf "%s\n" "## ------------- ##
## Test results. ##
## ------------- ##"
echo
{
  echo
  printf "%s\n" "## ------------- ##
## Test results. ##
## ------------- ##"
  echo
} >&5

if test $at_run_count = 1; then
  at_result="1 test"
  at_were=was
else
  at_result="$at_run_count tests"
  at_were=were
fi
if $at_errexit_p && test $at_unexpected_count != 0; then
  if test $at_xpass_count = 1; then
    at_result="$at_result $at_were run, one passed"
  else
    at_result="$at_result $at_were run, one failed"
  fi
  at_result="$at_result unexpectedly and inhibited subsequent tests."
  at_color=$at_red
else
  # Don't you just love exponential explosion of the number of cases?
  at_color=$at_red
  case $at_xpass_count:$at_fail_count:$at_xfail_count in
    # So far, so good.
    0:0:0) at_result="$at_result $at_were successful." at_color=$at_grn ;;
    0:0:*) at_result="$at_result behaved as expected." at_color=$at_lgn ;;

    # Some unexpected failures
    0:*:0) at_result="$at_result $at_were run,
$at_fail_count failed unexpectedly." ;;

    # Some failures, both expected and unexpected
    0:*:1) at_result="$at_result $at_were run,
$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
    0:*:*) at_result="$at_result $at_were run,
$at_total_fail_count failed ($at_xfail_count expected failures)." ;;

    # No unexpected failures, but some xpasses
    *:0:*) at_result="$at_result $at_were run,
$at_xpass_count passed unexpectedly." ;;

    # No expected failures, but failures and xpasses
    *:1:0) at_result="$at_result $at_were run,
$at_unexpected_count did not behave as expected ($at_fail_count unexpected failure)." ;;
    *:*:0) at_result="$at_result $at_were run,
$at_unexpected_count did not behave as expected ($at_fail_count unexpected failures)." ;;

    # All of them.
    *:*:1) at_result="$at_result $at_were run,
$at_xpass_count passed unexpectedly,
$at_total_fail_count failed ($at_xfail_count expected failure)." ;;
    *:*:*) at_result="$at_result $at_were run,
$at_xpass_count passed unexpectedly,
$at_total_fail_count failed ($at_xfail_count expected failures)." ;;
  esac

  if test $at_skip_count = 0 && test $at_run_count -gt 1; then
    at_result="All $at_result"
  fi
fi

# Now put skips in the mix.
case $at_skip_count in
  0) ;;
  1) at_result="$at_result
1 test was skipped." ;;
  *) at_result="$at_result
$at_skip_count tests were skipped." ;;
esac

if test $at_unexpected_count = 0; then
  echo "$at_color$at_result$at_std"
  echo "$at_result" >&5
else
  echo "${at_color}ERROR: $at_result$at_std" >&2
  echo "ERROR: $at_result" >&5
  {
    echo
    printf "%s\n" "## ------------------------ ##
## Summary of the failures. ##
## ------------------------ ##"

    # Summary of failed and skipped tests.
    if test $at_fail_count != 0; then
      echo "Failed tests:"
      $SHELL "$at_myself" $at_fail_list --list
      echo
    fi
    if test $at_skip_count != 0; then
      echo "Skipped tests:"
      $SHELL "$at_myself" $at_skip_list --list
      echo
    fi
    if test $at_xpass_count != 0; then
      echo "Unexpected passes:"
      $SHELL "$at_myself" $at_xpass_list --list
      echo
    fi
    if test $at_fail_count != 0; then
      printf "%s\n" "## ---------------------- ##
## Detailed failed tests. ##
## ---------------------- ##"
      echo
      for at_group in $at_fail_list
      do
	at_group_normalized=$at_group

  eval 'while :; do
    case $at_group_normalized in #(
    '"$at_format"'*) break;;
    esac
    at_group_normalized=0$at_group_normalized
  done'

	cat "$at_suite_dir/$at_group_normalized/$as_me.log"
	echo
      done
      echo
    fi
    if test -n "$at_top_srcdir"; then
      sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## ${at_top_build_prefix}config.log ##
_ASBOX
      sed 's/^/| /' ${at_top_build_prefix}config.log
      echo
    fi
  } >&5

  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## $as_me.log was created. ##
_ASBOX

  echo
  if $at_debug_p; then
    at_msg='per-test log files'
  else
    at_msg="\`${at_testdir+${at_testdir}/}$as_me.log'"
  fi
  at_msg1a=${at_xpass_list:+', '}
  at_msg1=$at_fail_list${at_fail_list:+" failed$at_msg1a"}
  at_msg2=$at_xpass_list${at_xpass_list:+" passed unexpectedly"}

  printf "%s\n" "Please send $at_msg and all information you think might help:

   To: <bugs@openvswitch.org>
   Subject: [openvswitch 2.17.12] $as_me: $at_msg1$at_msg2

You may investigate any problem if you feel able to do so, in which
case the test suite provides a good starting point.  Its output may
be found below \`${at_testdir+${at_testdir}/}$as_me.dir'.
"
  exit 1
fi

exit 0

## ------------- ##
## Actual tests. ##
## ------------- ##
#AT_START_1
at_fn_group_banner 1 'ovsdb-execution.at:147' \
  "block insert on read only DB" "                   " 1
at_xfail=no
(
  printf "%s\n" "1. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:147: test-ovsdb execute-readonly \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {}}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:147"
( $at_check_trace; test-ovsdb execute-readonly "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {}}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:147"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:147: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:147"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"details\":\"insert operation not allowed when database server is in read only mode\",\"error\":\"not allowed\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:147"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_1
#AT_START_2
at_fn_group_banner 2 'ovsdb-execution.at:156' \
  "allow select on read only DB" "                   " 1
at_xfail=no
(
  printf "%s\n" "2. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:156: test-ovsdb execute-readonly \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": []}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:156"
( $at_check_trace; test-ovsdb execute-readonly "`ordinal_schema`"  '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:156"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:156: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:156"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"rows\":[]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:156"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_2
#AT_START_3
at_fn_group_banner 3 'ovsdb-execution.at:185' \
  "uuid-name must be <id>" "                         " 1
at_xfail=no
(
  printf "%s\n" "3. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:185: test-ovsdb execute \"\`constraint_schema\`\"  '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {},
       \"uuid-name\": \"0\"}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:185"
( $at_check_trace; test-ovsdb execute "`constraint_schema`"  '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {},
       "uuid-name": "0"}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:185"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:185: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:185"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"details\":\"Parsing ovsdb operation 1 of 1 failed: Type mismatch for member 'uuid-name'.\",\"error\":\"syntax error\",\"syntax\":\"{\\\"op\\\":\\\"insert\\\",\\\"row\\\":{},\\\"table\\\":\\\"a\\\",\\\"uuid-name\\\":\\\"0\\\"}\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:185"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_3
#AT_START_4
at_fn_group_banner 4 'ovsdb-execution.at:195' \
  "named-uuid must be <id>" "                        " 1
at_xfail=no
(
  printf "%s\n" "4. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:195: test-ovsdb execute \"\`constraint_schema\`\"  '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a2a\": [\"named-uuid\", \"0\"]}}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:195"
( $at_check_trace; test-ovsdb execute "`constraint_schema`"  '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a2a": ["named-uuid", "0"]}}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:195"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:195: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:195"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"details\":\"named-uuid string is not a valid <id>\",\"error\":\"syntax error\",\"syntax\":\"[\\\"named-uuid\\\",\\\"0\\\"]\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:195"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_4
#AT_START_5
at_fn_group_banner 5 'ovsdb-execution.at:204' \
  "duplicate uuid-name not allowed" "                " 1
at_xfail=no
(
  printf "%s\n" "5. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {},
       \"uuid-name\": \"x\"},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {},
       \"uuid-name\": \"x\"}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {},
       "uuid-name": "x"},
      {"op": "insert",
       "table": "ordinals",
       "row": {},
       "uuid-name": "x"}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"details\":\"This \\\"uuid-name\\\" appeared on an earlier \\\"insert\\\" operation.\",\"error\":\"duplicate uuid-name\",\"syntax\":\"\\\"x\\\"\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_5
#AT_START_6
at_fn_group_banner 6 'ovsdb-execution.at:1204' \
  "insert default row, query table" "                " 1
at_xfail=no
(
  printf "%s\n" "6. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {}}]' '[\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": []}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"_version\":[\"uuid\",\"<1>\"],\"name\":\"\",\"number\":0}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_6
#AT_START_7
at_fn_group_banner 7 'ovsdb-execution.at:1204' \
  "insert row, query table" "                        " 1
at_xfail=no
(
  printf "%s\n" "7. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}}]' '[\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": []}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"_version\":[\"uuid\",\"<1>\"],\"name\":\"zero\",\"number\":0}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_7
#AT_START_8
at_fn_group_banner 8 'ovsdb-execution.at:1204' \
  "insert row with uuid, query table" "              " 1
at_xfail=no
(
  printf "%s\n" "8. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"uuid\": \"ffffffff-971b-4cba-bf42-520515973b7e\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}}]' '   [\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": []}]' '   [\"ordinals\",
      {\"op\": \"insert\",
       \"uuid\": \"ffffffff-971b-4cba-bf42-520515973b7e\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '   ["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]' '   ["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"ffffffff-971b-4cba-bf42-520515973b7e\"]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"ffffffff-971b-4cba-bf42-520515973b7e\"],\"_version\":[\"uuid\",\"<0>\"],\"name\":\"zero\",\"number\":0}]}]
[{\"details\":\"This UUID would duplicate a UUID already present within the table or deleted within the same transaction.\",\"error\":\"duplicate uuid\",\"syntax\":\"\\\"ffffffff-971b-4cba-bf42-520515973b7e\\\"\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_8
#AT_START_9
at_fn_group_banner 9 'ovsdb-execution.at:1204' \
  "insert rows, query by value" "                    " 1
at_xfail=no
(
  printf "%s\n" "9. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}}]' '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"}}]' '[\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [[\"name\", \"==\", \"zero\"]]}]' '[\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [[\"name\", \"==\", \"one\"]]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"uuid\":[\"uuid\",\"<1>\"]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"_version\":[\"uuid\",\"<2>\"],\"name\":\"zero\",\"number\":0}]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<1>\"],\"_version\":[\"uuid\",\"<3>\"],\"name\":\"one\",\"number\":1}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_9
#AT_START_10
at_fn_group_banner 10 'ovsdb-execution.at:1204' \
  "insert rows, query by named-uuid" "               " 1
at_xfail=no
(
  printf "%s\n" "10. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"},
       \"uuid-name\": \"first\"},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"},
       \"uuid-name\": \"second\"},
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [[\"_uuid\", \"==\", [\"named-uuid\", \"first\"]]]},
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [[\"_uuid\", \"==\", [\"named-uuid\", \"second\"]]]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "second"]]]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"_version\":[\"uuid\",\"<2>\"],\"name\":\"zero\",\"number\":0}]},{\"rows\":[{\"_uuid\":[\"uuid\",\"<1>\"],\"_version\":[\"uuid\",\"<3>\"],\"name\":\"one\",\"number\":1}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_10
#AT_START_11
at_fn_group_banner 11 'ovsdb-execution.at:1204' \
  "insert rows, update rows by value" "              " 1
at_xfail=no
(
  printf "%s\n" "11. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"},
       \"uuid-name\": \"first\"}]' '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"},
       \"uuid-name\": \"first\"}]' '[\"ordinals\",
      {\"op\": \"update\",
       \"table\": \"ordinals\",
       \"where\": [[\"name\", \"==\", \"zero\"]],
       \"row\": {\"name\": \"nought\"}}]' '[\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [],
       \"sort\": [\"number\"]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "row": {"name": "nought"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"uuid\":[\"uuid\",\"<1>\"]}]
[{\"count\":1}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"_version\":[\"uuid\",\"<2>\"],\"name\":\"nought\",\"number\":0},{\"_uuid\":[\"uuid\",\"<1>\"],\"_version\":[\"uuid\",\"<3>\"],\"name\":\"one\",\"number\":1}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_11
#AT_START_12
at_fn_group_banner 12 'ovsdb-execution.at:1204' \
  "insert rows, mutate rows" "                       " 1
at_xfail=no
(
  printf "%s\n" "12. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"},
       \"uuid-name\": \"first\"}]' '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"},
       \"uuid-name\": \"first\"}]' '[\"ordinals\",
      {\"op\": \"mutate\",
       \"table\": \"ordinals\",
       \"where\": [[\"name\", \"==\", \"zero\"]],
       \"mutations\": [[\"number\", \"+=\", 2]]}]' '[\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [],
       \"sort\": [\"number\"]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "mutations": [["number", "+=", 2]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"uuid\":[\"uuid\",\"<1>\"]}]
[{\"count\":1}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<1>\"],\"_version\":[\"uuid\",\"<2>\"],\"name\":\"one\",\"number\":1},{\"_uuid\":[\"uuid\",\"<0>\"],\"_version\":[\"uuid\",\"<3>\"],\"name\":\"zero\",\"number\":2}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_12
#AT_START_13
at_fn_group_banner 13 'ovsdb-execution.at:1204' \
  "insert rows, delete by named-uuid" "              " 1
at_xfail=no
(
  printf "%s\n" "13. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"},
       \"uuid-name\": \"first\"},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"},
       \"uuid-name\": \"second\"},
      {\"op\": \"delete\",
       \"table\": \"ordinals\",
       \"where\": [[\"_uuid\", \"==\", [\"named-uuid\", \"first\"]]]},
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [],
       \"columns\": [\"name\",\"number\"]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{\"count\":1},{\"rows\":[{\"name\":\"one\",\"number\":1}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_13
#AT_START_14
at_fn_group_banner 14 'ovsdb-execution.at:1204' \
  "insert rows, delete rows by value" "              " 1
at_xfail=no
(
  printf "%s\n" "14. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"},
       \"uuid-name\": \"first\"}]' '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"},
       \"uuid-name\": \"first\"}]' '[\"ordinals\",
      {\"op\": \"delete\",
       \"table\": \"ordinals\",
       \"where\": [[\"name\", \"==\", \"zero\"]]}]' '[\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": []}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"uuid\":[\"uuid\",\"<1>\"]}]
[{\"count\":1}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<1>\"],\"_version\":[\"uuid\",\"<2>\"],\"name\":\"one\",\"number\":1}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_14
#AT_START_15
at_fn_group_banner 15 'ovsdb-execution.at:1204' \
  "insert rows, delete by (non-matching) value" "    " 1
at_xfail=no
(
  printf "%s\n" "15. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"},
       \"uuid-name\": \"first\"}]' '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"},
       \"uuid-name\": \"first\"}]' '[\"ordinals\",
      {\"op\": \"delete\",
       \"table\": \"ordinals\",
       \"where\": [[\"name\", \"==\", \"nought\"]]}]' '[\"ordinals\",
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [],
       \"sort\": [\"number\"]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "nought"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"uuid\":[\"uuid\",\"<1>\"]}]
[{\"count\":0}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"_version\":[\"uuid\",\"<2>\"],\"name\":\"zero\",\"number\":0},{\"_uuid\":[\"uuid\",\"<1>\"],\"_version\":[\"uuid\",\"<3>\"],\"name\":\"one\",\"number\":1}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_15
#AT_START_16
at_fn_group_banner 16 'ovsdb-execution.at:1204' \
  "insert rows, delete all" "                        " 1
at_xfail=no
(
  printf "%s\n" "16. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"},
       \"uuid-name\": \"first\"},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"},
       \"uuid-name\": \"second\"},
      {\"op\": \"delete\",
       \"table\": \"ordinals\",
       \"where\": []},
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [],
       \"columns\": [\"name\",\"number\"]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{\"count\":2},{\"rows\":[]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_16
#AT_START_17
at_fn_group_banner 17 'ovsdb-execution.at:1204' \
  "insert row, query table, commit" "                " 1
at_xfail=no
(
  printf "%s\n" "17. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}},
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": []},
      {\"op\": \"commit\",
       \"durable\": false}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": false}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"_version\":[\"uuid\",\"<1>\"],\"name\":\"zero\",\"number\":0}]},{}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_17
#AT_START_18
at_fn_group_banner 18 'ovsdb-execution.at:1204' \
  "insert row, query table, commit durably" "        " 1
at_xfail=no
(
  printf "%s\n" "18. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}},
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": []},
      {\"op\": \"commit\",
       \"durable\": true}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": true}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"_version\":[\"uuid\",\"<1>\"],\"name\":\"zero\",\"number\":0}]},{}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_18
#AT_START_19
at_fn_group_banner 19 'ovsdb-execution.at:1204' \
  "equality wait with correct rows" "                " 1
at_xfail=no
(
  printf "%s\n" "19. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"}},
      {\"op\": \"wait\",
       \"timeout\": 0,
       \"table\": \"ordinals\",
       \"where\": [],
       \"columns\": [\"name\", \"number\"],
       \"until\": \"==\",
       \"rows\": [{\"name\": \"zero\", \"number\": 0},
                {\"name\": \"one\", \"number\": 1}]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_19
#AT_START_20
at_fn_group_banner 20 'ovsdb-execution.at:1204' \
  "equality wait with extra row" "                   " 1
at_xfail=no
(
  printf "%s\n" "20. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"}},
      {\"op\": \"wait\",
       \"timeout\": 0,
       \"table\": \"ordinals\",
       \"where\": [],
       \"columns\": [\"name\", \"number\"],
       \"until\": \"==\",
       \"rows\": [{\"name\": \"zero\", \"number\": 0},
                {\"name\": \"one\", \"number\": 1},
                {\"name\": \"two\", \"number\": 2}]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{\"details\":\"\\\"where\\\" clause test failed\",\"error\":\"timed out\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_20
#AT_START_21
at_fn_group_banner 21 'ovsdb-execution.at:1204' \
  "equality wait with missing row" "                 " 1
at_xfail=no
(
  printf "%s\n" "21. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"}},
      {\"op\": \"wait\",
       \"timeout\": 0,
       \"table\": \"ordinals\",
       \"where\": [],
       \"columns\": [\"name\", \"number\"],
       \"until\": \"==\",
       \"rows\": [{\"name\": \"one\", \"number\": 1}]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "one", "number": 1}]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{\"details\":\"\\\"where\\\" clause test failed\",\"error\":\"timed out\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_21
#AT_START_22
at_fn_group_banner 22 'ovsdb-execution.at:1204' \
  "inequality wait with correct rows" "              " 1
at_xfail=no
(
  printf "%s\n" "22. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"}},
      {\"op\": \"wait\",
       \"timeout\": 0,
       \"table\": \"ordinals\",
       \"where\": [],
       \"columns\": [\"name\", \"number\"],
       \"until\": \"!=\",
       \"rows\": [{\"name\": \"zero\", \"number\": 0},
                {\"name\": \"one\", \"number\": 1}]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{\"details\":\"\\\"where\\\" clause test failed\",\"error\":\"timed out\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_22
#AT_START_23
at_fn_group_banner 23 'ovsdb-execution.at:1204' \
  "inequality wait with extra row" "                 " 1
at_xfail=no
(
  printf "%s\n" "23. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"}},
      {\"op\": \"wait\",
       \"timeout\": 0,
       \"table\": \"ordinals\",
       \"where\": [],
       \"columns\": [\"name\", \"number\"],
       \"until\": \"!=\",
       \"rows\": [{\"name\": \"zero\", \"number\": 0},
                {\"name\": \"one\", \"number\": 1},
                {\"name\": \"two\", \"number\": 2}]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_23
#AT_START_24
at_fn_group_banner 24 'ovsdb-execution.at:1204' \
  "inequality wait with missing row" "               " 1
at_xfail=no
(
  printf "%s\n" "24. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 0, \"name\": \"zero\"}},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"}},
      {\"op\": \"wait\",
       \"timeout\": 0,
       \"table\": \"ordinals\",
       \"where\": [],
       \"columns\": [\"name\", \"number\"],
       \"until\": \"!=\",
       \"rows\": [{\"name\": \"one\", \"number\": 1}]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "one", "number": 1}]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_24
#AT_START_25
at_fn_group_banner 25 'ovsdb-execution.at:1204' \
  "insert and update constraints" "                  " 1
at_xfail=no
(
  printf "%s\n" "25. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`constraint_schema\`\"  '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"constrained\",
       \"row\": {}}]' '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"constrained\",
       \"row\": {\"positive\": -1}}]' '[\"constraints\",
      {\"op\": \"update\",
       \"table\": \"constrained\",
       \"where\": [],
       \"row\": {\"positive\": -2}}]' '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"constrained\",
       \"row\": {\"positive\": 1}}]' '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"constrained\",
       \"row\": {\"positive\": 2}}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`constraint_schema`"  '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": -1}}]' '["constraints",
      {"op": "update",
       "table": "constrained",
       "where": [],
       "row": {"positive": -2}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 1}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 2}}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"details\":\"0 is less than minimum allowed value 1\",\"error\":\"constraint violation\"}]
[{\"details\":\"-1 is less than minimum allowed value 1\",\"error\":\"constraint violation\"}]
[{\"details\":\"-2 is less than minimum allowed value 1\",\"error\":\"constraint violation\"}]
[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"uuid\":[\"uuid\",\"<1>\"]},{\"details\":\"transaction causes \\\"constrained\\\" table to contain 2 rows, greater than the schema-defined limit of 1 row(s)\",\"error\":\"constraint violation\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_25
#AT_START_26
at_fn_group_banner 26 'ovsdb-execution.at:1204' \
  "index uniqueness checking" "                      " 1
at_xfail=no
(
  printf "%s\n" "26. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`ordinal_schema\`\"  '[\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"}}]' '   [\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"another one\"}}]' '   [\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"another one\"}},
      {\"op\": \"delete\",
       \"table\": \"ordinals\",
       \"where\": [[\"name\", \"==\", \"one\"]]}]' '   [\"ordinals\",
      {\"op\": \"delete\",
       \"table\": \"ordinals\",
       \"where\": []},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"one\"}},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"still another one\"}}]' '   [\"ordinals\",
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 2, \"name\": \"two\"}}]' '   [\"ordinals\",
      {\"op\": \"update\",
       \"table\": \"ordinals\",
       \"where\": [],
       \"row\": {\"number\": 3}}]' '   [\"ordinals\",
      {\"op\": \"update\",
       \"table\": \"ordinals\",
       \"where\": [[\"number\", \"==\", 1]],
       \"row\": {\"number\": 2, \"name\": \"old two\"}},
      {\"op\": \"update\",
       \"table\": \"ordinals\",
       \"where\": [[\"name\", \"==\", \"two\"]],
       \"row\": {\"number\": 1, \"name\": \"old one\"}}]' '   [\"ordinals\",
      {\"op\": \"mutate\",
       \"table\": \"ordinals\",
       \"where\": [],
       \"mutations\": [[\"number\", \"*=\", 10]]},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 1, \"name\": \"new one\"}},
      {\"op\": \"insert\",
       \"table\": \"ordinals\",
       \"row\": {\"number\": 2, \"name\": \"new two\"}},
      {\"op\": \"select\",
       \"table\": \"ordinals\",
       \"where\": [],
       \"columns\": [\"number\", \"name\"],
       \"sort\": [\"number\"]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`ordinal_schema`"  '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}},
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]' '   ["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "still another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "two"}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [],
       "row": {"number": 3}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["number", "==", 1]],
       "row": {"number": 2, "name": "old two"}},
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "two"]],
       "row": {"number": 1, "name": "old one"}}]' '   ["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [],
       "mutations": [["number", "*=", 10]]},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "new one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "new two"}},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["number", "name"],
       "sort": ["number"]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"uuid\":[\"uuid\",\"<1>\"]},{\"details\":\"Transaction causes multiple rows in \\\"ordinals\\\" table to have identical values (1) for index on column \\\"number\\\".  First row, with UUID <0>, existed in the database before this transaction and was not modified by the transaction.  Second row, with UUID <1>, was inserted by this transaction.\",\"error\":\"constraint violation\"}]
[{\"uuid\":[\"uuid\",\"<2>\"]},{\"count\":1}]
[{\"count\":1},{\"uuid\":[\"uuid\",\"<3>\"]},{\"uuid\":[\"uuid\",\"<4>\"]},{\"details\":\"Transaction causes multiple rows in \\\"ordinals\\\" table to have identical values (1) for index on column \\\"number\\\".  First row, with UUID <4>, was inserted by this transaction.  Second row, with UUID <3>, was inserted by this transaction.\",\"error\":\"constraint violation\"}]
[{\"uuid\":[\"uuid\",\"<5>\"]}]
[{\"count\":2},{\"details\":\"Transaction causes multiple rows in \\\"ordinals\\\" table to have identical values (3) for index on column \\\"number\\\".  First row, with UUID <5>, had the following index values before the transaction: 2.  Second row, with UUID <2>, had the following index values before the transaction: 1.\",\"error\":\"constraint violation\"}]
[{\"count\":1},{\"count\":1}]
[{\"count\":2},{\"uuid\":[\"uuid\",\"<6>\"]},{\"uuid\":[\"uuid\",\"<7>\"]},{\"rows\":[{\"name\":\"new one\",\"number\":1},{\"name\":\"new two\",\"number\":2},{\"name\":\"old one\",\"number\":10},{\"name\":\"old two\",\"number\":20}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_26
#AT_START_27
at_fn_group_banner 27 'ovsdb-execution.at:1204' \
  "size constraints on sets" "                       " 1
at_xfail=no
(
  printf "%s\n" "27. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`constraint_schema\`\"  '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"b\",
       \"row\": {\"b\": 1}
      }]' '[\"constraints\",
      {\"op\": \"mutate\",
       \"table\": \"b\",
       \"where\": [],
       \"mutations\": [[\"x\", \"delete\", 0]]
      }]' '[\"constraints\",
      {\"op\": \"mutate\",
       \"table\": \"b\",
       \"where\": [],
       \"mutations\": [[\"x\", \"insert\", 1]]
      }]' '[\"constraints\",
      {\"op\": \"update\",
       \"table\": \"b\",
       \"where\": [],
       \"row\": {\"x\": [\"set\", [3, 4]]}
      }]' '[\"constraints\",
      {\"op\": \"mutate\",
       \"table\": \"b\",
       \"where\": [],
       \"mutations\": [[\"x\", \"insert\", 5]]
      }]' '[\"constraints\",
      {\"op\": \"mutate\",
       \"table\": \"b\",
       \"where\": [],
       \"mutations\": [[\"x\", \"delete\", 4], [\"x\", \"insert\", 5]]
      }]
  '"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`constraint_schema`"  '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 0]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 1]]
      }]' '["constraints",
      {"op": "update",
       "table": "b",
       "where": [],
       "row": {"x": ["set", [3, 4]]}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 5]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 4], ["x", "insert", 5]]
      }]
  '
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"details\":\"Attempted to store 0 elements in set of 1 to 2 integers.\",\"error\":\"constraint violation\"}]
[{\"count\":1}]
[{\"count\":1}]
[{\"details\":\"Attempted to store 3 elements in set of 1 to 2 integers.\",\"error\":\"constraint violation\"}]
[{\"count\":1}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_27
#AT_START_28
at_fn_group_banner 28 'ovsdb-execution.at:1204' \
  "referential integrity -- simple" "                " 1
at_xfail=no
(
  printf "%s\n" "28. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`constraint_schema\`\"  '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"b\",
       \"row\": {\"b\": 1},
       \"uuid-name\": \"brow\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 0,
               \"a2b\": [\"set\", [[\"named-uuid\", \"brow\"]]]}},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 1,
               \"a2b\": [\"set\", [[\"named-uuid\", \"brow\"]]]}},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 2,
               \"a2b\": [\"set\", [[\"named-uuid\", \"brow\"]]]}}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"b\",
       \"where\": []}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 0]]}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"b\",
       \"where\": []}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 1]]}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"b\",
       \"where\": []}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 2]]}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"b\",
       \"where\": []}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`constraint_schema`"  '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1},
       "uuid-name": "brow"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2b": ["set", [["named-uuid", "brow"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{\"uuid\":[\"uuid\",\"<2>\"]},{\"uuid\":[\"uuid\",\"<3>\"]}]
[{\"count\":1},{\"details\":\"cannot delete b row <0> because of 3 remaining reference(s)\",\"error\":\"referential integrity violation\"}]
[{\"count\":1}]
[{\"count\":1},{\"details\":\"cannot delete b row <0> because of 2 remaining reference(s)\",\"error\":\"referential integrity violation\"}]
[{\"count\":1}]
[{\"count\":1},{\"details\":\"cannot delete b row <0> because of 1 remaining reference(s)\",\"error\":\"referential integrity violation\"}]
[{\"count\":1}]
[{\"count\":1}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_28
#AT_START_29
at_fn_group_banner 29 'ovsdb-execution.at:1204' \
  "referential integrity -- mutual references" "     " 1
at_xfail=no
(
  printf "%s\n" "29. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`constraint_schema\`\"  '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 0,
               \"a2b\": [\"set\", [[\"named-uuid\", \"row2\"]]],
               \"a2a\": [\"set\", [[\"named-uuid\", \"row1\"]]]},
       \"uuid-name\": \"row1\"},
      {\"op\": \"insert\",
       \"table\": \"b\",
       \"row\": {\"b\": 1,
               \"b2b\": [\"set\", [[\"named-uuid\", \"row2\"]]],
               \"b2a\": [\"set\", [[\"named-uuid\", \"row1\"]]]},
       \"uuid-name\": \"row2\"}]' '[\"constraints\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a2b\": [\"set\", [[\"uuid\", \"b516b960-5b19-4fc2-bb82-fe1cbd6d0241\"]]]}}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 0]]}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"b\",
       \"where\": [[\"b\", \"==\", 1]]}]' '   [\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 0]]}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"b\",
       \"where\": [[\"b\", \"==\", 1]]}]' '[\"constraints\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 0]]},
      {\"op\": \"delete\",
       \"table\": \"b\",
       \"where\": [[\"b\", \"==\", 1]]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`constraint_schema`"  '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "row2"]]],
               "a2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 1,
               "b2b": ["set", [["named-uuid", "row2"]]],
               "b2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row2"}]' '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a2b": ["set", [["uuid", "b516b960-5b19-4fc2-bb82-fe1cbd6d0241"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '   ["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]},
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]}]
[{\"uuid\":[\"uuid\",\"<2>\"]},{\"details\":\"Table a column a2b row <2> references nonexistent row <3> in table b.\",\"error\":\"referential integrity violation\"}]
[{\"count\":1},{\"details\":\"cannot delete a row <0> because of 1 remaining reference(s)\",\"error\":\"referential integrity violation\"}]
[{\"count\":1},{\"details\":\"cannot delete b row <1> because of 1 remaining reference(s)\",\"error\":\"referential integrity violation\"}]
[{\"count\":1},{\"details\":\"cannot delete a row <0> because of 1 remaining reference(s)\",\"error\":\"referential integrity violation\"}]
[{\"count\":1},{\"details\":\"cannot delete b row <1> because of 1 remaining reference(s)\",\"error\":\"referential integrity violation\"}]
[{\"count\":1},{\"count\":1}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_29
#AT_START_30
at_fn_group_banner 30 'ovsdb-execution.at:1204' \
  "weak references" "                                " 1
at_xfail=no
(
  printf "%s\n" "30. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`weak_schema\`\"  '[\"weak\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 0,
               \"a2a\": [\"set\", [[\"named-uuid\", \"row1\"],
                               [\"named-uuid\", \"row2\"],
                               [\"uuid\", \"0e767b36-6822-4044-8307-d58467e04669\"]]],
               \"a2a1\": [\"named-uuid\", \"row1\"],
               \"a2b\": [\"named-uuid\", \"row3\"]},
       \"uuid-name\": \"row1\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 1,
               \"a2a\": [\"set\", [[\"named-uuid\", \"row1\"],
                               [\"named-uuid\", \"row2\"]]],
               \"a2a1\": [\"named-uuid\", \"row2\"],
               \"a2b\": [\"named-uuid\", \"row3\"]},
       \"uuid-name\": \"row2\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 2,
               \"a2a\": [\"set\", [[\"named-uuid\", \"row1\"],
                               [\"named-uuid\", \"row2\"]]],
               \"a2a1\": [\"named-uuid\", \"row2\"],
               \"a2b\": [\"named-uuid\", \"row4\"]}},
      {\"op\": \"insert\",
       \"table\": \"b\",
       \"row\": {\"b\": 2,
               \"b2a\": [\"named-uuid\", \"row1\"]},
       \"uuid-name\": \"row3\"},
      {\"op\": \"insert\",
       \"table\": \"b\",
       \"row\": {\"b\": 3,
               \"b2a\": [\"named-uuid\", \"row2\"]},
       \"uuid-name\": \"row4\"}]' '      [\"weak\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"_uuid\", \"a2a\", \"a2a1\", \"a2b\"],
       \"sort\": [\"a\"]}]' '[\"weak\",
      {\"op\": \"select\",
       \"table\": \"b\",
       \"where\": [],
       \"columns\": [\"_uuid\", \"b\", \"b2a\"],
       \"sort\": [\"b\"]}]' '      [\"weak\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a2a1\": [\"named-uuid\", \"me\"]},
       \"uuid-name\": \"me\"}]' '      [\"weak\",
      {\"op\": \"delete\",
       \"table\": \"b\",
       \"where\": [[\"b\", \"==\", 3]]}]' '      [\"weak\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 1]]}]' '      [\"weak\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 2]]}]' '[\"weak\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"_uuid\", \"a2a\", \"a2a1\", \"a2b\"],
       \"sort\": [\"a\"]}]' '[\"weak\",
      {\"op\": \"select\",
       \"table\": \"b\",
       \"where\": [],
       \"columns\": [\"_uuid\", \"b\", \"b2a\"],
       \"sort\": [\"b\"]}]' '   [\"weak\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 0]]}]' '[\"weak\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"_uuid\", \"a2a\", \"a2a1\", \"a2b\"],
       \"sort\": [\"a\"]}]' '[\"weak\",
      {\"op\": \"select\",
       \"table\": \"b\",
       \"where\": [],
       \"columns\": [\"_uuid\", \"b\", \"b2a\"],
       \"sort\": [\"b\"]}]' '   [\"weak\",
      {\"op\": \"delete\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 1]]}]' '[\"weak\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"_uuid\", \"a2a\", \"a2a1\", \"a2b\"],
       \"sort\": [\"a\"]}]' '[\"weak\",
      {\"op\": \"select\",
       \"table\": \"b\",
       \"where\": [],
       \"columns\": [\"_uuid\", \"b\", \"b2a\"],
       \"sort\": [\"b\"]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`weak_schema`"  '["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"],
                               ["uuid", "0e767b36-6822-4044-8307-d58467e04669"]]],
               "a2a1": ["named-uuid", "row1"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row4"]}},
      {"op": "insert",
       "table": "b",
       "row": {"b": 2,
               "b2a": ["named-uuid", "row1"]},
       "uuid-name": "row3"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 3,
               "b2a": ["named-uuid", "row2"]},
       "uuid-name": "row4"}]' '      ["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '      ["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a2a1": ["named-uuid", "me"]},
       "uuid-name": "me"}]' '      ["weak",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 3]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]},{\"uuid\":[\"uuid\",\"<1>\"]},{\"uuid\":[\"uuid\",\"<2>\"]},{\"uuid\":[\"uuid\",\"<3>\"]},{\"uuid\":[\"uuid\",\"<4>\"]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"a2a\":[\"set\",[[\"uuid\",\"<0>\"],[\"uuid\",\"<1>\"]]],\"a2a1\":[\"uuid\",\"<0>\"],\"a2b\":[\"uuid\",\"<3>\"]},{\"_uuid\":[\"uuid\",\"<1>\"],\"a2a\":[\"set\",[[\"uuid\",\"<0>\"],[\"uuid\",\"<1>\"]]],\"a2a1\":[\"uuid\",\"<1>\"],\"a2b\":[\"uuid\",\"<3>\"]},{\"_uuid\":[\"uuid\",\"<2>\"],\"a2a\":[\"set\",[[\"uuid\",\"<0>\"],[\"uuid\",\"<1>\"]]],\"a2a1\":[\"uuid\",\"<1>\"],\"a2b\":[\"uuid\",\"<4>\"]}]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<3>\"],\"b\":2,\"b2a\":[\"uuid\",\"<0>\"]},{\"_uuid\":[\"uuid\",\"<4>\"],\"b\":3,\"b2a\":[\"uuid\",\"<1>\"]}]}]
[{\"uuid\":[\"uuid\",\"<5>\"]},{\"details\":\"Weak reference column \\\"a2b\\\" in \\\"a\\\" row <5> (inserted within this transaction) contained all-zeros UUID (probably as the default value for this column) but deleting this value caused a constraint volation because this column is not allowed to be empty.\",\"error\":\"constraint violation\"}]
[{\"count\":1},{\"details\":\"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \\\"a2b\\\" in \\\"a\\\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.\",\"error\":\"constraint violation\"}]
[{\"count\":1},{\"details\":\"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \\\"a2a1\\\" in \\\"a\\\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.\",\"error\":\"constraint violation\"}]
[{\"count\":1}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<0>\"],\"a2a\":[\"set\",[[\"uuid\",\"<0>\"],[\"uuid\",\"<1>\"]]],\"a2a1\":[\"uuid\",\"<0>\"],\"a2b\":[\"uuid\",\"<3>\"]},{\"_uuid\":[\"uuid\",\"<1>\"],\"a2a\":[\"set\",[[\"uuid\",\"<0>\"],[\"uuid\",\"<1>\"]]],\"a2a1\":[\"uuid\",\"<1>\"],\"a2b\":[\"uuid\",\"<3>\"]}]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<3>\"],\"b\":2,\"b2a\":[\"uuid\",\"<0>\"]},{\"_uuid\":[\"uuid\",\"<4>\"],\"b\":3,\"b2a\":[\"uuid\",\"<1>\"]}]}]
[{\"count\":1}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<1>\"],\"a2a\":[\"uuid\",\"<1>\"],\"a2a1\":[\"uuid\",\"<1>\"],\"a2b\":[\"uuid\",\"<3>\"]}]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<3>\"],\"b\":2,\"b2a\":[\"set\",[]]},{\"_uuid\":[\"uuid\",\"<4>\"],\"b\":3,\"b2a\":[\"uuid\",\"<1>\"]}]}]
[{\"count\":1}]
[{\"rows\":[]}]
[{\"rows\":[{\"_uuid\":[\"uuid\",\"<3>\"],\"b\":2,\"b2a\":[\"set\",[]]},{\"_uuid\":[\"uuid\",\"<4>\"],\"b\":3,\"b2a\":[\"set\",[]]}]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_30
#AT_START_31
at_fn_group_banner 31 'ovsdb-execution.at:1204' \
  "immutable columns" "                              " 1
at_xfail=no
(
  printf "%s\n" "31. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`immutable_schema\`\"  '[\"immutable\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"i\": 5},
       \"uuid-name\": \"row1\"}]' '[\"immutable\",
      {\"op\": \"update\",
       \"table\": \"a\",
       \"row\": {\"i\": 10},
       \"where\": []}]' '[\"immutable\",
      {\"op\": \"update\",
       \"table\": \"a\",
       \"row\": {\"i\": 5},
       \"where\": []}]' '[\"immutable\",
      {\"op\": \"mutate\",
       \"table\": \"a\",
       \"where\": [],
       \"mutations\": [[\"i\", \"-=\", 5]]}]' '[\"immutable\",
      {\"op\": \"mutate\",
       \"table\": \"a\",
       \"where\": [],
       \"mutations\": [[\"i\", \"*=\", 1]]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`immutable_schema`"  '["immutable",
      {"op": "insert",
       "table": "a",
       "row": {"i": 5},
       "uuid-name": "row1"}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 10},
       "where": []}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 5},
       "where": []}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "-=", 5]]}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "*=", 1]]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"details\":\"Cannot update immutable column i in table a.\",\"error\":\"constraint violation\",\"syntax\":\"{\\\"op\\\":\\\"update\\\",\\\"row\\\":{\\\"i\\\":10},\\\"table\\\":\\\"a\\\",\\\"where\\\":[]}\"}]
[{\"details\":\"Cannot update immutable column i in table a.\",\"error\":\"constraint violation\",\"syntax\":\"{\\\"op\\\":\\\"update\\\",\\\"row\\\":{\\\"i\\\":5},\\\"table\\\":\\\"a\\\",\\\"where\\\":[]}\"}]
[{\"details\":\"Cannot mutate immutable column i in table a.\",\"error\":\"constraint violation\",\"syntax\":\"[\\\"i\\\",\\\"-=\\\",5]\"}]
[{\"details\":\"Cannot mutate immutable column i in table a.\",\"error\":\"constraint violation\",\"syntax\":\"[\\\"i\\\",\\\"*=\\\",1]\"}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_31
#AT_START_32
at_fn_group_banner 32 'ovsdb-execution.at:1204' \
  "garbage collection" "                             " 1
at_xfail=no
(
  printf "%s\n" "32. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: test-ovsdb execute \"\`gc_schema\`\"  '   [\"gc\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 0}}]' '[\"gc\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"a\"]}]' '      [\"gc\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 0, \"a2a\": [\"named-uuid\", \"row1\"]},
       \"uuid-name\": \"row0\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 1, \"a2a\": [\"named-uuid\", \"row2\"]},
       \"uuid-name\": \"row1\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 2, \"a2a\": [\"named-uuid\", \"row3\"]},
       \"uuid-name\": \"row2\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 3},
       \"uuid-name\": \"row3\"}]' '[\"gc\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"a\"]}]' '      [\"gc\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 4, \"a2a\": [\"named-uuid\", \"row5\"]},
       \"uuid-name\": \"row4\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 5, \"a2a\": [\"named-uuid\", \"row4\"]},
       \"uuid-name\": \"row5\"}]' '[\"gc\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"a\"],
       \"sort\": [\"a\"]}]' '   [\"gc\",
      {\"op\": \"update\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 4]],
       \"row\": {\"a2a\": [\"set\", []]}}]' '[\"gc\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"a\"]}]' '      [\"gc\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 6, \"wa2a\": [\"named-uuid\", \"row7\"]},
       \"uuid-name\": \"row6\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 7, \"wa2a\": [\"named-uuid\", \"row6\"]},
       \"uuid-name\": \"row7\"}]' '[\"gc\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"a\"]}]' '   [\"gc\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 8, \"a2a\": [\"named-uuid\", \"row9\"]},
       \"uuid-name\": \"row8\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 9, \"a2a\": [\"named-uuid\", \"row10\"]},
       \"uuid-name\": \"row9\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 10, \"a2a\": [\"named-uuid\", \"row11\"]},
       \"uuid-name\": \"row10\"},
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 11, \"a2a\": [\"named-uuid\", \"row8\"]},
       \"uuid-name\": \"row11\"}]' '[\"gc\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"a\"],
       \"sort\": [\"a\"]}]' '   [\"gc\",
      {\"op\": \"update\",
       \"table\": \"a\",
       \"where\": [[\"a\", \"==\", 9]],
       \"row\": {\"a2a\": [\"set\", []]}}]' '[\"gc\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"a\"]}]' '   [\"gc\",
      {\"op\": \"insert\",
       \"table\": \"a\",
       \"row\": {\"a\": 12, \"a2a\": [\"named-uuid\", \"self\"]},
       \"uuid-name\": \"self\"}]' '[\"gc\",
      {\"op\": \"select\",
       \"table\": \"a\",
       \"where\": [],
       \"columns\": [\"a\"]}]'"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-execution.at:1204"
( $at_check_trace; test-ovsdb execute "`gc_schema`"  '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0, "a2a": ["named-uuid", "row1"]},
       "uuid-name": "row0"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1, "a2a": ["named-uuid", "row2"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2, "a2a": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 3},
       "uuid-name": "row3"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 4, "a2a": ["named-uuid", "row5"]},
       "uuid-name": "row4"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 5, "a2a": ["named-uuid", "row4"]},
       "uuid-name": "row5"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 4]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 6, "wa2a": ["named-uuid", "row7"]},
       "uuid-name": "row6"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 7, "wa2a": ["named-uuid", "row6"]},
       "uuid-name": "row7"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 8, "a2a": ["named-uuid", "row9"]},
       "uuid-name": "row8"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 9, "a2a": ["named-uuid", "row10"]},
       "uuid-name": "row9"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 10, "a2a": ["named-uuid", "row11"]},
       "uuid-name": "row10"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 11, "a2a": ["named-uuid", "row8"]},
       "uuid-name": "row11"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 9]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 12, "a2a": ["named-uuid", "self"]},
       "uuid-name": "self"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; tee stdout <"$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   { set +x
printf "%s\n" "$at_srcdir/ovsdb-execution.at:1204: uuidfilt stdout"
at_fn_check_prepare_trace "ovsdb-execution.at:1204"
( $at_check_trace; uuidfilt stdout
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "[{\"uuid\":[\"uuid\",\"<0>\"]}]
[{\"rows\":[]}]
[{\"uuid\":[\"uuid\",\"<1>\"]},{\"uuid\":[\"uuid\",\"<2>\"]},{\"uuid\":[\"uuid\",\"<3>\"]},{\"uuid\":[\"uuid\",\"<4>\"]}]
[{\"rows\":[]}]
[{\"uuid\":[\"uuid\",\"<5>\"]},{\"uuid\":[\"uuid\",\"<6>\"]}]
[{\"rows\":[{\"a\":4},{\"a\":5}]}]
[{\"count\":1}]
[{\"rows\":[]}]
[{\"uuid\":[\"uuid\",\"<7>\"]},{\"uuid\":[\"uuid\",\"<8>\"]}]
[{\"rows\":[]}]
[{\"uuid\":[\"uuid\",\"<9>\"]},{\"uuid\":[\"uuid\",\"<10>\"]},{\"uuid\":[\"uuid\",\"<11>\"]},{\"uuid\":[\"uuid\",\"<12>\"]}]
[{\"rows\":[{\"a\":8},{\"a\":9},{\"a\":10},{\"a\":11}]}]
[{\"count\":1}]
[{\"rows\":[]}]
[{\"uuid\":[\"uuid\",\"<13>\"]}]
[{\"rows\":[]}]
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-execution.at:1204"
$at_failed && at_fn_log_failure
$at_traceon; }

   ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_32
#AT_START_33
at_fn_group_banner 33 'ovsdb-cluster.at:64' \
  "insert default row, query table - cluster of 1" " " 2
at_xfail=no
(
  printf "%s\n" "33. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"","number":0}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_33
#AT_START_34
at_fn_group_banner 34 'ovsdb-cluster.at:64' \
  "insert row, query table - cluster of 1" "         " 2
at_xfail=no
(
  printf "%s\n" "34. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_34
#AT_START_35
at_fn_group_banner 35 'ovsdb-cluster.at:64' \
  "insert row with uuid, query table - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "35. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","ffffffff-971b-4cba-bf42-520515973b7e"]}]
[{"rows":[{"_uuid":["uuid","ffffffff-971b-4cba-bf42-520515973b7e"],"_version":["uuid","<0>"],"name":"zero","number":0}]}]
[{"details":"This UUID would duplicate a UUID already present within the table or deleted within the same transaction.","error":"duplicate uuid","syntax":"\"ffffffff-971b-4cba-bf42-520515973b7e\""}]
' no '["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '   ["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]' '   ["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_35
#AT_START_36
at_fn_group_banner 36 'ovsdb-cluster.at:64' \
  "insert rows, query by value - cluster of 1" "     " 2
at_xfail=no
(
  printf "%s\n" "36. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_36
#AT_START_37
at_fn_group_banner 37 'ovsdb-cluster.at:64' \
  "insert rows, query by named-uuid - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "37. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]},{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "second"]]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_37
#AT_START_38
at_fn_group_banner 38 'ovsdb-cluster.at:64' \
  "insert rows, update rows by value - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "38. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"nought","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "row": {"name": "nought"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_38
#AT_START_39
at_fn_group_banner 39 'ovsdb-cluster.at:64' \
  "insert rows, mutate rows - cluster of 1" "        " 2
at_xfail=no
(
  printf "%s\n" "39. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<2>"],"name":"one","number":1},{"_uuid":["uuid","<0>"],"_version":["uuid","<3>"],"name":"zero","number":2}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "mutations": [["number", "+=", 2]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_39
#AT_START_40
at_fn_group_banner 40 'ovsdb-cluster.at:64' \
  "insert rows, delete by named-uuid - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "40. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":1},{"rows":[{"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_40
#AT_START_41
at_fn_group_banner 41 'ovsdb-cluster.at:64' \
  "insert rows, delete rows by value - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "41. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<2>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_41
#AT_START_42
at_fn_group_banner 42 'ovsdb-cluster.at:64' \
  "insert rows, delete by (non-matching) value - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "42. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":0}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "nought"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_42
#AT_START_43
at_fn_group_banner 43 'ovsdb-cluster.at:64' \
  "insert rows, delete all - cluster of 1" "         " 2
at_xfail=no
(
  printf "%s\n" "43. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":2},{"rows":[]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_43
#AT_START_44
at_fn_group_banner 44 'ovsdb-cluster.at:64' \
  "insert row, query table, commit - cluster of 1" " " 2
at_xfail=no
(
  printf "%s\n" "44. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": false}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_44
#AT_START_45
at_fn_group_banner 45 'ovsdb-cluster.at:64' \
  "insert row, query table, commit durably - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "45. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": true}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_45
#AT_START_46
at_fn_group_banner 46 'ovsdb-cluster.at:64' \
  "equality wait with correct rows - cluster of 1" " " 2
at_xfail=no
(
  printf "%s\n" "46. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_46
#AT_START_47
at_fn_group_banner 47 'ovsdb-cluster.at:64' \
  "equality wait with extra row - cluster of 1" "    " 2
at_xfail=no
(
  printf "%s\n" "47. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_47
#AT_START_48
at_fn_group_banner 48 'ovsdb-cluster.at:64' \
  "equality wait with missing row - cluster of 1" "  " 2
at_xfail=no
(
  printf "%s\n" "48. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_48
#AT_START_49
at_fn_group_banner 49 'ovsdb-cluster.at:64' \
  "inequality wait with correct rows - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "49. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_49
#AT_START_50
at_fn_group_banner 50 'ovsdb-cluster.at:64' \
  "inequality wait with extra row - cluster of 1" "  " 2
at_xfail=no
(
  printf "%s\n" "50. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_50
#AT_START_51
at_fn_group_banner 51 'ovsdb-cluster.at:64' \
  "inequality wait with missing row - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "51. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_51
#AT_START_52
at_fn_group_banner 52 'ovsdb-cluster.at:64' \
  "insert and update constraints - cluster of 1" "   " 2
at_xfail=no
(
  printf "%s\n" "52. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "constraint_schema" '[{"details":"0 is less than minimum allowed value 1","error":"constraint violation"}]
[{"details":"-1 is less than minimum allowed value 1","error":"constraint violation"}]
[{"details":"-2 is less than minimum allowed value 1","error":"constraint violation"}]
[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]},{"details":"transaction causes \"constrained\" table to contain 2 rows, greater than the schema-defined limit of 1 row(s)","error":"constraint violation"}]
' no '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": -1}}]' '["constraints",
      {"op": "update",
       "table": "constrained",
       "where": [],
       "row": {"positive": -2}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 1}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 2}}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_52
#AT_START_53
at_fn_group_banner 53 'ovsdb-cluster.at:64' \
  "index uniqueness checking - cluster of 1" "       " 2
at_xfail=no
(
  printf "%s\n" "53. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (1) for index on column \"number\".  First row, with UUID <0>, existed in the database before this transaction and was not modified by the transaction.  Second row, with UUID <1>, was inserted by this transaction.","error":"constraint violation"}]
[{"uuid":["uuid","<2>"]},{"count":1}]
[{"count":1},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (1) for index on column \"number\".  First row, with UUID <4>, was inserted by this transaction.  Second row, with UUID <3>, was inserted by this transaction.","error":"constraint violation"}]
[{"uuid":["uuid","<5>"]}]
[{"count":2},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (3) for index on column \"number\".  First row, with UUID <5>, had the following index values before the transaction: 2.  Second row, with UUID <2>, had the following index values before the transaction: 1.","error":"constraint violation"}]
[{"count":1},{"count":1}]
[{"count":2},{"uuid":["uuid","<6>"]},{"uuid":["uuid","<7>"]},{"rows":[{"name":"new one","number":1},{"name":"new two","number":2},{"name":"old one","number":10},{"name":"old two","number":20}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}},
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]' '   ["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "still another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "two"}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [],
       "row": {"number": 3}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["number", "==", 1]],
       "row": {"number": 2, "name": "old two"}},
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "two"]],
       "row": {"number": 1, "name": "old one"}}]' '   ["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [],
       "mutations": [["number", "*=", 10]]},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "new one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "new two"}},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["number", "name"],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_53
#AT_START_54
at_fn_group_banner 54 'ovsdb-cluster.at:64' \
  "size constraints on sets - cluster of 1" "        " 2
at_xfail=no
(
  printf "%s\n" "54. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "constraint_schema" '[{"uuid":["uuid","<0>"]}]
[{"details":"Attempted to store 0 elements in set of 1 to 2 integers.","error":"constraint violation"}]
[{"count":1}]
[{"count":1}]
[{"details":"Attempted to store 3 elements in set of 1 to 2 integers.","error":"constraint violation"}]
[{"count":1}]
' no '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 0]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 1]]
      }]' '["constraints",
      {"op": "update",
       "table": "b",
       "where": [],
       "row": {"x": ["set", [3, 4]]}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 5]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 4], ["x", "insert", 5]]
      }]
  '
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_54
#AT_START_55
at_fn_group_banner 55 'ovsdb-cluster.at:64' \
  "referential integrity -- simple - cluster of 1" " " 2
at_xfail=no
(
  printf "%s\n" "55. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "constraint_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]
[{"count":1},{"details":"cannot delete b row <0> because of 3 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1},{"details":"cannot delete b row <0> because of 2 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1},{"details":"cannot delete b row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1}]
' no '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1},
       "uuid-name": "brow"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2b": ["set", [["named-uuid", "brow"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_55
#AT_START_56
at_fn_group_banner 56 'ovsdb-cluster.at:64' \
  "referential integrity -- mutual references - cluster of 1" "" 2
at_xfail=no
(
  printf "%s\n" "56. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "constraint_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]
[{"uuid":["uuid","<2>"]},{"details":"Table a column a2b row <2> references nonexistent row <3> in table b.","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"count":1}]
' no '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "row2"]]],
               "a2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 1,
               "b2b": ["set", [["named-uuid", "row2"]]],
               "b2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row2"}]' '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a2b": ["set", [["uuid", "b516b960-5b19-4fc2-bb82-fe1cbd6d0241"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '   ["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]},
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_56
#AT_START_57
at_fn_group_banner 57 'ovsdb-cluster.at:64' \
  "weak references - cluster of 1" "                 " 2
at_xfail=no
(
  printf "%s\n" "57. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "weak_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<2>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<4>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"uuid":["uuid","<5>"]},{"details":"Weak reference column \"a2b\" in \"a\" row <5> (inserted within this transaction) contained all-zeros UUID (probably as the default value for this column) but deleting this value caused a constraint volation because this column is not allowed to be empty.","error":"constraint violation"}]
[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2b\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}]
[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2a1\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"a2a":["uuid","<1>"],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"count":1}]
[{"rows":[]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["set",[]]}]}]
' no '["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"],
                               ["uuid", "0e767b36-6822-4044-8307-d58467e04669"]]],
               "a2a1": ["named-uuid", "row1"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row4"]}},
      {"op": "insert",
       "table": "b",
       "row": {"b": 2,
               "b2a": ["named-uuid", "row1"]},
       "uuid-name": "row3"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 3,
               "b2a": ["named-uuid", "row2"]},
       "uuid-name": "row4"}]' '      ["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '      ["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a2a1": ["named-uuid", "me"]},
       "uuid-name": "me"}]' '      ["weak",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 3]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_57
#AT_START_58
at_fn_group_banner 58 'ovsdb-cluster.at:64' \
  "immutable columns - cluster of 1" "               " 2
at_xfail=no
(
  printf "%s\n" "58. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "immutable_schema" '[{"uuid":["uuid","<0>"]}]
[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":10},\"table\":\"a\",\"where\":[]}"}]
[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":5},\"table\":\"a\",\"where\":[]}"}]
[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"-=\",5]"}]
[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"*=\",1]"}]
' no '["immutable",
      {"op": "insert",
       "table": "a",
       "row": {"i": 5},
       "uuid-name": "row1"}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 10},
       "where": []}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 5},
       "where": []}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "-=", 5]]}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "*=", 1]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_58
#AT_START_59
at_fn_group_banner 59 'ovsdb-cluster.at:64' \
  "garbage collection - cluster of 1" "              " 2
at_xfail=no
(
  printf "%s\n" "59. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 1 "gc_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<5>"]},{"uuid":["uuid","<6>"]}]
[{"rows":[{"a":4},{"a":5}]}]
[{"count":1}]
[{"rows":[]}]
[{"uuid":["uuid","<7>"]},{"uuid":["uuid","<8>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<9>"]},{"uuid":["uuid","<10>"]},{"uuid":["uuid","<11>"]},{"uuid":["uuid","<12>"]}]
[{"rows":[{"a":8},{"a":9},{"a":10},{"a":11}]}]
[{"count":1}]
[{"rows":[]}]
[{"uuid":["uuid","<13>"]}]
[{"rows":[]}]
' no '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0, "a2a": ["named-uuid", "row1"]},
       "uuid-name": "row0"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1, "a2a": ["named-uuid", "row2"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2, "a2a": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 3},
       "uuid-name": "row3"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 4, "a2a": ["named-uuid", "row5"]},
       "uuid-name": "row4"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 5, "a2a": ["named-uuid", "row4"]},
       "uuid-name": "row5"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 4]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 6, "wa2a": ["named-uuid", "row7"]},
       "uuid-name": "row6"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 7, "wa2a": ["named-uuid", "row6"]},
       "uuid-name": "row7"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 8, "a2a": ["named-uuid", "row9"]},
       "uuid-name": "row8"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 9, "a2a": ["named-uuid", "row10"]},
       "uuid-name": "row9"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 10, "a2a": ["named-uuid", "row11"]},
       "uuid-name": "row10"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 11, "a2a": ["named-uuid", "row8"]},
       "uuid-name": "row11"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 9]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 12, "a2a": ["named-uuid", "self"]},
       "uuid-name": "self"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_59
#AT_START_60
at_fn_group_banner 60 'ovsdb-cluster.at:73' \
  "insert default row, query table - cluster of 3" " " 3
at_xfail=no
(
  printf "%s\n" "60. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"","number":0}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_60
#AT_START_61
at_fn_group_banner 61 'ovsdb-cluster.at:73' \
  "insert row, query table - cluster of 3" "         " 3
at_xfail=no
(
  printf "%s\n" "61. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_61
#AT_START_62
at_fn_group_banner 62 'ovsdb-cluster.at:73' \
  "insert row with uuid, query table - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "62. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","ffffffff-971b-4cba-bf42-520515973b7e"]}]
[{"rows":[{"_uuid":["uuid","ffffffff-971b-4cba-bf42-520515973b7e"],"_version":["uuid","<0>"],"name":"zero","number":0}]}]
[{"details":"This UUID would duplicate a UUID already present within the table or deleted within the same transaction.","error":"duplicate uuid","syntax":"\"ffffffff-971b-4cba-bf42-520515973b7e\""}]
' no '["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '   ["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]' '   ["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_62
#AT_START_63
at_fn_group_banner 63 'ovsdb-cluster.at:73' \
  "insert rows, query by value - cluster of 3" "     " 3
at_xfail=no
(
  printf "%s\n" "63. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_63
#AT_START_64
at_fn_group_banner 64 'ovsdb-cluster.at:73' \
  "insert rows, query by named-uuid - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "64. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]},{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "second"]]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_64
#AT_START_65
at_fn_group_banner 65 'ovsdb-cluster.at:73' \
  "insert rows, update rows by value - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "65. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"nought","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "row": {"name": "nought"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_65
#AT_START_66
at_fn_group_banner 66 'ovsdb-cluster.at:73' \
  "insert rows, mutate rows - cluster of 3" "        " 3
at_xfail=no
(
  printf "%s\n" "66. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<2>"],"name":"one","number":1},{"_uuid":["uuid","<0>"],"_version":["uuid","<3>"],"name":"zero","number":2}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "mutations": [["number", "+=", 2]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_66
#AT_START_67
at_fn_group_banner 67 'ovsdb-cluster.at:73' \
  "insert rows, delete by named-uuid - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "67. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":1},{"rows":[{"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_67
#AT_START_68
at_fn_group_banner 68 'ovsdb-cluster.at:73' \
  "insert rows, delete rows by value - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "68. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<2>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_68
#AT_START_69
at_fn_group_banner 69 'ovsdb-cluster.at:73' \
  "insert rows, delete by (non-matching) value - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "69. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":0}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "nought"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_69
#AT_START_70
at_fn_group_banner 70 'ovsdb-cluster.at:73' \
  "insert rows, delete all - cluster of 3" "         " 3
at_xfail=no
(
  printf "%s\n" "70. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":2},{"rows":[]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_70
#AT_START_71
at_fn_group_banner 71 'ovsdb-cluster.at:73' \
  "insert row, query table, commit - cluster of 3" " " 3
at_xfail=no
(
  printf "%s\n" "71. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": false}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_71
#AT_START_72
at_fn_group_banner 72 'ovsdb-cluster.at:73' \
  "insert row, query table, commit durably - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "72. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": true}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_72
#AT_START_73
at_fn_group_banner 73 'ovsdb-cluster.at:73' \
  "equality wait with correct rows - cluster of 3" " " 3
at_xfail=no
(
  printf "%s\n" "73. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_73
#AT_START_74
at_fn_group_banner 74 'ovsdb-cluster.at:73' \
  "equality wait with extra row - cluster of 3" "    " 3
at_xfail=no
(
  printf "%s\n" "74. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_74
#AT_START_75
at_fn_group_banner 75 'ovsdb-cluster.at:73' \
  "equality wait with missing row - cluster of 3" "  " 3
at_xfail=no
(
  printf "%s\n" "75. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_75
#AT_START_76
at_fn_group_banner 76 'ovsdb-cluster.at:73' \
  "inequality wait with correct rows - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "76. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_76
#AT_START_77
at_fn_group_banner 77 'ovsdb-cluster.at:73' \
  "inequality wait with extra row - cluster of 3" "  " 3
at_xfail=no
(
  printf "%s\n" "77. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_77
#AT_START_78
at_fn_group_banner 78 'ovsdb-cluster.at:73' \
  "inequality wait with missing row - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "78. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_78
#AT_START_79
at_fn_group_banner 79 'ovsdb-cluster.at:73' \
  "insert and update constraints - cluster of 3" "   " 3
at_xfail=no
(
  printf "%s\n" "79. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "constraint_schema" '[{"details":"0 is less than minimum allowed value 1","error":"constraint violation"}]
[{"details":"-1 is less than minimum allowed value 1","error":"constraint violation"}]
[{"details":"-2 is less than minimum allowed value 1","error":"constraint violation"}]
[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]},{"details":"transaction causes \"constrained\" table to contain 2 rows, greater than the schema-defined limit of 1 row(s)","error":"constraint violation"}]
' no '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": -1}}]' '["constraints",
      {"op": "update",
       "table": "constrained",
       "where": [],
       "row": {"positive": -2}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 1}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 2}}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_79
#AT_START_80
at_fn_group_banner 80 'ovsdb-cluster.at:73' \
  "index uniqueness checking - cluster of 3" "       " 3
at_xfail=no
(
  printf "%s\n" "80. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (1) for index on column \"number\".  First row, with UUID <0>, existed in the database before this transaction and was not modified by the transaction.  Second row, with UUID <1>, was inserted by this transaction.","error":"constraint violation"}]
[{"uuid":["uuid","<2>"]},{"count":1}]
[{"count":1},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (1) for index on column \"number\".  First row, with UUID <4>, was inserted by this transaction.  Second row, with UUID <3>, was inserted by this transaction.","error":"constraint violation"}]
[{"uuid":["uuid","<5>"]}]
[{"count":2},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (3) for index on column \"number\".  First row, with UUID <5>, had the following index values before the transaction: 2.  Second row, with UUID <2>, had the following index values before the transaction: 1.","error":"constraint violation"}]
[{"count":1},{"count":1}]
[{"count":2},{"uuid":["uuid","<6>"]},{"uuid":["uuid","<7>"]},{"rows":[{"name":"new one","number":1},{"name":"new two","number":2},{"name":"old one","number":10},{"name":"old two","number":20}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}},
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]' '   ["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "still another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "two"}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [],
       "row": {"number": 3}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["number", "==", 1]],
       "row": {"number": 2, "name": "old two"}},
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "two"]],
       "row": {"number": 1, "name": "old one"}}]' '   ["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [],
       "mutations": [["number", "*=", 10]]},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "new one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "new two"}},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["number", "name"],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_80
#AT_START_81
at_fn_group_banner 81 'ovsdb-cluster.at:73' \
  "size constraints on sets - cluster of 3" "        " 3
at_xfail=no
(
  printf "%s\n" "81. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "constraint_schema" '[{"uuid":["uuid","<0>"]}]
[{"details":"Attempted to store 0 elements in set of 1 to 2 integers.","error":"constraint violation"}]
[{"count":1}]
[{"count":1}]
[{"details":"Attempted to store 3 elements in set of 1 to 2 integers.","error":"constraint violation"}]
[{"count":1}]
' no '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 0]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 1]]
      }]' '["constraints",
      {"op": "update",
       "table": "b",
       "where": [],
       "row": {"x": ["set", [3, 4]]}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 5]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 4], ["x", "insert", 5]]
      }]
  '
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_81
#AT_START_82
at_fn_group_banner 82 'ovsdb-cluster.at:73' \
  "referential integrity -- simple - cluster of 3" " " 3
at_xfail=no
(
  printf "%s\n" "82. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "constraint_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]
[{"count":1},{"details":"cannot delete b row <0> because of 3 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1},{"details":"cannot delete b row <0> because of 2 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1},{"details":"cannot delete b row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1}]
' no '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1},
       "uuid-name": "brow"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2b": ["set", [["named-uuid", "brow"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_82
#AT_START_83
at_fn_group_banner 83 'ovsdb-cluster.at:73' \
  "referential integrity -- mutual references - cluster of 3" "" 3
at_xfail=no
(
  printf "%s\n" "83. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "constraint_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]
[{"uuid":["uuid","<2>"]},{"details":"Table a column a2b row <2> references nonexistent row <3> in table b.","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"count":1}]
' no '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "row2"]]],
               "a2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 1,
               "b2b": ["set", [["named-uuid", "row2"]]],
               "b2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row2"}]' '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a2b": ["set", [["uuid", "b516b960-5b19-4fc2-bb82-fe1cbd6d0241"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '   ["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]},
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_83
#AT_START_84
at_fn_group_banner 84 'ovsdb-cluster.at:73' \
  "weak references - cluster of 3" "                 " 3
at_xfail=no
(
  printf "%s\n" "84. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "weak_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<2>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<4>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"uuid":["uuid","<5>"]},{"details":"Weak reference column \"a2b\" in \"a\" row <5> (inserted within this transaction) contained all-zeros UUID (probably as the default value for this column) but deleting this value caused a constraint volation because this column is not allowed to be empty.","error":"constraint violation"}]
[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2b\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}]
[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2a1\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"a2a":["uuid","<1>"],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"count":1}]
[{"rows":[]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["set",[]]}]}]
' no '["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"],
                               ["uuid", "0e767b36-6822-4044-8307-d58467e04669"]]],
               "a2a1": ["named-uuid", "row1"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row4"]}},
      {"op": "insert",
       "table": "b",
       "row": {"b": 2,
               "b2a": ["named-uuid", "row1"]},
       "uuid-name": "row3"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 3,
               "b2a": ["named-uuid", "row2"]},
       "uuid-name": "row4"}]' '      ["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '      ["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a2a1": ["named-uuid", "me"]},
       "uuid-name": "me"}]' '      ["weak",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 3]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_84
#AT_START_85
at_fn_group_banner 85 'ovsdb-cluster.at:73' \
  "immutable columns - cluster of 3" "               " 3
at_xfail=no
(
  printf "%s\n" "85. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "immutable_schema" '[{"uuid":["uuid","<0>"]}]
[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":10},\"table\":\"a\",\"where\":[]}"}]
[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":5},\"table\":\"a\",\"where\":[]}"}]
[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"-=\",5]"}]
[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"*=\",1]"}]
' no '["immutable",
      {"op": "insert",
       "table": "a",
       "row": {"i": 5},
       "uuid-name": "row1"}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 10},
       "where": []}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 5},
       "where": []}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "-=", 5]]}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "*=", 1]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_85
#AT_START_86
at_fn_group_banner 86 'ovsdb-cluster.at:73' \
  "garbage collection - cluster of 3" "              " 3
at_xfail=no
(
  printf "%s\n" "86. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "gc_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<5>"]},{"uuid":["uuid","<6>"]}]
[{"rows":[{"a":4},{"a":5}]}]
[{"count":1}]
[{"rows":[]}]
[{"uuid":["uuid","<7>"]},{"uuid":["uuid","<8>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<9>"]},{"uuid":["uuid","<10>"]},{"uuid":["uuid","<11>"]},{"uuid":["uuid","<12>"]}]
[{"rows":[{"a":8},{"a":9},{"a":10},{"a":11}]}]
[{"count":1}]
[{"rows":[]}]
[{"uuid":["uuid","<13>"]}]
[{"rows":[]}]
' no '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0, "a2a": ["named-uuid", "row1"]},
       "uuid-name": "row0"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1, "a2a": ["named-uuid", "row2"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2, "a2a": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 3},
       "uuid-name": "row3"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 4, "a2a": ["named-uuid", "row5"]},
       "uuid-name": "row4"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 5, "a2a": ["named-uuid", "row4"]},
       "uuid-name": "row5"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 4]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 6, "wa2a": ["named-uuid", "row7"]},
       "uuid-name": "row6"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 7, "wa2a": ["named-uuid", "row6"]},
       "uuid-name": "row7"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 8, "a2a": ["named-uuid", "row9"]},
       "uuid-name": "row8"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 9, "a2a": ["named-uuid", "row10"]},
       "uuid-name": "row9"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 10, "a2a": ["named-uuid", "row11"]},
       "uuid-name": "row10"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 11, "a2a": ["named-uuid", "row8"]},
       "uuid-name": "row11"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 9]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 12, "a2a": ["named-uuid", "self"]},
       "uuid-name": "self"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_86
#AT_START_87
at_fn_group_banner 87 'ovsdb-cluster.at:82' \
  "insert default row, query table - cluster of 5" " " 4
at_xfail=no
(
  printf "%s\n" "87. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"","number":0}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_87
#AT_START_88
at_fn_group_banner 88 'ovsdb-cluster.at:82' \
  "insert row, query table - cluster of 5" "         " 4
at_xfail=no
(
  printf "%s\n" "88. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_88
#AT_START_89
at_fn_group_banner 89 'ovsdb-cluster.at:82' \
  "insert row with uuid, query table - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "89. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","ffffffff-971b-4cba-bf42-520515973b7e"]}]
[{"rows":[{"_uuid":["uuid","ffffffff-971b-4cba-bf42-520515973b7e"],"_version":["uuid","<0>"],"name":"zero","number":0}]}]
[{"details":"This UUID would duplicate a UUID already present within the table or deleted within the same transaction.","error":"duplicate uuid","syntax":"\"ffffffff-971b-4cba-bf42-520515973b7e\""}]
' no '["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '   ["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]' '   ["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_89
#AT_START_90
at_fn_group_banner 90 'ovsdb-cluster.at:82' \
  "insert rows, query by value - cluster of 5" "     " 4
at_xfail=no
(
  printf "%s\n" "90. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_90
#AT_START_91
at_fn_group_banner 91 'ovsdb-cluster.at:82' \
  "insert rows, query by named-uuid - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "91. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]},{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "second"]]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_91
#AT_START_92
at_fn_group_banner 92 'ovsdb-cluster.at:82' \
  "insert rows, update rows by value - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "92. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"nought","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "row": {"name": "nought"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_92
#AT_START_93
at_fn_group_banner 93 'ovsdb-cluster.at:82' \
  "insert rows, mutate rows - cluster of 5" "        " 4
at_xfail=no
(
  printf "%s\n" "93. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<2>"],"name":"one","number":1},{"_uuid":["uuid","<0>"],"_version":["uuid","<3>"],"name":"zero","number":2}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "mutations": [["number", "+=", 2]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_93
#AT_START_94
at_fn_group_banner 94 'ovsdb-cluster.at:82' \
  "insert rows, delete by named-uuid - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "94. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":1},{"rows":[{"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_94
#AT_START_95
at_fn_group_banner 95 'ovsdb-cluster.at:82' \
  "insert rows, delete rows by value - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "95. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<2>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_95
#AT_START_96
at_fn_group_banner 96 'ovsdb-cluster.at:82' \
  "insert rows, delete by (non-matching) value - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "96. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":0}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "nought"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_96
#AT_START_97
at_fn_group_banner 97 'ovsdb-cluster.at:82' \
  "insert rows, delete all - cluster of 5" "         " 4
at_xfail=no
(
  printf "%s\n" "97. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":2},{"rows":[]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_97
#AT_START_98
at_fn_group_banner 98 'ovsdb-cluster.at:82' \
  "insert row, query table, commit - cluster of 5" " " 4
at_xfail=no
(
  printf "%s\n" "98. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": false}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_98
#AT_START_99
at_fn_group_banner 99 'ovsdb-cluster.at:82' \
  "insert row, query table, commit durably - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "99. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": true}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_99
#AT_START_100
at_fn_group_banner 100 'ovsdb-cluster.at:82' \
  "equality wait with correct rows - cluster of 5" " " 4
at_xfail=no
(
  printf "%s\n" "100. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_100
#AT_START_101
at_fn_group_banner 101 'ovsdb-cluster.at:82' \
  "equality wait with extra row - cluster of 5" "    " 4
at_xfail=no
(
  printf "%s\n" "101. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_101
#AT_START_102
at_fn_group_banner 102 'ovsdb-cluster.at:82' \
  "equality wait with missing row - cluster of 5" "  " 4
at_xfail=no
(
  printf "%s\n" "102. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_102
#AT_START_103
at_fn_group_banner 103 'ovsdb-cluster.at:82' \
  "inequality wait with correct rows - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "103. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_103
#AT_START_104
at_fn_group_banner 104 'ovsdb-cluster.at:82' \
  "inequality wait with extra row - cluster of 5" "  " 4
at_xfail=no
(
  printf "%s\n" "104. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_104
#AT_START_105
at_fn_group_banner 105 'ovsdb-cluster.at:82' \
  "inequality wait with missing row - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "105. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_105
#AT_START_106
at_fn_group_banner 106 'ovsdb-cluster.at:82' \
  "insert and update constraints - cluster of 5" "   " 4
at_xfail=no
(
  printf "%s\n" "106. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "constraint_schema" '[{"details":"0 is less than minimum allowed value 1","error":"constraint violation"}]
[{"details":"-1 is less than minimum allowed value 1","error":"constraint violation"}]
[{"details":"-2 is less than minimum allowed value 1","error":"constraint violation"}]
[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]},{"details":"transaction causes \"constrained\" table to contain 2 rows, greater than the schema-defined limit of 1 row(s)","error":"constraint violation"}]
' no '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": -1}}]' '["constraints",
      {"op": "update",
       "table": "constrained",
       "where": [],
       "row": {"positive": -2}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 1}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 2}}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_106
#AT_START_107
at_fn_group_banner 107 'ovsdb-cluster.at:82' \
  "index uniqueness checking - cluster of 5" "       " 4
at_xfail=no
(
  printf "%s\n" "107. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (1) for index on column \"number\".  First row, with UUID <0>, existed in the database before this transaction and was not modified by the transaction.  Second row, with UUID <1>, was inserted by this transaction.","error":"constraint violation"}]
[{"uuid":["uuid","<2>"]},{"count":1}]
[{"count":1},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (1) for index on column \"number\".  First row, with UUID <4>, was inserted by this transaction.  Second row, with UUID <3>, was inserted by this transaction.","error":"constraint violation"}]
[{"uuid":["uuid","<5>"]}]
[{"count":2},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (3) for index on column \"number\".  First row, with UUID <5>, had the following index values before the transaction: 2.  Second row, with UUID <2>, had the following index values before the transaction: 1.","error":"constraint violation"}]
[{"count":1},{"count":1}]
[{"count":2},{"uuid":["uuid","<6>"]},{"uuid":["uuid","<7>"]},{"rows":[{"name":"new one","number":1},{"name":"new two","number":2},{"name":"old one","number":10},{"name":"old two","number":20}]}]
' no '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}},
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]' '   ["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "still another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "two"}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [],
       "row": {"number": 3}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["number", "==", 1]],
       "row": {"number": 2, "name": "old two"}},
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "two"]],
       "row": {"number": 1, "name": "old one"}}]' '   ["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [],
       "mutations": [["number", "*=", 10]]},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "new one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "new two"}},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["number", "name"],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_107
#AT_START_108
at_fn_group_banner 108 'ovsdb-cluster.at:82' \
  "size constraints on sets - cluster of 5" "        " 4
at_xfail=no
(
  printf "%s\n" "108. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "constraint_schema" '[{"uuid":["uuid","<0>"]}]
[{"details":"Attempted to store 0 elements in set of 1 to 2 integers.","error":"constraint violation"}]
[{"count":1}]
[{"count":1}]
[{"details":"Attempted to store 3 elements in set of 1 to 2 integers.","error":"constraint violation"}]
[{"count":1}]
' no '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 0]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 1]]
      }]' '["constraints",
      {"op": "update",
       "table": "b",
       "where": [],
       "row": {"x": ["set", [3, 4]]}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 5]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 4], ["x", "insert", 5]]
      }]
  '
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_108
#AT_START_109
at_fn_group_banner 109 'ovsdb-cluster.at:82' \
  "referential integrity -- simple - cluster of 5" " " 4
at_xfail=no
(
  printf "%s\n" "109. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "constraint_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]
[{"count":1},{"details":"cannot delete b row <0> because of 3 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1},{"details":"cannot delete b row <0> because of 2 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1},{"details":"cannot delete b row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1}]
' no '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1},
       "uuid-name": "brow"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2b": ["set", [["named-uuid", "brow"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_109
#AT_START_110
at_fn_group_banner 110 'ovsdb-cluster.at:82' \
  "referential integrity -- mutual references - cluster of 5" "" 4
at_xfail=no
(
  printf "%s\n" "110. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "constraint_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]
[{"uuid":["uuid","<2>"]},{"details":"Table a column a2b row <2> references nonexistent row <3> in table b.","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"count":1}]
' no '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "row2"]]],
               "a2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 1,
               "b2b": ["set", [["named-uuid", "row2"]]],
               "b2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row2"}]' '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a2b": ["set", [["uuid", "b516b960-5b19-4fc2-bb82-fe1cbd6d0241"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '   ["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]},
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_110
#AT_START_111
at_fn_group_banner 111 'ovsdb-cluster.at:82' \
  "weak references - cluster of 5" "                 " 4
at_xfail=no
(
  printf "%s\n" "111. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "weak_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<2>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<4>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"uuid":["uuid","<5>"]},{"details":"Weak reference column \"a2b\" in \"a\" row <5> (inserted within this transaction) contained all-zeros UUID (probably as the default value for this column) but deleting this value caused a constraint volation because this column is not allowed to be empty.","error":"constraint violation"}]
[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2b\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}]
[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2a1\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"a2a":["uuid","<1>"],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"count":1}]
[{"rows":[]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["set",[]]}]}]
' no '["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"],
                               ["uuid", "0e767b36-6822-4044-8307-d58467e04669"]]],
               "a2a1": ["named-uuid", "row1"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row4"]}},
      {"op": "insert",
       "table": "b",
       "row": {"b": 2,
               "b2a": ["named-uuid", "row1"]},
       "uuid-name": "row3"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 3,
               "b2a": ["named-uuid", "row2"]},
       "uuid-name": "row4"}]' '      ["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '      ["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a2a1": ["named-uuid", "me"]},
       "uuid-name": "me"}]' '      ["weak",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 3]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_111
#AT_START_112
at_fn_group_banner 112 'ovsdb-cluster.at:82' \
  "immutable columns - cluster of 5" "               " 4
at_xfail=no
(
  printf "%s\n" "112. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "immutable_schema" '[{"uuid":["uuid","<0>"]}]
[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":10},\"table\":\"a\",\"where\":[]}"}]
[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":5},\"table\":\"a\",\"where\":[]}"}]
[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"-=\",5]"}]
[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"*=\",1]"}]
' no '["immutable",
      {"op": "insert",
       "table": "a",
       "row": {"i": 5},
       "uuid-name": "row1"}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 10},
       "where": []}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 5},
       "where": []}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "-=", 5]]}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "*=", 1]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_112
#AT_START_113
at_fn_group_banner 113 'ovsdb-cluster.at:82' \
  "garbage collection - cluster of 5" "              " 4
at_xfail=no
(
  printf "%s\n" "113. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 5 "gc_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<5>"]},{"uuid":["uuid","<6>"]}]
[{"rows":[{"a":4},{"a":5}]}]
[{"count":1}]
[{"rows":[]}]
[{"uuid":["uuid","<7>"]},{"uuid":["uuid","<8>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<9>"]},{"uuid":["uuid","<10>"]},{"uuid":["uuid","<11>"]},{"uuid":["uuid","<12>"]}]
[{"rows":[{"a":8},{"a":9},{"a":10},{"a":11}]}]
[{"count":1}]
[{"rows":[]}]
[{"uuid":["uuid","<13>"]}]
[{"rows":[]}]
' no '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0, "a2a": ["named-uuid", "row1"]},
       "uuid-name": "row0"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1, "a2a": ["named-uuid", "row2"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2, "a2a": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 3},
       "uuid-name": "row3"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 4, "a2a": ["named-uuid", "row5"]},
       "uuid-name": "row4"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 5, "a2a": ["named-uuid", "row4"]},
       "uuid-name": "row5"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 4]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 6, "wa2a": ["named-uuid", "row7"]},
       "uuid-name": "row6"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 7, "wa2a": ["named-uuid", "row6"]},
       "uuid-name": "row7"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 8, "a2a": ["named-uuid", "row9"]},
       "uuid-name": "row8"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 9, "a2a": ["named-uuid", "row10"]},
       "uuid-name": "row9"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 10, "a2a": ["named-uuid", "row11"]},
       "uuid-name": "row10"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 11, "a2a": ["named-uuid", "row8"]},
       "uuid-name": "row11"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 9]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 12, "a2a": ["named-uuid", "self"]},
       "uuid-name": "self"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_113
#AT_START_114
at_fn_group_banner 114 'ovsdb-cluster.at:91' \
  "insert default row, query table - cluster of 3" " " 5
at_xfail=no
(
  printf "%s\n" "114. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"","number":0}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_114
#AT_START_115
at_fn_group_banner 115 'ovsdb-cluster.at:91' \
  "insert row, query table - cluster of 3" "         " 5
at_xfail=no
(
  printf "%s\n" "115. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_115
#AT_START_116
at_fn_group_banner 116 'ovsdb-cluster.at:91' \
  "insert row with uuid, query table - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "116. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","ffffffff-971b-4cba-bf42-520515973b7e"]}]
[{"rows":[{"_uuid":["uuid","ffffffff-971b-4cba-bf42-520515973b7e"],"_version":["uuid","<0>"],"name":"zero","number":0}]}]
[{"details":"This UUID would duplicate a UUID already present within the table or deleted within the same transaction.","error":"duplicate uuid","syntax":"\"ffffffff-971b-4cba-bf42-520515973b7e\""}]
' yes '["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '   ["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]' '   ["ordinals",
      {"op": "insert",
       "uuid": "ffffffff-971b-4cba-bf42-520515973b7e",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_116
#AT_START_117
at_fn_group_banner 117 'ovsdb-cluster.at:91' \
  "insert rows, query by value - cluster of 3" "     " 5
at_xfail=no
(
  printf "%s\n" "117. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_117
#AT_START_118
at_fn_group_banner 118 'ovsdb-cluster.at:91' \
  "insert rows, query by named-uuid - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "118. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]},{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "second"]]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_118
#AT_START_119
at_fn_group_banner 119 'ovsdb-cluster.at:91' \
  "insert rows, update rows by value - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "119. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"nought","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "row": {"name": "nought"}}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_119
#AT_START_120
at_fn_group_banner 120 'ovsdb-cluster.at:91' \
  "insert rows, mutate rows - cluster of 3" "        " 5
at_xfail=no
(
  printf "%s\n" "120. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<2>"],"name":"one","number":1},{"_uuid":["uuid","<0>"],"_version":["uuid","<3>"],"name":"zero","number":2}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [["name", "==", "zero"]],
       "mutations": [["number", "+=", 2]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_120
#AT_START_121
at_fn_group_banner 121 'ovsdb-cluster.at:91' \
  "insert rows, delete by named-uuid - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "121. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":1},{"rows":[{"name":"one","number":1}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": [["_uuid", "==", ["named-uuid", "first"]]]},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_121
#AT_START_122
at_fn_group_banner 122 'ovsdb-cluster.at:91' \
  "insert rows, delete rows by value - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "122. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<2>"],"name":"one","number":1}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "zero"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_122
#AT_START_123
at_fn_group_banner 123 'ovsdb-cluster.at:91' \
  "insert rows, delete by (non-matching) value - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "123. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]}]
[{"count":0}]
[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "first"}]' '["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "nought"]]}]' '["ordinals",
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_123
#AT_START_124
at_fn_group_banner 124 'ovsdb-cluster.at:91' \
  "insert rows, delete all - cluster of 3" "         " 5
at_xfail=no
(
  printf "%s\n" "124. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":2},{"rows":[]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"},
       "uuid-name": "first"},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"},
       "uuid-name": "second"},
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["name","number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_124
#AT_START_125
at_fn_group_banner 125 'ovsdb-cluster.at:91' \
  "insert row, query table, commit - cluster of 3" " " 5
at_xfail=no
(
  printf "%s\n" "125. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": false}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_125
#AT_START_126
at_fn_group_banner 126 'ovsdb-cluster.at:91' \
  "insert row, query table, commit durably - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "126. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "select",
       "table": "ordinals",
       "where": []},
      {"op": "commit",
       "durable": true}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_126
#AT_START_127
at_fn_group_banner 127 'ovsdb-cluster.at:91' \
  "equality wait with correct rows - cluster of 3" " " 5
at_xfail=no
(
  printf "%s\n" "127. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_127
#AT_START_128
at_fn_group_banner 128 'ovsdb-cluster.at:91' \
  "equality wait with extra row - cluster of 3" "    " 5
at_xfail=no
(
  printf "%s\n" "128. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_128
#AT_START_129
at_fn_group_banner 129 'ovsdb-cluster.at:91' \
  "equality wait with missing row - cluster of 3" "  " 5
at_xfail=no
(
  printf "%s\n" "129. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "==",
       "rows": [{"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_129
#AT_START_130
at_fn_group_banner 130 'ovsdb-cluster.at:91' \
  "inequality wait with correct rows - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "130. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"where\" clause test failed","error":"timed out"}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_130
#AT_START_131
at_fn_group_banner 131 'ovsdb-cluster.at:91' \
  "inequality wait with extra row - cluster of 3" "  " 5
at_xfail=no
(
  printf "%s\n" "131. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "zero", "number": 0},
                {"name": "one", "number": 1},
                {"name": "two", "number": 2}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_131
#AT_START_132
at_fn_group_banner 132 'ovsdb-cluster.at:91' \
  "inequality wait with missing row - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "132. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 0, "name": "zero"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "wait",
       "timeout": 0,
       "table": "ordinals",
       "where": [],
       "columns": ["name", "number"],
       "until": "!=",
       "rows": [{"name": "one", "number": 1}]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_132
#AT_START_133
at_fn_group_banner 133 'ovsdb-cluster.at:91' \
  "insert and update constraints - cluster of 3" "   " 5
at_xfail=no
(
  printf "%s\n" "133. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "constraint_schema" '[{"details":"0 is less than minimum allowed value 1","error":"constraint violation"}]
[{"details":"-1 is less than minimum allowed value 1","error":"constraint violation"}]
[{"details":"-2 is less than minimum allowed value 1","error":"constraint violation"}]
[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]},{"details":"transaction causes \"constrained\" table to contain 2 rows, greater than the schema-defined limit of 1 row(s)","error":"constraint violation"}]
' yes '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": -1}}]' '["constraints",
      {"op": "update",
       "table": "constrained",
       "where": [],
       "row": {"positive": -2}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 1}}]' '["constraints",
      {"op": "insert",
       "table": "constrained",
       "row": {"positive": 2}}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_133
#AT_START_134
at_fn_group_banner 134 'ovsdb-cluster.at:91' \
  "index uniqueness checking - cluster of 3" "       " 5
at_xfail=no
(
  printf "%s\n" "134. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "ordinal_schema" '[{"uuid":["uuid","<0>"]}]
[{"uuid":["uuid","<1>"]},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (1) for index on column \"number\".  First row, with UUID <0>, existed in the database before this transaction and was not modified by the transaction.  Second row, with UUID <1>, was inserted by this transaction.","error":"constraint violation"}]
[{"uuid":["uuid","<2>"]},{"count":1}]
[{"count":1},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (1) for index on column \"number\".  First row, with UUID <4>, was inserted by this transaction.  Second row, with UUID <3>, was inserted by this transaction.","error":"constraint violation"}]
[{"uuid":["uuid","<5>"]}]
[{"count":2},{"details":"Transaction causes multiple rows in \"ordinals\" table to have identical values (3) for index on column \"number\".  First row, with UUID <5>, had the following index values before the transaction: 2.  Second row, with UUID <2>, had the following index values before the transaction: 1.","error":"constraint violation"}]
[{"count":1},{"count":1}]
[{"count":2},{"uuid":["uuid","<6>"]},{"uuid":["uuid","<7>"]},{"rows":[{"name":"new one","number":1},{"name":"new two","number":2},{"name":"old one","number":10},{"name":"old two","number":20}]}]
' yes '["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "another one"}},
      {"op": "delete",
       "table": "ordinals",
       "where": [["name", "==", "one"]]}]' '   ["ordinals",
      {"op": "delete",
       "table": "ordinals",
       "where": []},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "still another one"}}]' '   ["ordinals",
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "two"}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [],
       "row": {"number": 3}}]' '   ["ordinals",
      {"op": "update",
       "table": "ordinals",
       "where": [["number", "==", 1]],
       "row": {"number": 2, "name": "old two"}},
      {"op": "update",
       "table": "ordinals",
       "where": [["name", "==", "two"]],
       "row": {"number": 1, "name": "old one"}}]' '   ["ordinals",
      {"op": "mutate",
       "table": "ordinals",
       "where": [],
       "mutations": [["number", "*=", 10]]},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 1, "name": "new one"}},
      {"op": "insert",
       "table": "ordinals",
       "row": {"number": 2, "name": "new two"}},
      {"op": "select",
       "table": "ordinals",
       "where": [],
       "columns": ["number", "name"],
       "sort": ["number"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_134
#AT_START_135
at_fn_group_banner 135 'ovsdb-cluster.at:91' \
  "size constraints on sets - cluster of 3" "        " 5
at_xfail=no
(
  printf "%s\n" "135. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "constraint_schema" '[{"uuid":["uuid","<0>"]}]
[{"details":"Attempted to store 0 elements in set of 1 to 2 integers.","error":"constraint violation"}]
[{"count":1}]
[{"count":1}]
[{"details":"Attempted to store 3 elements in set of 1 to 2 integers.","error":"constraint violation"}]
[{"count":1}]
' yes '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 0]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 1]]
      }]' '["constraints",
      {"op": "update",
       "table": "b",
       "where": [],
       "row": {"x": ["set", [3, 4]]}
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "insert", 5]]
      }]' '["constraints",
      {"op": "mutate",
       "table": "b",
       "where": [],
       "mutations": [["x", "delete", 4], ["x", "insert", 5]]
      }]
  '
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_135
#AT_START_136
at_fn_group_banner 136 'ovsdb-cluster.at:91' \
  "referential integrity -- simple - cluster of 3" " " 5
at_xfail=no
(
  printf "%s\n" "136. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "constraint_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]
[{"count":1},{"details":"cannot delete b row <0> because of 3 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1},{"details":"cannot delete b row <0> because of 2 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1},{"details":"cannot delete b row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1}]
[{"count":1}]
' yes '["constraints",
      {"op": "insert",
       "table": "b",
       "row": {"b": 1},
       "uuid-name": "brow"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2b": ["set", [["named-uuid", "brow"]]]}},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2b": ["set", [["named-uuid", "brow"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": []}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_136
#AT_START_137
at_fn_group_banner 137 'ovsdb-cluster.at:91' \
  "referential integrity -- mutual references - cluster of 3" "" 5
at_xfail=no
(
  printf "%s\n" "137. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "constraint_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]
[{"uuid":["uuid","<2>"]},{"details":"Table a column a2b row <2> references nonexistent row <3> in table b.","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}]
[{"count":1},{"count":1}]
' yes '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2b": ["set", [["named-uuid", "row2"]]],
               "a2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 1,
               "b2b": ["set", [["named-uuid", "row2"]]],
               "b2a": ["set", [["named-uuid", "row1"]]]},
       "uuid-name": "row2"}]' '["constraints",
      {"op": "insert",
       "table": "a",
       "row": {"a2b": ["set", [["uuid", "b516b960-5b19-4fc2-bb82-fe1cbd6d0241"]]]}}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '   ["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["constraints",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]' '["constraints",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]},
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 1]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_137
#AT_START_138
at_fn_group_banner 138 'ovsdb-cluster.at:91' \
  "weak references - cluster of 3" "                 " 5
at_xfail=no
(
  printf "%s\n" "138. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "weak_schema" '[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]}]
[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<2>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<4>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"uuid":["uuid","<5>"]},{"details":"Weak reference column \"a2b\" in \"a\" row <5> (inserted within this transaction) contained all-zeros UUID (probably as the default value for this column) but deleting this value caused a constraint volation because this column is not allowed to be empty.","error":"constraint violation"}]
[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2b\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}]
[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2a1\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"count":1}]
[{"rows":[{"_uuid":["uuid","<1>"],"a2a":["uuid","<1>"],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}]
[{"count":1}]
[{"rows":[]}]
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["set",[]]}]}]
' yes '["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"],
                               ["uuid", "0e767b36-6822-4044-8307-d58467e04669"]]],
               "a2a1": ["named-uuid", "row1"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2,
               "a2a": ["set", [["named-uuid", "row1"],
                               ["named-uuid", "row2"]]],
               "a2a1": ["named-uuid", "row2"],
               "a2b": ["named-uuid", "row4"]}},
      {"op": "insert",
       "table": "b",
       "row": {"b": 2,
               "b2a": ["named-uuid", "row1"]},
       "uuid-name": "row3"},
      {"op": "insert",
       "table": "b",
       "row": {"b": 3,
               "b2a": ["named-uuid", "row2"]},
       "uuid-name": "row4"}]' '      ["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '      ["weak",
      {"op": "insert",
       "table": "a",
       "row": {"a2a1": ["named-uuid", "me"]},
       "uuid-name": "me"}]' '      ["weak",
      {"op": "delete",
       "table": "b",
       "where": [["b", "==", 3]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '      ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 2]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 0]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]' '   ["weak",
      {"op": "delete",
       "table": "a",
       "where": [["a", "==", 1]]}]' '["weak",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["_uuid", "a2a", "a2a1", "a2b"],
       "sort": ["a"]}]' '["weak",
      {"op": "select",
       "table": "b",
       "where": [],
       "columns": ["_uuid", "b", "b2a"],
       "sort": ["b"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_138
#AT_START_139
at_fn_group_banner 139 'ovsdb-cluster.at:91' \
  "immutable columns - cluster of 3" "               " 5
at_xfail=no
(
  printf "%s\n" "139. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "immutable_schema" '[{"uuid":["uuid","<0>"]}]
[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":10},\"table\":\"a\",\"where\":[]}"}]
[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":5},\"table\":\"a\",\"where\":[]}"}]
[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"-=\",5]"}]
[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"*=\",1]"}]
' yes '["immutable",
      {"op": "insert",
       "table": "a",
       "row": {"i": 5},
       "uuid-name": "row1"}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 10},
       "where": []}]' '["immutable",
      {"op": "update",
       "table": "a",
       "row": {"i": 5},
       "where": []}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "-=", 5]]}]' '["immutable",
      {"op": "mutate",
       "table": "a",
       "where": [],
       "mutations": [["i", "*=", 1]]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_139
#AT_START_140
at_fn_group_banner 140 'ovsdb-cluster.at:91' \
  "garbage collection - cluster of 3" "              " 5
at_xfail=no
(
  printf "%s\n" "140. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


   ovsdb_check_cluster 3 "gc_schema" '[{"uuid":["uuid","<0>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<5>"]},{"uuid":["uuid","<6>"]}]
[{"rows":[{"a":4},{"a":5}]}]
[{"count":1}]
[{"rows":[]}]
[{"uuid":["uuid","<7>"]},{"uuid":["uuid","<8>"]}]
[{"rows":[]}]
[{"uuid":["uuid","<9>"]},{"uuid":["uuid","<10>"]},{"uuid":["uuid","<11>"]},{"uuid":["uuid","<12>"]}]
[{"rows":[{"a":8},{"a":9},{"a":10},{"a":11}]}]
[{"count":1}]
[{"rows":[]}]
[{"uuid":["uuid","<13>"]}]
[{"rows":[]}]
' yes '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 0, "a2a": ["named-uuid", "row1"]},
       "uuid-name": "row0"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 1, "a2a": ["named-uuid", "row2"]},
       "uuid-name": "row1"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 2, "a2a": ["named-uuid", "row3"]},
       "uuid-name": "row2"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 3},
       "uuid-name": "row3"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 4, "a2a": ["named-uuid", "row5"]},
       "uuid-name": "row4"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 5, "a2a": ["named-uuid", "row4"]},
       "uuid-name": "row5"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 4]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '      ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 6, "wa2a": ["named-uuid", "row7"]},
       "uuid-name": "row6"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 7, "wa2a": ["named-uuid", "row6"]},
       "uuid-name": "row7"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 8, "a2a": ["named-uuid", "row9"]},
       "uuid-name": "row8"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 9, "a2a": ["named-uuid", "row10"]},
       "uuid-name": "row9"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 10, "a2a": ["named-uuid", "row11"]},
       "uuid-name": "row10"},
      {"op": "insert",
       "table": "a",
       "row": {"a": 11, "a2a": ["named-uuid", "row8"]},
       "uuid-name": "row11"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"],
       "sort": ["a"]}]' '   ["gc",
      {"op": "update",
       "table": "a",
       "where": [["a", "==", 9]],
       "row": {"a2a": ["set", []]}}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]' '   ["gc",
      {"op": "insert",
       "table": "a",
       "row": {"a": 12, "a2a": ["named-uuid", "self"]},
       "uuid-name": "self"}]' '["gc",
      {"op": "select",
       "table": "a",
       "where": [],
       "columns": ["a"]}]'
   ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_140
#AT_START_141
at_fn_group_banner 141 'ovsdb-cluster.at:205' \
  "OVSDB cluster - follower disconnect from cluster, single remote" "" 6
at_xfail=no
(
  printf "%s\n" "141. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_test_cluster_disconnect 3 follower
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_141
#AT_START_142
at_fn_group_banner 142 'ovsdb-cluster.at:210' \
  "OVSDB cluster - leader disconnect from cluster, single remote" "" 6
at_xfail=no
(
  printf "%s\n" "142. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_test_cluster_disconnect 3 leader
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_142
#AT_START_143
at_fn_group_banner 143 'ovsdb-cluster.at:215' \
  "OVSDB cluster - leader disconnect from cluster, check flapping" "" 6
at_xfail=no
(
  printf "%s\n" "143. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_test_cluster_disconnect 5 leader yes
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_143
#AT_START_144
at_fn_group_banner 144 'ovsdb-cluster.at:220' \
  "OVSDB cluster - initial status should be disconnected" "" 6
at_xfail=no
(
  printf "%s\n" "144. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init



n=3
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
ordinal_schema > schema
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:226: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db \$abs_srcdir/idltest.ovsschema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:226"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:226"
$at_failed && at_fn_log_failure
$at_traceon; }

cid=`ovsdb-tool db-cid s1.db`
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
for i in `seq 2 $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:230: ovsdb-tool join-cluster s\$i.db \$schema_name unix:s\$i.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft" "ovsdb-cluster.at:230"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:230"
$at_failed && at_fn_log_failure
$at_traceon; }

done

on_exit 'kill `cat *.pid`'
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:235: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:235"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:235"
$at_failed && at_fn_log_failure
$at_traceon; }

done
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:238: ovsdb_client_wait unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:238"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:238"
$at_failed && at_fn_log_failure
$at_traceon; }

done

# Stop all servers, and start the s1 only, to test initial connection status
# when there is no leader yet.
for i in `seq 1 $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:244: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:244"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:244"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:244: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:244"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:244"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:244" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:244"
      printf "%s\n" "ovsdb-cluster.at:244" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:244"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:244" "while kill -0 \$TMPPID 2>/dev/null"

done
i=1
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:247: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:247"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:247"
$at_failed && at_fn_log_failure
$at_traceon; }


# The initial status should be disconnected. So wait should fail.
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:250: ovsdb_client_wait --timeout=1 unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait --timeout=1 unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:250"
( $at_check_trace; ovsdb_client_wait --timeout=1 unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 142 $at_status "$at_srcdir/ovsdb-cluster.at:250"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:251: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:251"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:251"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:251: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:251"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:251"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:251" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:251"
      printf "%s\n" "ovsdb-cluster.at:251" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:251"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:251" "while kill -0 \$TMPPID 2>/dev/null"


ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_144
#AT_START_145
at_fn_group_banner 145 'ovsdb-cluster.at:259' \
  "OVSDB cluster - election timer change" "          " 7
at_xfail=no
(
  printf "%s\n" "145. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init



n=3
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
ordinal_schema > schema
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:265: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db \$abs_srcdir/idltest.ovsschema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:265"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:265"
$at_failed && at_fn_log_failure
$at_traceon; }

cid=`ovsdb-tool db-cid s1.db`
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
for i in `seq 2 $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:269: ovsdb-tool join-cluster s\$i.db \$schema_name unix:s\$i.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft" "ovsdb-cluster.at:269"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:269"
$at_failed && at_fn_log_failure
$at_traceon; }

done

on_exit 'kill `cat *.pid`'
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:274: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:274"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:274"
$at_failed && at_fn_log_failure
$at_traceon; }

done
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:277: ovsdb_client_wait unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:277"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:277"
$at_failed && at_fn_log_failure
$at_traceon; }

done

# Change not allowed through follower.
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:281: ovs-appctl -t \"\`pwd\`\"/s2 cluster/change-election-timer \$schema_name 2000"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:281"
( $at_check_trace; ovs-appctl -t "`pwd`"/s2 cluster/change-election-timer $schema_name 2000
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 2 $at_status "$at_srcdir/ovsdb-cluster.at:281"
$at_failed && at_fn_log_failure
$at_traceon; }


# Timer cannot be changed to bigger than 2x the original value.
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:284: ovs-appctl -t \"\`pwd\`\"/s1 cluster/change-election-timer \$schema_name 4000"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:284"
( $at_check_trace; ovs-appctl -t "`pwd`"/s1 cluster/change-election-timer $schema_name 4000
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 2 $at_status "$at_srcdir/ovsdb-cluster.at:284"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:286: ovs-appctl -t \"\`pwd\`\"/s1 cluster/change-election-timer \$schema_name 2000"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:286"
( $at_check_trace; ovs-appctl -t "`pwd`"/s1 cluster/change-election-timer $schema_name 2000
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "change of election timer initiated.
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:286"
$at_failed && at_fn_log_failure
$at_traceon; }

printf "%s\n" "ovsdb-cluster.at:289" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:289"
      printf "%s\n" "ovsdb-cluster.at:289" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:289"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s1 cluster/status $schema_name | grep "Election timer: 2000"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:289" "until ovs-appctl -t \"\`pwd\`\"/s1 cluster/status \$schema_name | grep \"Election timer: 2000\""

printf "%s\n" "ovsdb-cluster.at:290" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:290"
      printf "%s\n" "ovsdb-cluster.at:290" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:290"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s2 cluster/status $schema_name | grep "Election timer: 2000"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:290" "until ovs-appctl -t \"\`pwd\`\"/s2 cluster/status \$schema_name | grep \"Election timer: 2000\""


{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:292: ovs-appctl -t \"\`pwd\`\"/s1 cluster/change-election-timer \$schema_name 4000"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:292"
( $at_check_trace; ovs-appctl -t "`pwd`"/s1 cluster/change-election-timer $schema_name 4000
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "change of election timer initiated.
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:292"
$at_failed && at_fn_log_failure
$at_traceon; }

printf "%s\n" "ovsdb-cluster.at:295" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:295"
      printf "%s\n" "ovsdb-cluster.at:295" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:295"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s1 cluster/status $schema_name | grep "Election timer: 4000"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:295" "until ovs-appctl -t \"\`pwd\`\"/s1 cluster/status \$schema_name | grep \"Election timer: 4000\""

printf "%s\n" "ovsdb-cluster.at:296" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:296"
      printf "%s\n" "ovsdb-cluster.at:296" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:296"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s2 cluster/status $schema_name | grep "Election timer: 4000"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:296" "until ovs-appctl -t \"\`pwd\`\"/s2 cluster/status \$schema_name | grep \"Election timer: 4000\""


# Latest timer should be used after restart
for i in `seq $n`; do
    printf "\ns$i: stopping\n"
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:301: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:301"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:301"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:301: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:301"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:301"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:301" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:301"
      printf "%s\n" "ovsdb-cluster.at:301" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:301"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:301" "while kill -0 \$TMPPID 2>/dev/null"

done
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:304: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:304"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:304"
$at_failed && at_fn_log_failure
$at_traceon; }

done
printf "%s\n" "ovsdb-cluster.at:306" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:306"
      printf "%s\n" "ovsdb-cluster.at:306" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:306"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s1 cluster/status $schema_name | grep "Election timer: 4000"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:306" "until ovs-appctl -t \"\`pwd\`\"/s1 cluster/status \$schema_name | grep \"Election timer: 4000\""

printf "%s\n" "ovsdb-cluster.at:307" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:307"
      printf "%s\n" "ovsdb-cluster.at:307" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:307"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s2 cluster/status $schema_name | grep "Election timer: 4000"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:307" "until ovs-appctl -t \"\`pwd\`\"/s2 cluster/status \$schema_name | grep \"Election timer: 4000\""


# Wait until cluster is ready
for i in `seq $n`; do
    printf "%s\n" "ovsdb-cluster.at:311" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:311"
      printf "%s\n" "ovsdb-cluster.at:311" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:311"
   ovs_wait_cond () {
    if ovs-appctl -t "`pwd`"/s$i cluster/status $schema_name | grep "Leader: unknown"; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:311" "while ovs-appctl -t \"\`pwd\`\"/s\$i cluster/status \$schema_name | grep \"Leader: unknown\""

done

# Latest timer should be restored after DB compact and restart.
# This is to test the install_snapshot RPC.

# Compact online
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:319: ovs-appctl -t \"\`pwd\`\"/s\$i ovsdb-server/compact"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:319"
( $at_check_trace; ovs-appctl -t "`pwd`"/s$i ovsdb-server/compact
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:319"
$at_failed && at_fn_log_failure
$at_traceon; }

done

for i in `seq $n`; do
    printf "\ns$i: stopping\n"
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:324: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:324"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:324"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:324: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:324"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:324"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:324" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:324"
      printf "%s\n" "ovsdb-cluster.at:324" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:324"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:324" "while kill -0 \$TMPPID 2>/dev/null"

done
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:327: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:327"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:327"
$at_failed && at_fn_log_failure
$at_traceon; }

done
for i in `seq $n`; do
    printf "%s\n" "ovsdb-cluster.at:330" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:330"
      printf "%s\n" "ovsdb-cluster.at:330" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:330"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s$i cluster/status $schema_name | grep "Election timer: 4000"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:330" "until ovs-appctl -t \"\`pwd\`\"/s\$i cluster/status \$schema_name | grep \"Election timer: 4000\""

done

# Wait until cluster is ready
for i in `seq $n`; do
    printf "%s\n" "ovsdb-cluster.at:335" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:335"
      printf "%s\n" "ovsdb-cluster.at:335" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:335"
   ovs_wait_cond () {
    if ovs-appctl -t "`pwd`"/s$i cluster/status $schema_name | grep "Leader: unknown"; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:335" "while ovs-appctl -t \"\`pwd\`\"/s\$i cluster/status \$schema_name | grep \"Leader: unknown\""

done

# Newly joined member should use latest timer value
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:339: ovsdb-tool join-cluster s4.db \$schema_name unix:s4.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s4.db $schema_name unix:s4.raft unix:s1.raft" "ovsdb-cluster.at:339"
( $at_check_trace; ovsdb-tool join-cluster s4.db $schema_name unix:s4.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:339"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:340: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s4.log --pidfile=s4.pid --unixctl=s4 --remote=punix:s4.ovsdb s4.db"
at_fn_check_prepare_trace "ovsdb-cluster.at:340"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s4.log --pidfile=s4.pid --unixctl=s4 --remote=punix:s4.ovsdb s4.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:340"
$at_failed && at_fn_log_failure
$at_traceon; }

printf "%s\n" "ovsdb-cluster.at:341" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:341"
      printf "%s\n" "ovsdb-cluster.at:341" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:341"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s4 cluster/status $schema_name | grep "Election timer: 4000"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:341" "until ovs-appctl -t \"\`pwd\`\"/s4 cluster/status \$schema_name | grep \"Election timer: 4000\""

# for i in `seq 10`; do
#     ovs-appctl -t "`pwd`"/s4 cluster/status $schema_name
#     sleep 1
# done

ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_145
#AT_START_146
at_fn_group_banner 146 'ovsdb-cluster.at:352' \
  "OVSDB cluster - install snapshot RPC" "           " 8
at_xfail=no
(
  printf "%s\n" "146. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init



n=3
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
ordinal_schema > schema
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:358: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db \$abs_srcdir/idltest.ovsschema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:358"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:358"
$at_failed && at_fn_log_failure
$at_traceon; }

cid=`ovsdb-tool db-cid s1.db`
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
for i in `seq 2 $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:362: ovsdb-tool join-cluster s\$i.db \$schema_name unix:s\$i.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft" "ovsdb-cluster.at:362"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:362"
$at_failed && at_fn_log_failure
$at_traceon; }

done

on_exit 'kill `cat *.pid`'
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:367: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:367"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:367"
$at_failed && at_fn_log_failure
$at_traceon; }

done
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:370: ovsdb_client_wait unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:370"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:370"
$at_failed && at_fn_log_failure
$at_traceon; }

done

{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:373: ovsdb-client transact unix:s1.ovsdb '[\"idltest\",
      {\"op\": \"insert\",
       \"table\": \"indexed\",
       \"row\": {\"i\": 0}}]'"
at_fn_check_prepare_notrace 'an embedded newline' "ovsdb-cluster.at:373"
( $at_check_trace; ovsdb-client transact unix:s1.ovsdb '["idltest",
      {"op": "insert",
       "table": "indexed",
       "row": {"i": 0}}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:373"
$at_failed && at_fn_log_failure
$at_traceon; }


# Kill one follower (s2) and write some data to cluster, so that the follower is falling behind
printf "\ns2: stopping\n"
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:380: test -e s2.pid"
at_fn_check_prepare_trace "ovsdb-cluster.at:380"
( $at_check_trace; test -e s2.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:380"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s2.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:380: ovs-appctl --target=\`pwd\`/s2 exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:380"
( $at_check_trace; ovs-appctl --target=`pwd`/s2 exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:380"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:380" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:380"
      printf "%s\n" "ovsdb-cluster.at:380" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:380"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:380" "while kill -0 \$TMPPID 2>/dev/null"


# Delete "i":0 and readd it to get a different UUID for it.
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:383: ovsdb-client transact unix:s1.ovsdb '[\"idltest\",
      {\"op\": \"delete\",
       \"table\": \"indexed\",
       \"where\": [[\"i\", \"==\", 0]]}]'"
at_fn_check_prepare_notrace 'an embedded newline' "ovsdb-cluster.at:383"
( $at_check_trace; ovsdb-client transact unix:s1.ovsdb '["idltest",
      {"op": "delete",
       "table": "indexed",
       "where": [["i", "==", 0]]}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:383"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:388: ovsdb-client transact unix:s1.ovsdb '[\"idltest\",
      {\"op\": \"insert\",
       \"table\": \"indexed\",
       \"row\": {\"i\": 0}}]'"
at_fn_check_prepare_notrace 'an embedded newline' "ovsdb-cluster.at:388"
( $at_check_trace; ovsdb-client transact unix:s1.ovsdb '["idltest",
      {"op": "insert",
       "table": "indexed",
       "row": {"i": 0}}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:388"
$at_failed && at_fn_log_failure
$at_traceon; }


{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:393: ovsdb-client transact unix:s1.ovsdb '[\"idltest\",
      {\"op\": \"insert\",
       \"table\": \"indexed\",
       \"row\": {\"i\": 1}}]'"
at_fn_check_prepare_notrace 'an embedded newline' "ovsdb-cluster.at:393"
( $at_check_trace; ovsdb-client transact unix:s1.ovsdb '["idltest",
      {"op": "insert",
       "table": "indexed",
       "row": {"i": 1}}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:393"
$at_failed && at_fn_log_failure
$at_traceon; }


# Compact leader online to generate snapshot
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:399: ovs-appctl -t \"\`pwd\`\"/s1 ovsdb-server/compact"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:399"
( $at_check_trace; ovs-appctl -t "`pwd`"/s1 ovsdb-server/compact
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:399"
$at_failed && at_fn_log_failure
$at_traceon; }


# Start the follower s2 again.
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:402: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s2.log --pidfile=s2.pid --unixctl=s2 --remote=punix:s2.ovsdb s2.db"
at_fn_check_prepare_trace "ovsdb-cluster.at:402"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s2.log --pidfile=s2.pid --unixctl=s2 --remote=punix:s2.ovsdb s2.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:402"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:403: ovsdb_client_wait unix:s2.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s2.ovsdb $schema_name connected" "ovsdb-cluster.at:403"
( $at_check_trace; ovsdb_client_wait unix:s2.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:403"
$at_failed && at_fn_log_failure
$at_traceon; }


# A client transaction through s2. During this transaction, there will be a
# install_snapshot RPC because s2 detects it is behind and s1 doesn't have the
# pre_log_index requested by s2 because it is already compacted.
# After the install_snapshot RPC process, the transaction through s2 should
# succeed.
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:410: ovsdb-client transact unix:s2.ovsdb '[\"idltest\",
      {\"op\": \"insert\",
       \"table\": \"indexed\",
       \"row\": {\"i\": 2}}]'"
at_fn_check_prepare_notrace 'an embedded newline' "ovsdb-cluster.at:410"
( $at_check_trace; ovsdb-client transact unix:s2.ovsdb '["idltest",
      {"op": "insert",
       "table": "indexed",
       "row": {"i": 2}}]'
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; cat "$at_stderr"
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:410"
$at_failed && at_fn_log_failure
$at_traceon; }


# The snapshot should overwrite the in-memory contents of the DB on S2
# without generating any constraint violations. All tree records (0, 1, 2)
# should be in the DB at this point.
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:418: ovsdb-client --no-headings dump unix:s2.ovsdb idltest indexed | uuidfilt | sort -k 2"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:418"
( $at_check_trace; ovsdb-client --no-headings dump unix:s2.ovsdb idltest indexed | uuidfilt | sort -k 2
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo >>"$at_stdout"; printf "%s\n" "<0> 0
<1> 1
<2> 2
indexed table
" | \
  $at_diff - "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:418"
$at_failed && at_fn_log_failure
$at_traceon; }


for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:426: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:426"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:426"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:426: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:426"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:426"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:426" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:426"
      printf "%s\n" "ovsdb-cluster.at:426" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:426"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:426" "while kill -0 \$TMPPID 2>/dev/null"

done

ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_146
#AT_START_147
at_fn_group_banner 147 'ovsdb-cluster.at:432' \
  "OVSDB cluster - follower crash while joining" "   " 9
at_xfail=no
(
  printf "%s\n" "147. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init



n=3
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
ordinal_schema > schema
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:438: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db               \$abs_srcdir/idltest.ovsschema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:438"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db               $abs_srcdir/idltest.ovsschema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:438"
$at_failed && at_fn_log_failure
$at_traceon; }

cid=`ovsdb-tool db-cid s1.db`
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
for i in `seq 2 $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:443: ovsdb-tool join-cluster s\$i.db \$schema_name unix:s\$i.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft" "ovsdb-cluster.at:443"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:443"
$at_failed && at_fn_log_failure
$at_traceon; }

done

on_exit 'kill `cat *.pid`'

for j in `seq $n`; do
    i=$(($n + 1 - $j))
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:451: ovsdb-server -v -vconsole:off -vsyslog:off                            --detach --no-chdir --log-file=s\$i.log                            --pidfile=s\$i.pid --unixctl=s\$i                            --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off                            --detach --no-chdir --log-file=s$i.log                            --pidfile=s$i.pid --unixctl=s$i                            --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:451"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off                            --detach --no-chdir --log-file=s$i.log                            --pidfile=s$i.pid --unixctl=s$i                            --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:451"
$at_failed && at_fn_log_failure
$at_traceon; }

    if test $i != 1; then
        printf "%s\n" "ovsdb-cluster.at:456" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:456"
      printf "%s\n" "ovsdb-cluster.at:456" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:456"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s$i                             cluster/failure-test crash-before-sending-install-snapshot-reply                             | grep -q "engaged"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:456" "until ovs-appctl -t \"\`pwd\`\"/s\$i                             cluster/failure-test crash-before-sending-install-snapshot-reply                             | grep -q \"engaged\""

    fi
done

for i in `seq 2 $n`; do
    printf "%s\n" "ovsdb-cluster.at:464" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:464"
      printf "%s\n" "ovsdb-cluster.at:464" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:464"
   ovs_wait_cond () {
    if test -s s$i.pid; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:464" "while test -s s\$i.pid"

done

for i in `seq 2 $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:469: ovsdb-server -v -vconsole:off -vsyslog:off                            --detach --no-chdir --log-file=s\$i.log                            --pidfile=s\$i.pid --unixctl=s\$i                            --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off                            --detach --no-chdir --log-file=s$i.log                            --pidfile=s$i.pid --unixctl=s$i                            --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:469"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off                            --detach --no-chdir --log-file=s$i.log                            --pidfile=s$i.pid --unixctl=s$i                            --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:469"
$at_failed && at_fn_log_failure
$at_traceon; }

done

for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:477: ovsdb_client_wait unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:477"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:477"
$at_failed && at_fn_log_failure
$at_traceon; }

done

for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:481: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:481"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:481"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:481: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:481"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:481"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:481" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:481"
      printf "%s\n" "ovsdb-cluster.at:481" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:481"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:481" "while kill -0 \$TMPPID 2>/dev/null"

done

ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_147
#AT_START_148
at_fn_group_banner 148 'ovsdb-cluster.at:486' \
  "OVSDB cluster - leadership change after replication while joining" "" 9
at_xfail=no
(
  printf "%s\n" "148. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init



n=5
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:490: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db               \$abs_srcdir/idltest.ovsschema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:490"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db               $abs_srcdir/idltest.ovsschema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:490"
$at_failed && at_fn_log_failure
$at_traceon; }

cid=$(ovsdb-tool db-cid s1.db)
schema_name=$(ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema)
for i in $(seq 2 $n); do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:495: ovsdb-tool join-cluster s\$i.db \$schema_name unix:s\$i.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft" "ovsdb-cluster.at:495"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:495"
$at_failed && at_fn_log_failure
$at_traceon; }

done

on_exit 'kill $(cat *.pid)'
on_exit "
  for i in \$(ls $(pwd)/s[0-$n]); do
    ovs-appctl --timeout 1 -t \$i cluster/status $schema_name;
  done
"

for i in $(seq $n); do
        for j in $(seq $((i - 1)) ); do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:514: ovsdb_client_wait unix:s\$j.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$j.ovsdb $schema_name connected" "ovsdb-cluster.at:514"
( $at_check_trace; ovsdb_client_wait unix:s$j.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:514"
$at_failed && at_fn_log_failure
$at_traceon; }

    done
    for j in $(seq $((i - 1)) ); do
        printf "%s\n" "ovsdb-cluster.at:517" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:517"
      printf "%s\n" "ovsdb-cluster.at:517" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:517"
   ovs_wait_cond () {
    ovs-appctl -t "$(pwd)"/s$j \
                          cluster/failure-test \
                            transfer-leadership-after-sending-append-request \
                        | grep -q "engaged"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:517" "until ovs-appctl -t \"\$(pwd)\"/s\$j \\
                          cluster/failure-test \\
                            transfer-leadership-after-sending-append-request \\
                        | grep -q \"engaged\""

    done

    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:523: ovsdb-server -v -vconsole:off -vsyslog:off \\
                           --detach --no-chdir --log-file=s\$i.log \\
                           --pidfile=s\$i.pid --unixctl=s\$i \\
                           --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_notrace 'an embedded newline' "ovsdb-cluster.at:523"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off \
                           --detach --no-chdir --log-file=s$i.log \
                           --pidfile=s$i.pid --unixctl=s$i \
                           --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:523"
$at_failed && at_fn_log_failure
$at_traceon; }

done

for i in $(seq $n); do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:531: ovsdb_client_wait unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:531"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:531"
$at_failed && at_fn_log_failure
$at_traceon; }

done

for i in $(seq $n); do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:535: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:535"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:535"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:535: ovs-appctl --target=\$(pwd)/s\$i exit"
at_fn_check_prepare_notrace 'a $(...) command substitution' "ovsdb-cluster.at:535"
( $at_check_trace; ovs-appctl --target=$(pwd)/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:535"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:535" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:535"
      printf "%s\n" "ovsdb-cluster.at:535" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:535"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:535" "while kill -0 \$TMPPID 2>/dev/null"

done

ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_148
#AT_START_149
at_fn_group_banner 149 'ovsdb-cluster.at:540' \
  "OVSDB cluster - leadership change before replication while joining" "" 9
at_xfail=no
(
  printf "%s\n" "149. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init



n=5
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:544: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db               \$abs_srcdir/idltest.ovsschema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:544"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db               $abs_srcdir/idltest.ovsschema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:544"
$at_failed && at_fn_log_failure
$at_traceon; }

cid=$(ovsdb-tool db-cid s1.db)
schema_name=$(ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema)
for i in $(seq 2 $n); do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:549: ovsdb-tool join-cluster s\$i.db \$schema_name unix:s\$i.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft" "ovsdb-cluster.at:549"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:549"
$at_failed && at_fn_log_failure
$at_traceon; }

done

on_exit 'kill $(cat *.pid)'
on_exit "
  for i in \$(ls $(pwd)/s[0-$n]); do
    ovs-appctl --timeout 1 -t \$i cluster/status $schema_name;
  done
"

for i in $(seq $n); do
        for j in $(seq $((i - 1)) ); do
        { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:567: ovsdb_client_wait unix:s\$j.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$j.ovsdb $schema_name connected" "ovsdb-cluster.at:567"
( $at_check_trace; ovsdb_client_wait unix:s$j.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:567"
$at_failed && at_fn_log_failure
$at_traceon; }

    done
    for j in $(seq $((i - 1)) ); do
        printf "%s\n" "ovsdb-cluster.at:570" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:570"
      printf "%s\n" "ovsdb-cluster.at:570" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:570"
   ovs_wait_cond () {
    ovs-appctl -t "$(pwd)"/s$j \
                          cluster/failure-test \
                            transfer-leadership-after-starting-to-add \
                        | grep -q "engaged"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:570" "until ovs-appctl -t \"\$(pwd)\"/s\$j \\
                          cluster/failure-test \\
                            transfer-leadership-after-starting-to-add \\
                        | grep -q \"engaged\""

    done

    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:576: ovsdb-server -v -vconsole:off -vsyslog:off \\
                           --detach --no-chdir --log-file=s\$i.log \\
                           --pidfile=s\$i.pid --unixctl=s\$i \\
                           --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_notrace 'an embedded newline' "ovsdb-cluster.at:576"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off \
                           --detach --no-chdir --log-file=s$i.log \
                           --pidfile=s$i.pid --unixctl=s$i \
                           --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:576"
$at_failed && at_fn_log_failure
$at_traceon; }

done

for i in $(seq $n); do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:584: ovsdb_client_wait unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:584"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:584"
$at_failed && at_fn_log_failure
$at_traceon; }

done

for i in $(seq $n); do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:588: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:588"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:588"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:588: ovs-appctl --target=\$(pwd)/s\$i exit"
at_fn_check_prepare_notrace 'a $(...) command substitution' "ovsdb-cluster.at:588"
( $at_check_trace; ovs-appctl --target=$(pwd)/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:588"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:588" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:588"
      printf "%s\n" "ovsdb-cluster.at:588" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:588"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:588" "while kill -0 \$TMPPID 2>/dev/null"

done

ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_149
#AT_START_150
at_fn_group_banner 150 'ovsdb-cluster.at:676' \
  "OVSDB cluster - txn on follower-2, leader crash before sending appendReq, follower-2 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "150. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 2 3 1 crash-before-sending-append-request 2
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_150
#AT_START_151
at_fn_group_banner 151 'ovsdb-cluster.at:681' \
  "OVSDB cluster - txn on follower-2, leader crash before sending appendReq, follower-3 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "151. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 2 3 1 crash-before-sending-append-request 3
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_151
#AT_START_152
at_fn_group_banner 152 'ovsdb-cluster.at:686' \
  "OVSDB cluster - txn on follower-2, leader crash before sending execRep, follower-2 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "152. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 2 3 1 crash-before-sending-execute-command-reply 2
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_152
#AT_START_153
at_fn_group_banner 153 'ovsdb-cluster.at:691' \
  "OVSDB cluster - txn on follower-2, leader crash before sending execRep, follower-3 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "153. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 2 3 1 crash-before-sending-execute-command-reply 3
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_153
#AT_START_154
at_fn_group_banner 154 'ovsdb-cluster.at:696' \
  "OVSDB cluster - txn on follower-2, leader crash after sending execRep, follower-2 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "154. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 2 3 1 crash-after-sending-execute-command-reply 2
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_154
#AT_START_155
at_fn_group_banner 155 'ovsdb-cluster.at:701' \
  "OVSDB cluster - txn on follower-2, leader crash after sending execRep, follower-3 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "155. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 2 3 1 crash-after-sending-execute-command-reply 3
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_155
#AT_START_156
at_fn_group_banner 156 'ovsdb-cluster.at:706' \
  "OVSDB cluster - txn on leader, leader crash before sending appendReq, follower-2 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "156. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 1 2 1 crash-before-sending-append-request 2
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_156
#AT_START_157
at_fn_group_banner 157 'ovsdb-cluster.at:711' \
  "OVSDB cluster - txn on leader, leader crash before sending appendReq, follower-3 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "157. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 1 2 1 crash-before-sending-append-request 3
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_157
#AT_START_158
at_fn_group_banner 158 'ovsdb-cluster.at:716' \
  "OVSDB cluster - txn on leader, leader crash after sending appendReq, follower-2 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "158. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


# XXX: Detect and skip repeated transaction before enabling this test
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:719: exit 77"
at_fn_check_prepare_trace "ovsdb-cluster.at:719"
( $at_check_trace; exit 77
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:719"
$at_failed && at_fn_log_failure
$at_traceon; }

ovsdb_cluster_failure_test 1 2 1 crash-after-sending-append-request 2
ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_158
#AT_START_159
at_fn_group_banner 159 'ovsdb-cluster.at:723' \
  "OVSDB cluster - txn on leader, leader crash after sending appendReq, follower-3 becomes leader" "" 10
at_xfail=no
(
  printf "%s\n" "159. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


# XXX: Detect and skip repeated transaction before enabling this test
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:726: exit 77"
at_fn_check_prepare_trace "ovsdb-cluster.at:726"
( $at_check_trace; exit 77
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:726"
$at_failed && at_fn_log_failure
$at_traceon; }

ovsdb_cluster_failure_test 1 2 1 crash-after-sending-append-request 3
ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_159
#AT_START_160
at_fn_group_banner 160 'ovsdb-cluster.at:730' \
  "OVSDB cluster - txn on follower-2, follower-2 crash before sending execReq, reconnect to follower-3" "" 10
at_xfail=no
(
  printf "%s\n" "160. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 2 3 2 crash-before-sending-execute-command-request
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_160
#AT_START_161
at_fn_group_banner 161 'ovsdb-cluster.at:735' \
  "OVSDB cluster - txn on follower-2, follower-2 crash before sending execReq, reconnect to leader" "" 10
at_xfail=no
(
  printf "%s\n" "161. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 2 1 2 crash-before-sending-execute-command-request
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_161
#AT_START_162
at_fn_group_banner 162 'ovsdb-cluster.at:740' \
  "OVSDB cluster - txn on follower-2, follower-2 crash after sending execReq, reconnect to follower-3" "" 10
at_xfail=no
(
  printf "%s\n" "162. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


# XXX: Detect and skip repeated transaction before enabling this test
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:743: exit 77"
at_fn_check_prepare_trace "ovsdb-cluster.at:743"
( $at_check_trace; exit 77
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:743"
$at_failed && at_fn_log_failure
$at_traceon; }

ovsdb_cluster_failure_test 2 3 2 crash-after-sending-execute-command-request
ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_162
#AT_START_163
at_fn_group_banner 163 'ovsdb-cluster.at:747' \
  "OVSDB cluster - txn on follower-2, follower-2 crash after sending execReq, reconnect to leader" "" 10
at_xfail=no
(
  printf "%s\n" "163. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


# XXX: Detect and skip repeated transaction before enabling this test
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:750: exit 77"
at_fn_check_prepare_trace "ovsdb-cluster.at:750"
( $at_check_trace; exit 77
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:750"
$at_failed && at_fn_log_failure
$at_traceon; }

ovsdb_cluster_failure_test 2 1 2 crash-after-sending-execute-command-request
ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_163
#AT_START_164
at_fn_group_banner 164 'ovsdb-cluster.at:754' \
  "OVSDB cluster - txn on leader, follower-2 crash after receiving appendReq for the update" "" 10
at_xfail=no
(
  printf "%s\n" "164. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 1 1 2 crash-after-receiving-append-request-update
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_164
#AT_START_165
at_fn_group_banner 165 'ovsdb-cluster.at:759' \
  "OVSDB cluster - txn on follower-2, follower-3 crash after receiving appendReq for the update" "" 10
at_xfail=no
(
  printf "%s\n" "165. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 2 2 3 crash-after-receiving-append-request-update
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_165
#AT_START_166
at_fn_group_banner 166 'ovsdb-cluster.at:764' \
  "OVSDB cluster - txn on leader, leader transfers leadership after sending appendReq" "" 10
at_xfail=no
(
  printf "%s\n" "166. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_cluster_failure_test 1 2 1 transfer-leadership-after-sending-append-request -1 "Transferring leadership"
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_166
#AT_START_167
at_fn_group_banner 167 'ovsdb-cluster.at:770' \
  "OVSDB cluster - competing candidates" "           " 10
at_xfail=no
(
  printf "%s\n" "167. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init



n=3
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
ordinal_schema > schema
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:776: ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db \$abs_srcdir/idltest.ovsschema unix:s1.raft"
at_fn_check_prepare_notrace 'a shell pipeline' "ovsdb-cluster.at:776"
( $at_check_trace; ovsdb-tool '-vPATTERN:console:%c|%p|%m' create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
echo stderr:; tee stderr <"$at_stderr"
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:776"
$at_failed && at_fn_log_failure
$at_traceon; }

cid=`ovsdb-tool db-cid s1.db`
schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema`
for i in `seq 2 $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:780: ovsdb-tool join-cluster s\$i.db \$schema_name unix:s\$i.raft unix:s1.raft"
at_fn_check_prepare_dynamic "ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft" "ovsdb-cluster.at:780"
( $at_check_trace; ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:780"
$at_failed && at_fn_log_failure
$at_traceon; }

done

on_exit 'kill `cat *.pid`'
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:785: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s\$i.log --pidfile=s\$i.pid --unixctl=s\$i --remote=punix:s\$i.ovsdb s\$i.db"
at_fn_check_prepare_dynamic "ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db" "ovsdb-cluster.at:785"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb s$i.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:785"
$at_failed && at_fn_log_failure
$at_traceon; }

done
for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:788: ovsdb_client_wait unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:788"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:788"
$at_failed && at_fn_log_failure
$at_traceon; }

done

# We need to simulate the situation when 2 candidates starts election with same
# term.
#
# Before triggering leader election, tell follower s2 don't send vote request (simulating
# vote-request lost or not handled in time), and tell follower s3 to delay
# election timer to make sure s3 doesn't send vote-request before s2 enters
# term 2.
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:798: ovs-appctl -t \"\`pwd\`\"/s2 cluster/failure-test dont-send-vote-request"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:798"
( $at_check_trace; ovs-appctl -t "`pwd`"/s2 cluster/failure-test dont-send-vote-request
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:798"
$at_failed && at_fn_log_failure
$at_traceon; }

{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:799: ovs-appctl -t \"\`pwd\`\"/s3 cluster/failure-test delay-election"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:799"
( $at_check_trace; ovs-appctl -t "`pwd`"/s3 cluster/failure-test delay-election
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:799"
$at_failed && at_fn_log_failure
$at_traceon; }


# Restart leader, which will become follower, and both old followers will start
# election as candidate. The new follower (old leader) will vote one of them,
# and the other candidate should step back as follower as again.
kill -9 `cat s1.pid`
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:805: ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s1.log --pidfile=s1.pid --unixctl=s1 --remote=punix:s1.ovsdb s1.db"
at_fn_check_prepare_trace "ovsdb-cluster.at:805"
( $at_check_trace; ovsdb-server -v -vconsole:off -vsyslog:off --detach --no-chdir --log-file=s1.log --pidfile=s1.pid --unixctl=s1 --remote=punix:s1.ovsdb s1.db
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:805"
$at_failed && at_fn_log_failure
$at_traceon; }


# Tell s1 to delay election timer so that it won't start election before s3
# becomes candidate.
{ set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:809: ovs-appctl -t \"\`pwd\`\"/s1 cluster/failure-test delay-election"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:809"
( $at_check_trace; ovs-appctl -t "`pwd`"/s1 cluster/failure-test delay-election
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
echo stdout:; cat "$at_stdout"
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:809"
$at_failed && at_fn_log_failure
$at_traceon; }


printf "%s\n" "ovsdb-cluster.at:811" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:811"
      printf "%s\n" "ovsdb-cluster.at:811" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:811"
   ovs_wait_cond () {
    ovs-appctl -t "`pwd`"/s1 cluster/status $schema_name | grep "Term: 2"
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:811" "until ovs-appctl -t \"\`pwd\`\"/s1 cluster/status \$schema_name | grep \"Term: 2\""


for i in `seq $n`; do
    printf "%s\n" "ovsdb-cluster.at:814" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:814"
      printf "%s\n" "ovsdb-cluster.at:814" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:814"
   ovs_wait_cond () {
    if ovs-appctl -t "`pwd`"/s$i cluster/status $schema_name | grep "candidate"; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:814" "while ovs-appctl -t \"\`pwd\`\"/s\$i cluster/status \$schema_name | grep \"candidate\""

    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:815: ovsdb_client_wait unix:s\$i.ovsdb \$schema_name connected"
at_fn_check_prepare_dynamic "ovsdb_client_wait unix:s$i.ovsdb $schema_name connected" "ovsdb-cluster.at:815"
( $at_check_trace; ovsdb_client_wait unix:s$i.ovsdb $schema_name connected
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:815"
$at_failed && at_fn_log_failure
$at_traceon; }

done

for i in `seq $n`; do
    { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:819: test -e s\$i.pid"
at_fn_check_prepare_dynamic "test -e s$i.pid" "ovsdb-cluster.at:819"
( $at_check_trace; test -e s$i.pid
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:819"
$at_failed && at_fn_log_failure
$at_traceon; }

   TMPPID=$(cat s$i.pid)
   { set +x
printf "%s\n" "$at_srcdir/ovsdb-cluster.at:819: ovs-appctl --target=\`pwd\`/s\$i exit"
at_fn_check_prepare_notrace 'a `...` command substitution' "ovsdb-cluster.at:819"
( $at_check_trace; ovs-appctl --target=`pwd`/s$i exit
) >>"$at_stdout" 2>>"$at_stderr" 5>&-
at_status=$? at_failed=false
$at_check_filter
at_fn_diff_devnull "$at_stderr" || at_failed=:
at_fn_diff_devnull "$at_stdout" || at_failed=:
at_fn_check_status 0 $at_status "$at_srcdir/ovsdb-cluster.at:819"
$at_failed && at_fn_log_failure
$at_traceon; }

   printf "%s\n" "ovsdb-cluster.at:819" >"$at_check_line_file"
(test "1" -ge 3) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:819"
      printf "%s\n" "ovsdb-cluster.at:819" >"$at_check_line_file"
(test "1" -eq 2 && test "" -eq "" 2>/dev/null) \
  && at_fn_check_skip 99 "$at_srcdir/ovsdb-cluster.at:819"
   ovs_wait_cond () {
    if kill -0 $TMPPID 2>/dev/null; then return 1; else return 0; fi
}
ovs_wait_failed () {
    :

}
ovs_wait "ovsdb-cluster.at:819" "while kill -0 \$TMPPID 2>/dev/null"

done

ovs_cleanup
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_167
#AT_START_168
at_fn_group_banner 168 'ovsdb-cluster.at:981' \
  "OVSDB 3-server torture test - kill/restart leader" "" 11
at_xfail=no
(
  printf "%s\n" "168. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 3 1 kill
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_168
#AT_START_169
at_fn_group_banner 169 'ovsdb-cluster.at:985' \
  "OVSDB 3-server torture test - kill/restart follower 1" "" 11
at_xfail=no
(
  printf "%s\n" "169. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 3 2 kill
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_169
#AT_START_170
at_fn_group_banner 170 'ovsdb-cluster.at:989' \
  "OVSDB 3-server torture test - kill/restart follower 2" "" 11
at_xfail=no
(
  printf "%s\n" "170. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 3 3 kill
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_170
#AT_START_171
at_fn_group_banner 171 'ovsdb-cluster.at:993' \
  "OVSDB 5-server torture test - kill/restart leader" "" 11
at_xfail=no
(
  printf "%s\n" "171. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 1 kill
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_171
#AT_START_172
at_fn_group_banner 172 'ovsdb-cluster.at:997' \
  "OVSDB 5-server torture test - kill/restart follower 1" "" 11
at_xfail=no
(
  printf "%s\n" "172. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 2 kill
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_172
#AT_START_173
at_fn_group_banner 173 'ovsdb-cluster.at:1001' \
  "OVSDB 5-server torture test - kill/restart follower 2" "" 11
at_xfail=no
(
  printf "%s\n" "173. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 3 kill
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_173
#AT_START_174
at_fn_group_banner 174 'ovsdb-cluster.at:1005' \
  "OVSDB 5-server torture test - kill/restart follower 3" "" 11
at_xfail=no
(
  printf "%s\n" "174. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 4 kill
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_174
#AT_START_175
at_fn_group_banner 175 'ovsdb-cluster.at:1009' \
  "OVSDB 5-server torture test - kill/restart follower 4" "" 11
at_xfail=no
(
  printf "%s\n" "175. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 5 kill
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_175
#AT_START_176
at_fn_group_banner 176 'ovsdb-cluster.at:1014' \
  "OVSDB 3-server torture test - remove/re-add leader" "" 11
at_xfail=no
(
  printf "%s\n" "176. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 3 1 remove
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_176
#AT_START_177
at_fn_group_banner 177 'ovsdb-cluster.at:1018' \
  "OVSDB 3-server torture test - remove/re-add follower 1" "" 11
at_xfail=no
(
  printf "%s\n" "177. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 3 2 remove
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_177
#AT_START_178
at_fn_group_banner 178 'ovsdb-cluster.at:1022' \
  "OVSDB 3-server torture test - remove/re-add follower 2" "" 11
at_xfail=no
(
  printf "%s\n" "178. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 3 3 remove
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_178
#AT_START_179
at_fn_group_banner 179 'ovsdb-cluster.at:1026' \
  "OVSDB 5-server torture test - remove/re-add leader" "" 11
at_xfail=no
(
  printf "%s\n" "179. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 1 remove
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_179
#AT_START_180
at_fn_group_banner 180 'ovsdb-cluster.at:1030' \
  "OVSDB 5-server torture test - remove/re-add follower 1" "" 11
at_xfail=no
(
  printf "%s\n" "180. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 2 remove
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_180
#AT_START_181
at_fn_group_banner 181 'ovsdb-cluster.at:1034' \
  "OVSDB 5-server torture test - remove/re-add follower 2" "" 11
at_xfail=no
(
  printf "%s\n" "181. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 3 remove
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_181
#AT_START_182
at_fn_group_banner 182 'ovsdb-cluster.at:1038' \
  "OVSDB 5-server torture test - remove/re-add follower 3" "" 11
at_xfail=no
(
  printf "%s\n" "182. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 4 remove
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_182
#AT_START_183
at_fn_group_banner 183 'ovsdb-cluster.at:1042' \
  "OVSDB 5-server torture test - remove/re-add follower 4" "" 11
at_xfail=no
(
  printf "%s\n" "183. $at_setup_line: testing $at_desc ..."
  $at_traceon

ovs_init


ovsdb_torture_test 5 5 remove
ovs_cleanup
printf "%s\n" "$at_setup_line" >"$at_check_line_file"
  set +x
  $at_times_p && times >"$at_times_file"
) 5>&1 2>&1 7>&- | eval $at_tee_pipe
read at_status <"$at_status_file"
#AT_STOP_183
