X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=tests%2Fovsdb-idl.at;h=7c937f74276b5d31449a2e681eb31b41474b5f91;hb=df8c04b1c8cdae03f9a82702a6e350243f48994a;hp=c61d2e7ff0d0383119466851e6e6380f87501483;hpb=a59912a0ee8e413ecd66e8f24009946c8a515def;p=mirror_ovs.git diff --git a/tests/ovsdb-idl.at b/tests/ovsdb-idl.at index c61d2e7ff..7c937f742 100644 --- a/tests/ovsdb-idl.at +++ b/tests/ovsdb-idl.at @@ -1,5 +1,53 @@ AT_BANNER([OVSDB -- interface description language (IDL)]) +m4_divert_text([PREPARE_TESTS], [ +# ovsdb_start_idltest [REMOTE] [SCHEMA] +# +# Creates a database using SCHEMA (default: idltest.ovsschema) and +# starts a database server listening on punix:socket and REMOTE (if +# specified). +ovsdb_start_idltest () { + ovsdb-tool create db ${2:-$abs_srcdir/idltest.ovsschema} || return $? + ovsdb-server -vconsole:warn --log-file --detach --no-chdir --pidfile --remote=punix:socket ${1:+--remote=$1} db || return $? + on_exit 'kill `cat ovsdb-server.pid`' +} + +# ovsdb_cluster_start_idltest [REMOTE] [SCHEMA] +# +# Creates a database using SCHEMA (default: idltest.ovsschema) and +# starts a database cluster listening on punix:socket and REMOTE (if +# specified). +ovsdb_cluster_start_idltest () { + local n=$1 + ovsdb-tool create-cluster s1.db $abs_srcdir/idltest.ovsschema unix:s1.raft || return $? + cid=`ovsdb-tool db-cid s1.db` + schema_name=`ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema` + for i in `seq 2 $n`; do + ovsdb-tool join-cluster s$i.db $schema_name unix:s$i.raft unix:s1.raft || return $? + done + for i in `seq $n`; do + ovsdb-server -vraft -vconsole:warn --detach --no-chdir --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i --remote=punix:s$i.ovsdb ${2:+--remote=$2} s$i.db || return $? + done + on_exit 'kill `cat s*.pid`' +} + +# ovsdb_cluster_leader [REMOTES] [DATABASE] +# +# Returns the leader of the DATABASE cluster. +ovsdb_cluster_leader () { + remotes=$(echo $1 | tr "," "\n") + for remote in $remotes; do + ovsdb-client dump $remote _Server Database name leader | grep $2 | grep -q true + if [[ $? == 0 ]]; then + port=$(echo $remote | cut -d':' -f 3) + log=$(grep --include=s\*.log -rlnw -e "listening on port $port" ./) + pid=$(echo $log | sed 's/\(.*\.\)log/\1pid/' ) + echo "${remote}|${pid}" + return + fi + done +}]) + # OVSDB_CHECK_IDL_C(TITLE, [PRE-IDL-TXN], TRANSACTIONS, OUTPUT, [KEYWORDS], # [FILTER]) # @@ -19,15 +67,46 @@ AT_BANNER([OVSDB -- interface description language (IDL)]) m4_define([OVSDB_CHECK_IDL_C], [AT_SETUP([$1 - C]) AT_KEYWORDS([ovsdb server idl positive $5]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest]) m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl unix:socket $3], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), + [0], [$4]) + OVSDB_SERVER_SHUTDOWN + AT_CLEANUP]) + +# same as OVSDB_CHECK_IDL but uses tcp. +m4_define([OVSDB_CHECK_IDL_TCP_C], + [AT_SETUP([$1 - C - tcp]) + AT_KEYWORDS([ovsdb server idl positive tcp socket $5]) + AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"]) + PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) + + m4_if([$2], [], [], + [AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT $2], [0], [ignore], [ignore])]) + AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl tcp:127.0.0.1:$TCP_PORT $3], + [0], [stdout], [ignore]) + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), + [0], [$4]) + OVSDB_SERVER_SHUTDOWN + AT_CLEANUP]) + +# same as OVSDB_CHECK_IDL but uses tcp6. +m4_define([OVSDB_CHECK_IDL_TCP6_C], + [AT_SETUP([$1 - C - tcp6]) + AT_SKIP_IF([test "$IS_WIN32" = "yes"]) + AT_SKIP_IF([test $HAVE_IPV6 = no]) + AT_KEYWORDS([ovsdb server idl positive tcp6 socket $5]) + AT_CHECK([ovsdb_start_idltest "ptcp:0:[[::1]]"]) + PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) + + m4_if([$2], [], [], + [AT_CHECK([ovsdb-client transact tcp:[[::1]]:$TCP_PORT $2], [0], [ignore], [ignore])]) + AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl tcp:[[::1]]:$TCP_PORT $3], + [0], [stdout], [ignore]) + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), [0], [$4]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) @@ -37,22 +116,19 @@ m4_define([OVSDB_CHECK_IDL_PYN], [AT_SETUP([$1]) AT_SKIP_IF([test $7 = no]) AT_KEYWORDS([ovsdb server idl positive Python $5]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest]) m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) AT_CHECK([$8 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket $3], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), [0], [$4]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) m4_define([OVSDB_CHECK_IDL_PY], [OVSDB_CHECK_IDL_PYN([$1 - Python2], [$2], [$3], [$4], [$5], [$6], - [$HAVE_PYTHON], [$PYTHON]) + [$HAVE_PYTHON2], [$PYTHON2]) OVSDB_CHECK_IDL_PYN([$1 - Python3], [$2], [$3], [$4], [$5], [$6], [$HAVE_PYTHON3], [$PYTHON3])]) @@ -60,22 +136,19 @@ m4_define([OVSDB_CHECK_IDL_REGISTER_COLUMNS_PYN], [AT_SETUP([$1 - register_columns]) AT_SKIP_IF([test $7 = no]) AT_KEYWORDS([ovsdb server idl positive Python register_columns $5]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest]) m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) - AT_CHECK([$8 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket ?simple:b,ba,i,ia,r,ra,s,sa,u,ua?link1:i,k,ka,l2?link2:i,l1 $3], + AT_CHECK([$8 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket ?simple:b,ba,i,ia,r,ra,s,sa,u,ua?link1:i,k,ka,l2?link2:i,l1?singleton:name $3], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), [0], [$4]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) m4_define([OVSDB_CHECK_IDL_REGISTER_COLUMNS_PY], [OVSDB_CHECK_IDL_REGISTER_COLUMNS_PYN([$1 - Python2], [$2], [$3], [$4], [$5], [$6], - [$HAVE_PYTHON], [$PYTHON]) + [$HAVE_PYTHON2], [$PYTHON2]) OVSDB_CHECK_IDL_REGISTER_COLUMNS_PYN([$1 - Python3], [$2], [$3], [$4], [$5], [$6], [$HAVE_PYTHON3], [$PYTHON3])]) @@ -84,27 +157,50 @@ m4_define([OVSDB_CHECK_IDL_TCP_PYN], [AT_SETUP([$1 - tcp]) AT_SKIP_IF([test $7 = no]) AT_KEYWORDS([ovsdb server idl positive Python with tcp socket $5]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server --log-file '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"]) PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT $2], [0], [ignore], [ignore])]) AT_CHECK([$8 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema tcp:127.0.0.1:$TCP_PORT $3], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), [0], [$4]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) m4_define([OVSDB_CHECK_IDL_TCP_PY], [OVSDB_CHECK_IDL_TCP_PYN([$1 - Python2], [$2], [$3], [$4], [$5], [$6], - [$HAVE_PYTHON], [$PYTHON]) + [$HAVE_PYTHON2], [$PYTHON2]) OVSDB_CHECK_IDL_TCP_PYN([$1 - Python3], [$2], [$3], [$4], [$5], [$6], [$HAVE_PYTHON3], [$PYTHON3])]) +# same as OVSDB_CHECK_IDL but uses the Python IDL implementation with tcp +# with multiple remotes with only one remote reachable +m4_define([OVSDB_CHECK_IDL_TCP_MULTIPLE_REMOTES_PYN], + [AT_SETUP([$1 - tcp]) + AT_SKIP_IF([test $7 = no]) + AT_KEYWORDS([ovsdb server idl positive Python with tcp socket $5]) + AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"]) + PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) + WRONG_PORT_1=$((TCP_PORT + 101)) + WRONG_PORT_2=$((TCP_PORT + 102)) + remote=tcp:127.0.0.1:$WRONG_PORT_1,tcp:127.0.0.1:$TCP_PORT,tcp:127.0.0.1:$WRONG_PORT_2 + m4_if([$2], [], [], + [AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT $2], [0], [ignore], [ignore])]) + AT_CHECK([$8 $srcdir/test-ovsdb.py -t20 idl $srcdir/idltest.ovsschema $remote $3], + [0], [stdout], [ignore]) + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), + [0], [$4]) + OVSDB_SERVER_SHUTDOWN + AT_CLEANUP]) + +m4_define([OVSDB_CHECK_IDL_TCP_MULTIPLE_REMOTES_PY], + [OVSDB_CHECK_IDL_TCP_MULTIPLE_REMOTES_PYN([$1 - Python2 (multiple remotes)], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON], [$PYTHON]) + OVSDB_CHECK_IDL_TCP_MULTIPLE_REMOTES_PYN([$1 - Python3 (multiple remotes)], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON3], [$PYTHON3])]) + # same as OVSDB_CHECK_IDL but uses the Python IDL implementation with tcp6 m4_define([OVSDB_CHECK_IDL_TCP6_PYN], [AT_SETUP([$1 - tcp6]) @@ -112,10 +208,7 @@ m4_define([OVSDB_CHECK_IDL_TCP6_PYN], AT_SKIP_IF([test "$IS_WIN32" = "yes"]) AT_SKIP_IF([test $HAVE_IPV6 = no]) AT_KEYWORDS([ovsdb server idl positive Python with tcp6 socket $5]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server --log-file '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=ptcp:0:[[::1]] --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest "ptcp:0:[[::1]]"]) PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) echo "TCP_PORT=$TCP_PORT" @@ -123,47 +216,123 @@ m4_define([OVSDB_CHECK_IDL_TCP6_PYN], [AT_CHECK([ovsdb-client transact "tcp:[[::1]]:$TCP_PORT" $2], [0], [ignore], [ignore])]) AT_CHECK([$8 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema tcp:[[::1]]:$TCP_PORT $3], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), [0], [$4]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) m4_define([OVSDB_CHECK_IDL_TCP6_PY], [OVSDB_CHECK_IDL_TCP6_PYN([$1 - Python2], [$2], [$3], [$4], [$5], [$6], - [$HAVE_PYTHON], [$PYTHON]) + [$HAVE_PYTHON2], [$PYTHON2]) OVSDB_CHECK_IDL_TCP6_PYN([$1 - Python3], [$2], [$3], [$4], [$5], [$6], [$HAVE_PYTHON3], [$PYTHON3])]) +m4_define([OVSDB_CHECK_IDL_TCP6_MULTIPLE_REMOTES_PYN], + [AT_SETUP([$1 - tcp6]) + AT_SKIP_IF([test $7 = no]) + AT_SKIP_IF([test "$IS_WIN32" = "yes"]) + AT_SKIP_IF([test $HAVE_IPV6 = no]) + AT_KEYWORDS([ovsdb server idl positive Python with tcp6 socket $5]) + AT_CHECK([ovsdb_start_idltest "ptcp:0:[[::1]]"]) + PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) + WRONG_PORT_1=$((TCP_PORT + 101)) + WRONG_PORT_2=$((TCP_PORT + 102)) + remote="tcp:[[::1]]:$WRONG_PORT_1,tcp:[[::1]]:$TCP_PORT,tcp:[[::1]]:$WRONG_PORT_2" + m4_if([$2], [], [], + [AT_CHECK([ovsdb-client transact "tcp:[[::1]]:$TCP_PORT" $2], [0], [ignore], [ignore])]) + AT_CHECK([$8 $srcdir/test-ovsdb.py -t20 idl $srcdir/idltest.ovsschema $remote $3], + [0], [stdout], [ignore]) + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), + [0], [$4]) + OVSDB_SERVER_SHUTDOWN + AT_CLEANUP]) + +m4_define([OVSDB_CHECK_IDL_TCP6_MULTIPLE_REMOTES_PY], + [OVSDB_CHECK_IDL_TCP6_MULTIPLE_REMOTES_PYN([$1 - Python2 (multiple remotes)], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON], [$PYTHON]) + OVSDB_CHECK_IDL_TCP6_MULTIPLE_REMOTES_PYN([$1 - Python3 (multiple remotes)], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON3], [$PYTHON3])]) + +# same as OVSDB_CHECK_IDL but uses the Python IDL implementation with SSL +m4_define([OVSDB_CHECK_IDL_SSL_PYN], + [AT_SETUP([$1 - SSL]) + AT_SKIP_IF([test "$HAVE_OPENSSL" = no]) + AT_SKIP_IF([test $7 = no]) + $8 -c "import OpenSSL.SSL" + SSL_PRESENT=$? + AT_SKIP_IF([test $SSL_PRESENT != 0]) + AT_KEYWORDS([ovsdb server idl positive Python with ssl socket $5]) + AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], + [0], [stdout], [ignore]) + PKIDIR=$abs_top_builddir/tests + AT_CHECK([ovsdb-server -vconsole:warn --log-file --detach --no-chdir \ + --pidfile \ + --private-key=$PKIDIR/testpki-privkey2.pem \ + --certificate=$PKIDIR/testpki-cert2.pem \ + --ca-cert=$PKIDIR/testpki-cacert.pem \ + --remote=pssl:0:127.0.0.1 db]) + on_exit 'kill `cat ovsdb-server.pid`' + PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) + m4_if([$2], [], [], + [AT_CHECK([ovsdb-client \ + --private-key=$PKIDIR/testpki-privkey2.pem \ + --certificate=$PKIDIR/testpki-cert2.pem \ + --ca-cert=$PKIDIR/testpki-cacert.pem \ + transact "ssl:127.0.0.1:$TCP_PORT" $2], [0], [ignore], [ignore])]) + AT_CHECK([$8 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema \ + ssl:127.0.0.1:$TCP_PORT $PKIDIR/testpki-privkey.pem \ + $PKIDIR/testpki-cert.pem $PKIDIR/testpki-cacert.pem $3], + [0], [stdout], [ignore]) + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), + [0], [$4]) + OVSDB_SERVER_SHUTDOWN + AT_CLEANUP]) + +m4_define([OVSDB_CHECK_IDL_SSL_PY], + [OVSDB_CHECK_IDL_SSL_PYN([$1 - Python2], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON], [$PYTHON]) + OVSDB_CHECK_IDL_SSL_PYN([$1 - Python3], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON3], [$PYTHON3])]) + m4_define([OVSDB_CHECK_IDL], [OVSDB_CHECK_IDL_C($@) + OVSDB_CHECK_IDL_TCP_C($@) + OVSDB_CHECK_IDL_TCP6_C($@) OVSDB_CHECK_IDL_PY($@) OVSDB_CHECK_IDL_REGISTER_COLUMNS_PY($@) OVSDB_CHECK_IDL_TCP_PY($@) - OVSDB_CHECK_IDL_TCP6_PY($@)]) + OVSDB_CHECK_IDL_TCP_MULTIPLE_REMOTES_PY($@) + OVSDB_CHECK_IDL_TCP6_PY($@) + OVSDB_CHECK_IDL_TCP6_MULTIPLE_REMOTES_PY($@) + OVSDB_CHECK_IDL_SSL_PY($@)]) # This test uses the Python IDL implementation with passive tcp -m4_define([OVSDB_CHECK_IDL_PASSIVE_TCP_PY], - [AT_SETUP([$1 - Python ptcp]) - AT_SKIP_IF([test $HAVE_PYTHON = no]) +m4_define([OVSDB_CHECK_IDL_PASSIVE_TCP_PYN], + [AT_SETUP([$1 ptcp]) + AT_SKIP_IF([test $7 = no]) AT_KEYWORDS([ovsdb server idl positive Python with tcp socket $5]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) # find free TCP port - AT_CHECK([ovsdb-server --log-file '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"]) PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) OVSDB_SERVER_SHUTDOWN + rm -f db # start OVSDB server in passive mode - AT_CHECK([ovsdb-server --log-file '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --remote=tcp:127.0.0.1:$TCP_PORT --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - AT_CHECK([$PYTHON $srcdir/test-ovsdb.py -t10 idl_passive $srcdir/idltest.ovsschema ptcp:127.0.0.1:$TCP_PORT $3], + AT_CHECK([ovsdb_start_idltest "tcp:127.0.0.1:$TCP_PORT"]) + AT_CHECK([$8 $srcdir/test-ovsdb.py -t10 idl_passive $srcdir/idltest.ovsschema ptcp:127.0.0.1:$TCP_PORT $3], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), [0], [$4]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP ]) +m4_define([OVSDB_CHECK_IDL_PASSIVE_TCP_PY], + [OVSDB_CHECK_IDL_PASSIVE_TCP_PYN([$1 - Python2], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON2], [$PYTHON2]) + OVSDB_CHECK_IDL_PASSIVE_TCP_PYN([$1 - Python3], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON3], [$PYTHON3])]) + OVSDB_CHECK_IDL_PASSIVE_TCP_PY([simple passive idl, initially empty, select empty], [], [['["idltest",{"op":"select","table":"link1","where":[]}]']], @@ -319,6 +488,52 @@ OVSDB_CHECK_IDL([simple idl, writing via IDL], 005: done ]]) +OVSDB_CHECK_IDL([simple idl, writing via IDL with unicode], + [['["idltest", + {"op": "insert", + "table": "simple", + "row": {"s": "(╯°□°)╯︵ ┻━┻"}}]']], + [['set 0 b 1, insert 1, set 1 s "¯\_(ツ)_/¯"']], + [[000: i=0 r=0 b=false s=(╯°□°)╯︵ ┻━┻ u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1> +001: commit, status=success +002: i=0 r=0 b=true s=(╯°□°)╯︵ ┻━┻ u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1> +002: i=1 r=0 b=false s="¯\_(ツ)_/¯" u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2> +003: done +]]) + +m4_define([OVSDB_CHECK_IDL_PYN_WITH_EXPOUT], + [AT_SETUP([$1]) + AT_SKIP_IF([test $7 = no]) + AT_KEYWORDS([ovsdb server idl positive Python $5]) + AT_CHECK([ovsdb_start_idltest]) + m4_if([$2], [], [], + [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) + AT_CHECK([$8 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket $3], + [0], [stdout], [ignore]) + echo "$4" > expout + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), + [0], [expout]) + OVSDB_SERVER_SHUTDOWN + AT_CLEANUP]) + +m4_define([OVSDB_CHECK_IDL_PY_WITH_EXPOUT], + [OVSDB_CHECK_IDL_PYN_WITH_EXPOUT([$1 - Python2], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON2], [$PYTHON2]) + OVSDB_CHECK_IDL_PYN_WITH_EXPOUT([$1 - Python3], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON3], [$PYTHON3])]) + +OVSDB_CHECK_IDL_PY_WITH_EXPOUT([simple idl, writing large data via IDL with unicode], + [['["idltest", + {"op": "insert", + "table": "simple", + "row": {"s": "'$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..50})'"}}]']], + [['set 0 b 1, insert 1, set 1 s '$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..100})'']], + [[000: i=0 r=0 b=false s=$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..50}) u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1> +001: commit, status=success +002: i=0 r=0 b=true s=$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..50}) u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1> +002: i=1 r=0 b=false s=$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..100}) u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2> +003: done]]) + OVSDB_CHECK_IDL([simple idl, handling verification failure], [['["idltest", {"op": "insert", @@ -397,8 +612,8 @@ OVSDB_CHECK_IDL([simple idl, conditional, false condition], "row": {"i": 1, "r": 2.0, "b": true}}]']], - [['condition add simple [false]' \ - 'condition remove simple [false]']], + [['condition simple []' \ + 'condition simple [true]']], [[000: change conditions 001: empty 002: change conditions @@ -413,8 +628,8 @@ OVSDB_CHECK_IDL([simple idl, conditional, true condition], "row": {"i": 1, "r": 2.0, "b": true}}]']], - [['condition add simple [false]' \ - 'condition add simple [true]']], + [['condition simple []' \ + 'condition simple [true]']], [[000: change conditions 001: empty 002: change conditions @@ -434,8 +649,8 @@ OVSDB_CHECK_IDL([simple idl, conditional, multiple clauses in condition], "row": {"i": 2, "r": 3.0, "b": true}}]']], - [['condition add simple [false]' \ - 'condition add simple [["i","==",1],["i","==",2]]']], + [['condition simple []' \ + 'condition simple [["i","==",1],["i","==",2]]']], [[000: change conditions 001: empty 002: change conditions @@ -451,8 +666,8 @@ OVSDB_CHECK_IDL([simple idl, conditional, modify as insert due to condition], "row": {"i": 1, "r": 2.0, "b": true}}]']], - [['condition add simple [false]' \ - 'condition add simple [["i","==",1]]']], + [['condition simple []' \ + 'condition simple [["i","==",1]]']], [[000: change conditions 001: empty 002: change conditions @@ -467,9 +682,9 @@ OVSDB_CHECK_IDL([simple idl, conditional, modify as delete due to condition], "row": {"i": 1, "r": 2.0, "b": true}}]']], - [['condition add simple [false]' \ - 'condition add simple [["i","==",1],["i","==",2]]' \ - 'condition remove simple [["i","==",1]]' \ + [['condition simple []' \ + 'condition simple [["i","==",1],["i","==",2]]' \ + 'condition simple [["i","==",2]]' \ '["idltest", {"op": "insert", "table": "simple", @@ -502,10 +717,10 @@ OVSDB_CHECK_IDL([simple idl, conditional, multiple tables], "table": "link2", "row": {"i": 2}, "uuid-name": "row0"}]']], - [['condition add simple [false];condition add link1 [false];condition add link2 [false]' \ - 'condition add simple [["i","==",1]]' \ - 'condition add link1 [["i","==",0]]' \ - 'condition add link2 [["i","==",3]]' \ + [['condition simple [];link1 [];link2 []' \ + 'condition simple [["i","==",1]]' \ + 'condition link1 [["i","==",0]]' \ + 'condition link2 [["i","==",3]]' \ '+["idltest", {"op": "insert", "table": "link2", @@ -686,6 +901,32 @@ OVSDB_CHECK_IDL([external-linking idl, consistent ops], 003: done ]]) +OVSDB_CHECK_IDL([singleton idl, constraints], + [], + [['["idltest", + {"op": "insert", + "table": "singleton", + "row": {"name": "foo"}}]' \ + '["idltest", + {"op": "insert", + "table": "singleton", + "row": {"name": "bar"}}]' \ + '+["idltest", + {"op": "delete", + "table": "singleton", + "where": [["_uuid", "==", ["uuid", "#0#"]]]}, + {"op": "insert", + "table": "singleton", + "row": {"name": "bar"}}]']], + [[000: empty +001: {"error":null,"result":[{"uuid":["uuid","<0>"]}]} +002: name=foo uuid=<0> +003: {"error":null,"result":[{"uuid":["uuid","<1>"]},{"details":"transaction causes \"singleton\" table to contain 2 rows, greater than the schema-defined limit of 1 row(s)","error":"constraint violation"}]} +004: {"error":null,"result":[{"count":1},{"uuid":["uuid","<2>"]}]} +005: name=bar uuid=<2> +006: done +]]) + OVSDB_CHECK_IDL_PY([external-linking idl, insert ops], [], [['linktest']], @@ -729,10 +970,7 @@ AT_KEYWORDS([ovsdb server idl positive]) # table link2 and column l2 have been deleted. But the IDL still # expects them to be there, so this test checks that it properly # tolerates them being missing. -AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest2.ovsschema], - [0], [stdout], [ignore]) -AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) -on_exit 'kill `cat pid`' +AT_CHECK([ovsdb_start_idltest "" "$abs_srcdir/idltest2.ovsschema"]) AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl unix:socket ['["idltest", {"op": "insert", "table": "link1", @@ -757,8 +995,8 @@ AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl uni "table": "link1", "where": [], "row": {"k": ["uuid", "#0#"]}}]']], - [0], [stdout], [stderr]) -AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl], [0], + [0], [stdout], [stderr]) +AT_CHECK([sort stdout | uuidfilt], [0], [[000: empty 001: {"error":null,"result":[{"uuid":["uuid","<0>"]}]} 002: i=0 k=0 ka=[] l2= uuid=<0> @@ -780,13 +1018,14 @@ AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl], [0], # Check that ovsdb-idl figured out that table link2 and column l2 are missing. AT_CHECK([grep ovsdb_idl stderr | sort], [0], [dnl test-ovsdb|ovsdb_idl|idltest database lacks link2 table (database needs upgrade?) +test-ovsdb|ovsdb_idl|idltest database lacks singleton table (database needs upgrade?) test-ovsdb|ovsdb_idl|link1 table in idltest database lacks l2 column (database needs upgrade?) ]) # Check that ovsdb-idl sent on "monitor" request and that it didn't # mention that table or column, and (for paranoia) that it did mention another # table and column. -AT_CHECK([grep -c '"monitor\|monitor_cond"' stderr], [0], [1 +AT_CHECK([grep -c '"monitor\|monitor_cond"' stderr], [0], [2 ]) AT_CHECK([grep '"monitor\|monitor_cond"' stderr | grep link2], [1]) AT_CHECK([grep '"monitor\|monitor_cond"' stderr | grep l2], [1]) @@ -797,23 +1036,26 @@ AT_CHECK([grep '"monitor\|monitor_cond"' stderr | grep -c '"ua"'], [0], [1 OVSDB_SERVER_SHUTDOWN AT_CLEANUP -m4_define([OVSDB_CHECK_IDL_FETCH_COLUMNS_PY], - [AT_SETUP([$1 - Python fetch]) - AT_SKIP_IF([test $HAVE_PYTHON = no]) +m4_define([OVSDB_CHECK_IDL_FETCH_COLUMNS_PYN], + [AT_SETUP([$1 fetch]) + AT_SKIP_IF([test $8 = no]) AT_KEYWORDS([ovsdb server idl positive Python increment fetch $6]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest]) m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) - AT_CHECK([$PYTHON $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket [$3] $4], + AT_CHECK([$9 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket [$3] $4], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$7],,, [[| $7]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$7],,, [[| $7]]), [0], [$5]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) +m4_define([OVSDB_CHECK_IDL_FETCH_COLUMNS_PY], + [OVSDB_CHECK_IDL_FETCH_COLUMNS_PYN([$1 - Python2], [$2], [$3], [$4], [$5], [$6], [$7], + [$HAVE_PYTHON2], [$PYTHON2]) + OVSDB_CHECK_IDL_FETCH_COLUMNS_PYN([$1 - Python3], [$2], [$3], [$4], [$5], [$6], [$7], + [$HAVE_PYTHON3], [$PYTHON3])]) + m4_define([OVSDB_CHECK_IDL_FETCH_COLUMNS], [OVSDB_CHECK_IDL_FETCH_COLUMNS_PY($@)]) @@ -845,21 +1087,25 @@ OVSDB_CHECK_IDL_FETCH_COLUMNS([simple idl, initially populated], 003: done ]]) -m4_define([OVSDB_CHECK_IDL_WO_MONITOR_COND_PY], - [AT_SETUP([$1 - Python]) - AT_SKIP_IF([test $HAVE_PYTHON = no]) +m4_define([OVSDB_CHECK_IDL_WO_MONITOR_COND_PYN], + [AT_SETUP([$1]) + AT_SKIP_IF([test $6 = no]) AT_KEYWORDS([ovsdb server idl Python monitor $4]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - AT_CHECK([ovs-appctl -t "`pwd`"/unixctl ovsdb-server/disable-monitor-cond]) - AT_CHECK([$PYTHON $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket $2], - [0], [stdout], [ignore], [kill `cat pid`]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$5],,, [[| $5]]), - [0], [$3], [], [kill `cat pid`]) + AT_CHECK([ovsdb_start_idltest]) + AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/disable-monitor-cond]) + AT_CHECK([$7 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket $2], + [0], [stdout], [ignore]) + AT_CHECK([sort stdout | uuidfilt]m4_if([$5],,, [[| $5]]), + [0], [$3]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) +m4_define([OVSDB_CHECK_IDL_WO_MONITOR_COND_PY], + [OVSDB_CHECK_IDL_WO_MONITOR_COND_PYN([$1 - Python2], [$2], [$3], [$4], [$5], + [$HAVE_PYTHON2], [$PYTHON2]) + OVSDB_CHECK_IDL_WO_MONITOR_COND_PYN([$1 - Python3], [$2], [$3], [$4], [$5], + [$HAVE_PYTHON3], [$PYTHON3])]) + m4_define([OVSDB_CHECK_IDL_WO_MONITOR_COND], [OVSDB_CHECK_IDL_WO_MONITOR_COND_PY($@)]) @@ -945,15 +1191,12 @@ OVSDB_CHECK_IDL_WO_MONITOR_COND([simple idl disable monitor-cond], m4_define([OVSDB_CHECK_IDL_TRACK_C], [AT_SETUP([$1 - C]) AT_KEYWORDS([ovsdb server idl tracking positive $5]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest]) m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl unix:socket $3], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), [0], [$4]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) @@ -1077,15 +1320,12 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially empty, various ops], m4_define([OVSDB_CHECK_IDL_PARTIAL_UPDATE_MAP_COLUMN], [AT_SETUP([$1 - C]) AT_KEYWORDS([ovsdb server idl partial update map column positive $5]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest]) m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-partial-update-map-column unix:socket $3], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), [0], [$4]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) @@ -1112,27 +1352,29 @@ OVSDB_CHECK_IDL_PY([partial-map idl], [['["idltest", {"op":"insert", "table":"simple2", "row":{"name":"myString1","smap":["map",[["key1","value1"],["key2","value2"]]]} }]'] ], - [?simple2:name,smap,imap 'partialmapinsertelement' 'partialmapdelelement'], -[[000: name=myString1 smap={key2: value2 key1: value1} imap={} + [?simple2:name,smap,imap 'partialmapinsertelement' 'partialmapinsertmultipleelements' 'partialmapdelelements' 'partialmapmutatenew'], +[[000: name=myString1 smap=[(key1 value1) (key2 value2)] imap=[] 001: commit, status=success -002: name=String2 smap={key2: value2 key1: myList1} imap={3: myids2} +002: name=String2 smap=[(key1 myList1) (key2 value2)] imap=[(3 myids2)] 003: commit, status=success -004: name=String2 smap={key1: myList1} imap={3: myids2} -005: done +004: name=String2 smap=[(key1 myList1) (key2 myList2) (key3 myList3) (key4 myList4)] imap=[(3 myids2)] +005: commit, status=success +006: name=String2 smap=[(key2 myList2)] imap=[(3 myids2)] +007: commit, status=success +008: name=String2 smap=[(key2 myList2)] imap=[(3 myids2)] +008: name=String2New smap=[(key1 newList1) (key2 newList2)] imap=[] +009: done ]]) m4_define([OVSDB_CHECK_IDL_PARTIAL_UPDATE_SET_COLUMN], [AT_SETUP([$1 - C]) AT_KEYWORDS([ovsdb server idl partial update set column positive $5]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - on_exit 'kill `cat pid`' + AT_CHECK([ovsdb_start_idltest]) m4_if([$2], [], [], [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-partial-update-set-column unix:socket $3], [0], [stdout], [ignore]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]), + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), [0], [$4]) OVSDB_SERVER_SHUTDOWN AT_CLEANUP]) @@ -1158,10 +1400,13 @@ OVSDB_CHECK_IDL_PARTIAL_UPDATE_SET_COLUMN([set, simple3 idl-partial-update-set-c ]]) OVSDB_CHECK_IDL_PY([partial-set idl], -[['["idltest", {"op":"insert", "table":"simple3", - "row":{"name":"mySet1","uset":["set", [[ "uuid", "0005b872-f9e5-43be-ae02-3184b9680e75" ], [ "uuid", "000d2f6a-76af-412f-b59d-e7bcd3e84eff" ]]]} }, {"op":"insert", "table":"simple4", "row":{"name":"seed"}}]'] +[['["idltest", {"op":"insert", "table":"simple3", "uuid-name":"newrow", + "row":{"name":"mySet1","uset":["set", [[ "uuid", "0005b872-f9e5-43be-ae02-3184b9680e75" ]]]} }, + {"op":"insert", "table":"simple4", "row":{"name":"seed"}}, + {"op":"mutate", "table":"simple3", "where":[["_uuid", "==", ["named-uuid", "newrow"]]], + "mutations": [["uset", "insert", ["set", [["uuid", "000d2f6a-76af-412f-b59d-e7bcd3e84eff"]]]]]}]'] ], - ['partialrenamesetadd' 'partialsetadd2' 'partialsetdel' 'partialsetref'], + ['partialrenamesetadd' 'partialduplicateadd' 'partialsetdel' 'partialsetref' 'partialsetoverrideops' 'partialsetadddelete' 'partialsetmutatenew'], [[000: name=mySet1 uset=[<0> <1>] 001: commit, status=success 002: name=String2 uset=[<0> <1> <2>] @@ -1171,27 +1416,38 @@ OVSDB_CHECK_IDL_PY([partial-set idl], 006: name=String2 uset=[<0> <1> <3>] 007: commit, status=success 008: name=String2 uset=[<0> <1> <3>] -009: done +009: commit, status=success +010: name=String2 uset=[<3>] +011: commit, status=success +012: name=String2 uset=[<4> <5>] +013: commit, status=success +014: name=String2 uset=[<4> <5>] +014: name=String3 uset=[<6>] +015: done ]]) +m4_define([OVSDB_CHECK_IDL_NOTIFY_PYN], + [OVSDB_CHECK_IDL_PYN([$1], [], [$2], [$3], [notify $4], [$5], [$6], [$7])]) + m4_define([OVSDB_CHECK_IDL_NOTIFY_PY], - [AT_SETUP([$1 - Python]) - AT_SKIP_IF([test $HAVE_PYTHON = no]) - AT_KEYWORDS([ovsdb server idl Python notify $4]) - AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema], - [0], [stdout], [ignore]) - AT_CHECK([ovsdb-server '-vPATTERN:console:ovsdb-server|%c|%m' --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) - AT_CHECK([$PYTHON $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket $2], - [0], [stdout], [ignore], [kill `cat pid`]) - AT_CHECK([sort stdout | ${PERL} $srcdir/uuidfilt.pl]m4_if([$5],,, [[| $5]]), - [0], [$3], [], [kill `cat pid`]) - OVSDB_SERVER_SHUTDOWN - AT_CLEANUP]) + [OVSDB_CHECK_IDL_NOTIFY_PYN([$1 - Python2], [$2], [$3], [$4], [$5], + [$HAVE_PYTHON2], [$PYTHON2]) + OVSDB_CHECK_IDL_NOTIFY_PYN([$1 - Python3], [$2], [$3], [$4], [$5], + [$HAVE_PYTHON3], [$PYTHON3])]) +# This test uses the Python IDL implementation with ssl +m4_define([OVSDB_CHECK_IDL_NOTIFY_SSL_PYN], + [OVSDB_CHECK_IDL_SSL_PYN([$1], [], [$2], [$3], [notify $4], [$5], [$6], [$7])]) -m4_define([OVSDB_CHECK_IDL_NOTIFY], - [OVSDB_CHECK_IDL_NOTIFY_PY($@)]) +m4_define([OVSDB_CHECK_IDL_NOTIFY_SSL_PY], + [OVSDB_CHECK_IDL_NOTIFY_SSL_PYN([$1 - Python2], [$2], [$3], [$4], [$5], + [$HAVE_PYTHON2], [$PYTHON2]) + OVSDB_CHECK_IDL_NOTIFY_SSL_PYN([$1 - Python3], [$2], [$3], [$4], [$5], + [$HAVE_PYTHON3], [$PYTHON3])]) +m4_define([OVSDB_CHECK_IDL_NOTIFY], + [OVSDB_CHECK_IDL_NOTIFY_PY($@) + OVSDB_CHECK_IDL_NOTIFY_SSL_PY($@)]) OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify], [['track-notify' \ @@ -1245,39 +1501,424 @@ OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify], "where": [["i", "==", 0]]}]' \ 'reconnect']], [[000: empty -001: {"error":null,"result":[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]} -002: event:create, row={i=0 r=0 b=false s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>}, updates=None -002: event:create, row={i=1 r=2 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>}, updates=None -002: i=0 r=0 b=false s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1> -002: i=1 r=2 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0> +000: event:create, row={uuid=<0>}, updates=None +000: event:create, row={uuid=<1>}, updates=None +001: {"error":null,"result":[{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]} +002: event:create, row={i=0 r=0 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>}, updates=None +002: event:create, row={i=1 r=2 b=true s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2>}, updates=None +002: i=0 r=0 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3> +002: i=1 r=2 b=true s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2> 003: {"error":null,"result":[{"count":2}]} -004: event:update, row={i=1 r=2 b=false s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>}, updates={b=true uuid=<0>} -004: i=0 r=0 b=false s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1> -004: i=1 r=2 b=false s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0> +004: event:update, row={i=1 r=2 b=false s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2>}, updates={b=true uuid=<2>} +004: i=0 r=0 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3> +004: i=1 r=2 b=false s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2> 005: {"error":null,"result":[{"count":2}]} -006: event:update, row={i=0 r=123.5 b=false s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>}, updates={r=0 uuid=<1>} -006: event:update, row={i=1 r=123.5 b=false s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>}, updates={r=2 uuid=<0>} -006: i=0 r=123.5 b=false s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1> -006: i=1 r=123.5 b=false s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0> -007: {"error":null,"result":[{"uuid":["uuid","<6>"]}]} -008: event:create, row={i=-1 r=125 b=false s= u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>}, updates=None -008: i=-1 r=125 b=false s= u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6> -008: i=0 r=123.5 b=false s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1> -008: i=1 r=123.5 b=false s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0> +006: event:update, row={i=0 r=123.5 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>}, updates={r=0 uuid=<3>} +006: event:update, row={i=1 r=123.5 b=false s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2>}, updates={r=2 uuid=<2>} +006: i=0 r=123.5 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3> +006: i=1 r=123.5 b=false s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2> +007: {"error":null,"result":[{"uuid":["uuid","<8>"]}]} +008: event:create, row={i=-1 r=125 b=false s= u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8>}, updates=None +008: i=-1 r=125 b=false s= u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8> +008: i=0 r=123.5 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3> +008: i=1 r=123.5 b=false s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2> 009: {"error":null,"result":[{"count":2}]} -010: event:update, row={i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>}, updates={s= uuid=<6>} -010: event:update, row={i=0 r=123.5 b=false s=newstring u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>}, updates={s= uuid=<1>} -010: i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6> -010: i=0 r=123.5 b=false s=newstring u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1> -010: i=1 r=123.5 b=false s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0> +010: event:update, row={i=-1 r=125 b=false s=newstring u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8>}, updates={s= uuid=<8>} +010: event:update, row={i=0 r=123.5 b=false s=newstring u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>}, updates={s= uuid=<3>} +010: i=-1 r=125 b=false s=newstring u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8> +010: i=0 r=123.5 b=false s=newstring u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3> +010: i=1 r=123.5 b=false s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2> 011: {"error":null,"result":[{"count":1}]} -012: event:delete, row={i=0 r=123.5 b=false s=newstring u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>}, updates=None -012: i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6> -012: i=1 r=123.5 b=false s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0> +012: event:delete, row={i=0 r=123.5 b=false s=newstring u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>}, updates=None +012: i=-1 r=125 b=false s=newstring u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8> +012: i=1 r=123.5 b=false s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2> 013: reconnect -014: event:create, row={i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>}, updates=None -014: event:create, row={i=1 r=123.5 b=false s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>}, updates=None -014: i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6> -014: i=1 r=123.5 b=false s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0> +014: event:create, row={i=-1 r=125 b=false s=newstring u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8>}, updates=None +014: event:create, row={i=1 r=123.5 b=false s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2>}, updates=None +014: event:create, row={uuid=<0>}, updates=None +014: event:create, row={uuid=<1>}, updates=None +014: i=-1 r=125 b=false s=newstring u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8> +014: i=1 r=123.5 b=false s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2> 015: done ]]) + +# Tests to verify the functionality of the one column compound index. +# It tests index for one column string and integer indexes. +# The run of test-ovsdb generates the output of the display of data using the different indexes defined in +# the program. +# Then, some at_checks are used to verify the correctness of the corresponding index as well as the existence +# of all the rows involved in the test. +m4_define([OVSDB_CHECK_IDL_COMPOUND_INDEX_SINGLE_COLUMN_C], + [AT_SETUP([$1 - C]) + AT_KEYWORDS([ovsdb server idl compound_index_single_column compound_index positive $5]) + AT_CHECK([ovsdb_start_idltest]) + m4_if([$2], [], [], + [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) +# Generate the data to be tested. + AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-compound-index unix:socket $3], + [0], [stdout], [ignore]) +# Filter the rows of data that corresponds to the string index eliminating the extra columns of data. +# This is done to verifiy that the output data is in the correct and expected order. + AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: s=.*' | sed -e 's/ i=.*//g']], + [0], [$4]) +# Here, the data is filtered and sorted in order to have all the rows in the index and be +# able to determined that all the involved rows are present. + AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: s=.*' | sort -k 1,1n -k 2,2 -k 3,3]], + [0], [$5]) +# Filter the rows of data that corresponds to the integer index eliminating the extra columns of data. +# This is done to verifiy that the output data is in the correct and expected order. + AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: i=.*' | sed -e 's/ s=.*//g']], + [0], [$6]) +# Here again, the data is filtered and sorted in order to have all the rows in the index and be +# able to determined that all the involved rows are present. + AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: i=.*' | sort -k 1,1n -k 2,2 -k 3,3]], + [0], [$7]) + OVSDB_SERVER_SHUTDOWN + AT_CLEANUP]) + +OVSDB_CHECK_IDL_COMPOUND_INDEX_SINGLE_COLUMN_C([Compound_index, single column test ], + [['["idltest", + {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 1, "b":true, "r":101.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 2, "b":false, "r":102.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 10, "b":true, "r":110.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 1, "b":false, "r":110.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 2, "b":true, "r":120.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 2, "b":true, "r":122.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 4, "b":true, "r":130.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List005", "i": 5, "b":true, "r":130.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List020", "i": 20, "b":true, "r":220.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List020", "i": 19, "b":true, "r":219.0}} + ]']], + [idl_compound_index_single_column], + [001: s=List000 +001: s=List000 +001: s=List000 +001: s=List001 +001: s=List001 +001: s=List001 +001: s=List001 +001: s=List005 +001: s=List020 +001: s=List020 +003: s=List001 +003: s=List001 +003: s=List001 +003: s=List001 +], +[001: s=List000 i=1 b=True r=101.000000 +001: s=List000 i=10 b=True r=110.000000 +001: s=List000 i=2 b=False r=102.000000 +001: s=List001 i=1 b=False r=110.000000 +001: s=List001 i=2 b=True r=120.000000 +001: s=List001 i=2 b=True r=122.000000 +001: s=List001 i=4 b=True r=130.000000 +001: s=List005 i=5 b=True r=130.000000 +001: s=List020 i=19 b=True r=219.000000 +001: s=List020 i=20 b=True r=220.000000 +003: s=List001 i=1 b=False r=110.000000 +003: s=List001 i=2 b=True r=120.000000 +003: s=List001 i=2 b=True r=122.000000 +003: s=List001 i=4 b=True r=130.000000 +], +[002: i=1 +002: i=1 +002: i=2 +002: i=2 +002: i=2 +002: i=4 +002: i=5 +002: i=10 +002: i=19 +002: i=20 +004: i=5 +005: i=4 +005: i=5 +006: i=5 +006: i=10 +006: i=19 +006: i=20 +006: i=54 +007: i=5 +007: i=19 +007: i=20 +007: i=30 +007: i=54 +008: i=1 +008: i=1 +008: i=2 +008: i=2 +008: i=2 +008: i=5 +008: i=19 +008: i=20 +008: i=30 +008: i=54 +], +[002: i=1 s=List000 b=True r=101.000000 +002: i=1 s=List001 b=False r=110.000000 +002: i=10 s=List000 b=True r=110.000000 +002: i=19 s=List020 b=True r=219.000000 +002: i=2 s=List000 b=False r=102.000000 +002: i=2 s=List001 b=True r=120.000000 +002: i=2 s=List001 b=True r=122.000000 +002: i=20 s=List020 b=True r=220.000000 +002: i=4 s=List001 b=True r=130.000000 +002: i=5 s=List005 b=True r=130.000000 +004: i=5 s=List005 b=True r=130.000000 +005: i=4 s=List001 b=True r=130.000000 +005: i=5 s=List005 b=True r=130.000000 +006: i=10 s=List000 b=True r=110.000000 +006: i=19 s=List020 b=True r=219.000000 +006: i=20 s=List020 b=True r=220.000000 +006: i=5 s=List005 b=True r=130.000000 +006: i=54 s=Lista054 b=False r=0.000000 +007: i=19 s=List020 b=True r=219.000000 +007: i=20 s=List020 b=True r=220.000000 +007: i=30 s=List000 b=True r=110.000000 +007: i=5 s=List005 b=True r=130.000000 +007: i=54 s=Lista054 b=False r=0.000000 +008: i=1 s=List000 b=True r=101.000000 +008: i=1 s=List001 b=False r=110.000000 +008: i=19 s=List020 b=True r=219.000000 +008: i=2 s=List000 b=False r=102.000000 +008: i=2 s=List001 b=True r=120.000000 +008: i=2 s=List001 b=True r=122.000000 +008: i=20 s=List020 b=True r=220.000000 +008: i=30 s=List000 b=True r=110.000000 +008: i=5 s=List005 b=True r=130.000000 +008: i=54 s=Lista054 b=False r=0.000000 +]) + +# Tests to verify the functionality of two column compound index. +# It tests index for two columns using string and integer fields. +# The run of test-ovsdb generates the output of the display of data using the different indexes defined in +# the program. +# Then, some at_checks are used to verify the correctness of the corresponding index as well as the existence +# of all the rows involved in the test. +m4_define([OVSDB_CHECK_IDL_COMPOUND_INDEX_DOUBLE_COLUMN_C], + [AT_SETUP([$1 - C]) + AT_KEYWORDS([ovsdb server idl compound_index_double_column compound_index positive $5]) + AT_CHECK([ovsdb_start_idltest]) + m4_if([$2], [], [], + [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) +# Generate the data to be tested. + AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-compound-index unix:socket $3], + [0], [stdout], [ignore]) +# Filter the rows of data that corresponds to the string-integer index eliminating the extra columns of data. +# This is done to verifiy that the output data is in the correct and expected order. + AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: s=.*' | sed -e 's/ b=.*//g']], + [0], [$4]) +# Here, the data is filtered and sorted in order to have all the rows in the index and be +# able to determined that all the involved rows are present. + AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: s=.*' | sort -k 1,1n -k 2,2 -k 3,3]], + [0], [$5]) +# Filter the rows of data that corresponds to the integer index eliminating the extra columns of data. +# This is done to verifiy that the output data is in the correct and expected order. + AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: i=.*' | sed -e 's/ b=.*//g']], + [0], [$6]) +# Here again, the data is filtered and sorted in order to have all the rows in the index and be +# able to determined that all the involved rows are present. + AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: i=.*' | sort -k 1,1n -k 2,2 -k 3,3]], + [0], [$7]) + OVSDB_SERVER_SHUTDOWN + AT_CLEANUP]) + +OVSDB_CHECK_IDL_COMPOUND_INDEX_DOUBLE_COLUMN_C([Compound_index, double column test ], + [['["idltest", + {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 1, "b":true, "r":101.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 2, "b":false, "r":102.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 10, "b":true, "r":110.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 1, "b":false, "r":110.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 2, "b":true, "r":120.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 2, "b":true, "r":122.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 4, "b":true, "r":130.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List005", "i": 5, "b":true, "r":130.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List020", "i": 20, "b":true, "r":220.0}}, + {"op": "insert", "table": "simple", "row": {"s":"List020", "i": 19, "b":true, "r":219.0}} + ]']], + [idl_compound_index_double_column], + [001: s=List000 i=1 +001: s=List000 i=2 +001: s=List000 i=10 +001: s=List001 i=1 +001: s=List001 i=2 +001: s=List001 i=2 +001: s=List001 i=4 +001: s=List005 i=5 +001: s=List020 i=19 +001: s=List020 i=20 +002: s=List000 i=10 +002: s=List000 i=2 +002: s=List000 i=1 +002: s=List001 i=4 +002: s=List001 i=2 +002: s=List001 i=2 +002: s=List001 i=1 +002: s=List005 i=5 +002: s=List020 i=20 +002: s=List020 i=19 +003: s=List000 i=10 +004: s=List001 i=1 +004: s=List001 i=2 +004: s=List001 i=2 +004: s=List001 i=4 +004: s=List005 i=5 +], + [001: s=List000 i=1 b=True r=101.000000 +001: s=List000 i=10 b=True r=110.000000 +001: s=List000 i=2 b=False r=102.000000 +001: s=List001 i=1 b=False r=110.000000 +001: s=List001 i=2 b=True r=120.000000 +001: s=List001 i=2 b=True r=122.000000 +001: s=List001 i=4 b=True r=130.000000 +001: s=List005 i=5 b=True r=130.000000 +001: s=List020 i=19 b=True r=219.000000 +001: s=List020 i=20 b=True r=220.000000 +002: s=List000 i=1 b=True r=101.000000 +002: s=List000 i=10 b=True r=110.000000 +002: s=List000 i=2 b=False r=102.000000 +002: s=List001 i=1 b=False r=110.000000 +002: s=List001 i=2 b=True r=120.000000 +002: s=List001 i=2 b=True r=122.000000 +002: s=List001 i=4 b=True r=130.000000 +002: s=List005 i=5 b=True r=130.000000 +002: s=List020 i=19 b=True r=219.000000 +002: s=List020 i=20 b=True r=220.000000 +003: s=List000 i=10 b=True r=110.000000 +004: s=List001 i=1 b=False r=110.000000 +004: s=List001 i=2 b=True r=120.000000 +004: s=List001 i=2 b=True r=122.000000 +004: s=List001 i=4 b=True r=130.000000 +004: s=List005 i=5 b=True r=130.000000 +], + [005: i=1 s=List000 +005: i=1 s=List001 +005: i=2 s=List000 +005: i=2 s=List001 +005: i=2 s=List001 +005: i=4 s=List001 +005: i=5 s=List005 +005: i=10 s=List000 +005: i=19 s=List020 +005: i=20 s=List020 +006: i=20 s=List020 +006: i=19 s=List020 +006: i=10 s=List000 +006: i=5 s=List005 +006: i=4 s=List001 +006: i=2 s=List000 +006: i=2 s=List001 +006: i=2 s=List001 +006: i=1 s=List000 +006: i=1 s=List001 +], + [005: i=1 s=List000 b=True r=101.000000 +005: i=1 s=List001 b=False r=110.000000 +005: i=10 s=List000 b=True r=110.000000 +005: i=19 s=List020 b=True r=219.000000 +005: i=2 s=List000 b=False r=102.000000 +005: i=2 s=List001 b=True r=120.000000 +005: i=2 s=List001 b=True r=122.000000 +005: i=20 s=List020 b=True r=220.000000 +005: i=4 s=List001 b=True r=130.000000 +005: i=5 s=List005 b=True r=130.000000 +006: i=1 s=List000 b=True r=101.000000 +006: i=1 s=List001 b=False r=110.000000 +006: i=10 s=List000 b=True r=110.000000 +006: i=19 s=List020 b=True r=219.000000 +006: i=2 s=List000 b=False r=102.000000 +006: i=2 s=List001 b=True r=120.000000 +006: i=2 s=List001 b=True r=122.000000 +006: i=20 s=List020 b=True r=220.000000 +006: i=4 s=List001 b=True r=130.000000 +006: i=5 s=List005 b=True r=130.000000 +]) + +m4_define([OVSDB_CHECK_IDL_COMPOUND_INDEX_WITH_REF], + [AT_SETUP([$1 - C]) + AT_KEYWORDS([ovsdb server idl compound_index compound_index_with_ref positive $5]) + AT_CHECK([ovsdb_start_idltest]) + m4_if([$2], [], [], + [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])]) + AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-compound-index-with-ref unix:socket $3], + [0], [stdout], [ignore]) + AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]), + [0], [$4]) + OVSDB_SERVER_SHUTDOWN + AT_CLEANUP]) + +OVSDB_CHECK_IDL_COMPOUND_INDEX_WITH_REF([set, simple3 idl-compound-index-with-ref, initially populated], +[], +[], +[[000: After add to other table + set of strong ref +001: name= uset=[] uref=[[<0>]] +002: check simple4: not empty +003: Query using index with reference +004: name= uset=[] uref=[[<0>]] +005: After delete +007: check simple4: empty +008: End test +]]) + +m4_define([CHECK_STREAM_OPEN_BLOCK], + [AT_SETUP([Check Stream open block - C - $1]) + AT_SKIP_IF([test "$1" = "tcp6" && test "$IS_WIN32" = "yes"]) + AT_SKIP_IF([test "$1" = "tcp6" && test "$HAVE_IPV6" = "no"]) + AT_KEYWORDS([Check Stream open block $1]) + AT_CHECK([ovsdb_start_idltest "ptcp:0:$2"]) + PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) + WRONG_PORT=$(($TCP_PORT + 101)) + AT_CHECK([test-stream tcp:$2:$TCP_PORT], [0], [ignore]) + AT_CHECK([test-stream tcp:$2:$WRONG_PORT], [1], [ignore], [ignore]) + OVSDB_SERVER_SHUTDOWN + AT_CHECK([test-stream tcp:$2:$TCP_PORT], [1], [ignore], [ignore]) + AT_CLEANUP]) + +CHECK_STREAM_OPEN_BLOCK([tcp], [127.0.0.1]) +CHECK_STREAM_OPEN_BLOCK([tcp6], [[[::1]]]) + +m4_define([CHECK_STREAM_OPEN_BLOCK_PY], + [AT_SETUP([$1]) + AT_SKIP_IF([test $2 = no]) + AT_KEYWORDS([Check PY Stream open block - $3]) + AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"]) + PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) + WRONG_PORT=$(($TCP_PORT + 101)) + AT_CHECK([$3 $srcdir/test-stream.py tcp:127.0.0.1:$TCP_PORT], [0], [ignore]) + AT_CHECK([$3 $srcdir/test-stream.py tcp:127.0.0.1:$WRONG_PORT], [1], [ignore]) + OVSDB_SERVER_SHUTDOWN + AT_CHECK([$3 $srcdir/test-stream.py tcp:127.0.0.1:$TCP_PORT], [1], [ignore]) + AT_CLEANUP]) + +CHECK_STREAM_OPEN_BLOCK_PY([Check PY2 Stream open block], [$HAVE_PYTHON2], [$PYTHON2]) +CHECK_STREAM_OPEN_BLOCK_PY([Check PY3 Stream open block], [$HAVE_PYTHON3], [$PYTHON3]) + +# same as OVSDB_CHECK_IDL but uses Python IDL implementation with tcp +# with multiple remotes to assert the idl connects to the leader of the Raft cluster +m4_define([OVSDB_CHECK_IDL_LEADER_ONLY_PYN], + [AT_SETUP([$1]) + AT_SKIP_IF([test $7 = no]) + AT_KEYWORDS([ovsdb server idl Python leader_only with tcp socket]) + m4_define([LPBK],[127.0.0.1]) + AT_CHECK([ovsdb_cluster_start_idltest $2 "ptcp:0:"LPBK]) + PARSE_LISTENING_PORT([s2.log], [TCP_PORT_1]) + PARSE_LISTENING_PORT([s3.log], [TCP_PORT_2]) + PARSE_LISTENING_PORT([s1.log], [TCP_PORT_3]) + remotes=tcp:LPBK:$TCP_PORT_1,tcp:LPBK:$TCP_PORT_2,tcp:LPBK:$TCP_PORT_3 + pids=$(cat s2.pid s3.pid s1.pid | tr '\n' ',') + echo $pids + AT_CHECK([$8 $srcdir/test-ovsdb.py -t30 idl-cluster $srcdir/idltest.ovsschema $remotes $pids $3], + [0], [stdout], [ignore]) + remote=$(ovsdb_cluster_leader $remotes "idltest") + leader=$(echo $remote | cut -d'|' -f 1) + AT_CHECK([grep -F -- "${leader}" stdout], [0], [ignore]) + AT_CLEANUP]) + +m4_define([OVSDB_CHECK_IDL_LEADER_ONLY_PY], + [OVSDB_CHECK_IDL_LEADER_ONLY_PYN([$1 - Python2 (leader only)], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON], [$PYTHON]) + OVSDB_CHECK_IDL_LEADER_ONLY_PYN([$1 - Python3 (leader only)], [$2], [$3], [$4], [$5], [$6], + [$HAVE_PYTHON3], [$PYTHON3])]) + +OVSDB_CHECK_IDL_LEADER_ONLY_PY([Check Python IDL connects to leader], 3, ['remote']) +OVSDB_CHECK_IDL_LEADER_ONLY_PY([Check Python IDL reconnects to leader], 3, ['remote' '+remotestop' 'remote'])