X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=tests%2Ftest-ovsdb.c;h=1b9ea2095ae01679dcea5007fa661838de63ce7a;hb=548349603423bea41ec2989583231c1a117f6a9e;hp=5b8f4519cb8bca095fe30310d9933d091420e48d;hpb=1cb29ab050c601448a89eb7311a9f07095921bbd;p=openvswitch diff --git a/tests/test-ovsdb.c b/tests/test-ovsdb.c index 5b8f4519..1b9ea209 100644 --- a/tests/test-ovsdb.c +++ b/tests/test-ovsdb.c @@ -39,6 +39,7 @@ #include "ovsdb/ovsdb.h" #include "ovsdb/query.h" #include "ovsdb/row.h" +#include "ovsdb/server.h" #include "ovsdb/table.h" #include "ovsdb/transaction.h" #include "ovsdb/trigger.h" @@ -975,6 +976,16 @@ do_execute_mutations(int argc OVS_UNUSED, char *argv[]) ovsdb_table_destroy(table); /* Also destroys 'ts'. */ } +/* Inserts a row, without bothering to update metadata such as refcounts. */ +static void +put_row(struct ovsdb_table *table, struct ovsdb_row *row) +{ + const struct uuid *uuid = ovsdb_row_get_uuid(row); + if (!ovsdb_table_get_row(table, uuid)) { + hmap_insert(&table->rows, &row->hmap_node, uuid_hash(uuid)); + } +} + struct do_query_cbdata { struct uuid *row_uuids; int *counts; @@ -1031,7 +1042,7 @@ do_query(int argc OVS_UNUSED, char *argv[]) UUID_ARGS(ovsdb_row_get_uuid(row))); } cbdata.row_uuids[i] = *ovsdb_row_get_uuid(row); - ovsdb_table_put_row(table, row); + put_row(table, row); } json_destroy(json); @@ -1152,7 +1163,7 @@ do_query_distinct(int argc OVS_UNUSED, char *argv[]) ovs_fatal(0, "duplicate UUID "UUID_FMT" in table", UUID_ARGS(ovsdb_row_get_uuid(row))); } - ovsdb_table_put_row(table, row); + put_row(table, row); } json_destroy(json); @@ -1247,7 +1258,7 @@ do_execute(int argc OVS_UNUSED, char *argv[]) char *s; params = parse_json(argv[i]); - result = ovsdb_execute(db, params, 0, NULL); + result = ovsdb_execute(db, NULL, params, 0, NULL); s = json_to_string(result, JSSF_SORT); printf("%s\n", s); free(s); @@ -1282,7 +1293,7 @@ static void do_trigger(int argc OVS_UNUSED, char *argv[]) { struct ovsdb_schema *schema; - struct list completions; + struct ovsdb_session session; struct json *json; struct ovsdb *db; long long int now; @@ -1295,7 +1306,8 @@ do_trigger(int argc OVS_UNUSED, char *argv[]) json_destroy(json); db = ovsdb_create(schema); - list_init(&completions); + ovsdb_session_init(&session, db); + now = 0; number = 0; for (i = 2; i < argc; i++) { @@ -1309,7 +1321,7 @@ do_trigger(int argc OVS_UNUSED, char *argv[]) json_destroy(params); } else { struct test_trigger *t = xmalloc(sizeof *t); - ovsdb_trigger_init(db, &t->trigger, params, &completions, now); + ovsdb_trigger_init(&session, &t->trigger, params, now); t->number = number++; if (ovsdb_trigger_is_complete(&t->trigger)) { do_trigger_dump(t, now, "immediate"); @@ -1319,8 +1331,8 @@ do_trigger(int argc OVS_UNUSED, char *argv[]) } ovsdb_trigger_run(db, now); - while (!list_is_empty(&completions)) { - do_trigger_dump(CONTAINER_OF(list_pop_front(&completions), + while (!list_is_empty(&session.completions)) { + do_trigger_dump(CONTAINER_OF(list_pop_front(&session.completions), struct test_trigger, trigger.node), now, "delayed"); } @@ -1767,7 +1779,7 @@ idl_set(struct ovsdb_idl *idl, char *commands, int step) struct idltest_simple *s; if (!arg1 || arg2) { - ovs_fatal(0, "\"set\" command requires 1 argument"); + ovs_fatal(0, "\"insert\" command requires 1 argument"); } s = idltest_simple_insert(txn); @@ -1776,12 +1788,12 @@ idl_set(struct ovsdb_idl *idl, char *commands, int step) const struct idltest_simple *s; if (!arg1 || arg2) { - ovs_fatal(0, "\"set\" command requires 1 argument"); + ovs_fatal(0, "\"delete\" command requires 1 argument"); } s = idltest_find_simple(idl, atoi(arg1)); if (!s) { - ovs_fatal(0, "\"set\" command asks for nonexistent " + ovs_fatal(0, "\"delete\" command asks for nonexistent " "i=%d", atoi(arg1)); } idltest_simple_delete(s); @@ -1818,6 +1830,13 @@ idl_set(struct ovsdb_idl *idl, char *commands, int step) } ovsdb_idl_txn_increment(txn, arg1, arg2, NULL); increment = true; + } else if (!strcmp(name, "abort")) { + ovsdb_idl_txn_abort(txn); + break; + } else if (!strcmp(name, "destroy")) { + printf("%03d: destroy\n", step); + ovsdb_idl_txn_destroy(txn); + return; } else { ovs_fatal(0, "unknown command %s", name); }