X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=tests%2Fovsdb-execution.at;h=dc4f3e883cc313948ca1608b95f376bf255ebf2f;hb=7360012bdf64effd898242a58634267e203a2795;hp=334e20848dc542a193ae92446af917e13db6d827;hpb=0d0f05b909b6428d44eb147bd4edd73782d2a137;p=openvswitch diff --git a/tests/ovsdb-execution.at b/tests/ovsdb-execution.at index 334e2084..dc4f3e88 100644 --- a/tests/ovsdb-execution.at +++ b/tests/ovsdb-execution.at @@ -1,7 +1,7 @@ AT_BANNER([OVSDB -- execution]) m4_define([ORDINAL_SCHEMA], - [[{"name": "mydb", + [[{"name": "ordinals", "tables": { "ordinals": { "columns": { @@ -30,6 +30,30 @@ m4_define([CONSTRAINT_SCHEMA], "positive": {"type": {"key": {"type": "integer", "minInteger": 1}}}}}}}]]) +m4_define([WEAK_SCHEMA], + [[{"name": "weak", + "tables": { + "a": { + "columns": { + "a": {"type": "integer"}, + "a2a": {"type": {"key": {"type": "uuid", + "refTable": "a", + "refType": "weak"}, + "min": 0, "max": "unlimited"}}, + "a2a1": {"type": {"key": {"type": "uuid", + "refTable": "a", + "refType": "weak"}}}, + "a2b": {"type": {"key": {"type": "uuid", + "refTable": "b", + "refType": "weak"}}}}}, + "b": { + "columns": { + "b": {"type": "integer"}, + "b2a": {"type": {"key": {"type": "uuid", + "refTable": "a", + "refType": "weak"}, + "min": 0, "max": "unlimited"}}}}}}]]) + # OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) # # Runs "test-ovsdb execute" with the given SCHEMA and each of the @@ -51,12 +75,30 @@ m4_define([OVSDB_CHECK_EXECUTION], 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>"]}] @@ -65,16 +107,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>"]}] @@ -85,7 +131,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"}, @@ -104,19 +151,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"]}]]]], @@ -128,19 +179,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"]}]]]], @@ -152,7 +207,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"}, @@ -172,18 +228,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>"]}] @@ -194,18 +254,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"]}]]]], @@ -217,7 +281,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"}, @@ -237,7 +302,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", @@ -250,7 +316,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", @@ -263,7 +330,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", @@ -282,7 +350,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", @@ -302,7 +371,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", @@ -320,7 +390,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", @@ -339,7 +410,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", @@ -359,7 +431,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", @@ -377,13 +450,16 @@ OVSDB_CHECK_EXECUTION([inequality wait with missing row], OVSDB_CHECK_EXECUTION([insert and update constraints], [CONSTRAINT_SCHEMA], - [[[[{"op": "insert", + [[[["constraints", + {"op": "insert", "table": "constrained", "row": {}}]]], - [[[{"op": "insert", + [[["constraints", + {"op": "insert", "table": "constrained", "row": {"positive": -1}}]]], - [[[{"op": "update", + [[["constraints", + {"op": "update", "table": "constrained", "where": [], "row": {"positive": -2}}]]]], @@ -394,7 +470,8 @@ OVSDB_CHECK_EXECUTION([insert and update constraints], OVSDB_CHECK_EXECUTION([referential integrity -- simple], [CONSTRAINT_SCHEMA], - [[[[{"op": "insert", + [[[["constraints", + {"op": "insert", "table": "b", "row": {"b": 1}, "uuid-name": "brow"}, @@ -410,25 +487,32 @@ OVSDB_CHECK_EXECUTION([referential integrity -- simple], "table": "a", "row": {"a": 2, "a2b": ["set", [["named-uuid", "brow"]]]}}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "b", "where": []}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "a", "where": [["a", "==", 0]]}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "b", "where": []}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "a", "where": [["a", "==", 1]]}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "b", "where": []}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "a", "where": [["a", "==", 2]]}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "b", "where": []}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}] @@ -443,10 +527,7 @@ OVSDB_CHECK_EXECUTION([referential integrity -- simple], OVSDB_CHECK_EXECUTION([referential integrity -- mutual references], [CONSTRAINT_SCHEMA], - [[[[{"op": "declare", - "uuid-name": "row1"}, - {"op": "declare", - "uuid-name": "row2"}, + [[[["constraints", {"op": "insert", "table": "a", "row": {"a": 0, @@ -459,35 +540,179 @@ OVSDB_CHECK_EXECUTION([referential integrity -- mutual references], "b2b": ["set", [["named-uuid", "row2"]]], "b2a": ["set", [["named-uuid", "row1"]]]}, "uuid-name": "row2"}]]], - [[[{"op": "insert", + [[["constraints", + {"op": "insert", "table": "a", "row": {"a2b": ["set", [["uuid", "b516b960-5b19-4fc2-bb82-fe1cbd6d0241"]]]}}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "a", "where": [["a", "==", 0]]}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "b", "where": [["b", "==", 1]]}]]], dnl Try the deletions again to make sure that the refcounts got rolled back. - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "a", "where": [["a", "==", 0]]}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "b", "where": [["b", "==", 1]]}]]], - [[[{"op": "delete", + [[["constraints", + {"op": "delete", "table": "a", "where": [["a", "==", 0]]}, {"op": "delete", "table": "b", "where": [["b", "==", 1]]}]]]], - [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<0>"]},{"uuid":["uuid","<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}] +]]) + +OVSDB_CHECK_EXECUTION([weak references], + [WEAK_SCHEMA], + [[[["weak", + {"op": "insert", + "table": "a", + "row": {"a": 0, + "a2a": ["set", [["named-uuid", "row1"], + ["named-uuid", "row2"], + ["uuid", "0e767b36-6822-4044-8307-d58467e04669"]]], + "a2a1": ["named-uuid", "row1"], + "a2b": ["named-uuid", "row3"]}, + "uuid-name": "row1"}, + {"op": "insert", + "table": "a", + "row": {"a": 1, + "a2a": ["set", [["named-uuid", "row1"], + ["named-uuid", "row2"]]], + "a2a1": ["named-uuid", "row2"], + "a2b": ["named-uuid", "row3"]}, + "uuid-name": "row2"}, + {"op": "insert", + "table": "a", + "row": {"a": 2, + "a2a": ["set", [["named-uuid", "row1"], + ["named-uuid", "row2"]]], + "a2a1": ["named-uuid", "row2"], + "a2b": ["named-uuid", "row4"]}}, + {"op": "insert", + "table": "b", + "row": {"b": 2, + "b2a": ["named-uuid", "row1"]}, + "uuid-name": "row3"}, + {"op": "insert", + "table": "b", + "row": {"b": 3, + "b2a": ["named-uuid", "row2"]}, + "uuid-name": "row4"}]]], + dnl Check that the nonexistent row UUID we added to row a0 was deleted, + dnl and that other rows were inserted as requested. + [[["weak", + {"op": "select", + "table": "a", + "where": [], + "columns": ["_uuid", "a2a", "a2a1", "a2b"], + "sort": ["a"]}]]], + [[["weak", + {"op": "select", + "table": "b", + "where": [], + "columns": ["_uuid", "b", "b2a"], + "sort": ["b"]}]]], + dnl Try to insert invalid all-zeros weak reference (the default) into + dnl "a2b", which requires exactly one value. + [[["weak", + {"op": "insert", + "table": "a", + "row": {}}]]], + dnl Try to delete row from "b" that is referred to by weak references + dnl from "a" table "a2b" column that requires exactly one value. + [[["weak", + {"op": "delete", + "table": "b", + "where": [["b", "==", 3]]}]]], + dnl Try to delete row from "a" that is referred to by weak references + dnl from "a" table "a2a1" column that requires exactly one value. + [[["weak", + {"op": "delete", + "table": "a", + "where": [["a", "==", 1]]}]]], + dnl Delete the row that had the reference that caused the previous + dnl deletion to fail, then check that other rows are unchanged. + [[["weak", + {"op": "delete", + "table": "a", + "where": [["a", "==", 2]]}]]], + [[["weak", + {"op": "select", + "table": "a", + "where": [], + "columns": ["_uuid", "a2a", "a2a1", "a2b"], + "sort": ["a"]}]]], + [[["weak", + {"op": "select", + "table": "b", + "where": [], + "columns": ["_uuid", "b", "b2a"], + "sort": ["b"]}]]], + dnl Delete row a0 then check that references to it were removed. + [[["weak", + {"op": "delete", + "table": "a", + "where": [["a", "==", 0]]}]]], + [[["weak", + {"op": "select", + "table": "a", + "where": [], + "columns": ["_uuid", "a2a", "a2a1", "a2b"], + "sort": ["a"]}]]], + [[["weak", + {"op": "select", + "table": "b", + "where": [], + "columns": ["_uuid", "b", "b2a"], + "sort": ["b"]}]]], + dnl Delete row a1 then check that references to it were removed. + [[["weak", + {"op": "delete", + "table": "a", + "where": [["a", "==", 1]]}]]], + [[["weak", + {"op": "select", + "table": "a", + "where": [], + "columns": ["_uuid", "a2a", "a2a1", "a2b"], + "sort": ["a"]}]]], + [[["weak", + {"op": "select", + "table": "b", + "where": [], + "columns": ["_uuid", "b", "b2a"], + "sort": ["b"]}]]]], + [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]},{"uuid":["uuid","<4>"]}] +[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<2>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<4>"]}]}] +[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}] +[{"uuid":["uuid","<5>"]},{"details":"Weak reference column \"a2b\" in \"a\" row <5> (inserted within this transaction) contained all-zeros UUID (probably as the default value for this column) but deleting this value caused a constraint volation because this column is not allowed to be empty.","error":"constraint violation"}] +[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2b\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}] +[{"count":1},{"details":"Deletion of 1 weak reference(s) to deleted (or never-existing) rows from column \"a2a1\" in \"a\" row <2> caused this column to become empty, but constraints on this column disallow an empty column.","error":"constraint violation"}] +[{"count":1}] +[{"rows":[{"_uuid":["uuid","<0>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<0>"],"a2b":["uuid","<3>"]},{"_uuid":["uuid","<1>"],"a2a":["set",[["uuid","<0>"],["uuid","<1>"]]],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}] +[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["uuid","<0>"]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}] +[{"count":1}] +[{"rows":[{"_uuid":["uuid","<1>"],"a2a":["uuid","<1>"],"a2a1":["uuid","<1>"],"a2b":["uuid","<3>"]}]}] +[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["uuid","<1>"]}]}] +[{"count":1}] +[{"rows":[]}] +[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["set",[]]}]}] ]])]) EXECUTION_EXAMPLES