AT_BANNER([OVSDB -- execution])
-m4_define([ORDINAL_SCHEMA],
- [[{"name": "ordinals",
+m4_divert_push([PREPARE_TESTS])
+[
+
+ordinal_schema () {
+ cat <<'EOF'
+ {"name": "ordinals",
"tables": {
"ordinals": {
"columns": {
"name": {"type": "string"}},
"indexes": [["number"]]}},
"version": "5.1.3",
- "cksum": "12345678 9"}]])
+ "cksum": "12345678 9"}
+EOF
+}
-m4_define([CONSTRAINT_SCHEMA],
- [[{"name": "constraints",
+constraint_schema () {
+ cat << 'EOF'
+ {"name": "constraints",
"tables": {
"a": {
"columns": {
"columns": {
"positive": {"type": {"key": {"type": "integer",
"minInteger": 1}}}},
- "maxRows": 1}}}]])
+ "maxRows": 1}}}
+EOF
+}
-m4_define([WEAK_SCHEMA],
- [[{"name": "weak",
+weak_schema () {
+ cat <<'EOF'
+ {"name": "weak",
"tables": {
"a": {
"columns": {
"b2a": {"type": {"key": {"type": "uuid",
"refTable": "a",
"refType": "weak"},
- "min": 0, "max": "unlimited"}}}}}}]])
+ "min": 0, "max": "unlimited"}}}}}}
+EOF
+}
-m4_define([GC_SCHEMA],
- [[{"name": "gc",
+gc_schema () {
+ cat <<'EOF'
+ {"name": "gc",
"tables": {
"root": {
"columns": {
"refTable": "a",
"refType": "weak"},
"min": 0, "max": "unlimited"}}},
- "isRoot": false}}}]])
+ "isRoot": false}}}
+EOF
+}
+
+immutable_schema () {
+ cat <<'EOF'
+{"name": "immutable",
+ "tables": {
+ "a": {
+ "columns": {"i": {"type": "integer", "mutable": false}}}}}
+EOF
+}
+]
+m4_divert_pop([PREPARE_TESTS])
# OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS])
#
# same marker.
#
# TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS.
-m4_define([OVSDB_CHECK_EXECUTION],
+m4_define([OVSDB_CHECK_EXECUTION],
[AT_SETUP([$1])
AT_KEYWORDS([ovsdb execute execution positive $5])
- AT_CHECK([test-ovsdb execute '$2' m4_foreach([txn], [$3], [ 'txn'])],
+ OVS_RUNDIR=`pwd`; export OVS_RUNDIR
+ AT_CHECK([test-ovsdb execute "`$2`" m4_foreach([txn], [$3], [ 'txn'])],
[0], [stdout], [])
- AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [$4])
+ AT_CHECK([${PERL} $srcdir/uuidfilt.pl stdout], [0], [$4])
AT_CLEANUP])
OVSDB_CHECK_EXECUTION([uuid-name must be <id>],
- [CONSTRAINT_SCHEMA],
+ [constraint_schema],
[[[["constraints",
{"op": "insert",
"table": "a",
]])
OVSDB_CHECK_EXECUTION([named-uuid must be <id>],
- [CONSTRAINT_SCHEMA],
+ [constraint_schema],
[[[["constraints",
{"op": "insert",
"table": "a",
]])
OVSDB_CHECK_EXECUTION([duplicate uuid-name not allowed],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
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],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert row, query table],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert rows, query by value],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert rows, query by named-uuid],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert rows, update rows by value],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert rows, mutate rows],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert rows, delete by named-uuid],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert rows, delete rows by value],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert rows, delete by (non-matching) value],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert rows, delete all],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert row, query table, commit],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert row, query table, commit durably],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([equality wait with correct rows],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([equality wait with extra row],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([equality wait with missing row],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([inequality wait with correct rows],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([inequality wait with extra row],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([inequality wait with missing row],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
[[[["ordinals",
{"op": "insert",
"table": "ordinals",
]])
OVSDB_CHECK_EXECUTION([insert and update constraints],
- [CONSTRAINT_SCHEMA],
+ [constraint_schema],
[[[["constraints",
{"op": "insert",
"table": "constrained",
]])
OVSDB_CHECK_EXECUTION([index uniqueness checking],
- [ORDINAL_SCHEMA],
+ [ordinal_schema],
dnl Insert initial row.
[[[["ordinals",
{"op": "insert",
]])
OVSDB_CHECK_EXECUTION([referential integrity -- simple],
- [CONSTRAINT_SCHEMA],
+ [constraint_schema],
[[[["constraints",
{"op": "insert",
"table": "b",
]])
OVSDB_CHECK_EXECUTION([referential integrity -- mutual references],
- [CONSTRAINT_SCHEMA],
+ [constraint_schema],
[[[["constraints",
{"op": "insert",
"table": "a",
]])
OVSDB_CHECK_EXECUTION([weak references],
- [WEAK_SCHEMA],
+ [weak_schema],
[[[["weak",
{"op": "insert",
"table": "a",
[{"rows":[{"_uuid":["uuid","<3>"],"b":2,"b2a":["set",[]]},{"_uuid":["uuid","<4>"],"b":3,"b2a":["set",[]]}]}]
]])
+OVSDB_CHECK_EXECUTION([immutable columns],
+ [immutable_schema],
+ [[[["immutable",
+ {"op": "insert",
+ "table": "a",
+ "row": {"i": 5},
+ "uuid-name": "row1"}]]],
+ [[["immutable",
+ {"op": "update",
+ "table": "a",
+ "row": {"i": 10},
+ "where": []}]]],
+ [[["immutable",
+ {"op": "update",
+ "table": "a",
+ "row": {"i": 5},
+ "where": []}]]],
+ [[["immutable",
+ {"op": "mutate",
+ "table": "a",
+ "where": [],
+ "mutations": [["i", "-=", 5]]}]]],
+ [[["immutable",
+ {"op": "mutate",
+ "table": "a",
+ "where": [],
+ "mutations": [["i", "*=", 1]]}]]]],
+ [[[{"uuid":["uuid","<0>"]}]
+[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":10},\"table\":\"a\",\"where\":[]}"}]
+[{"details":"Cannot update immutable column i in table a.","error":"constraint violation","syntax":"{\"op\":\"update\",\"row\":{\"i\":5},\"table\":\"a\",\"where\":[]}"}]
+[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"-=\",5]"}]
+[{"details":"Cannot mutate immutable column i in table a.","error":"constraint violation","syntax":"[\"i\",\"*=\",1]"}]
+]])
+
OVSDB_CHECK_EXECUTION([garbage collection],
- [GC_SCHEMA],
+ [gc_schema],
[dnl Check that inserting a row without any references is a no-op.
[[["gc",
{"op": "insert",