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