aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBen Pfaff <blp@nicira.com>2010-12-27 14:26:47 -0800
committerBen Pfaff <blp@nicira.com>2010-12-27 14:26:47 -0800
commit8159b984dced44851670bd48e204b4e854941a24 (patch)
treefd1c2b8187747cece69b8fe5be114ef127a15773 /tests
parent538c6dfab42ec72f916e80f916e858f988d1c48d (diff)
Implement database schema versioning.
As the database schema evolves, it might be useful to have an identifier for the particular version in use. This commit adds that feature.
Diffstat (limited to 'tests')
-rw-r--r--tests/idltest.ovsschema3
-rw-r--r--tests/ovsdb-execution.at3
-rw-r--r--tests/ovsdb-schema.at26
-rw-r--r--tests/ovsdb-server.at13
-rw-r--r--tests/ovsdb-tool.at20
5 files changed, 60 insertions, 5 deletions
diff --git a/tests/idltest.ovsschema b/tests/idltest.ovsschema
index 545242be..275a49e4 100644
--- a/tests/idltest.ovsschema
+++ b/tests/idltest.ovsschema
@@ -1,5 +1,6 @@
{
- "name": "idltest",
+ "name": "idltest",
+ "version": "1.2.3",
"tables": {
"link1": {
"columns": {
diff --git a/tests/ovsdb-execution.at b/tests/ovsdb-execution.at
index 394fcba7..a457b2a8 100644
--- a/tests/ovsdb-execution.at
+++ b/tests/ovsdb-execution.at
@@ -6,7 +6,8 @@ m4_define([ORDINAL_SCHEMA],
"ordinals": {
"columns": {
"number": {"type": "integer"},
- "name": {"type": "string"}}}}}]])
+ "name": {"type": "string"}}}},
+ "version": "5.1.3"}]])
m4_define([CONSTRAINT_SCHEMA],
[[{"name": "constraints",
diff --git a/tests/ovsdb-schema.at b/tests/ovsdb-schema.at
index 008cc431..d129093a 100644
--- a/tests/ovsdb-schema.at
+++ b/tests/ovsdb-schema.at
@@ -3,6 +3,7 @@ AT_BANNER([OVSDB -- schemas])
OVSDB_CHECK_POSITIVE_CPY([schema with valid refTables],
[[parse-schema \
'{"name": "mydb",
+ "version": "4.2.1",
"tables": {
"a": {
"columns": {
@@ -21,7 +22,19 @@ OVSDB_CHECK_POSITIVE_CPY([schema with valid refTables],
"key": {
"type": "uuid",
"refTable": "a"}}}}}}}']],
- [[{"name":"mydb","tables":{"a":{"columns":{"map":{"type":{"key":{"refTable":"b","type":"uuid"},"value":{"refTable":"a","type":"uuid"}}}}},"b":{"columns":{"aRef":{"type":{"key":{"refTable":"a","type":"uuid"}}}}}}}]])
+ [[{"name":"mydb","tables":{"a":{"columns":{"map":{"type":{"key":{"refTable":"b","type":"uuid"},"value":{"refTable":"a","type":"uuid"}}}}},"b":{"columns":{"aRef":{"type":{"key":{"refTable":"a","type":"uuid"}}}}}},"version":"4.2.1"}]])
+
+dnl Schemas without version numbers are accepted for backward
+dnl compatibility, but this is a deprecated feature.
+OVSDB_CHECK_POSITIVE_CPY([schema without version number],
+ [[parse-schema \
+ '{"name": "mydb",
+ "tables": {
+ "x": {
+ "columns": {
+ "y": {
+ "type": "integer"}}}}}']],
+ [{"name":"mydb","tables":{"x":{"columns":{"y":{"type":"integer"}}}}}])
OVSDB_CHECK_NEGATIVE_CPY([schema with invalid refTables],
[[parse-schema \
@@ -45,3 +58,14 @@ OVSDB_CHECK_NEGATIVE_CPY([schema with invalid refTables],
"type": "uuid",
"refTable": "a"}}}}}}}']],
[[syntax error: column map key refers to undefined table c]])
+
+OVSDB_CHECK_NEGATIVE_CPY([schema with invalid version number],
+ [[parse-schema \
+ '{"name": "mydb",
+ "tables": {
+ "x": {
+ "columns": {
+ "y": {
+ "type": "integer"}}}},
+ "version": "xxx"}']],
+ [[schema version "xxx" not in format x.y.z]])
diff --git a/tests/ovsdb-server.at b/tests/ovsdb-server.at
index 52c19692..23125ab4 100644
--- a/tests/ovsdb-server.at
+++ b/tests/ovsdb-server.at
@@ -38,6 +38,17 @@ cat stdout >> output
EXECUTION_EXAMPLES
+AT_SETUP([ovsdb-client get-schema-version])
+AT_KEYWORDS([ovsdb server positive])
+AT_DATA([schema], [ORDINAL_SCHEMA
+])
+AT_CHECK([ovsdb-tool create db schema], [0], [ignore], [ignore])
+AT_CHECK([ovsdb-server --detach --pidfile=$PWD/pid --unixctl=$PWD/unixctl --remote=punix:socket db], [0], [ignore], [ignore])
+AT_CHECK([ovsdb-client get-schema-version unix:socket ordinals], [0], [5.1.3
+])
+OVSDB_SERVER_SHUTDOWN
+AT_CLEANUP
+
AT_SETUP([database multiplexing implementation])
AT_KEYWORDS([ovsdb server positive])
AT_DATA([schema], [ORDINAL_SCHEMA
@@ -181,7 +192,7 @@ AT_CHECK(
[0], [stdout], [ignore], [test ! -e pid || kill `cat pid`])
dnl Check that all the crap is in fact in the database log.
AT_CHECK([[perl $srcdir/uuidfilt.pl db | grep -v ^OVSDB | sed 's/"_date":[0-9]*/"_date":0/' | test-json --multiple -]], [0],
- [[{"name":"ordinals","tables":{"ordinals":{"columns":{"name":{"type":"string"},"number":{"type":"integer"}}}}}
+ [[{"name":"ordinals","tables":{"ordinals":{"columns":{"name":{"type":"string"},"number":{"type":"integer"}}}},"version":"5.1.3"}
{"_comment":"add row for zero 0","_date":0,"ordinals":{"<0>":{"name":"zero"}}}
{"_comment":"delete row for 0","_date":0,"ordinals":{"<0>":null}}
{"_comment":"add back row for zero 0","_date":0,"ordinals":{"<1>":{"name":"zero"}}}
diff --git a/tests/ovsdb-tool.at b/tests/ovsdb-tool.at
index c2ec8810..664e616d 100644
--- a/tests/ovsdb-tool.at
+++ b/tests/ovsdb-tool.at
@@ -83,7 +83,7 @@ AT_CHECK(
[0], [stdout], [ignore])
dnl Check that all the crap is in fact in the database log.
AT_CHECK([[perl $srcdir/uuidfilt.pl db | grep -v ^OVSDB | sed 's/"_date":[0-9]*/"_date":0/' | test-json --multiple -]], [0],
- [[{"name":"ordinals","tables":{"ordinals":{"columns":{"name":{"type":"string"},"number":{"type":"integer"}}}}}
+ [[{"name":"ordinals","tables":{"ordinals":{"columns":{"name":{"type":"string"},"number":{"type":"integer"}}}},"version":"5.1.3"}
{"_comment":"add row for zero 0","_date":0,"ordinals":{"<0>":{"name":"zero"}}}
{"_comment":"delete row for 0","_date":0,"ordinals":{"<0>":null}}
{"_comment":"add back row for zero 0","_date":0,"ordinals":{"<1>":{"name":"zero"}}}
@@ -270,3 +270,21 @@ _uuid name number
<5> "" 5 @&t@
])
AT_CLEANUP
+
+AT_SETUP([ovsdb-tool schema-version])
+AT_KEYWORDS([ovsdb file positive])
+AT_DATA([schema], [ORDINAL_SCHEMA
+])
+AT_CHECK([ovsdb-tool schema-version schema], [0], [5.1.3
+])
+AT_CLEANUP
+
+AT_SETUP([ovsdb-tool db-version])
+AT_KEYWORDS([ovsdb file positive])
+AT_DATA([schema], [ORDINAL_SCHEMA
+])
+touch .db.~lock~
+AT_CHECK([ovsdb-tool create db schema], [0], [], [ignore])
+AT_CHECK([ovsdb-tool db-version db], [0], [5.1.3
+])
+AT_CLEANUP