From 21ff1aee1b186405c2471bf83a3e8a016a1d2256 Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 16 Nov 2009 15:13:00 -0800 Subject: [PATCH] ovsdb: Add tests for file storage and for ovsdb-server. --- tests/automake.mk | 4 +- tests/ovsdb-execution.at | 172 +++++++++++++++++++++------------------ tests/ovsdb-file.at | 30 +++++++ tests/ovsdb-server.at | 34 ++++++++ tests/ovsdb-trigger.at | 10 +-- tests/ovsdb.at | 15 ++++ 6 files changed, 179 insertions(+), 86 deletions(-) create mode 100644 tests/ovsdb-file.at create mode 100644 tests/ovsdb-server.at diff --git a/tests/automake.mk b/tests/automake.mk index 3a54e133..ba2d95fd 100644 --- a/tests/automake.mk +++ b/tests/automake.mk @@ -28,6 +28,8 @@ TESTSUITE_AT = \ tests/ovsdb-transaction.at \ tests/ovsdb-execution.at \ tests/ovsdb-trigger.at \ + tests/ovsdb-file.at \ + tests/ovsdb-server.at \ tests/stp.at \ tests/ovs-vsctl.at \ tests/lcov-post.at @@ -35,7 +37,7 @@ TESTSUITE = $(srcdir)/tests/testsuite DISTCLEANFILES += tests/atconfig tests/atlocal $(TESTSUITE) check-local: tests/atconfig tests/atlocal $(TESTSUITE) - $(SHELL) '$(TESTSUITE)' -C tests AUTOTEST_PATH='utilities:vswitchd:tests' $(TESTSUITEFLAGS) + $(SHELL) '$(TESTSUITE)' -C tests AUTOTEST_PATH='utilities:vswitchd:ovsdb:tests' $(TESTSUITEFLAGS) clean-local: test ! -f '$(TESTSUITE)' || $(SHELL) '$(TESTSUITE)' -C tests --clean diff --git a/tests/ovsdb-execution.at b/tests/ovsdb-execution.at index e6292980..8b2bc0b1 100644 --- a/tests/ovsdb-execution.at +++ b/tests/ovsdb-execution.at @@ -1,51 +1,60 @@ AT_BANNER([OVSDB -- execution]) m4_define([ORDINAL_SCHEMA], - [['{"name": "mydb", + [[{"name": "mydb", "tables": { "ordinals": { "columns": { "number": {"type": "integer"}, - "name": {"type": "string"}}}}}']]) + "name": {"type": "string"}}}}}]]) -# This is like OVSDB_CHECK_POSITIVE, except that UUIDs in the output +# OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) +# +# Runs "test-ovsdb execute" with the given SCHEMA and each of the +# TRANSACTIONS (which should be a quoted list of quoted strings). +# +# Checks that the overall output is OUTPUT, but UUIDs in the output # are replaced by markers of the form where N is a number. The # first unique UUID is replaced by <0>, the next by <1>, and so on. # If a given UUID appears more than once it is always replaced by the # same marker. +# +# TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. m4_define([OVSDB_CHECK_EXECUTION], [AT_SETUP([$1]) - AT_KEYWORDS([ovsdb execute execution positive $4]) - OVS_CHECK_LCOV([test-ovsdb execute $2], [0], [stdout], []) - AT_CHECK([perl $srcdir/uuidfilt.pl stdout], [0], [$3]) + AT_KEYWORDS([ovsdb execute execution positive $5]) + OVS_CHECK_LCOV([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], [ OVSDB_CHECK_EXECUTION([insert row, query table], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", - "row": {"number": 0, "name": "zero"}}]' \ - '[{"op": "select", + "row": {"number": 0, "name": "zero"}}]]], + [[[{"op": "select", "table": "ordinals", - "where": []}]']], + "where": []}]]]], [[[{"uuid":["uuid","<0>"]}] [{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]}] ]]) OVSDB_CHECK_EXECUTION([insert rows, query by value], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", - "row": {"number": 0, "name": "zero"}}]' \ - '[{"op": "insert", + "row": {"number": 0, "name": "zero"}}]]], + [[[{"op": "insert", "table": "ordinals", - "row": {"number": 1, "name": "one"}}]' \ - '[{"op": "select", + "row": {"number": 1, "name": "one"}}]]], + [[[{"op": "select", "table": "ordinals", - "where": [["name", "==", "zero"]]}]'\ - '[{"op": "select", + "where": [["name", "==", "zero"]]}]]], + [[[{"op": "select", "table": "ordinals", - "where": [["name", "==", "one"]]}]']], + "where": [["name", "==", "one"]]}]]]], [[[{"uuid":["uuid","<0>"]}] [{"uuid":["uuid","<1>"]}] [{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<2>"],"name":"zero","number":0}]}] @@ -53,8 +62,8 @@ OVSDB_CHECK_EXECUTION([insert rows, query by value], ]]) OVSDB_CHECK_EXECUTION([insert rows, query by named-uuid], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}, @@ -67,28 +76,28 @@ OVSDB_CHECK_EXECUTION([insert rows, query by named-uuid], "where": [["_uuid", "==", ["named-uuid", "first"]]]}, {"op": "select", "table": "ordinals", - "where": [["_uuid", "==", ["named-uuid", "second"]]]}]']], + "where": [["_uuid", "==", ["named-uuid", "second"]]]}]]]], [[[{"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}]}] ]]) OVSDB_CHECK_EXECUTION([insert rows, update rows by value], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, - "uuid-name": "first"}]' \ - '[{"op": "insert", + "uuid-name": "first"}]]], + [[[{"op": "insert", "table": "ordinals", "row": {"number": 1, "name": "one"}, - "uuid-name": "first"}]' \ - '[{"op": "update", + "uuid-name": "first"}]]], + [[[{"op": "update", "table": "ordinals", "where": [["name", "==", "zero"]], - "row": {"name": "nought"}}]' \ - '[{"op": "select", + "row": {"name": "nought"}}]]], + [[[{"op": "select", "table": "ordinals", "where": [], - "sort": ["number"]}]']], + "sort": ["number"]}]]]], [[[{"uuid":["uuid","<0>"]}] [{"uuid":["uuid","<1>"]}] [{"count":1}] @@ -96,8 +105,8 @@ OVSDB_CHECK_EXECUTION([insert rows, update rows by value], ]]) OVSDB_CHECK_EXECUTION([insert rows, delete by named-uuid], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}, @@ -111,26 +120,26 @@ OVSDB_CHECK_EXECUTION([insert rows, delete by named-uuid], {"op": "select", "table": "ordinals", "where": [], - "columns": ["name","number"]}]']], + "columns": ["name","number"]}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":1},{"rows":[{"name":"one","number":1}]}] ]]) OVSDB_CHECK_EXECUTION([insert rows, delete rows by value], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, - "uuid-name": "first"}]' \ - '[{"op": "insert", + "uuid-name": "first"}]]], + [[[{"op": "insert", "table": "ordinals", "row": {"number": 1, "name": "one"}, - "uuid-name": "first"}]' \ - '[{"op": "delete", + "uuid-name": "first"}]]], + [[[{"op": "delete", "table": "ordinals", - "where": [["name", "==", "zero"]]}]' \ - '[{"op": "select", + "where": [["name", "==", "zero"]]}]]], + [[[{"op": "select", "table": "ordinals", - "where": []}]']], + "where": []}]]]], [[[{"uuid":["uuid","<0>"]}] [{"uuid":["uuid","<1>"]}] [{"count":1}] @@ -138,22 +147,22 @@ OVSDB_CHECK_EXECUTION([insert rows, delete rows by value], ]]) OVSDB_CHECK_EXECUTION([insert rows, delete by (non-matching) value], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, - "uuid-name": "first"}]' \ - '[{"op": "insert", + "uuid-name": "first"}]]], + [[[{"op": "insert", "table": "ordinals", "row": {"number": 1, "name": "one"}, - "uuid-name": "first"}]' \ - '[{"op": "delete", + "uuid-name": "first"}]]], + [[[{"op": "delete", "table": "ordinals", - "where": [["name", "==", "nought"]]}]' \ - '[{"op": "select", + "where": [["name", "==", "nought"]]}]]], + [[[{"op": "select", "table": "ordinals", "where": [], - "sort": ["number"]}]']], + "sort": ["number"]}]]]], [[[{"uuid":["uuid","<0>"]}] [{"uuid":["uuid","<1>"]}] [{"count":0}] @@ -161,8 +170,8 @@ OVSDB_CHECK_EXECUTION([insert rows, delete by (non-matching) value], ]]) OVSDB_CHECK_EXECUTION([insert rows, delete all], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}, "uuid-name": "first"}, @@ -176,39 +185,39 @@ OVSDB_CHECK_EXECUTION([insert rows, delete all], {"op": "select", "table": "ordinals", "where": [], - "columns": ["name","number"]}]']], + "columns": ["name","number"]}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"count":2},{"rows":[]}] ]]) OVSDB_CHECK_EXECUTION([insert row, query table, commit], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "select", "table": "ordinals", "where": []}, {"op": "commit", - "durable": false}]']], + "durable": false}]]]], [[[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}] ]]) OVSDB_CHECK_EXECUTION([insert row, query table, commit durably], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "select", "table": "ordinals", "where": []}, {"op": "commit", - "durable": true}]']], + "durable": true}]]]], [[[{"uuid":["uuid","<0>"]},{"rows":[{"_uuid":["uuid","<0>"],"_version":["uuid","<1>"],"name":"zero","number":0}]},{}] ]]) OVSDB_CHECK_EXECUTION([equality wait with correct rows], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -221,13 +230,13 @@ OVSDB_CHECK_EXECUTION([equality wait with correct rows], "columns": ["name", "number"], "until": "==", "rows": [{"name": "zero", "number": 0}, - {"name": "one", "number": 1}]}]']], + {"name": "one", "number": 1}]}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}] ]]) OVSDB_CHECK_EXECUTION([equality wait with extra row], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -241,13 +250,13 @@ OVSDB_CHECK_EXECUTION([equality wait with extra row], "until": "==", "rows": [{"name": "zero", "number": 0}, {"name": "one", "number": 1}, - {"name": "two", "number": 2}]}]']], + {"name": "two", "number": 2}]}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"wait\" timed out","error":"timed out"}] ]]) OVSDB_CHECK_EXECUTION([equality wait with missing row], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -259,13 +268,13 @@ OVSDB_CHECK_EXECUTION([equality wait with missing row], "where": [], "columns": ["name", "number"], "until": "==", - "rows": [{"name": "one", "number": 1}]}]']], + "rows": [{"name": "one", "number": 1}]}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"wait\" timed out","error":"timed out"}] ]]) OVSDB_CHECK_EXECUTION([inequality wait with correct rows], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -278,13 +287,13 @@ OVSDB_CHECK_EXECUTION([inequality wait with correct rows], "columns": ["name", "number"], "until": "!=", "rows": [{"name": "zero", "number": 0}, - {"name": "one", "number": 1}]}]']], + {"name": "one", "number": 1}]}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"details":"\"wait\" timed out","error":"timed out"}] ]]) OVSDB_CHECK_EXECUTION([inequality wait with extra row], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -298,13 +307,13 @@ OVSDB_CHECK_EXECUTION([inequality wait with extra row], "until": "!=", "rows": [{"name": "zero", "number": 0}, {"name": "one", "number": 1}, - {"name": "two", "number": 2}]}]']], + {"name": "two", "number": 2}]}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}] ]]) OVSDB_CHECK_EXECUTION([inequality wait with missing row], - [ORDINAL_SCHEMA [\ - '[{"op": "insert", + [ORDINAL_SCHEMA], + [[[[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, {"op": "insert", @@ -316,6 +325,9 @@ OVSDB_CHECK_EXECUTION([inequality wait with missing row], "where": [], "columns": ["name", "number"], "until": "!=", - "rows": [{"name": "one", "number": 1}]}]']], + "rows": [{"name": "one", "number": 1}]}]]]], [[[{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{}] ]]) +]) + +EXECUTION_EXAMPLES diff --git a/tests/ovsdb-file.at b/tests/ovsdb-file.at new file mode 100644 index 00000000..c1f0bfb1 --- /dev/null +++ b/tests/ovsdb-file.at @@ -0,0 +1,30 @@ +AT_BANNER([OVSDB -- file storage]) + +# OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) +# +# Creates a database with the given SCHEMA and runs each of the +# TRANSACTIONS (which should be a quoted list of quoted strings) +# against it with ovsdb-tool one at a time. +# +# Checks that the overall output is OUTPUT, but UUIDs in the output +# are replaced by markers of the form where N is a number. The +# first unique UUID is replaced by <0>, the next by <1>, and so on. +# If a given UUID appears more than once it is always replaced by the +# same marker. +# +# TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. +m4_define([OVSDB_CHECK_EXECUTION], + [AT_SETUP([$1]) + AT_KEYWORDS([ovsdb file positive $5]) + AT_DATA([schema], [$2 +]) + touch .db.~lock~ + OVS_CHECK_LCOV([ovsdb-tool create db schema], [0], [stdout], [ignore]) + m4_foreach([txn], [$3], + [OVS_CHECK_LCOV([ovsdb-tool transact db 'txn'], [0], [stdout], [ignore]) +cat stdout >> output +]) + AT_CHECK([perl $srcdir/uuidfilt.pl output], [0], [$4]) + AT_CLEANUP]) + +EXECUTION_EXAMPLES diff --git a/tests/ovsdb-server.at b/tests/ovsdb-server.at new file mode 100644 index 00000000..95f0e907 --- /dev/null +++ b/tests/ovsdb-server.at @@ -0,0 +1,34 @@ +AT_BANNER([OVSDB -- ovsdb-server transactions]) + +# OVSDB_CHECK_EXECUTION(TITLE, SCHEMA, TRANSACTIONS, OUTPUT, [KEYWORDS]) +# +# Creates a database with the given SCHEMA, starts an ovsdb-server on +# that database, and runs each of the TRANSACTIONS (which should be a +# quoted list of quoted strings) against it with ovsdb-client one at a +# time. +# +# Checks that the overall output is OUTPUT, but UUIDs in the output +# are replaced by markers of the form where N is a number. The +# first unique UUID is replaced by <0>, the next by <1>, and so on. +# If a given UUID appears more than once it is always replaced by the +# same marker. +# +# TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. +m4_define([OVSDB_CHECK_EXECUTION], + [AT_SETUP([$1]) + AT_KEYWORDS([ovsdb server positive $5]) + AT_DATA([schema], [$2 +]) + OVS_CHECK_LCOV([ovsdb-tool create db schema], [0], [stdout], [ignore]) + AT_CHECK([ovsdb-server --verbose --detach --pidfile=$PWD/pid --listen=punix:socket db]) + m4_foreach([txn], [$3], + [OVS_CHECK_LCOV([ovsdb-client transact unix:socket 'txn'], [0], [stdout], [ignore], + [test ! -e pid || kill `cat pid`]) +cat stdout >> output +]) + AT_CHECK([perl $srcdir/uuidfilt.pl output], [0], [$4], [], + [test ! -e pid || kill `cat pid`]) + test ! -e pid || kill `cat pid` + AT_CLEANUP]) + +EXECUTION_EXAMPLES diff --git a/tests/ovsdb-trigger.at b/tests/ovsdb-trigger.at index 5980d852..49ac69fa 100644 --- a/tests/ovsdb-trigger.at +++ b/tests/ovsdb-trigger.at @@ -13,7 +13,7 @@ m4_define([OVSDB_CHECK_TRIGGER], AT_CLEANUP]) OVSDB_CHECK_TRIGGER([trigger fires immediately], - [ORDINAL_SCHEMA [\ + ['ORDINAL_SCHEMA' [\ '[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, @@ -35,7 +35,7 @@ OVSDB_CHECK_TRIGGER([trigger fires immediately], ]]) OVSDB_CHECK_TRIGGER([trigger times out], - [ORDINAL_SCHEMA [\ + ['ORDINAL_SCHEMA' [\ '[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, @@ -57,7 +57,7 @@ t=10: trigger 0 (delayed): [{"uuid":["uuid","<0>"]},{"uuid":["uuid","<1>"]},{"de ]]) OVSDB_CHECK_TRIGGER([trigger fires after delay], - [ORDINAL_SCHEMA [\ + ['ORDINAL_SCHEMA' [\ '[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, @@ -85,7 +85,7 @@ t=10: trigger 1 (delayed): [{}] ]]) OVSDB_CHECK_TRIGGER([delayed trigger modifies database], - [ORDINAL_SCHEMA [\ + ['ORDINAL_SCHEMA' [\ '[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, @@ -121,7 +121,7 @@ t=15: trigger 3 (immediate): [{"rows":[{"_uuid":["uuid","<2>"],"_version":["uuid ]]) OVSDB_CHECK_TRIGGER([one delayed trigger wakes up another], - [ORDINAL_SCHEMA [\ + ['ORDINAL_SCHEMA' [\ '[{"op": "insert", "table": "ordinals", "row": {"number": 0, "name": "zero"}}, diff --git a/tests/ovsdb.at b/tests/ovsdb.at index d3d53bcc..bdd15f92 100644 --- a/tests/ovsdb.at +++ b/tests/ovsdb.at @@ -1,3 +1,11 @@ +# OVSDB_CHECK_POSITIVE(TITLE, TEST-OVSDB-ARGS, OUTPUT, [KEYWORDS], [PREREQ]) +# +# Runs "test-ovsdb TEST-OVSDB-ARGS" and checks that it exits with +# status 0 and prints OUTPUT on stdout. +# +# TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. If +# PREREQ is specified then the test is skipped if the Autoconf version +# is less than PREREQ. m4_define([OVSDB_CHECK_POSITIVE], [AT_SETUP([$1]) m4_if([$5], [], [], @@ -7,6 +15,11 @@ m4_define([OVSDB_CHECK_POSITIVE], ], []) AT_CLEANUP]) +# OVSDB_CHECK_NEGATIVE(TITLE, TEST-OVSDB-ARGS, OUTPUT, [KEYWORDS], [PREREQ]) +# +# Runs "test-ovsdb TEST-OVSDB-ARGS" and checks that it exits with +# status 1 and that its output on stdout contains substring OUTPUT. +# TITLE is provided to AT_SETUP and KEYWORDS to AT_KEYWORDS. m4_define([OVSDB_CHECK_NEGATIVE], [AT_SETUP([$1]) AT_KEYWORDS([ovsdb negative $4]) @@ -33,3 +46,5 @@ m4_include([tests/ovsdb-query.at]) m4_include([tests/ovsdb-transaction.at]) m4_include([tests/ovsdb-execution.at]) m4_include([tests/ovsdb-trigger.at]) +m4_include([tests/ovsdb-file.at]) +m4_include([tests/ovsdb-server.at]) -- 2.30.2