summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/ovsdb-idl.at105
-rw-r--r--tests/test-ovsdb.c38
-rw-r--r--tests/test-ovsdb.py37
3 files changed, 130 insertions, 50 deletions
diff --git a/tests/ovsdb-idl.at b/tests/ovsdb-idl.at
index c2970984b..5a7e76eaa 100644
--- a/tests/ovsdb-idl.at
+++ b/tests/ovsdb-idl.at
@@ -576,9 +576,9 @@ OVSDB_CHECK_IDL([simple idl, conditional, false condition],
"b": true}}]']],
[['condition simple []' \
'condition simple [true]']],
- [[000: change conditions
+ [[000: simple: change conditions
001: empty
-002: change conditions
+002: simple: change conditions
003: table simple: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
004: done
]])
@@ -592,13 +592,40 @@ OVSDB_CHECK_IDL([simple idl, conditional, true condition],
"b": true}}]']],
[['condition simple []' \
'condition simple [true]']],
- [[000: change conditions
+ [[000: simple: change conditions
001: empty
-002: change conditions
+002: simple: change conditions
003: table simple: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
004: done
]])
+dnl This test ensures that the first explicitly set monitor condition
+dnl is sent to the server.
+OVSDB_CHECK_IDL([simple idl, conditional, wait for condition],
+ [],
+ [['["idltest",
+ {"op": "insert",
+ "table": "simple",
+ "row": {"i": 1,
+ "r": 2.0,
+ "b": true}}]' \
+ 'condition simple [true]' \
+ '^["idltest",
+ {"op": "insert",
+ "table": "simple",
+ "row": {"i": 2,
+ "r": 4.0,
+ "b": true}}]']],
+ [[000: empty
+001: {"error":null,"result":[{"uuid":["uuid","<0>"]}]}
+002: table simple: i=1 r=2 b=true s= u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<0>
+003: simple: conditions unchanged
+004: {"error":null,"result":[{"uuid":["uuid","<2>"]}]}
+005: table simple: i=1 r=2 b=true s= u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<0>
+005: table simple: i=2 r=4 b=true s= u=<1> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
+006: done
+]])
+
OVSDB_CHECK_IDL([simple idl, conditional, multiple clauses in condition],
[['["idltest",
{"op": "insert",
@@ -613,9 +640,9 @@ OVSDB_CHECK_IDL([simple idl, conditional, multiple clauses in condition],
"b": true}}]']],
[['condition simple []' \
'condition simple [["i","==",1],["i","==",2]]']],
- [[000: change conditions
+ [[000: simple: change conditions
001: empty
-002: change conditions
+002: simple: change conditions
003: table simple: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
003: table simple: i=2 r=3 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
004: done
@@ -630,9 +657,9 @@ OVSDB_CHECK_IDL([simple idl, conditional, modify as insert due to condition],
"b": true}}]']],
[['condition simple []' \
'condition simple [["i","==",1]]']],
- [[000: change conditions
+ [[000: simple: change conditions
001: empty
-002: change conditions
+002: simple: change conditions
003: table simple: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
004: done
]])
@@ -653,11 +680,11 @@ OVSDB_CHECK_IDL([simple idl, conditional, modify as delete due to condition],
"row": {"i": 2,
"r": 3.0,
"b": true}}]']],
- [[000: change conditions
+ [[000: simple: change conditions
001: empty
-002: change conditions
+002: simple: change conditions
003: table simple: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
-004: change conditions
+004: simple: change conditions
005: empty
006: {"error":null,"result":[{"uuid":["uuid","<2>"]}]}
007: table simple: i=2 r=3 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<2>
@@ -688,14 +715,16 @@ OVSDB_CHECK_IDL([simple idl, conditional, multiple tables],
"table": "link2",
"row": {"i": 3},
"uuid-name": "row0"}]']],
- [[000: change conditions
+ [[000: link1: change conditions
+000: link2: change conditions
+000: simple: change conditions
001: empty
-002: change conditions
+002: simple: change conditions
003: table simple: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
-004: change conditions
+004: link1: change conditions
005: table link1: i=0 k=0 ka=[] l2= uuid=<2>
005: table simple: i=1 r=2 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
-006: change conditions
+006: link2: change conditions
007: {"error":null,"result":[{"uuid":["uuid","<3>"]}]}
008: table link1: i=0 k=0 ka=[] l2= uuid=<2>
008: table link2: i=3 l1= uuid=<3>
@@ -1266,10 +1295,10 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated, orphan weak refer
{"op": "delete",
"table": "simple6",
"where": []}]']],
- [[000: change conditions
+ [[000: simple: change conditions
001: table simple6: inserted row: name=first_row weak_ref=[] uuid=<0>
001: table simple6: updated columns: name weak_ref
-002: change conditions
+002: simple: change conditions
003: table simple6: name=first_row weak_ref=[<1>] uuid=<0>
003: table simple: inserted row: i=0 r=0 b=false s=row1_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
003: table simple: updated columns: s
@@ -1308,19 +1337,19 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated, orphan rows, cond
{"op": "delete",
"table": "simple6",
"where": []}]']],
- [[000: change conditions
+ [[000: simple: change conditions
001: table simple6: inserted row: name=first_row weak_ref=[] uuid=<0>
001: table simple6: updated columns: name weak_ref
-002: change conditions
+002: simple: change conditions
003: table simple6: name=first_row weak_ref=[<1>] uuid=<0>
003: table simple: inserted row: i=0 r=0 b=false s=row0_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
003: table simple: updated columns: s
-004: change conditions
+004: simple: change conditions
005: table simple6: name=first_row weak_ref=[] uuid=<0>
005: table simple: deleted row: i=0 r=0 b=false s=row0_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
005: table simple: inserted row: i=0 r=0 b=false s=row1_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
005: table simple: updated columns: s
-006: change conditions
+006: simple: change conditions
007: table simple6: name=first_row weak_ref=[<1>] uuid=<0>
007: table simple: deleted row: i=0 r=0 b=false s=row1_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
007: table simple: inserted row: i=0 r=0 b=false s=row0_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
@@ -1362,14 +1391,14 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated, references, condi
{"op": "delete",
"table": "simple6",
"where": []}]']],
- [[000: change conditions
+ [[000: simple: change conditions
001: table simple6: inserted row: name=first_row weak_ref=[] uuid=<0>
001: table simple6: updated columns: name weak_ref
-002: change conditions
+002: simple: change conditions
003: table simple6: name=first_row weak_ref=[<1>] uuid=<0>
003: table simple: inserted row: i=0 r=0 b=false s=row0_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
003: table simple: updated columns: s
-004: change conditions
+004: simple: change conditions
005: table simple6: name=first_row weak_ref=[<3>] uuid=<0>
005: table simple: deleted row: i=0 r=0 b=false s=row0_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
005: table simple: inserted row: i=1 r=0 b=false s=row1_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
@@ -1405,7 +1434,8 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated, references, singl
{"op": "insert",
"table": "simple",
"row": {"s": "row0_s"}}]']],
- [[000: change conditions
+ [[000: simple6: conditions unchanged
+000: simple: conditions unchanged
001: table simple6: inserted row: name=row0_s6 weak_ref=[<0>] uuid=<1>
001: table simple6: updated columns: name weak_ref
001: table simple: inserted row: i=0 r=0 b=false s=row0_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<0>
@@ -1447,7 +1477,8 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated, weak references,
{"op": "insert",
"table": "simple",
"row": {"s": "row0_s"}}]']],
- [[000: change conditions
+ [[000: simple6: conditions unchanged
+000: simple: conditions unchanged
001: table simple6: inserted row: name=row0_s6 weak_ref=[<0>] uuid=<1>
001: table simple6: updated columns: name weak_ref
001: table simple: inserted row: i=0 r=0 b=false s=row0_s u=<2> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<0>
@@ -1487,7 +1518,9 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated, strong references
{"op": "insert",
"table": "simple",
"row": {"s": "row0_s"}}]']],
- [[000: change conditions
+ [[000: simple3: conditions unchanged
+000: simple4: conditions unchanged
+000: simple: conditions unchanged
001: table simple3: inserted row: name=row0_s3 uset=[] uref=[<0>] uuid=<1>
001: table simple3: updated columns: name uref
001: table simple4: inserted row: name=row0_s4 uuid=<0>
@@ -1522,12 +1555,14 @@ OVSDB_CHECK_IDL_TRACK([track, simple idl, initially populated, strong references
{"op": "insert",
"table": "simple",
"row": {"s": "row0_s"}}]']],
- [[000: change conditions
+ [[000: simple3: conditions unchanged
+000: simple4: conditions unchanged
+000: simple: conditions unchanged
001: table simple3: inserted row: name=row0_s3 uset=[] uref=[<0>] uuid=<1>
001: table simple3: updated columns: name uref
001: table simple4: inserted row: name=row0_s4 uuid=<0>
001: table simple4: updated columns: name
-002: change conditions
+002: simple4: change conditions
003: table simple3: name=row0_s3 uset=[] uref=[] uuid=<1>
003: table simple4: deleted row: name=row0_s4 uuid=<0>
004: {"error":null,"result":[{"uuid":["uuid","<2>"]}]}
@@ -1558,10 +1593,12 @@ OVSDB_CHECK_IDL([simple idl, initially populated, strong references, conditional
{"op": "insert",
"table": "simple",
"row": {"s": "row0_s"}}]']],
- [[000: change conditions
+ [[000: simple3: conditions unchanged
+000: simple4: conditions unchanged
+000: simple: conditions unchanged
001: table simple3: name=row0_s3 uset=[] uref=[<0>] uuid=<1>
001: table simple4: name=row0_s4 uuid=<0>
-002: change conditions
+002: simple4: change conditions
003: table simple3: name=row0_s3 uset=[] uref=[] uuid=<1>
004: {"error":null,"result":[{"uuid":["uuid","<2>"]}]}
005: table simple3: name=row0_s3 uset=[] uref=[] uuid=<1>
@@ -2370,11 +2407,11 @@ OVSDB_CHECK_CLUSTER_IDL([simple idl, monitor_cond_since, cluster disconnect],
"table": "simple",
"where": [["i", "==", 1]],
"row": {"r": 2.0 }}]']],
- [[000: change conditions
+ [[000: simple: change conditions
001: empty
-002: change conditions
+002: simple: change conditions
003: table simple: i=2 r=1 b=true s= u=<0> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<1>
-004: change conditions
+004: simple: change conditions
005: reconnect
006: table simple
007: {"error":null,"result":[{"count":1}]}
diff --git a/tests/test-ovsdb.c b/tests/test-ovsdb.c
index 84fe23276..1bc5ac17a 100644
--- a/tests/test-ovsdb.c
+++ b/tests/test-ovsdb.c
@@ -2627,11 +2627,12 @@ parse_link2_json_clause(struct ovsdb_idl_condition *cond,
}
}
-static void
-update_conditions(struct ovsdb_idl *idl, char *commands)
+static unsigned int
+update_conditions(struct ovsdb_idl *idl, char *commands, int step)
{
- char *cmd, *save_ptr1 = NULL;
const struct ovsdb_idl_table_class *tc;
+ unsigned int next_cond_seqno = 0;
+ char *cmd, *save_ptr1 = NULL;
for (cmd = strtok_r(commands, ";", &save_ptr1); cmd;
cmd = strtok_r(NULL, ";", &save_ptr1)) {
@@ -2682,15 +2683,20 @@ update_conditions(struct ovsdb_idl *idl, char *commands)
unsigned int seqno = ovsdb_idl_get_condition_seqno(idl);
unsigned int next_seqno = ovsdb_idl_set_condition(idl, tc, &cond);
if (seqno == next_seqno ) {
- ovs_fatal(0, "condition unchanged");
+ print_and_log("%03d: %s: conditions unchanged",
+ step, table_name);
+ } else {
+ print_and_log("%03d: %s: change conditions", step, table_name);
}
unsigned int new_next_seqno = ovsdb_idl_set_condition(idl, tc, &cond);
if (next_seqno != new_next_seqno) {
ovs_fatal(0, "condition expected seqno changed");
}
+ next_cond_seqno = MAX(next_cond_seqno, next_seqno);
ovsdb_idl_condition_destroy(&cond);
json_destroy(json);
}
+ return next_cond_seqno;
}
static void
@@ -2699,6 +2705,7 @@ do_idl(struct ovs_cmdl_context *ctx)
struct test_ovsdb_pvt_context *pvt = ctx->pvt;
struct jsonrpc *rpc;
struct ovsdb_idl *idl;
+ unsigned int next_cond_seqno = 0;
unsigned int seqno = 0;
struct ovsdb_symbol_table *symtab;
size_t n_uuids = 0;
@@ -2735,8 +2742,8 @@ do_idl(struct ovs_cmdl_context *ctx)
const char remote_s[] = "set-remote ";
const char cond_s[] = "condition ";
if (ctx->argc > 2 && strstr(ctx->argv[2], cond_s)) {
- update_conditions(idl, ctx->argv[2] + strlen(cond_s));
- print_and_log("%03d: change conditions", step++);
+ next_cond_seqno =
+ update_conditions(idl, ctx->argv[2] + strlen(cond_s), step++);
i = 3;
} else {
i = 2;
@@ -2755,6 +2762,21 @@ do_idl(struct ovs_cmdl_context *ctx)
if (*arg == '+') {
/* The previous transaction didn't change anything. */
arg++;
+ } else if (*arg == '^') {
+ /* Wait for condition change to be acked by the server. */
+ arg++;
+ for (;;) {
+ ovsdb_idl_run(idl);
+ ovsdb_idl_check_consistency(idl);
+ if (ovsdb_idl_get_condition_seqno(idl) == next_cond_seqno) {
+ break;
+ }
+ jsonrpc_run(rpc);
+
+ ovsdb_idl_wait(idl);
+ jsonrpc_wait(rpc);
+ poll_block();
+ }
} else {
/* Wait for update. */
for (;;) {
@@ -2789,8 +2811,8 @@ do_idl(struct ovs_cmdl_context *ctx)
arg + strlen(remote_s),
ovsdb_idl_is_connected(idl) ? "true" : "false");
} else if (!strncmp(arg, cond_s, strlen(cond_s))) {
- update_conditions(idl, arg + strlen(cond_s));
- print_and_log("%03d: change conditions", step++);
+ next_cond_seqno = update_conditions(idl, arg + strlen(cond_s),
+ step++);
} else if (arg[0] != '[') {
if (!idl_set(idl, arg, step++)) {
/* If idl_set() returns false, then no transaction
diff --git a/tests/test-ovsdb.py b/tests/test-ovsdb.py
index cca1818ea..a841adba4 100644
--- a/tests/test-ovsdb.py
+++ b/tests/test-ovsdb.py
@@ -626,7 +626,8 @@ def idl_set(idl, commands, step):
return status != ovs.db.idl.Transaction.ERROR
-def update_condition(idl, commands):
+def update_condition(idl, commands, step):
+ next_cond_seqno = 0
commands = commands[len("condition "):].split(";")
for command in commands:
command = command.split(" ")
@@ -637,7 +638,20 @@ def update_condition(idl, commands):
table = command[0]
cond = ovs.json.from_string(command[1])
- idl.cond_change(table, cond)
+ next_seqno = idl.cond_change(table, cond)
+ if idl.cond_seqno == next_seqno:
+ sys.stdout.write("%03d: %s: conditions unchanged\n" %
+ (step, table))
+ else:
+ sys.stdout.write("%03d: %s: change conditions\n" %
+ (step, table))
+ sys.stdout.flush()
+
+ assert next_seqno == idl.cond_change(table, cond), \
+ "condition expected seqno changed"
+ next_cond_seqno = max(next_cond_seqno, next_seqno)
+
+ return next_cond_seqno
def do_idl(schema_file, remote, *commands):
@@ -694,6 +708,7 @@ def do_idl(schema_file, remote, *commands):
else:
rpc = None
+ next_cond_seqno = 0
symtab = {}
seqno = 0
step = 0
@@ -717,9 +732,7 @@ def do_idl(schema_file, remote, *commands):
commands = list(commands)
if len(commands) >= 1 and "condition" in commands[0]:
- update_condition(idl, commands.pop(0))
- sys.stdout.write("%03d: change conditions\n" % step)
- sys.stdout.flush()
+ next_cond_seqno = update_condition(idl, commands.pop(0), step)
step += 1
for command in commands:
@@ -732,6 +745,16 @@ def do_idl(schema_file, remote, *commands):
if command.startswith("+"):
# The previous transaction didn't change anything.
command = command[1:]
+ elif command.startswith("^"):
+ # Wait for condition change to be acked by the server.
+ command = command[1:]
+ while idl.cond_seqno != next_cond_seqno and not idl.run():
+ rpc.run()
+
+ poller = ovs.poller.Poller()
+ idl.wait(poller)
+ rpc.wait(poller)
+ poller.block()
else:
# Wait for update.
while idl.change_seqno == seqno and not idl.run():
@@ -753,9 +776,7 @@ def do_idl(schema_file, remote, *commands):
step += 1
idl.force_reconnect()
elif "condition" in command:
- update_condition(idl, command)
- sys.stdout.write("%03d: change conditions\n" % step)
- sys.stdout.flush()
+ next_cond_seqno = update_condition(idl, command, step)
step += 1
elif not command.startswith("["):
if not idl_set(idl, command, step):