ovsdb: New functions ovsdb_datum_sort_unique(), ovsdb_datum_from_json_unique().
[sliver-openvswitch.git] / tests / test-ovsdb.c
index 1c1116e..0d7e8c5 100644 (file)
@@ -139,6 +139,9 @@ usage(void)
            "    print JSON ATOMs in sorted order\n"
            "  parse-data TYPE DATUM...\n"
            "    parse JSON DATUMs as data of given TYPE, and re-serialize\n"
+           "  parse-data-unique TYPE DATUM...\n"
+           "    parse JSON DATUMs as data of given TYPE, eliminating\n"
+           "    duplicate keys, and re-serialize\n"
            "  parse-data-strings TYPE DATUM...\n"
            "    parse string DATUMs as data of given TYPE, and re-serialize\n"
            "  parse-column NAME OBJECT\n"
@@ -478,7 +481,12 @@ do_parse_atom_strings(int argc, char *argv[])
 }
 
 static void
-do_parse_data(int argc, char *argv[])
+do_parse_data__(int argc, char *argv[],
+                struct ovsdb_error *
+                (*parse)(struct ovsdb_datum *datum,
+                         const struct ovsdb_type *type,
+                         const struct json *json,
+                         struct ovsdb_symbol_table *symtab))
 {
     struct ovsdb_type type;
     struct json *json;
@@ -492,7 +500,7 @@ do_parse_data(int argc, char *argv[])
         struct ovsdb_datum datum;
 
         json = unbox_json(parse_json(argv[i]));
-        check_ovsdb_error(ovsdb_datum_from_json(&datum, &type, json, NULL));
+        check_ovsdb_error(parse(&datum, &type, json, NULL));
         json_destroy(json);
 
         print_and_free_json(ovsdb_datum_to_json(&datum, &type));
@@ -502,6 +510,18 @@ do_parse_data(int argc, char *argv[])
     ovsdb_type_destroy(&type);
 }
 
+static void
+do_parse_data(int argc, char *argv[])
+{
+    do_parse_data__(argc, argv, ovsdb_datum_from_json);
+}
+
+static void
+do_parse_data_unique(int argc, char *argv[])
+{
+    do_parse_data__(argc, argv, ovsdb_datum_from_json_unique);
+}
+
 static void
 do_parse_data_strings(int argc, char *argv[])
 {
@@ -1890,6 +1910,7 @@ static struct command all_commands[] = {
     { "parse-atoms", 2, INT_MAX, do_parse_atoms },
     { "parse-atom-strings", 2, INT_MAX, do_parse_atom_strings },
     { "parse-data", 2, INT_MAX, do_parse_data },
+    { "parse-data-unique", 2, INT_MAX, do_parse_data_unique },
     { "parse-data-strings", 2, INT_MAX, do_parse_data_strings },
     { "sort-atoms", 2, 2, do_sort_atoms },
     { "parse-column", 2, 2, do_parse_column },