ovsdb: Add tests for file storage and for ovsdb-server.
[sliver-openvswitch.git] / tests / ovsdb-execution.at
1 AT_BANNER([OVSDB -- execution])
2
3 m4_define([ORDINAL_SCHEMA],
4   [[{"name": "mydb",
5      "tables": {
6        "ordinals": {
7          "columns": {
8            "number": {"type": "integer"},
9            "name": {"type": "string"}}}}}]])
10
11 # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS])
12 #
13 # Runs "test-ovsdb execute" with the given SCHEMA and each of the
14 # TRANSACTIONS (which should be a quoted list of quoted strings).
15 #
16 # Checks that the overall output is OUTPUT, but UUIDs in the output
17 # are replaced by markers of the form <N> where N is a number.  The
18 # first unique UUID is replaced by <0>, the next by <1>, and so on.
19 # If a given UUID appears more than once it is always replaced by the
20 # same marker.
21 #
22 # TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS.
23 m4_define([OVSDB_CHECK_EXECUTION], 
24   [AT_SETUP([$1])
25    AT_KEYWORDS([ovsdb execute execution positive $5])
26    OVS_CHECK_LCOV([test-ovsdb execute '$2' m4_foreach([txn], [$3], [ 'txn'])],
27      [0], [stdout], [])
28    AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [$4])
29    AT_CLEANUP])
30
31 m4_define([EXECUTION_EXAMPLES], [
32 OVSDB_CHECK_EXECUTION([insert row, query table],
33   [ORDINAL_SCHEMA], 
34   [[[[{"op": "insert",
35        "table": "ordinals",
36        "row": {"number": 0, "name": "zero"}}]]],
37    [[[{"op": "select",
38        "table": "ordinals",
39        "where": []}]]]],
40   [[[{"uuid":["uuid","<0>"]}]
41 [{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]}]
42 ]])
43
44 OVSDB_CHECK_EXECUTION([insert rows, query by value],
45   [ORDINAL_SCHEMA],
46   [[[[{"op": "insert",
47        "table": "ordinals",
48        "row": {"number": 0, "name": "zero"}}]]],
49    [[[{"op": "insert",
50        "table": "ordinals",
51        "row": {"number": 1, "name": "one"}}]]],
52    [[[{"op": "select",
53        "table": "ordinals",
54        "where": [["name", "==", "zero"]]}]]],
55    [[[{"op": "select",
56        "table": "ordinals",
57        "where": [["name", "==", "one"]]}]]]],
58   [[[{"uuid":["uuid","<0>"]}]
59 [{"uuid":["uuid","<1>"]}]
60 [{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]}]
61 [{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
62 ]])
63
64 OVSDB_CHECK_EXECUTION([insert rows, query by named-uuid],
65   [ORDINAL_SCHEMA],
66   [[[[{"op": "insert",
67        "table": "ordinals",
68        "row": {"number": 0, "name": "zero"},
69        "uuid-name": "first"},
70       {"op": "insert",
71        "table": "ordinals",
72        "row": {"number": 1, "name": "one"},
73        "uuid-name": "second"},
74       {"op": "select",
75        "table": "ordinals",
76        "where": [["_uuid", "==", ["named-uuid", "first"]]]},
77       {"op": "select",
78        "table": "ordinals",
79        "where": [["_uuid", "==", ["named-uuid", "second"]]]}]]]],
80   [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]},{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
81 ]])
82
83 OVSDB_CHECK_EXECUTION([insert rows, update rows by value],
84   [ORDINAL_SCHEMA],
85   [[[[{"op": "insert",
86        "table": "ordinals",
87        "row": {"number": 0, "name": "zero"},
88        "uuid-name": "first"}]]],
89    [[[{"op": "insert",
90        "table": "ordinals",
91        "row": {"number": 1, "name": "one"},
92        "uuid-name": "first"}]]],
93    [[[{"op": "update",
94        "table": "ordinals",
95        "where": [["name", "==", "zero"]],
96        "row": {"name": "nought"}}]]],
97    [[[{"op": "select",
98        "table": "ordinals",
99        "where": [],
100        "sort": ["number"]}]]]],
101   [[[{"uuid":["uuid","<0>"]}]
102 [{"uuid":["uuid","<1>"]}]
103 [{"count":1}]
104 [{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"nought","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
105 ]])
106
107 OVSDB_CHECK_EXECUTION([insert rows, delete by named-uuid],
108   [ORDINAL_SCHEMA],
109   [[[[{"op": "insert",
110        "table": "ordinals",
111        "row": {"number": 0, "name": "zero"},
112        "uuid-name": "first"},
113       {"op": "insert",
114        "table": "ordinals",
115        "row": {"number": 1, "name": "one"},
116        "uuid-name": "second"},
117       {"op": "delete",
118        "table": "ordinals",
119        "where": [["_uuid", "==", ["named-uuid", "first"]]]},
120       {"op": "select",
121        "table": "ordinals",
122        "where": [],
123        "columns": ["name","number"]}]]]],
124   [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":1},{"rows":[{"name":"one","number":1}]}]
125 ]])
126
127 OVSDB_CHECK_EXECUTION([insert rows, delete rows by value],
128   [ORDINAL_SCHEMA],
129   [[[[{"op": "insert",
130        "table": "ordinals",
131        "row": {"number": 0, "name": "zero"},
132        "uuid-name": "first"}]]],
133    [[[{"op": "insert",
134        "table": "ordinals",
135        "row": {"number": 1, "name": "one"},
136        "uuid-name": "first"}]]],
137    [[[{"op": "delete",
138        "table": "ordinals",
139        "where": [["name", "==", "zero"]]}]]],
140    [[[{"op": "select",
141        "table": "ordinals",
142        "where": []}]]]],
143   [[[{"uuid":["uuid","<0>"]}]
144 [{"uuid":["uuid","<1>"]}]
145 [{"count":1}]
146 [{"rows":[{"_uuid":["uuid","<1>"],"_version":["uuid","<2>"],"name":"one","number":1}]}]
147 ]])
148
149 OVSDB_CHECK_EXECUTION([insert rows, delete by (non-matching) value],
150   [ORDINAL_SCHEMA],
151   [[[[{"op": "insert",
152        "table": "ordinals",
153        "row": {"number": 0, "name": "zero"},
154        "uuid-name": "first"}]]],
155    [[[{"op": "insert",
156        "table": "ordinals",
157        "row": {"number": 1, "name": "one"},
158        "uuid-name": "first"}]]],
159    [[[{"op": "delete",
160        "table": "ordinals",
161        "where": [["name", "==", "nought"]]}]]],
162    [[[{"op": "select",
163        "table": "ordinals",
164        "where": [],
165        "sort": ["number"]}]]]],
166   [[[{"uuid":["uuid","<0>"]}]
167 [{"uuid":["uuid","<1>"]}]
168 [{"count":0}]
169 [{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0},{"_uuid":["uuid","<1>"],"_version":["uuid","<3>"],"name":"one","number":1}]}]
170 ]])
171
172 OVSDB_CHECK_EXECUTION([insert rows, delete all],
173   [ORDINAL_SCHEMA],
174   [[[[{"op": "insert",
175        "table": "ordinals",
176        "row": {"number": 0, "name": "zero"},
177        "uuid-name": "first"},
178       {"op": "insert",
179        "table": "ordinals",
180        "row": {"number": 1, "name": "one"},
181        "uuid-name": "second"},
182       {"op": "delete",
183        "table": "ordinals",
184        "where": []},
185       {"op": "select",
186        "table": "ordinals",
187        "where": [],
188        "columns": ["name","number"]}]]]],
189   [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":2},{"rows":[]}]
190 ]])
191
192 OVSDB_CHECK_EXECUTION([insert row, query table, commit],
193   [ORDINAL_SCHEMA],
194   [[[[{"op": "insert",
195        "table": "ordinals",
196        "row": {"number": 0, "name": "zero"}},
197       {"op": "select",
198        "table": "ordinals",
199        "where": []},
200       {"op": "commit",
201        "durable": false}]]]],
202   [[[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
203 ]])
204
205 OVSDB_CHECK_EXECUTION([insert row, query table, commit durably],
206   [ORDINAL_SCHEMA],
207   [[[[{"op": "insert",
208        "table": "ordinals",
209        "row": {"number": 0, "name": "zero"}},
210       {"op": "select",
211        "table": "ordinals",
212        "where": []},
213       {"op": "commit",
214        "durable": true}]]]],
215   [[[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}]
216 ]])
217
218 OVSDB_CHECK_EXECUTION([equality wait with correct rows],
219   [ORDINAL_SCHEMA],
220   [[[[{"op": "insert",
221        "table": "ordinals",
222        "row": {"number": 0, "name": "zero"}},
223       {"op": "insert",
224        "table": "ordinals",
225        "row": {"number": 1, "name": "one"}},
226       {"op": "wait",
227        "timeout": 0,
228        "table": "ordinals",
229        "where": [],
230        "columns": ["name", "number"],
231        "until": "==",
232        "rows": [{"name": "zero", "number": 0},
233                 {"name": "one", "number": 1}]}]]]],
234   [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
235 ]])
236
237 OVSDB_CHECK_EXECUTION([equality wait with extra row],
238   [ORDINAL_SCHEMA],
239   [[[[{"op": "insert",
240        "table": "ordinals",
241        "row": {"number": 0, "name": "zero"}},
242       {"op": "insert",
243        "table": "ordinals",
244        "row": {"number": 1, "name": "one"}},
245       {"op": "wait",
246        "timeout": 0,
247        "table": "ordinals",
248        "where": [],
249        "columns": ["name", "number"],
250        "until": "==",
251        "rows": [{"name": "zero", "number": 0},
252                 {"name": "one", "number": 1},
253                 {"name": "two", "number": 2}]}]]]],
254   [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"wait\" timed out","error":"timed out"}]
255 ]])
256
257 OVSDB_CHECK_EXECUTION([equality wait with missing row],
258   [ORDINAL_SCHEMA],
259   [[[[{"op": "insert",
260        "table": "ordinals",
261        "row": {"number": 0, "name": "zero"}},
262       {"op": "insert",
263        "table": "ordinals",
264        "row": {"number": 1, "name": "one"}},
265       {"op": "wait",
266        "timeout": 0,
267        "table": "ordinals",
268        "where": [],
269        "columns": ["name", "number"],
270        "until": "==",
271        "rows": [{"name": "one", "number": 1}]}]]]],
272   [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"wait\" timed out","error":"timed out"}]
273 ]])
274
275 OVSDB_CHECK_EXECUTION([inequality wait with correct rows],
276   [ORDINAL_SCHEMA],
277   [[[[{"op": "insert",
278        "table": "ordinals",
279        "row": {"number": 0, "name": "zero"}},
280       {"op": "insert",
281        "table": "ordinals",
282        "row": {"number": 1, "name": "one"}},
283       {"op": "wait",
284        "timeout": 0,
285        "table": "ordinals",
286        "where": [],
287        "columns": ["name", "number"],
288        "until": "!=",
289        "rows": [{"name": "zero", "number": 0},
290                 {"name": "one", "number": 1}]}]]]],
291   [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"wait\" timed out","error":"timed out"}]
292 ]])
293
294 OVSDB_CHECK_EXECUTION([inequality wait with extra row],
295   [ORDINAL_SCHEMA],
296   [[[[{"op": "insert",
297        "table": "ordinals",
298        "row": {"number": 0, "name": "zero"}},
299       {"op": "insert",
300        "table": "ordinals",
301        "row": {"number": 1, "name": "one"}},
302       {"op": "wait",
303        "timeout": 0,
304        "table": "ordinals",
305        "where": [],
306        "columns": ["name", "number"],
307        "until": "!=",
308        "rows": [{"name": "zero", "number": 0},
309                 {"name": "one", "number": 1},
310                 {"name": "two", "number": 2}]}]]]],
311   [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
312 ]])
313
314 OVSDB_CHECK_EXECUTION([inequality wait with missing row],
315   [ORDINAL_SCHEMA],
316   [[[[{"op": "insert",
317        "table": "ordinals",
318        "row": {"number": 0, "name": "zero"}},
319       {"op": "insert",
320        "table": "ordinals",
321        "row": {"number": 1, "name": "one"}},
322       {"op": "wait",
323        "timeout": 0,
324        "table": "ordinals",
325        "where": [],
326        "columns": ["name", "number"],
327        "until": "!=",
328        "rows": [{"name": "one", "number": 1}]}]]]],
329   [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}]
330 ]])
331 ])
332
333 EXECUTION_EXAMPLES