[ovs-dev] [PATCH v3 1/3] ovsdb-idl.at: Make test outputs more predictable.
Dumitru Ceara
dceara at redhat.com
Fri Mar 19 08:44:21 UTC 2021
On 3/18/21 6:30 PM, Ilya Maximets wrote:
> 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.
You're right, sorry about this, it wasn't intended like this.
> 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:
> ---
Sure, I'll add this to v4.
>
> Otherwise, it looks fine.
>
> Best regards, Ilya Maximets.
>
Thanks,
Dumitru
More information about the dev
mailing list