]>
Commit | Line | Data |
---|---|---|
80d326ad | 1 | AT_BANNER([OVSDB -- ovsdb-server transactions (Unix sockets)]) |
21ff1aee | 2 | |
028cbd99 | 3 | m4_define([OVSDB_SERVER_SHUTDOWN], |
8a16ab90 | 4 | [OVS_APP_EXIT_AND_WAIT_BY_TARGET([`pwd`/unixctl], [`pwd`/pid])]) |
028cbd99 | 5 | |
ae671c5f MC |
6 | m4_define([OVSDB_SERVER_SHUTDOWN2], |
7 | [cp pid2 savepid2 | |
8 | AT_CHECK([ovs-appctl -t "`pwd`"/unixctl2 -e exit], [0], [ignore], [ignore]) | |
9 | OVS_WAIT_WHILE([kill -0 `cat savepid2`], [kill `cat savepid2`])]) | |
10 | ||
21ff1aee BP |
11 | # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) |
12 | # | |
13 | # Creates a database with the given SCHEMA, starts an ovsdb-server on | |
14 | # that database, and runs each of the TRANSACTIONS (which should be a | |
15 | # quoted list of quoted strings) against it with ovsdb-client one at a | |
16 | # time. | |
17 | # | |
18 | # Checks that the overall output is OUTPUT, but UUIDs in the output | |
19 | # are replaced by markers of the form <N> where N is a number. The | |
20 | # first unique UUID is replaced by <0>, the next by <1>, and so on. | |
21 | # If a given UUID appears more than once it is always replaced by the | |
22 | # same marker. | |
23 | # | |
24 | # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. | |
25 | m4_define([OVSDB_CHECK_EXECUTION], | |
26 | [AT_SETUP([$1]) | |
9ff373db | 27 | AT_KEYWORDS([ovsdb server positive unix $5]) |
39ab07af | 28 | $2 > schema |
7c126fbb | 29 | AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) |
77a922c7 | 30 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --remote=punix:socket --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) |
21ff1aee | 31 | m4_foreach([txn], [$3], |
7c126fbb | 32 | [AT_CHECK([ovsdb-client transact unix:socket 'txn'], [0], [stdout], [ignore], |
21ff1aee BP |
33 | [test ! -e pid || kill `cat pid`]) |
34 | cat stdout >> output | |
35 | ]) | |
5c6d0628 | 36 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], [$4], [ignore], |
21ff1aee | 37 | [test ! -e pid || kill `cat pid`]) |
028cbd99 | 38 | OVSDB_SERVER_SHUTDOWN |
21ff1aee BP |
39 | AT_CLEANUP]) |
40 | ||
41 | EXECUTION_EXAMPLES | |
80d326ad | 42 | \f |
48f6e410 BP |
43 | AT_BANNER([ovsdb-server miscellaneous features]) |
44 | ||
db90b374 BP |
45 | AT_SETUP([truncating corrupted database log]) |
46 | AT_KEYWORDS([ovsdb server positive unix]) | |
bdb2e73b | 47 | AT_SKIP_IF([test "$IS_WIN32" = "yes"]) |
39ab07af | 48 | ordinal_schema > schema |
db90b374 BP |
49 | AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) |
50 | dnl Do one transaction and save the output. | |
51 | AT_DATA([txnfile], [[ovsdb-client transact unix:socket \ | |
52 | '["ordinals", | |
53 | {"op": "insert", | |
54 | "table": "ordinals", | |
55 | "row": {"number": 0, "name": "zero"}}]' | |
56 | ]]) | |
37d03458 | 57 | AT_CHECK([ovsdb-server --remote=punix:socket --unixctl="`pwd`"/unixctl db --run="sh txnfile"], [0], [stdout], []) |
db90b374 BP |
58 | cat stdout >> output |
59 | dnl Add some crap to the database log and run another transaction, which should | |
60 | dnl ignore the crap and truncate it out of the log. | |
61 | echo 'xxx' >> db | |
62 | AT_DATA([txnfile], [[ovsdb-client transact unix:socket \ | |
63 | '["ordinals", | |
64 | {"op": "insert", | |
65 | "table": "ordinals", | |
66 | "row": {"number": 1, "name": "one"}}]' | |
67 | ]]) | |
37d03458 | 68 | AT_CHECK([ovsdb-server --remote=punix:socket --unixctl="`pwd`"/unixctl db --run="sh txnfile"], [0], [stdout], [stderr]) |
db90b374 BP |
69 | AT_CHECK([grep 'syntax error: db: parse error.* in header line "xxx"' stderr], |
70 | [0], [ignore]) | |
71 | cat stdout >> output | |
72 | dnl Run a final transaction to verify that both transactions succeeeded. | |
73 | dnl The crap that we added should have been truncated by the previous run, | |
74 | dnl so ovsdb-server shouldn't log a warning this time. | |
75 | AT_DATA([txnfile], [[ovsdb-client transact unix:socket \ | |
76 | '["ordinals", | |
77 | {"op": "select", | |
78 | "table": "ordinals", | |
79 | "where": [], | |
80 | "sort": ["number"]}]' | |
81 | ]]) | |
37d03458 | 82 | AT_CHECK([ovsdb-server --remote=punix:socket --unixctl="`pwd`"/unixctl db --run="sh txnfile"], [0], [stdout], []) |
43675e26 | 83 | cat stdout >> output |
5c6d0628 | 84 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], |
43675e26 BP |
85 | [[[{"uuid":["uuid","<0>"]}] |
86 | [{"uuid":["uuid","<1>"]}] | |
87 | [{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}] | |
88 | ]], [], | |
89 | [test ! -e pid || kill `cat pid`]) | |
90 | AT_CLEANUP | |
91 | ||
92 | AT_SETUP([truncating database log with bad transaction]) | |
93 | AT_KEYWORDS([ovsdb server positive unix]) | |
bdb2e73b | 94 | AT_SKIP_IF([test "$IS_WIN32" = "yes"]) |
39ab07af | 95 | ordinal_schema > schema |
43675e26 BP |
96 | AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) |
97 | dnl Do one transaction and save the output. | |
98 | AT_DATA([txnfile], [[ovsdb-client transact unix:socket \ | |
99 | '["ordinals", | |
100 | {"op": "insert", | |
101 | "table": "ordinals", | |
102 | "row": {"number": 0, "name": "zero"}}]' | |
103 | ]]) | |
37d03458 | 104 | AT_CHECK([ovsdb-server --remote=punix:socket --unixctl="`pwd`"/unixctl db --run="sh txnfile"], [0], [stdout], []) |
43675e26 BP |
105 | cat stdout >> output |
106 | dnl Add some crap to the database log and run another transaction, which should | |
107 | dnl ignore the crap and truncate it out of the log. | |
108 | echo 'OVSDB JSON 15 ffbcdae4b0386265f9ea3280dd7c8f0b72a20e56 | |
109 | {"invalid":{}}' >> db | |
110 | AT_DATA([txnfile], [[ovsdb-client transact unix:socket \ | |
111 | '["ordinals", | |
112 | {"op": "insert", | |
113 | "table": "ordinals", | |
114 | "row": {"number": 1, "name": "one"}}]' | |
115 | ]]) | |
37d03458 | 116 | AT_CHECK([ovsdb-server --remote=punix:socket --unixctl="`pwd`"/unixctl db --run="sh txnfile"], [0], [stdout], [stderr]) |
43675e26 BP |
117 | AT_CHECK([grep 'syntax "{"invalid":{}}": unknown table: No table named invalid.' stderr], |
118 | [0], [ignore]) | |
119 | cat stdout >> output | |
120 | dnl Run a final transaction to verify that both transactions succeeeded. | |
121 | dnl The crap that we added should have been truncated by the previous run, | |
122 | dnl so ovsdb-server shouldn't log a warning this time. | |
123 | AT_DATA([txnfile], [[ovsdb-client transact unix:socket \ | |
124 | '["ordinals", | |
125 | {"op": "select", | |
126 | "table": "ordinals", | |
127 | "where": [], | |
128 | "sort": ["number"]}]' | |
129 | ]]) | |
37d03458 | 130 | AT_CHECK([ovsdb-server --remote=punix:socket --unixctl="`pwd`"/unixctl db --run="sh txnfile"], [0], [stdout], []) |
db90b374 | 131 | cat stdout >> output |
5c6d0628 | 132 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], |
db90b374 BP |
133 | [[[{"uuid":["uuid","<0>"]}] |
134 | [{"uuid":["uuid","<1>"]}] | |
135 | [{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}] | |
136 | ]], [], | |
137 | [test ! -e pid || kill `cat pid`]) | |
138 | AT_CLEANUP | |
139 | ||
8159b984 BP |
140 | AT_SETUP([ovsdb-client get-schema-version]) |
141 | AT_KEYWORDS([ovsdb server positive]) | |
39ab07af | 142 | ordinal_schema > schema |
8159b984 | 143 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) |
77a922c7 | 144 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --unixctl="`pwd`"/unixctl --remote=punix:socket db], [0], [ignore], [ignore]) |
8159b984 BP |
145 | AT_CHECK([ovsdb-client get-schema-version unix:socket ordinals], [0], [5.1.3 |
146 | ]) | |
147 | OVSDB_SERVER_SHUTDOWN | |
148 | AT_CLEANUP | |
149 | ||
9cb53f26 BP |
150 | AT_SETUP([database multiplexing implementation]) |
151 | AT_KEYWORDS([ovsdb server positive]) | |
b4e8d170 BP |
152 | ordinal_schema > schema1 |
153 | constraint_schema > schema2 | |
154 | AT_CHECK([ovsdb-tool create db1 schema1], [0], [ignore], [ignore]) | |
155 | AT_CHECK([ovsdb-tool create db2 schema2], [0], [ignore], [ignore]) | |
156 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --unixctl="`pwd`"/unixctl --remote=punix:socket db1 db2], [0], [ignore], [ignore]) | |
9cb53f26 BP |
157 | AT_CHECK( |
158 | [[ovsdb-client list-dbs unix:socket]], | |
b4e8d170 BP |
159 | [0], [constraints |
160 | ordinals | |
9cb53f26 BP |
161 | ], [ignore], [test ! -e pid || kill `cat pid`]) |
162 | AT_CHECK( | |
eadd1644 | 163 | [[ovstest test-jsonrpc request unix:socket get_schema [\"nonexistent\"]]], [0], |
508624b6 | 164 | [[{"error":{"details":"get_schema request specifies unknown database nonexistent","error":"unknown database","syntax":"[\"nonexistent\"]"},"id":0,"result":null} |
53ffefe9 | 165 | ]], [], [test ! -e pid || kill `cat pid`]) |
9cb53f26 BP |
166 | OVSDB_SERVER_SHUTDOWN |
167 | AT_CLEANUP | |
168 | ||
0a3b723b BP |
169 | AT_SETUP([ovsdb-server/add-db and remove-db]) |
170 | AT_KEYWORDS([ovsdb server positive]) | |
53eb8cb8 | 171 | on_exit 'kill `cat ovsdb-server.pid`' |
0a3b723b BP |
172 | ordinal_schema > schema1 |
173 | constraint_schema > schema2 | |
174 | AT_CHECK([ovsdb-tool create db1 schema1], [0], [ignore], [ignore]) | |
175 | AT_CHECK([ovsdb-tool create db2 schema2], [0], [ignore], [ignore]) | |
176 | ||
177 | # Start ovsdb-server with just a single database - db1. | |
178 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --remote=punix:socket db1], [0]) | |
179 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-dbs], | |
180 | [0], [ordinals | |
181 | ]) | |
182 | ||
183 | # Add the second database. | |
184 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-db db2], [0]) | |
185 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-dbs], | |
186 | [0], [constraints | |
187 | ordinals | |
188 | ]) | |
189 | ||
190 | # The databases are responsive. | |
191 | AT_CHECK([ovsdb-client list-tables unix:socket constraints], [0], [ignore], [ignore]) | |
192 | AT_CHECK([ovsdb-client list-tables unix:socket ordinals], [0], [ignore], [ignore]) | |
193 | ||
194 | # Add an already added database. | |
bd270dc3 GS |
195 | if test $IS_WIN32 = "yes"; then |
196 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-db db2], 2, [], | |
197 | [I/O error: db2: failed to lock lockfile (Resource deadlock avoided) | |
198 | ovs-appctl: ovsdb-server: server returned an error | |
199 | ]) | |
200 | else | |
201 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-db db2], 2, [], | |
ebed9f78 | 202 | [db2: already open |
0a3b723b BP |
203 | ovs-appctl: ovsdb-server: server returned an error |
204 | ]) | |
bd270dc3 | 205 | fi |
0a3b723b BP |
206 | |
207 | # Add a non-existing database. | |
208 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-db db3], 2, [], [stderr]) | |
209 | AT_CHECK([sed 's/(.*)/(...)/' stderr], [0], | |
a6be657b | 210 | [I/O error: db3: open failed (...) |
0a3b723b BP |
211 | ovs-appctl: ovsdb-server: server returned an error |
212 | ]) | |
213 | ||
214 | # Add a remote through a db path in db1. | |
215 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-remote db:ordinals,ordinals,name], [0]) | |
216 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-remotes], | |
217 | [0], [db:ordinals,ordinals,name | |
218 | punix:socket | |
219 | ]) | |
220 | ||
221 | # Removing db1 has no effect on its remote. | |
222 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/remove-db ordinals], [0]) | |
223 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-dbs], | |
224 | [0], [constraints | |
225 | ]) | |
226 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-remotes], | |
227 | [0], [db:ordinals,ordinals,name | |
228 | punix:socket | |
229 | ]) | |
230 | AT_CHECK([ovsdb-client list-tables unix:socket ordinals], [1], [ignore], [ignore]) | |
231 | ||
232 | # Remove db2. | |
233 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/remove-db constraints], [0]) | |
234 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-dbs], | |
235 | [0], []) | |
236 | AT_CHECK([ovsdb-client list-tables unix:socket constraints], [1], [ignore], [ignore]) | |
237 | ||
238 | # Remove a non-existent database. | |
239 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/remove-db ordinals], [2], | |
240 | [], [Failed to find the database. | |
241 | ovs-appctl: ovsdb-server: server returned an error | |
242 | ]) | |
3fc53787 GS |
243 | |
244 | # Add a removed database. | |
245 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-db db2], [0]) | |
246 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-dbs], | |
247 | [0], [constraints | |
248 | ]) | |
249 | AT_CHECK([ovsdb-client list-tables unix:socket constraints], [0], [ignore], [ignore]) | |
d9c8c57c | 250 | OVS_APP_EXIT_AND_WAIT([ovsdb-server]) |
0a3b723b BP |
251 | AT_CLEANUP |
252 | ||
d7ae8d6b | 253 | AT_SETUP([ovsdb-server/add-db with --monitor]) |
0a3b723b | 254 | AT_KEYWORDS([ovsdb server positive]) |
36373c1a | 255 | AT_SKIP_IF([test "$IS_WIN32" = "yes"]) |
0a3b723b | 256 | # Start ovsdb-server, initially with one db. |
0a3b723b BP |
257 | ordinal_schema > schema |
258 | AT_CHECK([ovsdb-tool create db1 schema], [0], [ignore], [ignore]) | |
53eb8cb8 | 259 | on_exit 'kill `cat *.pid`' |
0a3b723b BP |
260 | AT_CHECK([ovsdb-server -v -vvlog:off --monitor --detach --no-chdir --pidfile --log-file db1]) |
261 | ||
262 | # Add the second database. | |
263 | constraint_schema > schema2 | |
264 | AT_CHECK([ovsdb-tool create db2 schema2], [0], [ignore], [ignore]) | |
265 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-db db2], [0]) | |
266 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-dbs], | |
267 | [0], [constraints | |
268 | ordinals | |
269 | ]) | |
270 | ||
271 | # Kill the daemon process, making it look like a segfault, | |
272 | # and wait for a new daemon process to get spawned. | |
273 | cp ovsdb-server.pid old.pid | |
274 | AT_CHECK([kill -SEGV `cat ovsdb-server.pid`]) | |
275 | OVS_WAIT_WHILE([kill -0 `cat old.pid`]) | |
276 | OVS_WAIT_UNTIL( | |
277 | [test -s ovsdb-server.pid && test `cat ovsdb-server.pid` != `cat old.pid`]) | |
857570c4 | 278 | OVS_WAIT_UNTIL([ovs-appctl -t ovsdb-server version]) |
0a3b723b BP |
279 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-dbs], |
280 | [0], [constraints | |
281 | ordinals | |
282 | ]) | |
d9c8c57c | 283 | OVS_APP_EXIT_AND_WAIT([ovsdb-server]) |
d7ae8d6b BP |
284 | AT_CLEANUP |
285 | ||
286 | AT_SETUP([ovsdb-server/add-db and remove-db with --monitor]) | |
287 | AT_KEYWORDS([ovsdb server positive]) | |
36373c1a | 288 | AT_SKIP_IF([test "$IS_WIN32" = "yes"]) |
d7ae8d6b | 289 | # Start ovsdb-server, initially with one db. |
d7ae8d6b BP |
290 | ordinal_schema > schema |
291 | AT_CHECK([ovsdb-tool create db1 schema], [0], [ignore], [ignore]) | |
292 | constraint_schema > schema2 | |
293 | AT_CHECK([ovsdb-tool create db2 schema2], [0], [ignore], [ignore]) | |
53eb8cb8 | 294 | on_exit 'kill `cat *.pid`' |
d7ae8d6b | 295 | AT_CHECK([ovsdb-server -v -vvlog:off --monitor --detach --no-chdir --pidfile --log-file db1 db2]) |
0a3b723b | 296 | |
d7ae8d6b | 297 | # Remove the second database. |
0a3b723b BP |
298 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/remove-db constraints]) |
299 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-dbs], | |
300 | [0], [ordinals | |
301 | ]) | |
302 | ||
303 | # Kill the daemon process, making it look like a segfault, | |
304 | # and wait for a new daemon process to get spawned. | |
305 | cp ovsdb-server.pid old.pid | |
306 | AT_CHECK([kill -SEGV `cat ovsdb-server.pid`]) | |
307 | OVS_WAIT_WHILE([kill -0 `cat old.pid`]) | |
308 | OVS_WAIT_UNTIL( | |
309 | [test -s ovsdb-server.pid && test `cat ovsdb-server.pid` != `cat old.pid`]) | |
857570c4 | 310 | OVS_WAIT_UNTIL([ovs-appctl -t ovsdb-server version]) |
0a3b723b BP |
311 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-dbs], |
312 | [0], [ordinals | |
313 | ]) | |
d9c8c57c | 314 | OVS_APP_EXIT_AND_WAIT([ovsdb-server]) |
0a3b723b BP |
315 | AT_CLEANUP |
316 | ||
0b1fae1b BP |
317 | AT_SETUP([--remote=db: implementation]) |
318 | AT_KEYWORDS([ovsdb server positive]) | |
319 | AT_DATA([schema], | |
320 | [[{"name": "mydb", | |
321 | "tables": { | |
b4e8d170 BP |
322 | "Root": { |
323 | "columns": { | |
324 | "managers": { | |
325 | "type": { | |
326 | "key": "string", | |
327 | "min": 0, | |
328 | "max": "unlimited"}}, | |
329 | "manager_options": { | |
330 | "type": { | |
331 | "key": {"type": "uuid", "refTable": "Manager"}, | |
332 | "min": 0, | |
333 | "max": "unlimited"}}}}, | |
0b1fae1b BP |
334 | "Manager": { |
335 | "columns": { | |
b4e8d170 BP |
336 | "target": { |
337 | "type": "string"}, | |
338 | "is_connected": { | |
339 | "type": { | |
340 | "key": "boolean", | |
341 | "min": 0, | |
342 | "max": 1}}}}}} | |
0b1fae1b | 343 | ]]) |
7c126fbb BP |
344 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) |
345 | AT_CHECK( | |
0b1fae1b | 346 | [[ovsdb-tool transact db \ |
9cb53f26 | 347 | '["mydb", |
b4e8d170 BP |
348 | {"op": "insert", |
349 | "table": "Root", | |
350 | "row": { | |
351 | "managers": "punix:socket1", | |
352 | "manager_options": ["set", [["named-uuid", "x"]]]}}, | |
9cb53f26 | 353 | {"op": "insert", |
0b1fae1b | 354 | "table": "Manager", |
b4e8d170 BP |
355 | "uuid-name": "x", |
356 | "row": {"target": "punix:socket2"}}]']], [0], [ignore], [ignore]) | |
53eb8cb8 | 357 | on_exit 'kill `cat ovsdb-server.pid`' |
8ad822c9 | 358 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --remote=db:mydb,Root,managers --remote=db:mydb,Root,manager_options --log-file db], [0], [ignore], [ignore]) |
bdba1947 | 359 | ovs-appctl -t ovsdb-server time/warp 6000 1000 |
7c126fbb | 360 | AT_CHECK( |
b4e8d170 | 361 | [[ovsdb-client transact unix:socket1 \ |
9cb53f26 | 362 | '["mydb", |
b4e8d170 BP |
363 | {"op": "select", |
364 | "table": "Root", | |
365 | "where": [], | |
366 | "columns": ["managers"]}, | |
9cb53f26 | 367 | {"op": "select", |
0b1fae1b BP |
368 | "table": "Manager", |
369 | "where": [], | |
b4e8d170 BP |
370 | "columns": ["target", "is_connected"]}]']], |
371 | [0], [stdout], [ignore]) | |
0b1fae1b | 372 | AT_CHECK( |
5c6d0628 | 373 | [${PERL} $srcdir/uuidfilt.pl stdout], |
0b1fae1b | 374 | [0], |
b4e8d170 | 375 | [[[{"rows":[{"managers":"punix:socket1"}]},{"rows":[{"is_connected":false,"target":"punix:socket2"}]}] |
0b1fae1b | 376 | ]], |
b4e8d170 | 377 | [ignore]) |
d9c8c57c | 378 | OVS_APP_EXIT_AND_WAIT([ovsdb-server]) |
0b1fae1b | 379 | AT_CLEANUP |
ada496b5 | 380 | |
b421d2af BP |
381 | AT_SETUP([ovsdb-server/add-remote and remove-remote]) |
382 | AT_KEYWORDS([ovsdb server positive]) | |
b421d2af BP |
383 | ordinal_schema > schema |
384 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) | |
53eb8cb8 | 385 | on_exit 'kill `cat *.pid`' |
b421d2af BP |
386 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile db]) |
387 | ||
388 | AT_CHECK([test ! -e socket1]) | |
389 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-remote punix:socket1]) | |
91fc9298 GS |
390 | if test "$IS_WIN32" = "yes"; then |
391 | OVS_WAIT_UNTIL([test -s socket1]) | |
392 | else | |
393 | OVS_WAIT_UNTIL([test -S socket1]) | |
394 | fi | |
b421d2af BP |
395 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-remotes], |
396 | [0], [punix:socket1 | |
397 | ]) | |
398 | ||
399 | AT_CHECK([test ! -e socket2]) | |
400 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-remote punix:socket2]) | |
91fc9298 GS |
401 | if test "$IS_WIN32" = "yes"; then |
402 | OVS_WAIT_UNTIL([test -s socket2]) | |
403 | else | |
404 | OVS_WAIT_UNTIL([test -S socket2]) | |
405 | fi | |
b421d2af BP |
406 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-remotes], |
407 | [0], [punix:socket1 | |
408 | punix:socket2 | |
409 | ]) | |
410 | ||
411 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-remote db:x,y,z], [2], | |
412 | [], ["db:x,y,z": no database named x | |
413 | ovs-appctl: ovsdb-server: server returned an error | |
414 | ]) | |
415 | ||
416 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/remove-remote punix:socket1]) | |
417 | OVS_WAIT_UNTIL([test ! -e socket1]) | |
91fc9298 GS |
418 | if test "$IS_WIN32" = "yes"; then |
419 | AT_CHECK([test -s socket2]) | |
420 | else | |
421 | AT_CHECK([test -S socket2]) | |
422 | fi | |
b421d2af BP |
423 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-remotes], |
424 | [0], [punix:socket2 | |
425 | ]) | |
426 | ||
427 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/remove-remote punix:socket2]) | |
428 | OVS_WAIT_UNTIL([test ! -e socket2]) | |
429 | AT_CHECK([test ! -e socket1]) | |
430 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-remotes]) | |
d9c8c57c | 431 | OVS_APP_EXIT_AND_WAIT([ovsdb-server]) |
b421d2af BP |
432 | AT_CLEANUP |
433 | ||
09993217 | 434 | AT_SETUP([ovsdb-server/add-remote with --monitor]) |
5f36127e | 435 | AT_KEYWORDS([ovsdb server positive]) |
36373c1a | 436 | AT_SKIP_IF([test "$IS_WIN32" = "yes"]) |
5f36127e | 437 | # Start ovsdb-server, initially with no remotes. |
5f36127e BP |
438 | ordinal_schema > schema |
439 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) | |
53eb8cb8 | 440 | on_exit 'kill `cat *.pid`' |
5f36127e BP |
441 | AT_CHECK([ovsdb-server -v -vvlog:off --monitor --detach --no-chdir --pidfile --log-file db]) |
442 | ||
443 | # Add a remote. | |
444 | AT_CHECK([test ! -e socket1]) | |
445 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-remote punix:socket1]) | |
446 | OVS_WAIT_UNTIL([test -S socket1]) | |
447 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-remotes], | |
448 | [0], [punix:socket1 | |
449 | ]) | |
450 | ||
451 | # Kill the daemon process, making it look like a segfault, | |
452 | # and wait for a new daemon process to get spawned and for it to | |
453 | # start listening on 'socket1'. | |
454 | cp ovsdb-server.pid old.pid | |
455 | rm socket1 | |
456 | AT_CHECK([kill -SEGV `cat ovsdb-server.pid`]) | |
457 | OVS_WAIT_WHILE([kill -0 `cat old.pid`]) | |
458 | OVS_WAIT_UNTIL( | |
459 | [test -s ovsdb-server.pid && test `cat ovsdb-server.pid` != `cat old.pid`]) | |
857570c4 | 460 | OVS_WAIT_UNTIL([ovs-appctl -t ovsdb-server version]) |
5f36127e | 461 | OVS_WAIT_UNTIL([test -S socket1]) |
d9c8c57c | 462 | OVS_APP_EXIT_AND_WAIT([ovsdb-server]) |
09993217 AW |
463 | AT_CLEANUP |
464 | ||
465 | AT_SETUP([ovsdb-server/add-remote and remove-remote with --monitor]) | |
466 | AT_KEYWORDS([ovsdb server positive]) | |
36373c1a | 467 | AT_SKIP_IF([test "$IS_WIN32" = "yes"]) |
09993217 | 468 | # Start ovsdb-server, initially with no remotes. |
09993217 AW |
469 | ordinal_schema > schema |
470 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) | |
53eb8cb8 | 471 | on_exit 'kill `cat *.pid`' |
09993217 AW |
472 | AT_CHECK([ovsdb-server -v -vvlog:off --monitor --detach --no-chdir --pidfile --log-file db]) |
473 | ||
474 | # Add a remote. | |
475 | AT_CHECK([test ! -e socket1]) | |
476 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/add-remote punix:socket1]) | |
477 | OVS_WAIT_UNTIL([test -S socket1]) | |
478 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-remotes], | |
479 | [0], [punix:socket1 | |
480 | ]) | |
5f36127e BP |
481 | |
482 | # Remove the remote. | |
483 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/remove-remote punix:socket1]) | |
484 | OVS_WAIT_UNTIL([test ! -e socket1]) | |
485 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/list-remotes]) | |
486 | ||
487 | # Kill the daemon process, making it look like a segfault, | |
488 | # and wait for a new daemon process to get spawned and make sure that it | |
489 | # does not listen on 'socket1'. | |
490 | cp ovsdb-server.pid old.pid | |
491 | AT_CHECK([kill -SEGV `cat ovsdb-server.pid`]) | |
492 | OVS_WAIT_WHILE([kill -0 `cat old.pid`]) | |
493 | OVS_WAIT_UNTIL( | |
494 | [test -s ovsdb-server.pid && test `cat ovsdb-server.pid` != `cat old.pid`]) | |
857570c4 | 495 | OVS_WAIT_UNTIL([ovs-appctl -t ovsdb-server version]) |
5f36127e | 496 | AT_CHECK([test ! -e socket1]) |
d9c8c57c | 497 | OVS_APP_EXIT_AND_WAIT([ovsdb-server]) |
5f36127e BP |
498 | AT_CLEANUP |
499 | ||
78876719 BP |
500 | AT_SETUP([SSL db: implementation]) |
501 | AT_KEYWORDS([ovsdb server positive ssl $5]) | |
502 | AT_SKIP_IF([test "$HAVE_OPENSSL" = no]) | |
b028245a GS |
503 | # For this test, we pass PKIDIR through a ovsdb-tool transact and |
504 | # msys on Windows does not convert the path style automatically. | |
505 | # So, do that forcefully with a 'pwd -W' (called through pwd() function). | |
506 | PKIDIR="$(cd $abs_top_builddir/tests && pwd)" | |
78876719 | 507 | AT_SKIP_IF([expr "$PKIDIR" : ".*[ '\" |
0bcff889 | 508 | \\]"]) |
78876719 BP |
509 | AT_DATA([schema], |
510 | [[{"name": "mydb", | |
511 | "tables": { | |
512 | "SSL": { | |
513 | "columns": { | |
514 | "private_key": {"type": "string"}, | |
515 | "certificate": {"type": "string"}, | |
516 | "ca_cert": {"type": "string"}}}}} | |
517 | ]]) | |
518 | AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) | |
519 | AT_CHECK( | |
520 | [[ovsdb-tool transact db \ | |
521 | '["mydb", | |
522 | {"op": "insert", | |
523 | "table": "SSL", | |
524 | "row": {"private_key": "'"$PKIDIR/testpki-privkey2.pem"'", | |
525 | "certificate": "'"$PKIDIR/testpki-cert2.pem"'", | |
526 | "ca_cert": "'"$PKIDIR/testpki-cacert.pem"'"}}]']], | |
527 | [0], [ignore], [ignore]) | |
528 | AT_CHECK( | |
1e04fcc8 | 529 | [ovsdb-server --log-file --detach --no-chdir --pidfile="`pwd`"/pid \ |
fb6de52c GS |
530 | --private-key=db:mydb,SSL,private_key \ |
531 | --certificate=db:mydb,SSL,certificate \ | |
532 | --ca-cert=db:mydb,SSL,ca_cert \ | |
1e04fcc8 | 533 | --remote=pssl:0:127.0.0.1 --unixctl="`pwd`"/unixctl db], |
78876719 | 534 | [0], [ignore], [ignore]) |
fb28ef2d | 535 | PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT]) |
78876719 BP |
536 | AT_CHECK( |
537 | [[ovsdb-client \ | |
538 | --private-key=$PKIDIR/testpki-privkey.pem \ | |
539 | --certificate=$PKIDIR/testpki-cert.pem \ | |
540 | --ca-cert=$PKIDIR/testpki-cacert.pem \ | |
541 | transact ssl:127.0.0.1:$SSL_PORT \ | |
542 | '["mydb", | |
543 | {"op": "select", | |
544 | "table": "SSL", | |
545 | "where": [], | |
546 | "columns": ["private_key"]}]']], | |
547 | [0], [stdout], [ignore], [test ! -e pid || kill `cat pid`]) | |
548 | cat stdout >> output | |
549 | AT_CHECK_UNQUOTED( | |
b33bff0f | 550 | [cat output], [0], |
0877a018 | 551 | [[@<:@{"rows":@<:@{"private_key":"$PKIDIR/testpki-privkey2.pem"}@:>@}@:>@ |
78876719 BP |
552 | ]], [ignore], [test ! -e pid || kill `cat pid`]) |
553 | OVSDB_SERVER_SHUTDOWN | |
554 | AT_CLEANUP | |
555 | ||
ada496b5 BP |
556 | AT_SETUP([compacting online]) |
557 | AT_KEYWORDS([ovsdb server compact]) | |
39ab07af | 558 | ordinal_schema > schema |
a35ae81c BP |
559 | dnl Make sure that "ovsdb-tool create" works with a dangling symlink for |
560 | dnl the database and the lockfile, creating the target of each symlink rather | |
561 | dnl than replacing the symlinks with regular files. | |
562 | mkdir dir | |
563 | ln -s dir/db db | |
564 | ln -s dir/.db.~lock~ .db.~lock~ | |
565 | AT_SKIP_IF([test ! -h db || test ! -h .db.~lock~]) | |
ada496b5 | 566 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) |
a35ae81c | 567 | dnl Start ovsdb-server. |
77a922c7 | 568 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile="`pwd`"/pid --unixctl="`pwd`"/unixctl --remote=punix:socket --log-file="`pwd`"/ovsdb-server.log db], [0], [ignore], [ignore]) |
ada496b5 BP |
569 | AT_CAPTURE_FILE([ovsdb-server.log]) |
570 | dnl Do a bunch of random transactions that put crap in the database log. | |
571 | AT_CHECK( | |
572 | [[for pair in 'zero 0' 'one 1' 'two 2' 'three 3' 'four 4' 'five 5'; do | |
573 | set -- $pair | |
574 | ovsdb-client transact unix:socket ' | |
575 | ["ordinals", | |
576 | {"op": "insert", | |
577 | "table": "ordinals", | |
578 | "row": {"name": "'$1'", "number": '$2'}}, | |
579 | {"op": "comment", | |
580 | "comment": "add row for '"$pair"'"}]' | |
581 | ovsdb-client transact unix:socket ' | |
582 | ["ordinals", | |
583 | {"op": "delete", | |
584 | "table": "ordinals", | |
585 | "where": [["number", "==", '$2']]}, | |
586 | {"op": "comment", | |
587 | "comment": "delete row for '"$2"'"}]' | |
588 | ovsdb-client transact unix:socket ' | |
589 | ["ordinals", | |
590 | {"op": "insert", | |
591 | "table": "ordinals", | |
592 | "row": {"name": "'$1'", "number": '$2'}}, | |
593 | {"op": "comment", | |
594 | "comment": "add back row for '"$pair"'"}]' | |
595 | done]], | |
596 | [0], [stdout], [ignore], [test ! -e pid || kill `cat pid`]) | |
597 | dnl Check that all the crap is in fact in the database log. | |
eadd1644 | 598 | AT_CHECK([[${PERL} $srcdir/uuidfilt.pl db | grep -v ^OVSDB | sed 's/"_date":[0-9]*/"_date":0/' | ovstest test-json --multiple -]], [0], |
6910a6e6 | 599 | [[{"cksum":"12345678 9","name":"ordinals","tables":{"ordinals":{"columns":{"name":{"type":"string"},"number":{"type":"integer"}},"indexes":[["number"]]}},"version":"5.1.3"} |
62c87d4a BP |
600 | {"_comment":"add row for zero 0","_date":0,"ordinals":{"<0>":{"name":"zero"}}} |
601 | {"_comment":"delete row for 0","_date":0,"ordinals":{"<0>":null}} | |
602 | {"_comment":"add back row for zero 0","_date":0,"ordinals":{"<1>":{"name":"zero"}}} | |
603 | {"_comment":"add row for one 1","_date":0,"ordinals":{"<2>":{"name":"one","number":1}}} | |
604 | {"_comment":"delete row for 1","_date":0,"ordinals":{"<2>":null}} | |
605 | {"_comment":"add back row for one 1","_date":0,"ordinals":{"<3>":{"name":"one","number":1}}} | |
606 | {"_comment":"add row for two 2","_date":0,"ordinals":{"<4>":{"name":"two","number":2}}} | |
607 | {"_comment":"delete row for 2","_date":0,"ordinals":{"<4>":null}} | |
608 | {"_comment":"add back row for two 2","_date":0,"ordinals":{"<5>":{"name":"two","number":2}}} | |
609 | {"_comment":"add row for three 3","_date":0,"ordinals":{"<6>":{"name":"three","number":3}}} | |
610 | {"_comment":"delete row for 3","_date":0,"ordinals":{"<6>":null}} | |
611 | {"_comment":"add back row for three 3","_date":0,"ordinals":{"<7>":{"name":"three","number":3}}} | |
612 | {"_comment":"add row for four 4","_date":0,"ordinals":{"<8>":{"name":"four","number":4}}} | |
613 | {"_comment":"delete row for 4","_date":0,"ordinals":{"<8>":null}} | |
614 | {"_comment":"add back row for four 4","_date":0,"ordinals":{"<9>":{"name":"four","number":4}}} | |
615 | {"_comment":"add row for five 5","_date":0,"ordinals":{"<10>":{"name":"five","number":5}}} | |
616 | {"_comment":"delete row for 5","_date":0,"ordinals":{"<10>":null}} | |
617 | {"_comment":"add back row for five 5","_date":0,"ordinals":{"<11>":{"name":"five","number":5}}} | |
ada496b5 BP |
618 | ]], [], [test ! -e pid || kill `cat pid`]) |
619 | dnl Dump out and check the actual database contents. | |
620 | AT_CHECK([[ovsdb-client dump unix:socket ordinals]], | |
621 | [0], [stdout], [ignore]) | |
5c6d0628 | 622 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl stdout], [0], [dnl |
370a11b9 BP |
623 | ordinals table |
624 | _uuid name number | |
ada496b5 BP |
625 | ------------------------------------ ----- ------ |
626 | <0> five 5 @&t@ | |
627 | <1> four 4 @&t@ | |
628 | <2> one 1 @&t@ | |
629 | <3> three 3 @&t@ | |
630 | <4> two 2 @&t@ | |
631 | <5> zero 0 @&t@ | |
632 | ], [], [test ! -e pid || kill `cat pid`]) | |
633 | dnl Now compact the database in-place. | |
37d03458 | 634 | AT_CHECK([[ovs-appctl -t "`pwd`"/unixctl ovsdb-server/compact]], |
ada496b5 | 635 | [0], [], [ignore], [test ! -e pid || kill `cat pid`]) |
a35ae81c BP |
636 | dnl Make sure that "db" is still a symlink to dir/db instead of getting |
637 | dnl replaced by a regular file, ditto for .db.~lock~. | |
638 | AT_CHECK([test -h db]) | |
639 | AT_CHECK([test -h .db.~lock~]) | |
640 | AT_CHECK([test -f dir/db]) | |
641 | AT_CHECK([test -f dir/.db.~lock~]) | |
ada496b5 BP |
642 | dnl We can't fully re-check the contents of the database log, because the |
643 | dnl order of the records is not predictable, but there should only be 4 lines | |
644 | dnl in it now. | |
645 | AT_CAPTURE_FILE([db]) | |
e0c7697c EM |
646 | AT_CHECK([test `wc -l < db` -eq 4], [0], [], [], |
647 | [test ! -e pid || kill `cat pid`]) | |
ada496b5 BP |
648 | dnl And check that the dumped data is the same too: |
649 | AT_CHECK([ovsdb-client dump unix:socket ordinals], [0], [stdout], [ignore], | |
650 | [test ! -e pid || kill `cat pid`]) | |
5c6d0628 | 651 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl stdout], [0], [dnl |
370a11b9 BP |
652 | ordinals table |
653 | _uuid name number | |
ada496b5 BP |
654 | ------------------------------------ ----- ------ |
655 | <0> five 5 @&t@ | |
656 | <1> four 4 @&t@ | |
657 | <2> one 1 @&t@ | |
658 | <3> three 3 @&t@ | |
659 | <4> two 2 @&t@ | |
660 | <5> zero 0 @&t@ | |
661 | ], [], [test ! -e pid || kill `cat pid`]) | |
662 | dnl Now do some more transactions. | |
663 | AT_CHECK( | |
664 | [[ovsdb-client transact unix:socket ' | |
665 | ["ordinals", | |
666 | {"op": "delete", | |
667 | "table": "ordinals", | |
668 | "where": [["number", "<", 3]]}]']], | |
669 | [0], [[[{"count":3}] | |
670 | ]], [ignore], [test ! -e pid || kill `cat pid`]) | |
671 | dnl There should be 6 lines in the log now. | |
e0c7697c EM |
672 | AT_CHECK([test `wc -l < db` -eq 6], [0], [], [], |
673 | [test ! -e pid || kill `cat pid`]) | |
ada496b5 BP |
674 | dnl Then check that the dumped data is correct. |
675 | AT_CHECK([ovsdb-client dump unix:socket ordinals], [0], [stdout], [ignore], | |
676 | [test ! -e pid || kill `cat pid`]) | |
5c6d0628 | 677 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl stdout], [0], [dnl |
370a11b9 BP |
678 | ordinals table |
679 | _uuid name number | |
ada496b5 BP |
680 | ------------------------------------ ----- ------ |
681 | <0> five 5 @&t@ | |
682 | <1> four 4 @&t@ | |
683 | <2> three 3 @&t@ | |
684 | ], [], [test ! -e pid || kill `cat pid`]) | |
685 | OVSDB_SERVER_SHUTDOWN | |
686 | AT_CLEANUP | |
48f6e410 BP |
687 | |
688 | AT_SETUP([ovsdb-server combines updates on backlogged connections]) | |
53eb8cb8 | 689 | on_exit 'kill `cat *.pid`' |
48f6e410 BP |
690 | |
691 | # The maximum socket receive buffer size is important for this test, which | |
692 | # tests behavior when the receive buffer overflows. | |
693 | if test -e /proc/sys/net/core/rmem_max; then | |
694 | # Linux | |
695 | rmem_max=`cat /proc/sys/net/core/rmem_max` | |
696 | elif rmem_max=`sysctl -n net.inet.tcp.recvbuf_max 2>/dev/null`; then | |
81b9d305 | 697 | : # FreeBSD, NetBSD |
48f6e410 BP |
698 | else |
699 | # Don't know how to get maximum socket receive buffer on this OS | |
700 | AT_SKIP_IF([:]) | |
701 | fi | |
702 | ||
703 | # Calculate the number of iterations we need to queue. Each of the | |
704 | # iterations we execute, by itself, yields a monitor update of about | |
705 | # 25 kB, so fill up that much space plus a few for luck. | |
f5ca49d8 | 706 | n_iterations=`expr $rmem_max / 25000 + 5` |
48f6e410 BP |
707 | echo rmem_max=$rmem_max n_iterations=$n_iterations |
708 | ||
21aa35c3 BP |
709 | # If there's too much queuing skip the test to avoid timing out. |
710 | AT_SKIP_IF([test $rmem_max -gt 1048576]) | |
711 | ||
48f6e410 BP |
712 | # Calculate the exact number of monitor updates expected for $n_iterations, |
713 | # assuming no updates are combined. The "extra" update is for the initial | |
714 | # contents of the database. | |
715 | n_updates=`expr $n_iterations \* 3 + 1` | |
716 | ||
717 | # Start an ovsdb-server with the vswitchd schema. | |
718 | OVSDB_INIT([db]) | |
719 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --log-file --remote=punix:db.sock db], | |
720 | [0], [ignore], [ignore]) | |
721 | ||
722 | # Executes a set of transactions that add a bridge with 100 ports, and | |
723 | # then deletes that bridge. This yields three monitor updates that | |
724 | # add up to about 25 kB in size. | |
725 | # | |
726 | # The update also increments a counter held in the database so that we can | |
727 | # verify that the overall effect of the transactions took effect (e.g. | |
728 | # monitor updates at the end weren't just dropped). We add an arbitrary | |
729 | # string to the counter to make grepping for it more reliable. | |
730 | counter=0 | |
731 | trigger_big_update () { | |
732 | counter=`expr $counter + 1` | |
733 | ovs-vsctl --no-wait -- set open_vswitch . system_version=xyzzy$counter | |
734 | ovs-vsctl --no-wait -- add-br br0 $add | |
735 | ovs-vsctl --no-wait -- del-br br0 | |
736 | } | |
737 | add_ports () { | |
738 | for j in `seq 1 100`; do | |
739 | printf " -- add-port br0 p%d" $j | |
740 | done | |
741 | } | |
742 | add=`add_ports` | |
743 | ||
744 | AT_CAPTURE_FILE([ovsdb-client.err]) | |
c005fd61 AZ |
745 | AT_CAPTURE_FILE([ovsdb-client-nonblock.err]) |
746 | ||
747 | ||
748 | # Start an ovsdb-client monitoring all changes to the database, | |
749 | # By default, it is non-blocking, and will get update message | |
750 | # for each ovsdb-server transaactions. | |
751 | AT_CHECK([ovsdb-client --detach --no-chdir --pidfile=nonblock.pid monitor ALL >ovsdb-client-nonblock.out 2>ovsdb-client-nonblock.err]) | |
48f6e410 BP |
752 | |
753 | # Start an ovsdb-client monitoring all changes to the database, | |
754 | # make it block to force the buffers to fill up, and then execute | |
755 | # enough iterations that ovsdb-server starts combining updates. | |
756 | AT_CHECK([ovsdb-client --detach --no-chdir --pidfile monitor ALL >ovsdb-client.out 2>ovsdb-client.err]) | |
757 | AT_CHECK([ovs-appctl -t ovsdb-client ovsdb-client/block]) | |
758 | for i in `seq 1 $n_iterations`; do | |
759 | echo "blocked update ($i of $n_iterations)" | |
760 | trigger_big_update $i | |
761 | done | |
762 | AT_CHECK([ovs-appctl -t ovsdb-client ovsdb-client/unblock]) | |
763 | OVS_WAIT_UNTIL([grep "\"xyzzy$counter\"" ovsdb-client.out]) | |
c005fd61 | 764 | OVS_WAIT_UNTIL([grep "\"xyzzy$counter\"" ovsdb-client-nonblock.out]) |
d9c8c57c | 765 | OVS_APP_EXIT_AND_WAIT([ovsdb-client]) |
c005fd61 | 766 | AT_CHECK([kill `cat nonblock.pid`]) |
48f6e410 BP |
767 | |
768 | # Count the number of updates in the ovsdb-client output, by counting | |
769 | # the number of changes to the Open_vSwitch table. (All of our | |
770 | # transactions modify the Open_vSwitch table.) It should be less than | |
771 | # $n_updates updates. | |
772 | # | |
773 | # Check that the counter is what we expect. | |
774 | logged_updates=`grep -c '^Open_vSwitch' ovsdb-client.out` | |
c005fd61 AZ |
775 | logged_nonblock_updates=`grep -c '^Open_vSwitch' ovsdb-client-nonblock.out` |
776 | echo "logged_nonblock_updates=$logged_nonblock_updates (expected less or equal to $n_updates)" | |
777 | echo "logged_updates=$logged_updates (expected less than $logged_nonblock_updates)" | |
778 | AT_CHECK([test $logged_nonblock_updates -le $n_updates]) | |
779 | AT_CHECK([test $logged_updates -lt $logged_nonblock_updates]) | |
48f6e410 BP |
780 | AT_CHECK_UNQUOTED([ovs-vsctl get open_vswitch . system_version], [0], |
781 | ["xyzzy$counter" | |
782 | ]) | |
d9c8c57c | 783 | OVS_APP_EXIT_AND_WAIT([ovsdb-server]) |
48f6e410 | 784 | AT_CLEANUP |
80d326ad | 785 | \f |
e731d71b | 786 | AT_BANNER([OVSDB -- ovsdb-server transactions (SSL IPv4 sockets)]) |
80d326ad BP |
787 | |
788 | # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) | |
789 | # | |
790 | # Creates a database with the given SCHEMA, starts an ovsdb-server on | |
791 | # that database, and runs each of the TRANSACTIONS (which should be a | |
792 | # quoted list of quoted strings) against it with ovsdb-client one at a | |
793 | # time. | |
794 | # | |
795 | # Checks that the overall output is OUTPUT, but UUIDs in the output | |
796 | # are replaced by markers of the form <N> where N is a number. The | |
797 | # first unique UUID is replaced by <0>, the next by <1>, and so on. | |
798 | # If a given UUID appears more than once it is always replaced by the | |
799 | # same marker. | |
800 | # | |
801 | # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. | |
802 | m4_define([OVSDB_CHECK_EXECUTION], | |
803 | [AT_SETUP([$1]) | |
804 | AT_KEYWORDS([ovsdb server positive ssl $5]) | |
805 | AT_SKIP_IF([test "$HAVE_OPENSSL" = no]) | |
39ab07af | 806 | $2 > schema |
15b619e2 | 807 | PKIDIR=$abs_top_builddir/tests |
7c126fbb | 808 | AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) |
1e04fcc8 | 809 | AT_CHECK([ovsdb-server --log-file --detach --no-chdir --pidfile="`pwd`"/pid --private-key=$PKIDIR/testpki-privkey2.pem --certificate=$PKIDIR/testpki-cert2.pem --ca-cert=$PKIDIR/testpki-cacert.pem --remote=pssl:0:127.0.0.1 --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) |
fb28ef2d | 810 | PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT]) |
80d326ad | 811 | m4_foreach([txn], [$3], |
7c126fbb | 812 | [AT_CHECK([ovsdb-client --private-key=$PKIDIR/testpki-privkey.pem --certificate=$PKIDIR/testpki-cert.pem --ca-cert=$PKIDIR/testpki-cacert.pem transact ssl:127.0.0.1:$SSL_PORT 'txn'], [0], [stdout], [ignore], |
80d326ad BP |
813 | [test ! -e pid || kill `cat pid`]) |
814 | cat stdout >> output | |
815 | ]) | |
5c6d0628 | 816 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], [$4], [ignore], |
80d326ad | 817 | [test ! -e pid || kill `cat pid`]) |
028cbd99 | 818 | OVSDB_SERVER_SHUTDOWN |
80d326ad BP |
819 | AT_CLEANUP]) |
820 | ||
e879d33e MM |
821 | EXECUTION_EXAMPLES |
822 | ||
e731d71b AS |
823 | AT_BANNER([OVSDB -- ovsdb-server transactions (SSL IPv6 sockets)]) |
824 | ||
825 | # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) | |
826 | # | |
827 | # Creates a database with the given SCHEMA, starts an ovsdb-server on | |
828 | # that database, and runs each of the TRANSACTIONS (which should be a | |
829 | # quoted list of quoted strings) against it with ovsdb-client one at a | |
830 | # time. | |
831 | # | |
832 | # Checks that the overall output is OUTPUT, but UUIDs in the output | |
833 | # are replaced by markers of the form <N> where N is a number. The | |
834 | # first unique UUID is replaced by <0>, the next by <1>, and so on. | |
835 | # If a given UUID appears more than once it is always replaced by the | |
836 | # same marker. | |
837 | # | |
838 | # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. | |
839 | m4_define([OVSDB_CHECK_EXECUTION], | |
840 | [AT_SETUP([$1]) | |
841 | AT_KEYWORDS([ovsdb server positive ssl6 $5]) | |
842 | AT_SKIP_IF([test "$HAVE_OPENSSL" = no]) | |
4819b3a5 | 843 | AT_SKIP_IF([test $HAVE_IPV6 = no]) |
e731d71b AS |
844 | $2 > schema |
845 | PKIDIR=$abs_top_builddir/tests | |
846 | AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) | |
847 | AT_CHECK([ovsdb-server --log-file --detach --no-chdir --pidfile="`pwd`"/pid --private-key=$PKIDIR/testpki-privkey2.pem --certificate=$PKIDIR/testpki-cert2.pem --ca-cert=$PKIDIR/testpki-cacert.pem --remote=pssl:0:[[::1]] --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) | |
fb28ef2d | 848 | PARSE_LISTENING_PORT([ovsdb-server.log], [SSL_PORT]) |
e731d71b AS |
849 | m4_foreach([txn], [$3], |
850 | [AT_CHECK([ovsdb-client --private-key=$PKIDIR/testpki-privkey.pem --certificate=$PKIDIR/testpki-cert.pem --ca-cert=$PKIDIR/testpki-cacert.pem transact ssl:[[::1]]:$SSL_PORT 'txn'], [0], [stdout], [ignore], | |
851 | [test ! -e pid || kill `cat pid`]) | |
852 | cat stdout >> output | |
853 | ]) | |
854 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], [$4], [ignore], | |
855 | [test ! -e pid || kill `cat pid`]) | |
856 | OVSDB_SERVER_SHUTDOWN | |
857 | AT_CLEANUP]) | |
858 | ||
859 | ONE_EXECUTION_EXAMPLE | |
860 | ||
861 | AT_BANNER([OVSDB -- ovsdb-server transactions (TCP IPv4 sockets)]) | |
e879d33e MM |
862 | |
863 | AT_SETUP([ovsdb-client get-schema-version - tcp socket]) | |
864 | AT_KEYWORDS([ovsdb server positive tcp]) | |
865 | ordinal_schema > schema | |
e879d33e | 866 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) |
1e04fcc8 | 867 | AT_CHECK([ovsdb-server --log-file --detach --no-chdir --pidfile="`pwd`"/pid --unixctl="`pwd`"/unixctl --remote=ptcp:0:127.0.0.1 db], [0], [ignore], [ignore]) |
fb28ef2d | 868 | PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) |
e879d33e MM |
869 | AT_CHECK([ovsdb-client get-schema-version tcp:127.0.0.1:$TCP_PORT ordinals], [0], [5.1.3 |
870 | ]) | |
871 | OVSDB_SERVER_SHUTDOWN | |
872 | AT_CLEANUP]) | |
873 | ||
874 | # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) | |
875 | # | |
876 | # Creates a database with the given SCHEMA, starts an ovsdb-server on | |
877 | # that database, and runs each of the TRANSACTIONS (which should be a | |
878 | # quoted list of quoted strings) against it with ovsdb-client one at a | |
879 | # time. | |
880 | # | |
881 | # Checks that the overall output is OUTPUT, but UUIDs in the output | |
882 | # are replaced by markers of the form <N> where N is a number. The | |
883 | # first unique UUID is replaced by <0>, the next by <1>, and so on. | |
884 | # If a given UUID appears more than once it is always replaced by the | |
885 | # same marker. | |
886 | # | |
887 | # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. | |
888 | m4_define([OVSDB_CHECK_EXECUTION], | |
889 | [AT_SETUP([$1]) | |
890 | AT_KEYWORDS([ovsdb server positive tcp $5]) | |
891 | $2 > schema | |
e879d33e MM |
892 | PKIDIR=$abs_top_builddir/tests |
893 | AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) | |
1e04fcc8 | 894 | AT_CHECK([ovsdb-server --log-file --detach --no-chdir --pidfile="`pwd`"/pid --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) |
fb28ef2d | 895 | PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) |
e879d33e MM |
896 | m4_foreach([txn], [$3], |
897 | [AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT 'txn'], [0], [stdout], [ignore], | |
898 | [test ! -e pid || kill `cat pid`]) | |
899 | cat stdout >> output | |
900 | ]) | |
5c6d0628 | 901 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], [$4], [ignore], |
e879d33e MM |
902 | [test ! -e pid || kill `cat pid`]) |
903 | OVSDB_SERVER_SHUTDOWN | |
904 | AT_CLEANUP]) | |
905 | ||
80d326ad | 906 | EXECUTION_EXAMPLES |
e731d71b | 907 | |
7daaec4e BP |
908 | AT_BANNER([OVSDB -- ovsdb-server transactions (TCP IPv6 sockets)]) |
909 | ||
e731d71b AS |
910 | # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) |
911 | # | |
912 | # Creates a database with the given SCHEMA, starts an ovsdb-server on | |
913 | # that database, and runs each of the TRANSACTIONS (which should be a | |
914 | # quoted list of quoted strings) against it with ovsdb-client one at a | |
915 | # time. | |
916 | # | |
917 | # Checks that the overall output is OUTPUT, but UUIDs in the output | |
918 | # are replaced by markers of the form <N> where N is a number. The | |
919 | # first unique UUID is replaced by <0>, the next by <1>, and so on. | |
920 | # If a given UUID appears more than once it is always replaced by the | |
921 | # same marker. | |
922 | # | |
923 | # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. | |
924 | m4_define([OVSDB_CHECK_EXECUTION], | |
925 | [AT_SETUP([$1]) | |
926 | AT_KEYWORDS([ovsdb server positive tcp6 $5]) | |
4819b3a5 | 927 | AT_SKIP_IF([test $HAVE_IPV6 = no]) |
e731d71b AS |
928 | $2 > schema |
929 | PKIDIR=$abs_top_builddir/tests | |
930 | AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) | |
931 | AT_CHECK([ovsdb-server --log-file --detach --no-chdir --pidfile="`pwd`"/pid --remote=ptcp:0:[[::1]] --unixctl="`pwd`"/unixctl db], [0], [ignore], [ignore]) | |
fb28ef2d | 932 | PARSE_LISTENING_PORT([ovsdb-server.log], [TCP_PORT]) |
e731d71b AS |
933 | m4_foreach([txn], [$3], |
934 | [AT_CHECK([ovsdb-client transact tcp:[[::1]]:$TCP_PORT 'txn'], [0], [stdout], [ignore], | |
935 | [test ! -e pid || kill `cat pid`]) | |
936 | cat stdout >> output | |
937 | ]) | |
938 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], [$4], [ignore], | |
939 | [test ! -e pid || kill `cat pid`]) | |
940 | OVSDB_SERVER_SHUTDOWN | |
941 | AT_CLEANUP]) | |
942 | ||
943 | ONE_EXECUTION_EXAMPLE | |
9ff373db BP |
944 | \f |
945 | AT_BANNER([OVSDB -- transactions on transient ovsdb-server]) | |
946 | ||
947 | # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) | |
948 | # | |
949 | # Creates a database with the given SCHEMA and runs each of the | |
950 | # TRANSACTIONS (which should be a quoted list of quoted strings) | |
951 | # against it with ovsdb-client one at a time. Each ovsdb-client | |
952 | # is run against a separately started ovsdb-server that executes | |
953 | # only that single transaction. (The idea is that this should | |
954 | # help to ferret out any differences between what ovsdb-server has | |
955 | # in memory and what actually gets committed to disk.) | |
956 | # | |
957 | # Checks that the overall output is OUTPUT, but UUIDs in the output | |
958 | # are replaced by markers of the form <N> where N is a number. The | |
959 | # first unique UUID is replaced by <0>, the next by <1>, and so on. | |
960 | # If a given UUID appears more than once it is always replaced by the | |
961 | # same marker. | |
962 | # | |
963 | # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. | |
964 | m4_define([OVSDB_CHECK_EXECUTION], | |
965 | [AT_SETUP([$1]) | |
c17b52e8 | 966 | AT_SKIP_IF([test "$IS_WIN32" = "yes"]) |
9ff373db | 967 | AT_KEYWORDS([ovsdb server positive transient $5]) |
39ab07af | 968 | $2 > schema |
9ff373db BP |
969 | AT_CHECK([ovsdb-tool create db schema], [0], [stdout], [ignore]) |
970 | m4_foreach([txn], [$3], | |
971 | [AT_DATA([txnfile], [ovsdb-client transact unix:socket 'txn' | |
972 | ]) | |
37d03458 | 973 | AT_CHECK([ovsdb-server --remote=punix:socket --unixctl="`pwd`"/unixctl db --run="sh txnfile"], [0], [stdout], [ignore]) |
9ff373db BP |
974 | cat stdout >> output |
975 | ]) | |
5c6d0628 | 976 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], [$4], [ignore]) |
9ff373db BP |
977 | AT_CLEANUP]) |
978 | ||
979 | EXECUTION_EXAMPLES | |
ae671c5f MC |
980 | \f |
981 | AT_BANNER([OVSDB -- ovsdb-server replication (TCP IPv4 sockets)]) | |
982 | ||
983 | # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) | |
984 | # | |
985 | # Creates two databases with the given SCHEMA, and starts an ovsdb-server on | |
986 | # each database. | |
987 | # Runs each of the TRANSACTIONS (which should be a quoted list of | |
988 | # quoted strings) against one of the servers with ovsdb-client one at a | |
989 | # time. The server replicates its database to the other ovsdb-server. | |
990 | # | |
991 | # Checks that the dump of both databases are the same. | |
992 | # | |
993 | # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. | |
994 | m4_define([OVSDB_CHECK_EXECUTION], | |
995 | [AT_SETUP([$1]) | |
996 | AT_KEYWORDS([ovsdb server tcp replication $5]) | |
997 | $2 > schema | |
998 | AT_CHECK([ovsdb-tool create db1 schema], [0], [stdout], [ignore]) | |
999 | AT_CHECK([ovsdb-tool create db2 schema], [0], [stdout], [ignore]) | |
1000 | ||
1001 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server1.log --pidfile="`pwd`"/pid --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl db1], [0], [ignore], [ignore]) | |
1002 | PARSE_LISTENING_PORT([ovsdb-server1.log], [TCP_PORT1]) | |
1003 | ||
1004 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server2.log --pidfile="`pwd`"/pid2 --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl2 --sync-from=tcp:127.0.0.1:$TCP_PORT1 db2], [0], [ignore], [ignore]) | |
1005 | PARSE_LISTENING_PORT([ovsdb-server2.log], [TCP_PORT2]) | |
1006 | ||
1007 | m4_foreach([txn], [$3], | |
1008 | [AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT1 'txn'; sleep 2], [0], [stdout], [ignore], | |
1009 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1010 | ]) | |
1011 | ||
1012 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT1], [0], [stdout], [ignore], | |
1013 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1014 | cat stdout >> dump1 | |
1015 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT2], [0], [stdout], [ignore], | |
1016 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1017 | cat stdout >> dump2 | |
1018 | ||
1019 | AT_CHECK([diff dump1 dump2], [0], [], [ignore], | |
1020 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1021 | OVSDB_SERVER_SHUTDOWN | |
1022 | OVSDB_SERVER_SHUTDOWN2 | |
1023 | AT_CLEANUP]) | |
1024 | ||
1025 | EXECUTION_EXAMPLES | |
7a9d65d2 MC |
1026 | |
1027 | AT_BANNER([OVSDB -- ovsdb-server replication table-exclusion (TCP IPv4 sockets)]) | |
1028 | ||
1029 | # OVSDB_CHECK_REPLICATION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) | |
1030 | # | |
1031 | # Creates two databases with the given SCHEMA, and starts an | |
1032 | # ovsdb-server on each database. | |
1033 | # Runs each of the TRANSACTIONS (which should be a quoted list of | |
1034 | # quoted strings) against one of the servers with ovsdb-client one at a | |
1035 | # time. The server replicates its database to the other ovsdb-server. | |
1036 | # | |
1037 | # Checks that the difference between the dump of the databases is | |
1038 | # OUTPUT, but UUIDs in the output are replaced by markers of the form | |
1039 | # <N> where N is a number. The first unique UUID is replaced by <0>, | |
1040 | # the next by <1>, and so on. | |
1041 | # If a given UUID appears more than once it is always replaced by the | |
1042 | # same marker. | |
1043 | # | |
1044 | # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. | |
1045 | m4_define([OVSDB_CHECK_REPLICATION], | |
1046 | [AT_SETUP([$1]) | |
1047 | AT_KEYWORDS([ovsdb server tcp replication table-exclusion]) | |
1048 | $2 > schema | |
1049 | AT_CHECK([ovsdb-tool create db1 schema], [0], [stdout], [ignore]) | |
1050 | AT_CHECK([ovsdb-tool create db2 schema], [0], [stdout], [ignore]) | |
1051 | ||
1052 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server1.log --pidfile="`pwd`"/pid --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl db1], [0], [ignore], [ignore]) | |
1053 | PARSE_LISTENING_PORT([ovsdb-server1.log], [TCP_PORT1]) | |
1054 | ||
1055 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server2.log --pidfile="`pwd`"/pid2 --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl2 --sync-from=tcp:127.0.0.1:$TCP_PORT1 --sync-exclude-tables=mydb:b db2], [0], [ignore], [ignore]) | |
1056 | PARSE_LISTENING_PORT([ovsdb-server2.log], [TCP_PORT2]) | |
1057 | ||
1058 | m4_foreach([txn], [$3], | |
1059 | [AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT1 'txn'; sleep 2], [0], [stdout], [ignore], | |
1060 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1061 | ]) | |
1062 | ||
1063 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT1], [0], [stdout], [ignore], | |
1064 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1065 | cat stdout >> dump1 | |
1066 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT2], [0], [stdout], [ignore], | |
1067 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1068 | cat stdout >> dump2 | |
1069 | ||
1070 | AT_CHECK([diff dump1 dump2], [1], [stdout], [ignore], | |
1071 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1072 | cat stdout >> output | |
1073 | ||
1074 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], [$4], [ignore], | |
1075 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1076 | ||
1077 | OVSDB_SERVER_SHUTDOWN | |
1078 | OVSDB_SERVER_SHUTDOWN2 | |
1079 | AT_CLEANUP]) | |
1080 | ||
1081 | REPLICATION_EXAMPLES | |
9dc05cdc MC |
1082 | |
1083 | AT_BANNER([OVSDB -- ovsdb-server replication runtime management commands]) | |
1084 | ||
1085 | #ovsdb-server/get-remote-ovsdb-server command | |
1086 | AT_SETUP([ovsdb-server/get-remote-ovsdb-server]) | |
1087 | AT_KEYWORDS([ovsdb server replication get-remote]) | |
1088 | ordinal_schema > schema | |
1089 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) | |
1090 | on_exit 'kill `cat *.pid`' | |
1091 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --sync-from=tcp:127.0.0.1:9999 db]) | |
1092 | ||
1093 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/get-remote-ovsdb-server], | |
1094 | [0], [tcp:127.0.0.1:9999 | |
1095 | ]) | |
1096 | AT_CLEANUP | |
1097 | ||
1098 | #*ovsdb-server/set-remote-ovsdb-server command | |
1099 | AT_SETUP([ovsdb-server/set-remote-ovsdb-server]) | |
1100 | AT_KEYWORDS([ovsdb server replication set-remote]) | |
1101 | ordinal_schema > schema | |
1102 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) | |
1103 | on_exit 'kill `cat *.pid`' | |
1104 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile db]) | |
1105 | ||
1106 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/set-remote-ovsdb-server tcp:127.0.0.1:9999]) | |
1107 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/get-remote-ovsdb-server], | |
1108 | [0], [tcp:127.0.0.1:9999 | |
1109 | ]) | |
1110 | AT_CLEANUP | |
1111 | ||
1112 | #ovsdb-server/get-sync-excluded-tables command | |
1113 | AT_SETUP([ovsdb-server/get-sync-excluded-tables]) | |
1114 | AT_KEYWORDS([ovsdb server replication get-excluded-tables]) | |
1115 | ordinal_schema > schema | |
1116 | AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore]) | |
1117 | on_exit 'kill `cat *.pid`' | |
1118 | AT_CHECK([ovsdb-server --detach --no-chdir --pidfile --sync-exclude-tables=mydb:db1,mydb:db2 db]) | |
1119 | ||
1120 | AT_CHECK([ovs-appctl -t ovsdb-server ovsdb-server/get-sync-excluded-tables], | |
1121 | [0], [mydb:db2 | |
1122 | mydb:db1 | |
1123 | ]) | |
1124 | AT_CLEANUP | |
1125 | ||
1126 | #ovsdb-server/set-sync-excluded-tables command | |
1127 | AT_SETUP([ovsdb-server/set-sync-excluded-tables]) | |
1128 | AT_KEYWORDS([ovsdb server replication set-excluded-tables]) | |
1129 | replication_schema > schema | |
1130 | AT_CHECK([ovsdb-tool create db1 schema], [0], [stdout], [ignore]) | |
1131 | AT_CHECK([ovsdb-tool create db2 schema], [0], [stdout], [ignore]) | |
1132 | ||
1133 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server1.log --pidfile="`pwd`"/pid --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl db1], [0], [ignore], [ignore]) | |
1134 | PARSE_LISTENING_PORT([ovsdb-server1.log], [TCP_PORT1]) | |
1135 | ||
1136 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server2.log --pidfile="`pwd`"/pid2 --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl2 --sync-from=tcp:127.0.0.1:$TCP_PORT1 db2], [0], [ignore], [ignore]) | |
1137 | PARSE_LISTENING_PORT([ovsdb-server2.log], [TCP_PORT2]) | |
1138 | ||
1139 | AT_CHECK([ovs-appctl -t "`pwd`"/unixctl2 ovsdb-server/set-sync-excluded-tables mydb:b], [0], [ignore], [ignore], [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1140 | ||
1141 | AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT1 \ | |
1142 | '[["mydb", | |
1143 | {"op": "insert", | |
1144 | "table": "a", | |
1145 | "row": {"number": 0, "name": "zero"}}, | |
1146 | {"op": "insert", | |
1147 | "table": "b", | |
1148 | "row": {"number": 1, "name": "one"}}]]'], [0], [stdout], [ignore], | |
1149 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1150 | sleep 2 | |
1151 | ||
1152 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT1], [0], [stdout], [ignore], | |
1153 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1154 | cat stdout >> dump1 | |
1155 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT2], [0], [stdout], [ignore], | |
1156 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1157 | cat stdout >> dump2 | |
1158 | ||
1159 | AT_CHECK([diff dump1 dump2], [1], [stdout], [ignore], | |
1160 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1161 | cat stdout >> output | |
1162 | ||
1163 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], [7,9c7,8 | |
1164 | < _uuid name number | |
1165 | < ------------------------------------ ---- ------ | |
1166 | < <0> one 1 @&t@ | |
1167 | --- | |
1168 | > _uuid name number | |
1169 | > ----- ---- ------ | |
1170 | ], [ignore], [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1171 | ||
1172 | OVSDB_SERVER_SHUTDOWN | |
1173 | OVSDB_SERVER_SHUTDOWN2 | |
1174 | AT_CLEANUP | |
1175 | ||
1176 | #ovsdb-server/connect-remote-ovsdb-server | |
1177 | AT_SETUP([ovsdb-server/connect-remote-server]) | |
1178 | AT_KEYWORDS([ovsdb server replication connect-remote-server]) | |
1179 | replication_schema > schema | |
1180 | AT_CHECK([ovsdb-tool create db1 schema], [0], [stdout], [ignore]) | |
1181 | AT_CHECK([ovsdb-tool create db2 schema], [0], [stdout], [ignore]) | |
1182 | ||
1183 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server1.log --pidfile="`pwd`"/pid --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl db1], [0], [ignore], [ignore]) | |
1184 | PARSE_LISTENING_PORT([ovsdb-server1.log], [TCP_PORT1]) | |
1185 | ||
1186 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server2.log --pidfile="`pwd`"/pid2 --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl2 db2], [0], [ignore], [ignore]) | |
1187 | PARSE_LISTENING_PORT([ovsdb-server2.log], [TCP_PORT2]) | |
1188 | ||
1189 | AT_CHECK([ovs-appctl -t "`pwd`"/unixctl2 ovsdb-server/set-remote-ovsdb-server tcp:127.0.0.1:$TCP_PORT1], [0], [ignore], [ignore], [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1190 | ||
1191 | AT_CHECK([ovs-appctl -t "`pwd`"/unixctl2 ovsdb-server/connect-remote-ovsdb-server], [0], [ignore], [ignore], | |
1192 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1193 | ||
1194 | AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT1 \ | |
1195 | '[["mydb", | |
1196 | {"op": "insert", | |
1197 | "table": "a", | |
1198 | "row": {}, | |
1199 | "uuid-name": "0"}]]'], [0], [stdout], [ignore], | |
1200 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1201 | sleep 2 | |
1202 | ||
1203 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT1], [0], [stdout], [ignore], | |
1204 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1205 | cat stdout >> dump1 | |
1206 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT2], [0], [stdout], [ignore], | |
1207 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1208 | cat stdout >> dump2 | |
1209 | ||
1210 | AT_CHECK([diff dump1 dump2], [0], [], [ignore], [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1211 | OVSDB_SERVER_SHUTDOWN | |
1212 | OVSDB_SERVER_SHUTDOWN2 | |
1213 | AT_CLEANUP | |
1214 | ||
1215 | #ovsdb-server/disconnect-remote-server command | |
1216 | AT_SETUP([ovsbd-server/disconnect-remote-server]) | |
1217 | AT_KEYWORDS([ovsdb server replication disconnect-remote-server]) | |
1218 | replication_schema > schema | |
1219 | AT_CHECK([ovsdb-tool create db1 schema], [0], [stdout], [ignore]) | |
1220 | AT_CHECK([ovsdb-tool create db2 schema], [0], [stdout], [ignore]) | |
1221 | ||
1222 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server1.log --pidfile="`pwd`"/pid --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl db1], [0], [ignore], [ignore]) | |
1223 | PARSE_LISTENING_PORT([ovsdb-server1.log], [TCP_PORT1]) | |
1224 | ||
1225 | AT_CHECK([ovsdb-server --detach --no-chdir --log-file=ovsdb-server2.log --pidfile="`pwd`"/pid2 --remote=ptcp:0:127.0.0.1 --unixctl="`pwd`"/unixctl2 --sync-from=tcp:127.0.0.1:$TCP_PORT1 db2], [0], [ignore], [ignore]) | |
1226 | PARSE_LISTENING_PORT([ovsdb-server2.log], [TCP_PORT2]) | |
1227 | ||
1228 | AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT1 \ | |
1229 | '[["mydb", | |
1230 | {"op": "insert", | |
1231 | "table": "a", | |
1232 | "row": {"number": 0, "name": "zero"}}]]'], [0], [stdout], [ignore], | |
1233 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1234 | sleep 2 | |
1235 | ||
1236 | AT_CHECK([ovs-appctl -t "`pwd`"/unixctl2 ovsdb-server/disconnect-remote-ovsdb-server], [0], [ignore], [ignore], | |
1237 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1238 | ||
1239 | AT_CHECK([ovsdb-client transact tcp:127.0.0.1:$TCP_PORT1 \ | |
1240 | '[["mydb", | |
1241 | {"op": "insert", | |
1242 | "table": "b", | |
1243 | "row": {"number": 1, "name": "one"}}]]'], [0], [stdout], [ignore], | |
1244 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1245 | sleep 2 | |
1246 | ||
1247 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT1], [0], [stdout], [ignore], | |
1248 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1249 | cat stdout >> dump1 | |
1250 | ||
1251 | AT_CHECK([ovsdb-client dump tcp:127.0.0.1:$TCP_PORT2], [0], [stdout], [ignore], | |
1252 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1253 | cat stdout >> dump2 | |
1254 | ||
1255 | AT_CHECK([diff dump1 dump2], [1], [stdout], [ignore], | |
1256 | [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1257 | cat stdout >> output | |
1258 | ||
1259 | AT_CHECK([${PERL} $srcdir/uuidfilt.pl output], [0], [7,9c7,8 | |
1260 | < _uuid name number | |
1261 | < ------------------------------------ ---- ------ | |
1262 | < <0> one 1 @&t@ | |
1263 | --- | |
1264 | > _uuid name number | |
1265 | > ----- ---- ------ | |
1266 | ], [ignore], [test ! -e pid || kill `cat pid`; test ! -e pid2 || kill `cat pid2`]) | |
1267 | ||
1268 | OVSDB_SERVER_SHUTDOWN | |
1269 | OVSDB_SERVER_SHUTDOWN2 | |
1270 | AT_CLEANUP |