AT_BANNER([OVSDB -- interface description language (IDL)])
-# OVSDB_CHECK_IDL(TITLE, [PRE-IDL-TXN], TRANSACTIONS, OUTPUT, [KEYWORDS])
+# OVSDB_CHECK_IDL(TITLE, [PRE-IDL-TXN], TRANSACTIONS, OUTPUT, [KEYWORDS],
+# [FILTER])
#
# Creates a database with a schema derived from idltest.ovsidl, runs
# each PRE-IDL-TXN (if any), starts an ovsdb-server on that database,
# by markers of the form <N> where N is a number. The first unique
# UUID is replaced by <0>, the next by <1>, and so on. If a given
# UUID appears more than once it is always replaced by the same
-# marker.
+# marker. If FILTER is supplied then the output is also filtered
+# through the specified program.
#
# TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS.
m4_define([OVSDB_CHECK_IDL],
[AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore], [kill `cat pid`])])
AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl unix:socket $3],
[0], [stdout], [ignore], [kill `cat pid`])
- AT_CHECK([sort stdout | perl $srcdir/uuidfilt.pl], [0], [$4], [],
- [kill `cat pid`])
+ AT_CHECK([sort stdout | perl $srcdir/uuidfilt.pl]m4_if([$6],,, [[| $6]]),
+ [0], [$4], [], [kill `cat pid`])
OVSDB_SERVER_SHUTDOWN
AT_CLEANUP])
{"op": "insert",
"table": "simple",
"row": {}}]']],
- [['set 0 b 1, set 1 r 3.5' \
- 'insert 2, delete 1']],
+ [['verify 0 b, verify 1 r, set 0 b 1, set 1 r 3.5' \
+ 'insert 2, verify 2 i, verify 1 b, delete 1']],
[[000: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
000: i=1 r=2 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[false true] sa=[abc def] ua=[<3> <4>] uuid=<5>
001: commit, status=success
005: done
]])
+OVSDB_CHECK_IDL([simple idl, handling verification failure],
+ [['["idltest",
+ {"op": "insert",
+ "table": "simple",
+ "row": {"i": 1,
+ "r": 2.0}},
+ {"op": "insert",
+ "table": "simple",
+ "row": {}}]']],
+ [['set 0 b 1' \
+ '+["idltest",
+ {"op": "update",
+ "table": "simple",
+ "where": [["i", "==", 1]],
+ "row": {"r": 5.0}}]' \
+ '+verify 1 r, set 1 r 3' \
+ 'verify 1 r, set 1 r 3' \
+ ]],
+ [[000: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
+000: i=1 r=2 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
+001: commit, status=success
+002: {"error":null,"result":[{"count":1}]}
+003: commit, status=try again
+004: i=0 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
+004: i=1 r=5 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
+005: commit, status=success
+006: i=0 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
+006: i=1 r=3 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
+007: done
+]])
+
OVSDB_CHECK_IDL([simple idl, increment operation],
[['["idltest",
{"op": "insert",
002: {"error":null,"result":[{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]}
003: i=1 k=1 ka=[] l2= uuid=<2>
003: i=2 k=1 ka=[] l2= uuid=<3>
-004: {"error":null,"result":[{"count":2},{"details":"Table link1 column k row <2> references nonexistent row <4> in table link1.","error":"referential integrity violation"}]}
+004: {"error":null,"result":[{"count":2},{"details":"Table link1 column k row <x> references nonexistent row <4> in table link1.","error":"referential integrity violation"}]}
005: {"error":null,"result":[{"count":1},{"details":"cannot delete link1 row <2> because of 1 remaining reference(s)","error":"referential integrity violation"}]}
006: {"error":null,"result":[{"count":1}]}
007: i=1 k=1 ka=[] l2= uuid=<2>
008: {"error":null,"result":[{"count":1}]}
009: empty
010: done
-]])
+]],
+ [],
+ [[sed -e '/004:/s/row <[23]> references/row <x> references/']])
OVSDB_CHECK_IDL([self-linking idl, sets],
[],