X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Fovsdb-execution.at;h=ed28b2a9d39cac2fe066b78c8bc5eaf4fae92f0b;hb=2de320799d5b7981b17d1e46e5a07b86158e5ada;hp=3a360416afd0acc460613d002ee282b34a62bda3;hpb=e9f8f9367e9e654b9582279608af86ea3744a2a0;p=openvswitch diff --git a/tests/ovsdb-execution.at b/tests/ovsdb-execution.at index 3a360416..ed28b2a9 100644 --- a/tests/ovsdb-execution.at +++ b/tests/ovsdb-execution.at @@ -1,13 +1,35 @@ AT_BANNER([OVSDB -- execution]) m4_define([ORDINAL_SCHEMA], - [[{"name": "mydb", + [[{"name": "ordinals", "tables": { "ordinals": { "columns": { "number": {"type": "integer"}, "name": {"type": "string"}}}}}]]) +m4_define([CONSTRAINT_SCHEMA], + [[{"name": "constraints", + "tables": { + "a": { + "columns": { + "a": {"type": "integer"}, + "a2a": {"type": {"key": {"type": "uuid", "refTable": "a"}, + "min": 0, "max": "unlimited"}}, + "a2b": {"type": {"key": {"type": "uuid", "refTable": "b"}, + "min": 0, "max": "unlimited"}}}}, + "b": { + "columns": { + "b": {"type": "integer"}, + "b2a": {"type": {"key": {"type": "uuid", "refTable": "a"}, + "min": 0, "max": "unlimited"}}, + "b2b": {"type": {"key": {"type": "uuid", "refTable": "b"}, + "min": 0, "max": "unlimited"}}}}, + "constrained": { + "columns": { + "positive": {"type": {"key": {"type": "integer", + "minInteger": 1}}}}}}}]]) + # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) # # Runs "test-ovsdb execute" with the given SCHEMA and each of the @@ -23,18 +45,36 @@ m4_define([ORDINAL_SCHEMA], m4_define([OVSDB_CHECK_EXECUTION], [AT_SETUP([$1]) AT_KEYWORDS([ovsdb execute execution positive $5]) - OVS_CHECK_LCOV([test-ovsdb execute '$2' m4_foreach([txn], [$3], [ 'txn'])], + AT_CHECK([test-ovsdb execute '$2' m4_foreach([txn], [$3], [ 'txn'])], [0], [stdout], []) AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [$4]) AT_CLEANUP]) m4_define([EXECUTION_EXAMPLES], [ +dnl At one point the "commit" code ignored new rows with all-default values, +dnl so this checks for that problem. +OVSDB_CHECK_EXECUTION([insert default row, query table], + [ORDINAL_SCHEMA], + [[[["ordinals", + {"op": "insert", + "table": "ordinals", + "row": {}}]]], + [[["ordinals", + {"op": "select", + "table": "ordinals", + "where": []}]]]], + [[[{"uuid":["uuid","<0>"]}] +[{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"","number":0}]}] +]]) + OVSDB_CHECK_EXECUTION([insert row, query table], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}]]], - [[[{"op": "select", + [[["ordinals", + {"op": "select", "table": "ordinals", "where": []}]]]], [[[{"uuid":["uuid","<0>"]}] @@ -43,16 +83,20 @@ OVSDB_CHECK_EXECUTION([insert row, query table], OVSDB_CHECK_EXECUTION([insert rows, query by value], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}]]], - [[[{"op": "insert", + [[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 1, "name": "one"}}]]], - [[[{"op": "select", + [[["ordinals", + {"op": "select", "table": "ordinals", "where": [["name", "==", "zero"]]}]]], - [[[{"op": "select", + [[["ordinals", + {"op": "select", "table": "ordinals", "where": [["name", "==", "one"]]}]]]], [[[{"uuid":["uuid","<0>"]}] @@ -63,7 +107,8 @@ OVSDB_CHECK_EXECUTION([insert rows, query by value], OVSDB_CHECK_EXECUTION([insert rows, query by named-uuid], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}, @@ -82,19 +127,23 @@ OVSDB_CHECK_EXECUTION([insert rows, query by named-uuid], OVSDB_CHECK_EXECUTION([insert rows, update rows by value], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}]]], - [[[{"op": "insert", + [[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 1, "name": "one"}, "uuid-name": "first"}]]], - [[[{"op": "update", + [[["ordinals", + {"op": "update", "table": "ordinals", "where": [["name", "==", "zero"]], "row": {"name": "nought"}}]]], - [[[{"op": "select", + [[["ordinals", + {"op": "select", "table": "ordinals", "where": [], "sort": ["number"]}]]]], @@ -106,19 +155,23 @@ OVSDB_CHECK_EXECUTION([insert rows, update rows by value], OVSDB_CHECK_EXECUTION([insert rows, mutate rows], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}]]], - [[[{"op": "insert", + [[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 1, "name": "one"}, "uuid-name": "first"}]]], - [[[{"op": "mutate", + [[["ordinals", + {"op": "mutate", "table": "ordinals", "where": [["name", "==", "zero"]], "mutations": [["number", "+=", 2]]}]]], - [[[{"op": "select", + [[["ordinals", + {"op": "select", "table": "ordinals", "where": [], "sort": ["number"]}]]]], @@ -130,7 +183,8 @@ OVSDB_CHECK_EXECUTION([insert rows, mutate rows], OVSDB_CHECK_EXECUTION([insert rows, delete by named-uuid], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}, @@ -150,18 +204,22 @@ OVSDB_CHECK_EXECUTION([insert rows, delete by named-uuid], OVSDB_CHECK_EXECUTION([insert rows, delete rows by value], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}]]], - [[[{"op": "insert", + [[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 1, "name": "one"}, "uuid-name": "first"}]]], - [[[{"op": "delete", + [[["ordinals", + {"op": "delete", "table": "ordinals", "where": [["name", "==", "zero"]]}]]], - [[[{"op": "select", + [[["ordinals", + {"op": "select", "table": "ordinals", "where": []}]]]], [[[{"uuid":["uuid","<0>"]}] @@ -172,18 +230,22 @@ OVSDB_CHECK_EXECUTION([insert rows, delete rows by value], OVSDB_CHECK_EXECUTION([insert rows, delete by (non-matching) value], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}]]], - [[[{"op": "insert", + [[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 1, "name": "one"}, "uuid-name": "first"}]]], - [[[{"op": "delete", + [[["ordinals", + {"op": "delete", "table": "ordinals", "where": [["name", "==", "nought"]]}]]], - [[[{"op": "select", + [[["ordinals", + {"op": "select", "table": "ordinals", "where": [], "sort": ["number"]}]]]], @@ -195,7 +257,8 @@ OVSDB_CHECK_EXECUTION([insert rows, delete by (non-matching) value], OVSDB_CHECK_EXECUTION([insert rows, delete all], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}, @@ -215,7 +278,8 @@ OVSDB_CHECK_EXECUTION([insert rows, delete all], OVSDB_CHECK_EXECUTION([insert row, query table, commit], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "select", @@ -228,7 +292,8 @@ OVSDB_CHECK_EXECUTION([insert row, query table, commit], OVSDB_CHECK_EXECUTION([insert row, query table, commit durably], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "select", @@ -241,7 +306,8 @@ OVSDB_CHECK_EXECUTION([insert row, query table, commit durably], OVSDB_CHECK_EXECUTION([equality wait with correct rows], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -260,7 +326,8 @@ OVSDB_CHECK_EXECUTION([equality wait with correct rows], OVSDB_CHECK_EXECUTION([equality wait with extra row], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -280,7 +347,8 @@ OVSDB_CHECK_EXECUTION([equality wait with extra row], OVSDB_CHECK_EXECUTION([equality wait with missing row], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -298,7 +366,8 @@ OVSDB_CHECK_EXECUTION([equality wait with missing row], OVSDB_CHECK_EXECUTION([inequality wait with correct rows], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -317,7 +386,8 @@ OVSDB_CHECK_EXECUTION([inequality wait with correct rows], OVSDB_CHECK_EXECUTION([inequality wait with extra row], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -337,7 +407,8 @@ OVSDB_CHECK_EXECUTION([inequality wait with extra row], OVSDB_CHECK_EXECUTION([inequality wait with missing row], [ORDINAL_SCHEMA], - [[[[{"op": "insert", + [[[["ordinals", + {"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -352,6 +423,134 @@ OVSDB_CHECK_EXECUTION([inequality wait with missing row], "rows": [{"name": "one", "number": 1}]}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}] ]]) -]) + +OVSDB_CHECK_EXECUTION([insert and update constraints], + [CONSTRAINT_SCHEMA], + [[[["constraints", + {"op": "insert", + "table": "constrained", + "row": {}}]]], + [[["constraints", + {"op": "insert", + "table": "constrained", + "row": {"positive": -1}}]]], + [[["constraints", + {"op": "update", + "table": "constrained", + "where": [], + "row": {"positive": -2}}]]]], + [[[{"details":"0 is less than minimum allowed value 1","error":"constraint violation"}] +[{"details":"-1 is less than minimum allowed value 1","error":"constraint violation"}] +[{"details":"-2 is less than minimum allowed value 1","error":"constraint violation"}] +]]) + +OVSDB_CHECK_EXECUTION([referential integrity -- simple], + [CONSTRAINT_SCHEMA], + [[[["constraints", + {"op": "insert", + "table": "b", + "row": {"b": 1}, + "uuid-name": "brow"}, + {"op": "insert", + "table": "a", + "row": {"a": 0, + "a2b": ["set", [["named-uuid", "brow"]]]}}, + {"op": "insert", + "table": "a", + "row": {"a": 1, + "a2b": ["set", [["named-uuid", "brow"]]]}}, + {"op": "insert", + "table": "a", + "row": {"a": 2, + "a2b": ["set", [["named-uuid", "brow"]]]}}]]], + [[["constraints", + {"op": "delete", + "table": "b", + "where": []}]]], + [[["constraints", + {"op": "delete", + "table": "a", + "where": [["a", "==", 0]]}]]], + [[["constraints", + {"op": "delete", + "table": "b", + "where": []}]]], + [[["constraints", + {"op": "delete", + "table": "a", + "where": [["a", "==", 1]]}]]], + [[["constraints", + {"op": "delete", + "table": "b", + "where": []}]]], + [[["constraints", + {"op": "delete", + "table": "a", + "where": [["a", "==", 2]]}]]], + [[["constraints", + {"op": "delete", + "table": "b", + "where": []}]]]], + [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}] +[{"count":1},{"details":"cannot delete b row <0> because of 3 remaining reference(s)","error":"referential integrity violation"}] +[{"count":1}] +[{"count":1},{"details":"cannot delete b row <0> because of 2 remaining reference(s)","error":"referential integrity violation"}] +[{"count":1}] +[{"count":1},{"details":"cannot delete b row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}] +[{"count":1}] +[{"count":1}] +]]) + +OVSDB_CHECK_EXECUTION([referential integrity -- mutual references], + [CONSTRAINT_SCHEMA], + [[[["constraints", + {"op": "insert", + "table": "a", + "row": {"a": 0, + "a2b": ["set", [["named-uuid", "row2"]]], + "a2a": ["set", [["named-uuid", "row1"]]]}, + "uuid-name": "row1"}, + {"op": "insert", + "table": "b", + "row": {"b": 1, + "b2b": ["set", [["named-uuid", "row2"]]], + "b2a": ["set", [["named-uuid", "row1"]]]}, + "uuid-name": "row2"}]]], + [[["constraints", + {"op": "insert", + "table": "a", + "row": {"a2b": ["set", [["uuid", "b516b960-5b19-4fc2-bb82-fe1cbd6d0241"]]]}}]]], + [[["constraints", + {"op": "delete", + "table": "a", + "where": [["a", "==", 0]]}]]], + [[["constraints", + {"op": "delete", + "table": "b", + "where": [["b", "==", 1]]}]]], + dnl Try the deletions again to make sure that the refcounts got rolled back. + [[["constraints", + {"op": "delete", + "table": "a", + "where": [["a", "==", 0]]}]]], + [[["constraints", + {"op": "delete", + "table": "b", + "where": [["b", "==", 1]]}]]], + [[["constraints", + {"op": "delete", + "table": "a", + "where": [["a", "==", 0]]}, + {"op": "delete", + "table": "b", + "where": [["b", "==", 1]]}]]]], + [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]}] +[{"uuid":["uuid","<2>"]},{"details":"reference to nonexistent row <3>","error":"referential integrity violation"}] +[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}] +[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}] +[{"count":1},{"details":"cannot delete a row <0> because of 1 remaining reference(s)","error":"referential integrity violation"}] +[{"count":1},{"details":"cannot delete b row <1> because of 1 remaining reference(s)","error":"referential integrity violation"}] +[{"count":1},{"count":1}] +]])]) EXECUTION_EXAMPLES