1 AT_BANNER([OVSDB -- interface description language (IDL)])
3 m4_divert_text([PREPARE_TESTS], [
4 # ovsdb_start_idltest [REMOTE] [SCHEMA]
6 # Creates a database using SCHEMA (default: idltest.ovsschema) and
7 # starts a database server listening on punix:socket and REMOTE (if
9 ovsdb_start_idltest () {
10 ovsdb-tool create db ${2:-$abs_srcdir/idltest.ovsschema} || return $?
11 ovsdb-server -vconsole:warn --log-file --detach --no-chdir --pidfile --remote=punix:socket ${1:+--remote=$1} db || return $?
12 on_exit 'kill `cat ovsdb-server.pid`'
15 # ovsdb_cluster_leader [REMOTES] [DATABASE]
17 # Returns the leader of the DATABASE cluster.
18 ovsdb_cluster_leader () {
19 remotes=$(echo $1 | tr "," "\n")
20 for remote in $remotes; do
21 ovsdb-client dump $remote _Server Database name leader | grep $2 | grep -q true
22 if [[ $? == 0 ]]; then
23 port=$(echo $remote | cut -d':' -f 3)
24 log=$(grep --include=s\*.log -rlnw -e "listening on port $port" ./)
25 pid=$(echo $log | sed 's/\(.*\.\)log/\1pid/' )
26 echo "${remote}|${pid}"
32 # OVSDB_CLUSTER_START_IDLTEST([N], [REMOTE])
34 # Creates a clustered database using idltest.ovsschema and starts a database
35 # cluster of N servers listening on punix:socket and REMOTE (if specified).
36 m4_define([OVSDB_CLUSTER_START_IDLTEST],
38 AT_CHECK([ovsdb-tool create-cluster s1.db \
39 $abs_srcdir/idltest.ovsschema unix:s1.raft])
40 cid=$(ovsdb-tool db-cid s1.db)
41 schema_name=$(ovsdb-tool schema-name $abs_srcdir/idltest.ovsschema)
42 for i in $(seq 2 $n); do
43 AT_CHECK([ovsdb-tool join-cluster s$i.db \
44 $schema_name unix:s$i.raft unix:s1.raft])
46 on_exit 'kill $(cat s*.pid)'
47 for i in $(seq $n); do
48 AT_CHECK([ovsdb-server -vraft -vconsole:warn --detach --no-chdir \
49 --log-file=s$i.log --pidfile=s$i.pid --unixctl=s$i \
50 --remote=punix:s$i.ovsdb \
51 m4_if([$2], [], [], [--remote=$2]) s$i.db])
54 for i in $(seq $n); do
55 OVS_WAIT_UNTIL([ovs-appctl -t $(pwd)/s$i cluster/status ${schema_name} \
56 | grep -q 'Status: cluster member'])
61 # OVSDB_CHECK_IDL_C(TITLE, [PRE-IDL-TXN], TRANSACTIONS, OUTPUT, [KEYWORDS],
64 # Creates a database with a schema derived from idltest.ovsidl, runs
65 # each PRE-IDL-TXN (if any), starts an ovsdb-server on that database,
66 # and runs "test-ovsdb idl" passing each of the TRANSACTIONS along.
68 # Checks that the overall output is OUTPUT. Before comparison, the
69 # output is sorted (using "sort") and UUIDs in the output are replaced
70 # by markers of the form <N> where N is a number. The first unique
71 # UUID is replaced by <0>, the next by <1>, and so on. If a given
72 # UUID appears more than once it is always replaced by the same
73 # marker. If FILTER is supplied then the output is also filtered
74 # through the specified program.
76 # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS.
77 m4_define([OVSDB_CHECK_IDL_C],
79 AT_KEYWORDS([ovsdb server idl positive $5])
80 AT_CHECK([ovsdb_start_idltest])
82 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
83 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl unix:socket $3],
84 [0], [stdout], [ignore])
85 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
90 # same as OVSDB_CHECK_IDL but uses tcp.
91 m4_define([OVSDB_CHECK_IDL_TCP_C],
92 [AT_SETUP([$1 - C - tcp])
93 AT_KEYWORDS([ovsdb server idl positive tcp socket $5])
94 AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"])
95 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
98 [AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT $2], [0], [ignore], [ignore])])
99 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl tcp:127.0.0.1:$TCP_PORT $3],
100 [0], [stdout], [ignore])
101 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
103 OVSDB_SERVER_SHUTDOWN
106 # same as OVSDB_CHECK_IDL but uses tcp6.
107 m4_define([OVSDB_CHECK_IDL_TCP6_C],
108 [AT_SETUP([$1 - C - tcp6])
109 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
110 AT_SKIP_IF([test $HAVE_IPV6 = no])
111 AT_KEYWORDS([ovsdb server idl positive tcp6 socket $5])
112 AT_CHECK([ovsdb_start_idltest "ptcp:0:[[::1]]"])
113 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
116 [AT_CHECK([ovsdb-client transact tcp:[[::1]]:$TCP_PORT $2], [0], [ignore], [ignore])])
117 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl tcp:[[::1]]:$TCP_PORT $3],
118 [0], [stdout], [ignore])
119 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
121 OVSDB_SERVER_SHUTDOWN
124 # same as OVSDB_CHECK_IDL but uses the Python IDL implementation.
125 m4_define([OVSDB_CHECK_IDL_PY],
126 [AT_SETUP([$1 - Python3])
127 AT_KEYWORDS([ovsdb server idl positive Python $5])
128 AT_CHECK([ovsdb_start_idltest])
130 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
131 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket $3],
132 [0], [stdout], [ignore])
133 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
135 OVSDB_SERVER_SHUTDOWN
138 m4_define([OVSDB_CHECK_IDL_REGISTER_COLUMNS_PY],
139 [AT_SETUP([$1 - Python3 - register_columns])
140 AT_KEYWORDS([ovsdb server idl positive Python register_columns $5])
141 AT_CHECK([ovsdb_start_idltest])
143 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
144 AT_CHECK([$PYTHON3 $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],
145 [0], [stdout], [ignore])
146 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
148 OVSDB_SERVER_SHUTDOWN
151 # same as OVSDB_CHECK_IDL but uses the Python IDL implementation with tcp
152 m4_define([OVSDB_CHECK_IDL_TCP_PY],
153 [AT_SETUP([$1 - Python3 - tcp])
154 AT_KEYWORDS([ovsdb server idl positive Python with tcp socket $5])
155 AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"])
156 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
159 [AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT $2], [0], [ignore], [ignore])])
160 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema tcp:127.0.0.1:$TCP_PORT $3],
161 [0], [stdout], [ignore])
162 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
164 OVSDB_SERVER_SHUTDOWN
167 # same as OVSDB_CHECK_IDL but uses the Python IDL implementation with tcp
168 # with multiple remotes with only one remote reachable
169 m4_define([OVSDB_CHECK_IDL_TCP_MULTIPLE_REMOTES_PY],
170 [AT_SETUP([$1 - Python3 (multiple remotes) - tcp])
171 AT_KEYWORDS([ovsdb server idl positive Python with tcp socket $5])
172 AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"])
173 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
174 WRONG_PORT_1=$((TCP_PORT + 101))
175 WRONG_PORT_2=$((TCP_PORT + 102))
176 remote=tcp:127.0.0.1:$WRONG_PORT_1,tcp:127.0.0.1:$TCP_PORT,tcp:127.0.0.1:$WRONG_PORT_2
178 [AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT $2], [0], [ignore], [ignore])])
179 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t20 idl $srcdir/idltest.ovsschema $remote $3],
180 [0], [stdout], [ignore])
181 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
183 OVSDB_SERVER_SHUTDOWN
186 # same as OVSDB_CHECK_IDL but uses the Python IDL implementation with tcp6
187 m4_define([OVSDB_CHECK_IDL_TCP6_PY],
188 [AT_SETUP([$1 - Python3 - tcp6])
189 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
190 AT_SKIP_IF([test $HAVE_IPV6 = no])
191 AT_KEYWORDS([ovsdb server idl positive Python with tcp6 socket $5])
192 AT_CHECK([ovsdb_start_idltest "ptcp:0:[[::1]]"])
193 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
194 echo "TCP_PORT=$TCP_PORT"
197 [AT_CHECK([ovsdb-client transact "tcp:[[::1]]:$TCP_PORT" $2], [0], [ignore], [ignore])])
198 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema tcp:[[::1]]:$TCP_PORT $3],
199 [0], [stdout], [ignore])
200 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
202 OVSDB_SERVER_SHUTDOWN
205 m4_define([OVSDB_CHECK_IDL_TCP6_MULTIPLE_REMOTES_PY],
206 [AT_SETUP([$1 - Python3 - tcp6])
207 AT_SKIP_IF([test "$IS_WIN32" = "yes"])
208 AT_SKIP_IF([test $HAVE_IPV6 = no])
209 AT_KEYWORDS([ovsdb server idl positive Python with tcp6 socket $5])
210 AT_CHECK([ovsdb_start_idltest "ptcp:0:[[::1]]"])
211 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
212 WRONG_PORT_1=$((TCP_PORT + 101))
213 WRONG_PORT_2=$((TCP_PORT + 102))
214 remote="tcp:[[::1]]:$WRONG_PORT_1,tcp:[[::1]]:$TCP_PORT,tcp:[[::1]]:$WRONG_PORT_2"
216 [AT_CHECK([ovsdb-client transact "tcp:[[::1]]:$TCP_PORT" $2], [0], [ignore], [ignore])])
217 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t20 idl $srcdir/idltest.ovsschema $remote $3],
218 [0], [stdout], [ignore])
219 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
221 OVSDB_SERVER_SHUTDOWN
224 # same as OVSDB_CHECK_IDL but uses the Python IDL implementation with SSL
225 m4_define([OVSDB_CHECK_IDL_SSL_PY],
226 [AT_SETUP([$1 - Python3 - SSL])
227 AT_SKIP_IF([test "$HAVE_OPENSSL" = no])
228 $PYTHON3 -c "import OpenSSL.SSL"
230 AT_SKIP_IF([test $SSL_PRESENT != 0])
231 AT_KEYWORDS([ovsdb server idl positive Python with ssl socket $5])
232 AT_CHECK([ovsdb-tool create db $abs_srcdir/idltest.ovsschema],
233 [0], [stdout], [ignore])
234 PKIDIR=$abs_top_builddir/tests
235 AT_CHECK([ovsdb-server -vconsole:warn --log-file --detach --no-chdir \
237 --private-key=$PKIDIR/testpki-privkey2.pem \
238 --certificate=$PKIDIR/testpki-cert2.pem \
239 --ca-cert=$PKIDIR/testpki-cacert.pem \
240 --remote=pssl:0:127.0.0.1 db])
241 on_exit 'kill `cat ovsdb-server.pid`'
242 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
244 [AT_CHECK([ovsdb-client \
245 --private-key=$PKIDIR/testpki-privkey2.pem \
246 --certificate=$PKIDIR/testpki-cert2.pem \
247 --ca-cert=$PKIDIR/testpki-cacert.pem \
248 transact "ssl:127.0.0.1:$TCP_PORT" $2], [0], [ignore], [ignore])])
249 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema \
250 ssl:127.0.0.1:$TCP_PORT $PKIDIR/testpki-privkey.pem \
251 $PKIDIR/testpki-cert.pem $PKIDIR/testpki-cacert.pem $3],
252 [0], [stdout], [ignore])
253 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
255 OVSDB_SERVER_SHUTDOWN
258 m4_define([OVSDB_CHECK_IDL],
259 [OVSDB_CHECK_IDL_C($@)
260 OVSDB_CHECK_IDL_TCP_C($@)
261 OVSDB_CHECK_IDL_TCP6_C($@)
262 OVSDB_CHECK_IDL_PY($@)
263 OVSDB_CHECK_IDL_REGISTER_COLUMNS_PY($@)
264 OVSDB_CHECK_IDL_TCP_PY($@)
265 OVSDB_CHECK_IDL_TCP_MULTIPLE_REMOTES_PY($@)
266 OVSDB_CHECK_IDL_TCP6_PY($@)
267 OVSDB_CHECK_IDL_TCP6_MULTIPLE_REMOTES_PY($@)
268 OVSDB_CHECK_IDL_SSL_PY($@)])
270 # This test uses the Python IDL implementation with passive tcp
271 m4_define([OVSDB_CHECK_IDL_PASSIVE_TCP_PY],
272 [AT_SETUP([$1 - Python3 - ptcp])
273 AT_KEYWORDS([ovsdb server idl positive Python with tcp socket $5])
275 AT_CHECK([ovsdb_start_idltest "ptcp:0:127.0.0.1"])
276 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
277 OVSDB_SERVER_SHUTDOWN
280 # start OVSDB server in passive mode
281 AT_CHECK([ovsdb_start_idltest "tcp:127.0.0.1:$TCP_PORT"])
282 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t10 idl_passive $srcdir/idltest.ovsschema ptcp:127.0.0.1:$TCP_PORT $3],
283 [0], [stdout], [ignore])
284 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
286 OVSDB_SERVER_SHUTDOWN
290 OVSDB_CHECK_IDL_PASSIVE_TCP_PY([simple passive idl, initially empty, select empty],
292 [['["idltest",{"op":"select","table":"link1","where":[]}]']],
294 001: {"error":null,"result":[{"rows":[]}]}
298 OVSDB_CHECK_IDL([simple idl, initially empty, no ops],
305 OVSDB_CHECK_IDL([simple idl, initially empty, various ops],
314 "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
315 "ia": ["set", [1, 2, 3]],
316 "ra": ["set", [-0.5]],
317 "ba": ["set", [true]],
318 "sa": ["set", ["abc", "def"]],
319 "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
320 ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
328 "row": {"b": true}}]' \
333 "row": {"r": 123.5}}]' \
342 "ra": ["set", [1.5]],
343 "ba": ["set", [false]],
345 "ua": ["set", []]}}]' \
349 "where": [["i", "<", 1]],
350 "row": {"s": "newstring"}}]' \
354 "where": [["i", "==", 0]]}]' \
357 001: {"error":null,"result":[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]}
358 002: i=0 r=0 b=false s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
359 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>
360 003: {"error":null,"result":[{"count":2}]}
361 004: i=0 r=0 b=true s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
362 004: 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>
363 005: {"error":null,"result":[{"count":2}]}
364 006: i=0 r=123.5 b=true s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
365 006: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
366 007: {"error":null,"result":[{"uuid":["uuid","<6>"]}]}
367 008: i=-1 r=125 b=false s= u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
368 008: i=0 r=123.5 b=true s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
369 008: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
370 009: {"error":null,"result":[{"count":2}]}
371 010: i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
372 010: i=0 r=123.5 b=true s=newstring u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
373 010: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
374 011: {"error":null,"result":[{"count":1}]}
375 012: i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
376 012: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
378 014: i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
379 014: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
383 OVSDB_CHECK_IDL([simple idl, initially populated],
391 "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
392 "ia": ["set", [1, 2, 3]],
393 "ra": ["set", [-0.5]],
394 "ba": ["set", [true]],
395 "sa": ["set", ["abc", "def"]],
396 "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
397 ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
405 "row": {"b": true}}]']],
406 [[000: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
407 000: i=1 r=2 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<3> <4>] uuid=<5>
408 001: {"error":null,"result":[{"count":2}]}
409 002: i=0 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
410 002: i=1 r=2 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<3> <4>] uuid=<5>
414 OVSDB_CHECK_IDL([simple idl, writing via IDL],
422 "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
423 "ia": ["set", [1, 2, 3]],
424 "ra": ["set", [-0.5]],
425 "ba": ["set", [true]],
426 "sa": ["set", ["abc", "def"]],
427 "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
428 ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
432 [['verify 0 b, verify 1 r, set 0 b 1, set 1 r 3.5' \
433 'insert 2, verify 2 i, verify 1 b, delete 1']],
434 [[000: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
435 000: i=1 r=2 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<3> <4>] uuid=<5>
436 001: commit, status=success
437 002: i=0 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
438 002: i=1 r=3.5 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<3> <4>] uuid=<5>
439 003: commit, status=success
440 004: i=0 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
441 004: i=2 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<6>
445 OVSDB_CHECK_IDL([simple idl, writing via IDL with unicode],
449 "row": {"s": "(╯°□°)╯︵ ┻━┻"}}]']],
450 [['set 0 b 1, insert 1, set 1 s "¯\_(ツ)_/¯"']],
451 [[000: i=0 r=0 b=false s=(╯°□°)╯︵ ┻━┻ u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
452 001: commit, status=success
453 002: i=0 r=0 b=true s=(╯°□°)╯︵ ┻━┻ u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
454 002: i=1 r=0 b=false s="¯\_(ツ)_/¯" u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
458 m4_define([OVSDB_CHECK_IDL_PY_WITH_EXPOUT],
459 [AT_SETUP([$1 - Python3])
460 AT_KEYWORDS([ovsdb server idl positive Python $5])
461 AT_CHECK([ovsdb_start_idltest])
463 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
464 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket $3],
465 [0], [stdout], [ignore])
467 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
469 OVSDB_SERVER_SHUTDOWN
472 OVSDB_CHECK_IDL_PY_WITH_EXPOUT([simple idl, writing large data via IDL with unicode],
476 "row": {"s": "'$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..50})'"}}]']],
477 [['set 0 b 1, insert 1, set 1 s '$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..100})'']],
478 [[000: i=0 r=0 b=false s=$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..50}) u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
479 001: commit, status=success
480 002: i=0 r=0 b=true s=$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..50}) u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
481 002: i=1 r=0 b=false s=$(printf "测试超过四千零九十六个字节的中文字符串以使解码出现问题。%.0s" {1..100}) u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
484 OVSDB_CHECK_IDL([simple idl, handling verification failure],
497 "where": [["i", "==", 1]],
498 "row": {"r": 5.0}}]' \
499 '+verify 1 r, set 1 r 3' \
500 'verify 1 r, set 1 r 3' \
502 [[000: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
503 000: i=1 r=2 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
504 001: commit, status=success
505 002: {"error":null,"result":[{"count":1}]}
506 003: commit, status=try again
507 004: i=0 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
508 004: i=1 r=5 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
509 005: commit, status=success
510 006: i=0 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
511 006: i=1 r=3 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
515 OVSDB_CHECK_IDL([simple idl, increment operation],
520 [['set 0 r 2.0, increment 0']],
521 [[000: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
522 001: commit, status=success, increment=1
523 002: i=1 r=2 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
527 OVSDB_CHECK_IDL([simple idl, aborting],
532 [['set 0 r 2.0, abort' \
534 [[000: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
535 001: commit, status=aborted
536 002: commit, status=success
537 003: i=0 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
541 OVSDB_CHECK_IDL([simple idl, destroy without commit or abort],
546 [['set 0 r 2.0, destroy' \
548 [[000: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
550 002: commit, status=success
551 003: i=0 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
555 OVSDB_CHECK_IDL([simple idl, conditional, false condition],
562 [['condition simple []' \
563 'condition simple [true]']],
564 [[000: change conditions
566 002: change conditions
567 003: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
571 OVSDB_CHECK_IDL([simple idl, conditional, true condition],
578 [['condition simple []' \
579 'condition simple [true]']],
580 [[000: change conditions
582 002: change conditions
583 003: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
587 OVSDB_CHECK_IDL([simple idl, conditional, multiple clauses in condition],
599 [['condition simple []' \
600 'condition simple [["i","==",1],["i","==",2]]']],
601 [[000: change conditions
603 002: change conditions
604 003: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
605 003: i=2 r=3 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
609 OVSDB_CHECK_IDL([simple idl, conditional, modify as insert due to condition],
616 [['condition simple []' \
617 'condition simple [["i","==",1]]']],
618 [[000: change conditions
620 002: change conditions
621 003: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
625 OVSDB_CHECK_IDL([simple idl, conditional, modify as delete due to condition],
632 [['condition simple []' \
633 'condition simple [["i","==",1],["i","==",2]]' \
634 'condition simple [["i","==",2]]' \
641 [[000: change conditions
643 002: change conditions
644 003: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
645 004: change conditions
647 006: {"error":null,"result":[{"uuid":["uuid","<2>"]}]}
648 007: i=2 r=3 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
652 OVSDB_CHECK_IDL([simple idl, conditional, multiple tables],
661 "row": {"i": 0, "k": ["named-uuid", "self"]},
662 "uuid-name": "self"},
666 "uuid-name": "row0"}]']],
667 [['condition simple [];link1 [];link2 []' \
668 'condition simple [["i","==",1]]' \
669 'condition link1 [["i","==",0]]' \
670 'condition link2 [["i","==",3]]' \
675 "uuid-name": "row0"}]']],
676 [[000: change conditions
678 002: change conditions
679 003: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
680 004: change conditions
681 005: i=0 k=0 ka=[] l2= uuid=<2>
682 005: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
683 006: change conditions
684 007: {"error":null,"result":[{"uuid":["uuid","<3>"]}]}
685 008: i=0 k=0 ka=[] l2= uuid=<2>
686 008: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
687 008: i=3 l1= uuid=<3>
691 OVSDB_CHECK_IDL([self-linking idl, consistent ops],
696 "row": {"i": 0, "k": ["named-uuid", "self"]},
697 "uuid-name": "self"}]' \
701 "row": {"i": 1, "k": ["named-uuid", "row2"]},
702 "uuid-name": "row1"},
705 "row": {"i": 2, "k": ["named-uuid", "row1"]},
706 "uuid-name": "row2"}]' \
710 "where": [["i", "==", 1]],
711 "row": {"k": ["uuid", "#1#"]}}]' \
716 "row": {"k": ["uuid", "#0#"]}}]']],
718 001: {"error":null,"result":[{"uuid":["uuid","<0>"]}]}
719 002: i=0 k=0 ka=[] l2= uuid=<0>
720 003: {"error":null,"result":[{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]}]}
721 004: i=0 k=0 ka=[] l2= uuid=<0>
722 004: i=1 k=2 ka=[] l2= uuid=<1>
723 004: i=2 k=1 ka=[] l2= uuid=<2>
724 005: {"error":null,"result":[{"count":1}]}
725 006: i=0 k=0 ka=[] l2= uuid=<0>
726 006: i=1 k=1 ka=[] l2= uuid=<1>
727 006: i=2 k=1 ka=[] l2= uuid=<2>
728 007: {"error":null,"result":[{"count":3}]}
729 008: i=0 k=0 ka=[] l2= uuid=<0>
730 008: i=1 k=0 ka=[] l2= uuid=<1>
731 008: i=2 k=0 ka=[] l2= uuid=<2>
735 OVSDB_CHECK_IDL([self-linking idl, inconsistent ops],
740 "row": {"i": 0, "k": ["uuid", "cf197cc5-c8c9-42f5-82d5-c71a9f2cb96b"]}}]' \
745 "row": {"i": 1, "k": ["named-uuid", "one"]}},
748 "row": {"i": 2, "k": ["named-uuid", "one"]}}]' \
753 "row": {"k": ["uuid", "c2fca39a-e69a-42a4-9c56-5eca85839ce9"]}}]' \
757 "where": [["_uuid", "==", ["uuid", "#1#"]]]}]' \
761 "where": [["_uuid", "==", ["uuid", "#2#"]]]}]' \
768 001: {"error":null,"result":[{"uuid":["uuid","<0>"]},{"details":"Table link1 column k row <0> references nonexistent row <1> in table link1.","error":"referential integrity violation"}]}
769 002: {"error":null,"result":[{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]}
770 003: i=1 k=1 ka=[] l2= uuid=<2>
771 003: i=2 k=1 ka=[] l2= uuid=<3>
772 004: {"error":null,"result":[{"count":2},{"details":"Table link1 column k row <x> references nonexistent row <4> in table link1.","error":"referential integrity violation"}]}
773 005: {"error":null,"result":[{"count":1},{"details":"cannot delete link1 row <2> because of 1 remaining reference(s)","error":"referential integrity violation"}]}
774 006: {"error":null,"result":[{"count":1}]}
775 007: i=1 k=1 ka=[] l2= uuid=<2>
776 008: {"error":null,"result":[{"count":1}]}
781 [[sed -e '/004:/s/row <[23]> references/row <x> references/']])
783 OVSDB_CHECK_IDL([self-linking idl, sets],
788 "row": {"i": 0, "k": ["named-uuid", "i0"], "ka": ["set", [["named-uuid", "i0"]]]},
792 "row": {"i": 1, "k": ["named-uuid", "i0"], "ka": ["set", [["named-uuid", "i1"]]]},
796 "row": {"i": 2, "k": ["named-uuid", "i0"], "ka": ["set", [["named-uuid", "i2"]]]},
800 "row": {"i": 3, "k": ["named-uuid", "i0"], "ka": ["set", [["named-uuid", "i3"]]]},
801 "uuid-name": "i3"}]' \
806 "row": {"ka": ["set", [["uuid", "#0#"], ["uuid", "#1#"], ["uuid", "#2#"], ["uuid", "#3#"]]]}}]' \
810 "where": [["i", "==", 2]],
811 "row": {"ka": ["set", [["uuid", "#0#"], ["uuid", "88702e78-845b-4a6e-ad08-cf68922ae84a"], ["uuid", "#2#"]]]}}]' \
817 001: {"error":null,"result":[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]}
818 002: i=0 k=0 ka=[0] l2= uuid=<0>
819 002: i=1 k=0 ka=[1] l2= uuid=<1>
820 002: i=2 k=0 ka=[2] l2= uuid=<2>
821 002: i=3 k=0 ka=[3] l2= uuid=<3>
822 003: {"error":null,"result":[{"count":4}]}
823 004: i=0 k=0 ka=[0 1 2 3] l2= uuid=<0>
824 004: i=1 k=0 ka=[0 1 2 3] l2= uuid=<1>
825 004: i=2 k=0 ka=[0 1 2 3] l2= uuid=<2>
826 004: i=3 k=0 ka=[0 1 2 3] l2= uuid=<3>
827 005: {"error":null,"result":[{"count":1},{"details":"Table link1 column ka row <2> references nonexistent row <4> in table link1.","error":"referential integrity violation"}]}
828 006: {"error":null,"result":[{"count":4}]}
833 OVSDB_CHECK_IDL([external-linking idl, consistent ops],
839 "uuid-name": "row0"},
842 "row": {"i": 1, "k": ["named-uuid", "row1"], "l2": ["set", [["named-uuid", "row0"]]]},
843 "uuid-name": "row1"}]']],
845 001: {"error":null,"result":[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]}
846 002: i=0 l1= uuid=<0>
847 002: i=1 k=1 ka=[] l2=0 uuid=<1>
851 OVSDB_CHECK_IDL([singleton idl, constraints],
855 "table": "singleton",
856 "row": {"name": "foo"}}]' \
859 "table": "singleton",
860 "row": {"name": "bar"}}]' \
863 "table": "singleton",
864 "where": [["_uuid", "==", ["uuid", "#0#"]]]},
866 "table": "singleton",
867 "row": {"name": "bar"}}]']],
869 001: {"error":null,"result":[{"uuid":["uuid","<0>"]}]}
870 002: name=foo uuid=<0>
871 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"}]}
872 004: {"error":null,"result":[{"count":1},{"uuid":["uuid","<2>"]}]}
873 005: name=bar uuid=<2>
877 OVSDB_CHECK_IDL_PY([external-linking idl, insert ops],
881 001: commit, status=success
882 002: i=1 k=1 ka=[1] l2= uuid=<0>
883 002: i=2 k=1 ka=[1 2] l2= uuid=<1>
887 OVSDB_CHECK_IDL_PY([getattr idl, insert ops],
891 001: commit, status=success
892 002: i=2 k=2 ka=[] l2= uuid=<0>
896 OVSDB_CHECK_IDL_PY([row-from-json idl, whats this],
904 [['notifytest insert 2, notifytest set 1 b 1, notifytest delete 0']],
905 [[000: i=0 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
906 000: i=1 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
907 001: commit, status=success, events=create|2|None, delete|0|None, update|1|b
908 002: i=1 r=0 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
909 002: i=2 r=0 b=false s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
913 AT_SETUP([idl handling of missing tables and columns - C])
914 AT_KEYWORDS([ovsdb server idl positive])
916 # idltest2.ovsschema is the same as idltest.ovsschema, except that
917 # table link2 and column l2 have been deleted. But the IDL still
918 # expects them to be there, so this test checks that it properly
919 # tolerates them being missing.
920 AT_CHECK([ovsdb_start_idltest "" "$abs_srcdir/idltest2.ovsschema"])
921 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl unix:socket ['["idltest",
924 "row": {"i": 0, "k": ["named-uuid", "self"]},
925 "uuid-name": "self"}]' \
929 "row": {"i": 1, "k": ["named-uuid", "row2"]},
930 "uuid-name": "row1"},
933 "row": {"i": 2, "k": ["named-uuid", "row1"]},
934 "uuid-name": "row2"}]' \
938 "where": [["i", "==", 1]],
939 "row": {"k": ["uuid", "#1#"]}}]' \
944 "row": {"k": ["uuid", "#0#"]}}]']],
945 [0], [stdout], [stderr])
946 AT_CHECK([sort stdout | uuidfilt], [0],
948 001: {"error":null,"result":[{"uuid":["uuid","<0>"]}]}
949 002: i=0 k=0 ka=[] l2= uuid=<0>
950 003: {"error":null,"result":[{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]}]}
951 004: i=0 k=0 ka=[] l2= uuid=<0>
952 004: i=1 k=2 ka=[] l2= uuid=<1>
953 004: i=2 k=1 ka=[] l2= uuid=<2>
954 005: {"error":null,"result":[{"count":1}]}
955 006: i=0 k=0 ka=[] l2= uuid=<0>
956 006: i=1 k=1 ka=[] l2= uuid=<1>
957 006: i=2 k=1 ka=[] l2= uuid=<2>
958 007: {"error":null,"result":[{"count":3}]}
959 008: i=0 k=0 ka=[] l2= uuid=<0>
960 008: i=1 k=0 ka=[] l2= uuid=<1>
961 008: i=2 k=0 ka=[] l2= uuid=<2>
965 # Check that ovsdb-idl figured out that table link2 and column l2 are missing.
966 AT_CHECK([grep ovsdb_idl stderr | sort], [0], [dnl
967 test-ovsdb|ovsdb_idl|idltest database lacks indexed table (database needs upgrade?)
968 test-ovsdb|ovsdb_idl|idltest database lacks link2 table (database needs upgrade?)
969 test-ovsdb|ovsdb_idl|idltest database lacks simple5 table (database needs upgrade?)
970 test-ovsdb|ovsdb_idl|idltest database lacks simple6 table (database needs upgrade?)
971 test-ovsdb|ovsdb_idl|idltest database lacks singleton table (database needs upgrade?)
972 test-ovsdb|ovsdb_idl|link1 table in idltest database lacks l2 column (database needs upgrade?)
975 # Check that ovsdb-idl sent on "monitor" request and that it didn't
976 # mention that table or column, and (for paranoia) that it did mention another
978 AT_CHECK([grep -c '"monitor\|monitor_cond"' stderr], [0], [2
980 AT_CHECK([grep '"monitor\|monitor_cond"' stderr | grep link2], [1])
981 AT_CHECK([grep '"monitor\|monitor_cond"' stderr | grep l2], [1])
982 AT_CHECK([grep '"monitor\|monitor_cond"' stderr | grep -c '"link1"'], [0], [1
984 AT_CHECK([grep '"monitor\|monitor_cond"' stderr | grep -c '"ua"'], [0], [1
986 OVSDB_SERVER_SHUTDOWN
989 m4_define([OVSDB_CHECK_IDL_FETCH_COLUMNS_PY],
990 [AT_SETUP([$1 - Python3 - fetch])
991 AT_KEYWORDS([ovsdb server idl positive Python increment fetch $6])
992 AT_CHECK([ovsdb_start_idltest])
994 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
995 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket [$3] $4],
996 [0], [stdout], [ignore])
997 AT_CHECK([sort stdout | uuidfilt]m4_if([$7],,, [[| $7]]),
999 OVSDB_SERVER_SHUTDOWN
1002 m4_define([OVSDB_CHECK_IDL_FETCH_COLUMNS],
1003 [OVSDB_CHECK_IDL_FETCH_COLUMNS_PY($@)])
1005 OVSDB_CHECK_IDL_FETCH_COLUMNS([simple idl, initially populated],
1013 "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
1014 "ia": ["set", [1, 2, 3]],
1015 "ra": ["set", [-0.5]],
1016 "ba": ["set", [true]],
1017 "sa": ["set", ["abc", "def"]],
1018 "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
1019 ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
1027 001: commit, status=success
1028 002: i=0 r=0 uuid=<0>
1033 m4_define([OVSDB_CHECK_IDL_WO_MONITOR_COND_PY],
1034 [AT_SETUP([$1 - Python3])
1035 AT_KEYWORDS([ovsdb server idl Python monitor $4])
1036 AT_CHECK([ovsdb_start_idltest])
1037 AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/disable-monitor-cond])
1038 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t10 idl $srcdir/idltest.ovsschema unix:socket $2],
1039 [0], [stdout], [ignore])
1040 AT_CHECK([sort stdout | uuidfilt]m4_if([$5],,, [[| $5]]),
1042 OVSDB_SERVER_SHUTDOWN
1045 m4_define([OVSDB_CHECK_IDL_WO_MONITOR_COND],
1046 [OVSDB_CHECK_IDL_WO_MONITOR_COND_PY($@)])
1049 OVSDB_CHECK_IDL_WO_MONITOR_COND([simple idl disable monitor-cond],
1057 "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
1058 "ia": ["set", [1, 2, 3]],
1059 "ra": ["set", [-0.5]],
1060 "ba": ["set", [true]],
1061 "sa": ["set", ["abc", "def"]],
1062 "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
1063 ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
1071 "row": {"b": true}}]' \
1076 "row": {"r": 123.5}}]' \
1085 "ra": ["set", [1.5]],
1086 "ba": ["set", [false]],
1088 "ua": ["set", []]}}]' \
1092 "where": [["i", "<", 1]],
1093 "row": {"s": "newstring"}}]' \
1097 "where": [["i", "==", 0]]}]' \
1100 001: {"error":null,"result":[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]}
1101 002: i=0 r=0 b=false s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1102 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>
1103 003: {"error":null,"result":[{"count":2}]}
1104 004: i=0 r=0 b=true s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1105 004: 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>
1106 005: {"error":null,"result":[{"count":2}]}
1107 006: i=0 r=123.5 b=true s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1108 006: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
1109 007: {"error":null,"result":[{"uuid":["uuid","<6>"]}]}
1110 008: i=-1 r=125 b=false s= u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
1111 008: i=0 r=123.5 b=true s= u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1112 008: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
1113 009: {"error":null,"result":[{"count":2}]}
1114 010: i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
1115 010: i=0 r=123.5 b=true s=newstring u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1116 010: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
1117 011: {"error":null,"result":[{"count":1}]}
1118 012: i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
1119 012: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
1121 014: i=-1 r=125 b=false s=newstring u=<2> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
1122 014: i=1 r=123.5 b=true s=mystring u=<3> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<4> <5>] uuid=<0>
1126 m4_define([OVSDB_CHECK_IDL_TRACK_C],
1128 AT_KEYWORDS([ovsdb server idl tracking positive $5])
1129 AT_CHECK([ovsdb_start_idltest])
1131 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
1132 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl unix:socket $3],
1133 [0], [stdout], [ignore])
1134 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
1136 OVSDB_SERVER_SHUTDOWN
1139 m4_define([OVSDB_CHECK_IDL_TRACK],
1140 [OVSDB_CHECK_IDL_TRACK_C($@)])
1142 OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated],
1150 "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
1151 "ia": ["set", [1, 2, 3]],
1152 "ra": ["set", [-0.5]],
1153 "ba": ["set", [true]],
1154 "sa": ["set", ["abc", "def"]],
1155 "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
1156 ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
1164 "row": {"b": true}}]']],
1165 [[000: i=1 r=2 b=true s=mystring u=<0> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<1> <2>] uuid=<3>
1166 000: inserted row: uuid=<3>
1167 000: updated columns: b ba i ia r ra s sa u ua
1168 001: {"error":null,"result":[{"count":2}]}
1169 002: i=0 r=0 b=true s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<5>
1170 002: i=1 r=2 b=true s=mystring u=<0> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<1> <2>] uuid=<3>
1171 002: updated columns: b
1175 dnl This test creates database with weak references and checks that orphan
1176 dnl rows created for weak references are not available for iteration via
1177 dnl list of tracked changes.
1178 OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated, orphan weak references],
1182 "row": {"s": "row0_s"},
1183 "uuid-name": "weak_row0"},
1186 "row": {"s": "row1_s"},
1187 "uuid-name": "weak_row1"},
1190 "row": {"s": "row2_s"},
1191 "uuid-name": "weak_row2"},
1194 "row": {"name": "first_row",
1196 [["named-uuid", "weak_row0"],
1197 ["named-uuid", "weak_row1"],
1198 ["named-uuid", "weak_row2"]]
1200 [['condition simple []' \
1201 'condition simple [["s","==","row1_s"]]' \
1206 "row": {"name": "new_name"}}]' \
1211 [[000: change conditions
1212 001: inserted row: uuid=<0>
1213 001: name=first_row weak_ref=[] uuid=<0>
1214 001: updated columns: name weak_ref
1215 002: change conditions
1216 003: i=0 r=0 b=false s=row1_s u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
1217 003: inserted row: uuid=<2>
1218 003: name=first_row weak_ref=[<2>] uuid=<0>
1219 003: updated columns: s
1220 004: {"error":null,"result":[{"count":1}]}
1221 005: name=new_name weak_ref=[<2>] uuid=<0>
1222 005: updated columns: name
1223 006: {"error":null,"result":[{"count":1}]}
1224 007: i=0 r=0 b=false s=row1_s u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
1228 dnl This test creates database with weak references and checks that the
1229 dnl content of orphaned rows created for weak references after monitor
1230 dnl condition change are not leaked when the row is reinserted and deleted.
1231 OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated, orphan rows, conditional],
1235 "row": {"s": "row0_s"},
1236 "uuid-name": "weak_row0"},
1239 "row": {"s": "row1_s"},
1240 "uuid-name": "weak_row1"},
1243 "row": {"name": "first_row",
1245 [["named-uuid", "weak_row0"]]
1247 [['condition simple []' \
1248 'condition simple [["s","==","row0_s"]]' \
1249 'condition simple [["s","==","row1_s"]]' \
1250 'condition simple [["s","==","row0_s"]]' \
1255 [[000: change conditions
1256 001: inserted row: uuid=<0>
1257 001: name=first_row weak_ref=[] uuid=<0>
1258 001: updated columns: name weak_ref
1259 002: change conditions
1260 003: i=0 r=0 b=false s=row0_s u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
1261 003: inserted row: uuid=<2>
1262 003: name=first_row weak_ref=[<2>] uuid=<0>
1263 003: updated columns: s
1264 004: change conditions
1265 005: i=0 r=0 b=false s=row1_s u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
1266 005: inserted row: uuid=<3>
1267 005: updated columns: s
1268 006: change conditions
1269 007: deleted row: uuid=<3>
1270 007: i=0 r=0 b=false s=row0_s u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
1271 007: i=0 r=0 b=false s=row1_s u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
1272 007: inserted row: uuid=<2>
1273 007: name=first_row weak_ref=[<2>] uuid=<0>
1274 007: updated columns: s
1275 008: {"error":null,"result":[{"count":1}]}
1276 009: i=0 r=0 b=false s=row0_s u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
1280 OVSDB_CHECK_IDL_TRACK([track, simple idl, initially empty, various ops],
1289 "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
1290 "ia": ["set", [1, 2, 3]],
1291 "ra": ["set", [-0.5]],
1292 "ba": ["set", [true]],
1293 "sa": ["set", ["abc", "def"]],
1294 "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
1295 ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
1303 "row": {"b": true}}]' \
1308 "row": {"r": 123.5}}]' \
1317 "ra": ["set", [1.5]],
1318 "ba": ["set", [false]],
1320 "ua": ["set", []]}}]' \
1324 "where": [["i", "<", 1]],
1325 "row": {"s": "newstring"}}]' \
1329 "where": [["i", "==", 0]]}]' \
1332 001: {"error":null,"result":[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}]}
1333 002: i=1 r=2 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<3> <4>] uuid=<0>
1334 002: inserted row: uuid=<0>
1335 002: updated columns: b ba i ia r ra s sa u ua
1336 003: {"error":null,"result":[{"count":2}]}
1337 004: i=0 r=0 b=true s= u=<5> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1338 004: updated columns: b
1339 005: {"error":null,"result":[{"count":2}]}
1340 006: i=0 r=123.5 b=true s= u=<5> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1341 006: i=1 r=123.5 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<3> <4>] uuid=<0>
1342 006: updated columns: r
1343 006: updated columns: r
1344 007: {"error":null,"result":[{"uuid":["uuid","<6>"]}]}
1345 008: i=-1 r=125 b=false s= u=<5> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
1346 008: inserted row: uuid=<6>
1347 008: updated columns: ba i ia r ra
1348 009: {"error":null,"result":[{"count":2}]}
1349 010: i=-1 r=125 b=false s=newstring u=<5> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
1350 010: i=0 r=123.5 b=true s=newstring u=<5> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1351 010: updated columns: s
1352 010: updated columns: s
1353 011: {"error":null,"result":[{"count":1}]}
1354 012: deleted row: uuid=<1>
1355 012: i=0 r=123.5 b=true s=newstring u=<5> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1357 014: i=-1 r=125 b=false s=newstring u=<5> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<6>
1358 014: i=1 r=123.5 b=true s=mystring u=<2> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<3> <4>] uuid=<0>
1359 014: updated columns: b ba i ia r ra s sa u ua
1360 014: updated columns: ba i ia r ra s
1364 m4_define([OVSDB_CHECK_IDL_PARTIAL_UPDATE_MAP_COLUMN],
1366 AT_KEYWORDS([ovsdb server idl partial update map column positive $5])
1367 AT_CHECK([ovsdb_start_idltest])
1369 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
1370 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-partial-update-map-column unix:socket $3],
1371 [0], [stdout], [ignore])
1372 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
1374 OVSDB_SERVER_SHUTDOWN
1377 OVSDB_CHECK_IDL_PARTIAL_UPDATE_MAP_COLUMN([map, simple2 idl-partial-update-map-column, initially populated],
1378 [['["idltest", {"op":"insert", "table":"simple2",
1379 "row":{"name":"myString1","smap":["map",[["key1","value1"],["key2","value2"]]]} }]']
1382 [[000: Getting records
1383 001: name=myString1 smap=[[key1 : value1],[key2 : value2]] imap=[]
1384 002: After insert element
1385 003: name=String2 smap=[[key1 : myList1],[key2 : value2]] imap=[[3 : myids2]]
1386 004: After insert duplicated element
1387 005: name=String2 smap=[[key1 : myList1],[key2 : value2]] imap=[[3 : myids2]]
1388 006: After delete element
1389 007: name=String2 smap=[[key2 : value2]] imap=[[3 : myids2]]
1390 008: After trying to delete a deleted element
1391 009: name=String2 smap=[[key2 : value2]] imap=[[3 : myids2]]
1395 OVSDB_CHECK_IDL_PY([partial-map idl],
1396 [['["idltest", {"op":"insert", "table":"simple2",
1397 "row":{"name":"myString1","smap":["map",[["key1","value1"],["key2","value2"]]]} }]']
1399 [?simple2:name,smap,imap 'partialmapinsertelement' 'partialmapinsertmultipleelements' 'partialmapdelelements' 'partialmapmutatenew'],
1400 [[000: name=myString1 smap=[(key1 value1) (key2 value2)] imap=[]
1401 001: commit, status=success
1402 002: name=String2 smap=[(key1 myList1) (key2 value2)] imap=[(3 myids2)]
1403 003: commit, status=success
1404 004: name=String2 smap=[(key1 myList1) (key2 myList2) (key3 myList3) (key4 myList4)] imap=[(3 myids2)]
1405 005: commit, status=success
1406 006: name=String2 smap=[(key2 myList2)] imap=[(3 myids2)]
1407 007: commit, status=success
1408 008: name=String2 smap=[(key2 myList2)] imap=[(3 myids2)]
1409 008: name=String2New smap=[(key1 newList1) (key2 newList2)] imap=[]
1413 OVSDB_CHECK_IDL_PY([partial-map update set refmap idl],
1414 [['["idltest", {"op":"insert", "table":"simple3", "row":{"name":"myString1"}},
1415 {"op":"insert", "table":"simple5", "row":{"name":"myString2"}}]']],
1416 ['partialmapmutateirefmap'],
1417 [[000: name=myString1 uset=[]
1418 000: name=myString2 irefmap=[]
1419 001: commit, status=success
1420 002: name=myString1 uset=[]
1421 002: name=myString2 irefmap=[(1 <0>)]
1425 m4_define([OVSDB_CHECK_IDL_PARTIAL_UPDATE_SET_COLUMN],
1427 AT_KEYWORDS([ovsdb server idl partial update set column positive $5])
1428 AT_CHECK([ovsdb_start_idltest])
1430 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
1431 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-partial-update-set-column unix:socket $3],
1432 [0], [stdout], [ignore])
1433 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
1435 OVSDB_SERVER_SHUTDOWN
1438 OVSDB_CHECK_IDL_PARTIAL_UPDATE_SET_COLUMN([set, simple3 idl-partial-update-set-column, initially populated],
1439 [['["idltest", {"op":"insert", "table":"simple3",
1440 "row":{"name":"mySet1","uset":["set", [[ "uuid", "0005b872-f9e5-43be-ae02-3184b9680e75" ], [ "uuid", "000d2f6a-76af-412f-b59d-e7bcd3e84eff" ]]]} }]']
1443 [[000: Getting records
1444 001: name=mySet1 uset=[[<0>],[<1>]] uref=[]
1445 002: After rename+add new value
1446 003: name=String2 uset=[[<0>],[<1>],[<2>]] uref=[]
1447 004: After add new value
1448 005: name=String2 uset=[[<0>],[<1>],[<2>],[<3>]] uref=[]
1449 006: After delete value
1450 007: name=String2 uset=[[<0>],[<1>],[<3>]] uref=[]
1451 008: After trying to delete a deleted value
1452 009: name=String2 uset=[[<0>],[<1>],[<3>]] uref=[]
1453 010: After add to other table + set of strong ref
1454 011: name=String2 uset=[[<0>],[<1>],[<3>]] uref=[[<4>]]
1458 OVSDB_CHECK_IDL_PY([partial-set idl],
1459 [['["idltest", {"op":"insert", "table":"simple3", "uuid-name":"newrow",
1460 "row":{"name":"mySet1","uset":["set", [[ "uuid", "0005b872-f9e5-43be-ae02-3184b9680e75" ]]]} },
1461 {"op":"insert", "table":"simple4", "row":{"name":"seed"}},
1462 {"op":"mutate", "table":"simple3", "where":[["_uuid", "==", ["named-uuid", "newrow"]]],
1463 "mutations": [["uset", "insert", ["set", [["uuid", "000d2f6a-76af-412f-b59d-e7bcd3e84eff"]]]]]}]']
1465 ['partialrenamesetadd' 'partialduplicateadd' 'partialsetdel' 'partialsetref' 'partialsetoverrideops' 'partialsetadddelete' 'partialsetmutatenew'],
1466 [[000: name=mySet1 uset=[<0> <1>]
1467 001: commit, status=success
1468 002: name=String2 uset=[<0> <1> <2>]
1469 003: commit, status=success
1470 004: name=String2 uset=[<0> <1> <2> <3>]
1471 005: commit, status=success
1472 006: name=String2 uset=[<0> <1> <3>]
1473 007: commit, status=success
1474 008: name=String2 uset=[<0> <1> <3>]
1475 009: commit, status=success
1476 010: name=String2 uset=[<3>]
1477 011: commit, status=success
1478 012: name=String2 uset=[<4> <5>]
1479 013: commit, status=success
1480 014: name=String2 uset=[<4> <5>]
1481 014: name=String3 uset=[<6>]
1485 m4_define([OVSDB_CHECK_IDL_NOTIFY],
1486 [OVSDB_CHECK_IDL_PY([$1], [], [$2], [$3], [notify $4], [$5])
1487 OVSDB_CHECK_IDL_SSL_PY([$1], [], [$2], [$3], [notify $4], [$5])])
1489 OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify],
1498 "u": ["uuid", "84f5c8f5-ac76-4dbc-a24f-8860eb407fc1"],
1499 "ia": ["set", [1, 2, 3]],
1500 "ra": ["set", [-0.5]],
1501 "ba": ["set", [true]],
1502 "sa": ["set", ["abc", "def"]],
1503 "ua": ["set", [["uuid", "69443985-7806-45e2-b35f-574a04e720f9"],
1504 ["uuid", "aad11ef0-816a-4b01-93e6-03b8b4256b98"]]]}},
1512 "row": {"b": false}}]' \
1517 "row": {"r": 123.5}}]' \
1526 "ra": ["set", [1.5]],
1527 "ba": ["set", [false]],
1529 "ua": ["set", []]}}]' \
1533 "where": [["i", "<", 1]],
1534 "row": {"s": "newstring"}}]' \
1538 "where": [["i", "==", 0]]}]' \
1541 000: event:create, row={uuid=<0>}, updates=None
1542 000: event:create, row={uuid=<1>}, updates=None
1543 001: {"error":null,"result":[{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]}
1544 002: event:create, row={i=0 r=0 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>}, updates=None
1545 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
1546 002: i=0 r=0 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
1547 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>
1548 003: {"error":null,"result":[{"count":2}]}
1549 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>}
1550 004: i=0 r=0 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
1551 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>
1552 005: {"error":null,"result":[{"count":2}]}
1553 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>}
1554 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>}
1555 006: i=0 r=123.5 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
1556 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>
1557 007: {"error":null,"result":[{"uuid":["uuid","<8>"]}]}
1558 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
1559 008: i=-1 r=125 b=false s= u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8>
1560 008: i=0 r=123.5 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
1561 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>
1562 009: {"error":null,"result":[{"count":2}]}
1563 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>}
1564 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>}
1565 010: i=-1 r=125 b=false s=newstring u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8>
1566 010: i=0 r=123.5 b=false s=newstring u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
1567 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>
1568 011: {"error":null,"result":[{"count":1}]}
1569 012: event:delete, row={i=0 r=123.5 b=false s=newstring u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>}, updates=None
1570 012: i=-1 r=125 b=false s=newstring u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8>
1571 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>
1573 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
1574 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
1575 014: event:create, row={uuid=<0>}, updates=None
1576 014: event:create, row={uuid=<1>}, updates=None
1577 014: i=-1 r=125 b=false s=newstring u=<4> ia=[1] ra=[1.5] ba=[false] sa=[] ua=[] uuid=<8>
1578 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>
1582 # Tests to verify the functionality of the one column compound index.
1583 # It tests index for one column string and integer indexes.
1584 # The run of test-ovsdb generates the output of the display of data using the different indexes defined in
1586 # Then, some at_checks are used to verify the correctness of the corresponding index as well as the existence
1587 # of all the rows involved in the test.
1588 m4_define([OVSDB_CHECK_IDL_COMPOUND_INDEX_SINGLE_COLUMN_C],
1590 AT_KEYWORDS([ovsdb server idl compound_index_single_column compound_index positive $5])
1591 AT_CHECK([ovsdb_start_idltest])
1593 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
1594 # Generate the data to be tested.
1595 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-compound-index unix:socket $3],
1596 [0], [stdout], [ignore])
1597 # Filter the rows of data that corresponds to the string index eliminating the extra columns of data.
1598 # This is done to verifiy that the output data is in the correct and expected order.
1599 AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: s=.*' | sed -e 's/ i=.*//g']],
1601 # Here, the data is filtered and sorted in order to have all the rows in the index and be
1602 # able to determined that all the involved rows are present.
1603 AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: s=.*' | sort -k 1,1n -k 2,2 -k 3,3]],
1605 # Filter the rows of data that corresponds to the integer index eliminating the extra columns of data.
1606 # This is done to verifiy that the output data is in the correct and expected order.
1607 AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: i=.*' | sed -e 's/ s=.*//g']],
1609 # Here again, the data is filtered and sorted in order to have all the rows in the index and be
1610 # able to determined that all the involved rows are present.
1611 AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: i=.*' | sort -k 1,1n -k 2,2 -k 3,3]],
1613 OVSDB_SERVER_SHUTDOWN
1616 OVSDB_CHECK_IDL_COMPOUND_INDEX_SINGLE_COLUMN_C([Compound_index, single column test ],
1618 {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 1, "b":true, "r":101.0}},
1619 {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 2, "b":false, "r":102.0}},
1620 {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 10, "b":true, "r":110.0}},
1621 {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 1, "b":false, "r":110.0}},
1622 {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 2, "b":true, "r":120.0}},
1623 {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 2, "b":true, "r":122.0}},
1624 {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 4, "b":true, "r":130.0}},
1625 {"op": "insert", "table": "simple", "row": {"s":"List005", "i": 5, "b":true, "r":130.0}},
1626 {"op": "insert", "table": "simple", "row": {"s":"List020", "i": 20, "b":true, "r":220.0}},
1627 {"op": "insert", "table": "simple", "row": {"s":"List020", "i": 19, "b":true, "r":219.0}}
1629 [idl_compound_index_single_column],
1645 [001: s=List000 i=1 b=True r=101.000000
1646 001: s=List000 i=10 b=True r=110.000000
1647 001: s=List000 i=2 b=False r=102.000000
1648 001: s=List001 i=1 b=False r=110.000000
1649 001: s=List001 i=2 b=True r=120.000000
1650 001: s=List001 i=2 b=True r=122.000000
1651 001: s=List001 i=4 b=True r=130.000000
1652 001: s=List005 i=5 b=True r=130.000000
1653 001: s=List020 i=19 b=True r=219.000000
1654 001: s=List020 i=20 b=True r=220.000000
1655 003: s=List001 i=1 b=False r=110.000000
1656 003: s=List001 i=2 b=True r=120.000000
1657 003: s=List001 i=2 b=True r=122.000000
1658 003: s=List001 i=4 b=True r=130.000000
1694 [002: i=1 s=List000 b=True r=101.000000
1695 002: i=1 s=List001 b=False r=110.000000
1696 002: i=10 s=List000 b=True r=110.000000
1697 002: i=19 s=List020 b=True r=219.000000
1698 002: i=2 s=List000 b=False r=102.000000
1699 002: i=2 s=List001 b=True r=120.000000
1700 002: i=2 s=List001 b=True r=122.000000
1701 002: i=20 s=List020 b=True r=220.000000
1702 002: i=4 s=List001 b=True r=130.000000
1703 002: i=5 s=List005 b=True r=130.000000
1704 004: i=5 s=List005 b=True r=130.000000
1705 005: i=4 s=List001 b=True r=130.000000
1706 005: i=5 s=List005 b=True r=130.000000
1707 006: i=10 s=List000 b=True r=110.000000
1708 006: i=19 s=List020 b=True r=219.000000
1709 006: i=20 s=List020 b=True r=220.000000
1710 006: i=5 s=List005 b=True r=130.000000
1711 006: i=54 s=Lista054 b=False r=0.000000
1712 007: i=19 s=List020 b=True r=219.000000
1713 007: i=20 s=List020 b=True r=220.000000
1714 007: i=30 s=List000 b=True r=110.000000
1715 007: i=5 s=List005 b=True r=130.000000
1716 007: i=54 s=Lista054 b=False r=0.000000
1717 008: i=1 s=List000 b=True r=101.000000
1718 008: i=1 s=List001 b=False r=110.000000
1719 008: i=19 s=List020 b=True r=219.000000
1720 008: i=2 s=List000 b=False r=102.000000
1721 008: i=2 s=List001 b=True r=120.000000
1722 008: i=2 s=List001 b=True r=122.000000
1723 008: i=20 s=List020 b=True r=220.000000
1724 008: i=30 s=List000 b=True r=110.000000
1725 008: i=5 s=List005 b=True r=130.000000
1726 008: i=54 s=Lista054 b=False r=0.000000
1729 # Tests to verify the functionality of two column compound index.
1730 # It tests index for two columns using string and integer fields.
1731 # The run of test-ovsdb generates the output of the display of data using the different indexes defined in
1733 # Then, some at_checks are used to verify the correctness of the corresponding index as well as the existence
1734 # of all the rows involved in the test.
1735 m4_define([OVSDB_CHECK_IDL_COMPOUND_INDEX_DOUBLE_COLUMN_C],
1737 AT_KEYWORDS([ovsdb server idl compound_index_double_column compound_index positive $5])
1738 AT_CHECK([ovsdb_start_idltest])
1740 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
1741 # Generate the data to be tested.
1742 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-compound-index unix:socket $3],
1743 [0], [stdout], [ignore])
1744 # Filter the rows of data that corresponds to the string-integer index eliminating the extra columns of data.
1745 # This is done to verifiy that the output data is in the correct and expected order.
1746 AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: s=.*' | sed -e 's/ b=.*//g']],
1748 # Here, the data is filtered and sorted in order to have all the rows in the index and be
1749 # able to determined that all the involved rows are present.
1750 AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: s=.*' | sort -k 1,1n -k 2,2 -k 3,3]],
1752 # Filter the rows of data that corresponds to the integer index eliminating the extra columns of data.
1753 # This is done to verifiy that the output data is in the correct and expected order.
1754 AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: i=.*' | sed -e 's/ b=.*//g']],
1756 # Here again, the data is filtered and sorted in order to have all the rows in the index and be
1757 # able to determined that all the involved rows are present.
1758 AT_CHECK([[cat stdout | grep -oh '[0-9]\{3\}: i=.*' | sort -k 1,1n -k 2,2 -k 3,3]],
1760 OVSDB_SERVER_SHUTDOWN
1763 OVSDB_CHECK_IDL_COMPOUND_INDEX_DOUBLE_COLUMN_C([Compound_index, double column test ],
1765 {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 1, "b":true, "r":101.0}},
1766 {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 2, "b":false, "r":102.0}},
1767 {"op": "insert", "table": "simple", "row": {"s":"List000", "i": 10, "b":true, "r":110.0}},
1768 {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 1, "b":false, "r":110.0}},
1769 {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 2, "b":true, "r":120.0}},
1770 {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 2, "b":true, "r":122.0}},
1771 {"op": "insert", "table": "simple", "row": {"s":"List001", "i": 4, "b":true, "r":130.0}},
1772 {"op": "insert", "table": "simple", "row": {"s":"List005", "i": 5, "b":true, "r":130.0}},
1773 {"op": "insert", "table": "simple", "row": {"s":"List020", "i": 20, "b":true, "r":220.0}},
1774 {"op": "insert", "table": "simple", "row": {"s":"List020", "i": 19, "b":true, "r":219.0}}
1776 [idl_compound_index_double_column],
1804 [001: s=List000 i=1 b=True r=101.000000
1805 001: s=List000 i=10 b=True r=110.000000
1806 001: s=List000 i=2 b=False r=102.000000
1807 001: s=List001 i=1 b=False r=110.000000
1808 001: s=List001 i=2 b=True r=120.000000
1809 001: s=List001 i=2 b=True r=122.000000
1810 001: s=List001 i=4 b=True r=130.000000
1811 001: s=List005 i=5 b=True r=130.000000
1812 001: s=List020 i=19 b=True r=219.000000
1813 001: s=List020 i=20 b=True r=220.000000
1814 002: s=List000 i=1 b=True r=101.000000
1815 002: s=List000 i=10 b=True r=110.000000
1816 002: s=List000 i=2 b=False r=102.000000
1817 002: s=List001 i=1 b=False r=110.000000
1818 002: s=List001 i=2 b=True r=120.000000
1819 002: s=List001 i=2 b=True r=122.000000
1820 002: s=List001 i=4 b=True r=130.000000
1821 002: s=List005 i=5 b=True r=130.000000
1822 002: s=List020 i=19 b=True r=219.000000
1823 002: s=List020 i=20 b=True r=220.000000
1824 003: s=List000 i=10 b=True r=110.000000
1825 004: s=List001 i=1 b=False r=110.000000
1826 004: s=List001 i=2 b=True r=120.000000
1827 004: s=List001 i=2 b=True r=122.000000
1828 004: s=List001 i=4 b=True r=130.000000
1829 004: s=List005 i=5 b=True r=130.000000
1852 [005: i=1 s=List000 b=True r=101.000000
1853 005: i=1 s=List001 b=False r=110.000000
1854 005: i=10 s=List000 b=True r=110.000000
1855 005: i=19 s=List020 b=True r=219.000000
1856 005: i=2 s=List000 b=False r=102.000000
1857 005: i=2 s=List001 b=True r=120.000000
1858 005: i=2 s=List001 b=True r=122.000000
1859 005: i=20 s=List020 b=True r=220.000000
1860 005: i=4 s=List001 b=True r=130.000000
1861 005: i=5 s=List005 b=True r=130.000000
1862 006: i=1 s=List000 b=True r=101.000000
1863 006: i=1 s=List001 b=False r=110.000000
1864 006: i=10 s=List000 b=True r=110.000000
1865 006: i=19 s=List020 b=True r=219.000000
1866 006: i=2 s=List000 b=False r=102.000000
1867 006: i=2 s=List001 b=True r=120.000000
1868 006: i=2 s=List001 b=True r=122.000000
1869 006: i=20 s=List020 b=True r=220.000000
1870 006: i=4 s=List001 b=True r=130.000000
1871 006: i=5 s=List005 b=True r=130.000000
1874 m4_define([OVSDB_CHECK_IDL_COMPOUND_INDEX_WITH_REF],
1876 AT_KEYWORDS([ovsdb server idl compound_index compound_index_with_ref positive $5])
1877 AT_CHECK([ovsdb_start_idltest])
1879 [AT_CHECK([ovsdb-client transact unix:socket $2], [0], [ignore], [ignore])])
1880 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 -c idl-compound-index-with-ref unix:socket $3],
1881 [0], [stdout], [ignore])
1882 AT_CHECK([sort stdout | uuidfilt]m4_if([$6],,, [[| $6]]),
1884 OVSDB_SERVER_SHUTDOWN
1887 OVSDB_CHECK_IDL_COMPOUND_INDEX_WITH_REF([set, simple3 idl-compound-index-with-ref, initially populated],
1890 [[000: After add to other table + set of strong ref
1891 001: name= uset=[] uref=[[<0>]]
1892 002: check simple4: not empty
1893 003: Query using index with reference
1894 004: name= uset=[] uref=[[<0>]]
1896 007: check simple4: empty
1900 m4_define([CHECK_STREAM_OPEN_BLOCK],
1901 [AT_SETUP([Check stream open block - $1 - $3])
1902 AT_SKIP_IF([test "$3" = "tcp6" && test "$IS_WIN32" = "yes"])
1903 AT_SKIP_IF([test "$3" = "tcp6" && test "$HAVE_IPV6" = "no"])
1904 AT_KEYWORDS([ovsdb server stream open_block $3])
1905 AT_CHECK([ovsdb_start_idltest "ptcp:0:$4"])
1906 PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT])
1907 WRONG_PORT=$(($TCP_PORT + 101))
1908 AT_CHECK([$2 tcp:$4:$TCP_PORT], [0], [ignore])
1909 AT_CHECK([$2 tcp:$4:$WRONG_PORT], [1], [ignore], [ignore])
1910 OVSDB_SERVER_SHUTDOWN
1911 AT_CHECK([$2 tcp:$4:$TCP_PORT], [1], [ignore], [ignore])
1914 CHECK_STREAM_OPEN_BLOCK([C], [test-stream], [tcp], [127.0.0.1])
1915 CHECK_STREAM_OPEN_BLOCK([C], [test-stream], [tcp6], [[[::1]]])
1916 CHECK_STREAM_OPEN_BLOCK([Python3], [$PYTHON3 $srcdir/test-stream.py],
1918 CHECK_STREAM_OPEN_BLOCK([Python3], [$PYTHON3 $srcdir/test-stream.py],
1921 # same as OVSDB_CHECK_IDL but uses Python IDL implementation with tcp
1922 # with multiple remotes to assert the idl connects to the leader of the Raft cluster
1923 m4_define([OVSDB_CHECK_IDL_LEADER_ONLY_PY],
1924 [AT_SETUP([$1 - Python3 (leader only)])
1925 AT_SKIP_IF([test "$IS_ARM64" = "yes"])
1926 AT_KEYWORDS([ovsdb server idl Python leader_only with tcp socket])
1927 m4_define([LPBK],[127.0.0.1])
1928 OVSDB_CLUSTER_START_IDLTEST([$2], ["ptcp:0:"LPBK])
1929 PARSE_LISTENING_PORT([s2.log], [TCP_PORT_1])
1930 PARSE_LISTENING_PORT([s3.log], [TCP_PORT_2])
1931 PARSE_LISTENING_PORT([s1.log], [TCP_PORT_3])
1932 remotes=tcp:LPBK:$TCP_PORT_1,tcp:LPBK:$TCP_PORT_2,tcp:LPBK:$TCP_PORT_3
1933 pids=$(cat s2.pid s3.pid s1.pid | tr '\n' ',')
1935 AT_CHECK([$PYTHON3 $srcdir/test-ovsdb.py -t30 idl-cluster $srcdir/idltest.ovsschema $remotes $pids $3],
1936 [0], [stdout], [ignore])
1937 remote=$(ovsdb_cluster_leader $remotes "idltest")
1938 leader=$(echo $remote | cut -d'|' -f 1)
1939 AT_CHECK([grep -F -- "${leader}" stdout], [0], [ignore])
1942 OVSDB_CHECK_IDL_LEADER_ONLY_PY([Check Python IDL connects to leader], 3, ['remote'])
1943 OVSDB_CHECK_IDL_LEADER_ONLY_PY([Check Python IDL reconnects to leader], 3, ['remote' '+remotestop' 'remote'])
1945 # same as OVSDB_CHECK_IDL but uses C IDL implementation with tcp
1946 # with multiple remotes.
1947 m4_define([OVSDB_CHECK_CLUSTER_IDL_C],
1948 [AT_SETUP([$1 - C - tcp])
1949 AT_KEYWORDS([ovsdb server idl positive tcp socket $5])
1950 m4_define([LPBK],[127.0.0.1])
1951 OVSDB_CLUSTER_START_IDLTEST([$2], ["ptcp:0:"LPBK])
1952 PARSE_LISTENING_PORT([s1.log], [TCP_PORT_1])
1953 PARSE_LISTENING_PORT([s2.log], [TCP_PORT_2])
1954 PARSE_LISTENING_PORT([s3.log], [TCP_PORT_3])
1955 remotes=tcp:LPBK:$TCP_PORT_1,tcp:LPBK:$TCP_PORT_2,tcp:LPBK:$TCP_PORT_3
1958 [AT_CHECK([ovsdb-client transact $remotes $3], [0], [ignore], [ignore])])
1959 AT_CHECK([test-ovsdb '-vPATTERN:console:test-ovsdb|%c|%m' -vjsonrpc -t10 idl tcp:LPBK:$TCP_PORT_1 $4],
1960 [0], [stdout], [ignore])
1961 AT_CHECK([sort stdout | uuidfilt]m4_if([$7],,, [[| $7]]),
1965 # Checks that monitor_cond_since works fine when disconnects happen
1966 # with cond_change requests in flight (i.e., IDL is properly updated).
1967 OVSDB_CHECK_CLUSTER_IDL_C([simple idl, monitor_cond_since, cluster disconnect],
1980 [['condition simple []' \
1981 'condition simple [["i","==",2]]' \
1982 'condition simple [["i","==",1]]' \
1987 "where": [["i", "==", 1]],
1988 "row": {"r": 2.0 }}]']],
1989 [[000: change conditions
1991 002: change conditions
1992 003: i=2 r=1 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1993 004: change conditions
1995 006: i=2 r=1 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
1996 007: {"error":null,"result":[{"count":1}]}
1997 008: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>