[ovs-dev] [PATCH v3 1/3] ovsdb-idl.at: Make test outputs more predictable.
Ilya Maximets
i.maximets at ovn.org
Thu Mar 18 17:30:59 UTC 2021
On 3/12/21 1:07 PM, Dumitru Ceara wrote:
> IDL tests need predictable output from test-ovsdb.
>
> This used to be done by first sorting the output of test-ovsdb and then
> applying uuidfilt to predictably translate UUIDs. This was not
> reliable enough in case test-ovsdb processes two or more insert/delete
> operations in the same iteration because the order of lines in the
> output depends on the automatically generated UUID values.
>
> To fix this we change the way test-ovsdb and test-ovsdb.py generate
> outputs and prepend the table name and tracking information before
> printing the contents of a row.
>
> All existing ovsdb-idl.at and ovsdb-cluster.at tests are updated to
> expect the new output format.
>
> Signed-off-by: Dumitru Ceara <dceara at redhat.com>
> ---
> Note: the old approach was enough for outputs of the existing tests but
> the next patch in this series adds a new test that requires this
> change.
>
> v3:
> - Changed expected output of ovsdb-cluster.at to reflect the new
> formatting in test-ovsdb output.
> - Fixed typo in test-ovsdb.py.
> v2:
> - Reworked the patch and changed test-ovsdb.c and test-ovsdb.py to
> generate output that can be sorted predictably.
> - Rephrased commit message.
> ---
> lib/ovsdb-idl.c | 3
> lib/ovsdb-idl.h | 2
> tests/ovsdb-cluster.at | 2
> tests/ovsdb-idl.at | 463 +++++++++++++++++++++++-------------------------
> tests/test-ovsdb.c | 186 +++++++++++--------
> tests/test-ovsdb.py | 87 +++++----
> 6 files changed, 390 insertions(+), 353 deletions(-)
>
> diff --git a/lib/ovsdb-idl.c b/lib/ovsdb-idl.c
> index 2c8a0c9..9e1e787 100644
> --- a/lib/ovsdb-idl.c
> +++ b/lib/ovsdb-idl.c
> @@ -182,7 +182,6 @@ ovsdb_idl_table_from_class(const struct ovsdb_idl *,
> static struct ovsdb_idl_table *
> ovsdb_idl_table_from_class(const struct ovsdb_idl *,
> const struct ovsdb_idl_table_class *);
> -static bool ovsdb_idl_track_is_set(struct ovsdb_idl_table *table);
> static void ovsdb_idl_track_clear__(struct ovsdb_idl *, bool flush_all);
>
> static void ovsdb_idl_destroy_indexes(struct ovsdb_idl_table *);
> @@ -1140,7 +1139,7 @@ ovsdb_idl_track_add_all(struct ovsdb_idl *idl)
> }
>
> /* Returns true if 'table' has any tracked column. */
> -static bool
> +bool
> ovsdb_idl_track_is_set(struct ovsdb_idl_table *table)
> {
> size_t i;
> diff --git a/lib/ovsdb-idl.h b/lib/ovsdb-idl.h
> index 05bb48d..d934832 100644
> --- a/lib/ovsdb-idl.h
> +++ b/lib/ovsdb-idl.h
<snip>
> @@ -1538,44 +1527,44 @@ OVSDB_CHECK_IDL_NOTIFY([simple idl verify notify],
> "where": [["i", "==", 0]]}]' \
> 'reconnect']],
> [[000: empty
> -000: event:create, row={uuid=<0>}, updates=None
> -000: event:create, row={uuid=<1>}, updates=None
> -001: {"error":null,"result":[{"uuid":["uuid","<2>"]},{"uuid":["uuid","<3>"]}]}
> -002: event:create, row={i=0 r=0 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>}, updates=None
> -002: event:create, row={i=1 r=2 b=true s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2>}, updates=None
> -002: i=0 r=0 b=false s= u=<4> ia=[] ra=[] ba=[] sa=[] ua=[] uuid=<3>
> -002: i=1 r=2 b=true s=mystring u=<5> ia=[1 2 3] ra=[-0.5] ba=[true] sa=[abc def] ua=[<6> <7>] uuid=<2>
> +000: event:create, row={}, updates=None
> +000: event:create, row={}, updates=None
This doesn't look right to remove uuid from here.
Suggesting following change to bring it back
(this patch also needs a slight rebase):
diff --git a/tests/test-ovsdb.py b/tests/test-ovsdb.py
index 9d3228f23..bc2be6acf 100644
--- a/tests/test-ovsdb.py
+++ b/tests/test-ovsdb.py
@@ -640,8 +653,8 @@ def do_idl(schema_file, remote, *commands):
def mock_notify(event, row, updates=None):
output = "%03d: " % step
output += "event:" + str(event) + ", row={"
- output += get_simple_table_printable_row(row,
- 'l2', 'l1') + "}, updates="
+ output += get_simple_table_printable_row(row, 'l2', 'l1') + "}, "
+ output += get_simple_printable_row_string(row, ["uuid"]) + ", updates="
if updates is None:
output += "None"
else:
---
Otherwise, it looks fine.
Best regards, Ilya Maximets.
More information about the dev
mailing list