On 1/17/25 3:10 PM, Ales Musil wrote:
> On Thu, Jan 16, 2025 at 5:58 PM Xavier Simonart <xsimo...@redhat.com> wrote:
> 
>> The tests was sometimes (rarely) failing as:
>> - Looking for flows with e.g. cookie c5d057f but hitting cookie bec5d057.
>> - Looking for flows with e.g. cookie 1000000 but hitting
>> set_field:0x1000000.
>>
>> Signed-off-by: Xavier Simonart <xsimo...@redhat.com>
>> ---
>> v2: Use ovn-debug to get the cookie (as per Ales' feedback).
>> ---
>>  tests/ovn.at | 79 +++++++++++++++++++++++-----------------------------
>>  1 file changed, 35 insertions(+), 44 deletions(-)
>>
>> diff --git a/tests/ovn.at b/tests/ovn.at
>> index aa212f774..bf68991d3 100644
>> --- a/tests/ovn.at
>> +++ b/tests/ovn.at
>> @@ -35415,6 +35415,22 @@ m4_define([MULTIPLE_OVS_INT],
>>             sed -e 's/n_bytes=[[0-9]]*, //g'
>>     }
>>
>> +   WAIT_UNTIL_FLOWS()
>> +   {
>> +       cookie=${1}
>> +       interface=${2}
>> +       OVS_WAIT_UNTIL([
>> +           ofport=$(ovs-vsctl --bare --columns ofport find Interface
>> name=$interface)
>> +           ovs-ofctl dump-flows br-int | grep "cookie=$cookie" | grep
>> "actions=output:$ofport"
>> +       ])
>> +   }
>> +
>> +   get_nb_flows()
>> +   {
>> +       cookie=${1}
>> +       ovs-ofctl dump-flows br-int | grep "cookie=$cookie" | wc -l

Nit: grep -c

>> +   }
>> +
>>     check ovn-nbctl ls-add ls
>>     check ovn-nbctl lsp-add ls lp
>>     if test X$1 != X; then
>> @@ -35438,13 +35454,11 @@ m4_define([MULTIPLE_OVS_INT],
>>     echo ======================================================
>>     echo === Flows after iface-id set for the old interface ===
>>     echo ======================================================
>> -   COOKIE=$(ovn-sbctl find port_binding logical_port=lp|grep uuid|cut -d:
>> -f2| cut -c1-8 | sed 's/^\s*0\{0,8\}//')
>> +   COOKIE=$(ovn-debug uuid-to-cookie $(fetch_column port_binding _uuid
>> logical_port=lp))
>>
>> -   OVS_WAIT_UNTIL([
>> -       ofport=$(ovs-vsctl --bare --columns ofport find Interface
>> name=lpold)
>> -       ovs-ofctl dump-flows br-int | grep $COOKIE | grep
>> "actions=output:$ofport"
>> -   ])
>> -   nb_flows=`ovs-ofctl dump-flows br-int | grep $COOKIE | wc -l`
>> +   WAIT_UNTIL_FLOWS $COOKIE lpold
>> +
>> +   nb_flows=$(get_nb_flows $COOKIE )
>>     echo $nb_flows "flows after iface-id set for old interface"
>>
>>     echo ======================================================
>> @@ -35453,11 +35467,8 @@ m4_define([MULTIPLE_OVS_INT],
>>     # Set external_ids:iface-id within same transaction as adding the port.
>>     # This will generally cause ovn-controller to get initially notified
>> of ovs interface changes with ofport == 0.
>>     check ovs-vsctl add-port br-int lpnew -- set interface lpnew
>> type=internal -- set interface lpnew external_ids:iface-id=lp
>> -   OVS_WAIT_UNTIL([
>> -       ofport=$(ovs-vsctl --bare --columns ofport find Interface
>> name=lpnew)
>> -       ovs-ofctl dump-flows br-int | grep $COOKIE | grep
>> "actions=output:$ofport"
>> -   ])
>> -   check test "$nb_flows" = $(ovs-ofctl dump-flows br-int | grep $COOKIE
>> | wc -l)
>> +   WAIT_UNTIL_FLOWS $COOKIE lpnew
>> +   check test "$nb_flows" = $(get_nb_flows $COOKIE)
>>     flows_lpnew=$(get_flows $COOKIE)
>>
>>     echo ======================================================
>> @@ -35466,7 +35477,7 @@ m4_define([MULTIPLE_OVS_INT],
>>     check ovs-vsctl del-port br-int lpold
>>     # We do not expect changes, so let's wait for controller to get time
>> to process any update
>>     check ovn-nbctl --wait=hv sync
>> -   check test "$nb_flows" = $(ovs-ofctl dump-flows br-int | grep $COOKIE
>> | wc -l)
>> +   check test "$nb_flows" = $(get_nb_flows $COOKIE)
>>     flows_after_deletion=$(get_flows $COOKIE)
>>     check test "$flows_lpnew" = "$flows_after_deletion"
>>
>> @@ -35477,23 +35488,15 @@ m4_define([MULTIPLE_OVS_INT],
>>     # This will generally cause ovn-controller to get notified of ovs
>> interface changes with a proper ofport.
>>     check ovs-vsctl add-port br-int lptemp -- set Interface lptemp
>> type=internal
>>     check ovs-vsctl set Interface lptemp external_ids:iface-id=lp
>> -   OVS_WAIT_UNTIL([
>> -       ofport=$(ovs-vsctl --bare --columns ofport find Interface
>> name=lptemp)
>> -       ovs-ofctl dump-flows br-int | grep $COOKIE | grep
>> "actions=output:$ofport"
>> -   ])
>> -   check test "$nb_flows" = $(ovs-ofctl dump-flows br-int | grep $COOKIE
>> | wc -l)
>> +   WAIT_UNTIL_FLOWS $COOKIE lptemp
>> +   check test "$nb_flows" = $(get_nb_flows $COOKIE)
>>
>>     echo ======================================================
>>     echo ======= Flows after lptemp interface is deleted ======
>>     echo ======================================================
>>     check ovs-vsctl del-port br-int lptemp
>> -   OVS_WAIT_UNTIL([
>> -       ofport=$(ovs-vsctl --bare --columns ofport find Interface
>> name=lpnew)
>> -       echo $ofport
>> -       ovs-ofctl dump-flows br-int  | grep $COOKIE
>> -       ovs-ofctl dump-flows br-int | grep $COOKIE | grep
>> "actions=output:$ofport"
>> -   ])
>> -   check test "$nb_flows" = $(ovs-ofctl dump-flows br-int | grep $COOKIE
>> | wc -l)
>> +   WAIT_UNTIL_FLOWS $COOKIE lpnew
>> +   check test "$nb_flows" = $(get_nb_flows $COOKIE)
>>     flows_after_deletion=$(get_flows $COOKIE)
>>     check test "$flows_lpnew" = "$flows_after_deletion"
>>
>> @@ -35502,7 +35505,7 @@ m4_define([MULTIPLE_OVS_INT],
>>     echo ======================================================
>>     check ovs-vsctl del-port br-int lpnew
>>     OVS_WAIT_UNTIL([
>> -       nb_flows=`ovs-ofctl dump-flows br-int | grep $COOKIE | wc -l`
>> +       nb_flows=`get_nb_flows $COOKIE`
>>         test "${nb_flows}" = $nb_flows_ref
>>     ])
>>
>> @@ -35515,21 +35518,15 @@ m4_define([MULTIPLE_OVS_INT],
>>     check ovs-vsctl set interface lpnew external_ids:iface-id=lp
>>
>>     # Wait for lpnew  flows to be installed
>> -   OVS_WAIT_UNTIL([
>> -       ofport=$(ovs-vsctl --bare --columns ofport find Interface
>> name=lpnew)
>> -       ovs-ofctl dump-flows br-int | grep $COOKIE | grep
>> "actions=output:$ofport"
>> -   ])
>> +   WAIT_UNTIL_FLOWS $COOKIE lpnew
>>     flows_lpnew=$(get_flows $COOKIE)
>> -   nb_flows=`ovs-ofctl dump-flows br-int | grep $COOKIE | wc -l`
>> +   nb_flows=`get_nb_flows $COOKIE`
>>
>>     check ovs-vsctl add-port br-int lptemp -- set Interface lptemp
>> type=internal
>>     check ovs-vsctl set Interface lptemp external_ids:iface-id=lp
>>
>>     # Wait for lptemp  flows to be installed
>> -   OVS_WAIT_UNTIL([
>> -       ofport=$(ovs-vsctl --bare --columns ofport find Interface
>> name=lptemp)
>> -       ovs-ofctl dump-flows br-int | grep $COOKIE | grep
>> "actions=output:$ofport"
>> -   ])
>> +   WAIT_UNTIL_FLOWS $COOKIE lptemp
>>
>>     # Delete both lpold and lptemp to go to a stable situation
>>     check ovs-vsctl del-port br-int lptemp
>> @@ -35540,21 +35537,15 @@ m4_define([MULTIPLE_OVS_INT],
>>     ])
>>
>>     # Wait for correct/lpnew flows to be installed
>> -   OVS_WAIT_UNTIL([
>> -       ofport=$(ovs-vsctl --bare --columns ofport find Interface
>> name=lpnew)
>> -       ovs-ofctl dump-flows br-int | grep $COOKIE | grep
>> "actions=output:$ofport"
>> -   ])
>> -   check test "$nb_flows" = $(ovs-ofctl dump-flows br-int | grep $COOKIE
>> | wc -l)
>> +   WAIT_UNTIL_FLOWS $COOKIE lpnew
>> +   check test "$nb_flows" = $(get_nb_flows $COOKIE)
>>     flows_after_deletion=$(get_flows $COOKIE)
>>     check test "$flows_lpnew" = "$flows_after_deletion"
>>
>>     # Check that recompute still works
>>     check ovn-appctl -t ovn-controller recompute
>> -   OVS_WAIT_UNTIL([
>> -       ofport=$(ovs-vsctl --bare --columns ofport find Interface
>> name=lpnew)
>> -       ovs-ofctl dump-flows br-int | grep $COOKIE | grep
>> "actions=output:$ofport"
>> -   ])
>> -   check test "$nb_flows" = $(ovs-ofctl dump-flows br-int | grep $COOKIE
>> | wc -l)
>> +   WAIT_UNTIL_FLOWS $COOKIE lpnew
>> +   check test "$nb_flows" = $(get_nb_flows $COOKIE)
>>     flows_after_deletion=$(get_flows $COOKIE)
>>     check test "$flows_lpnew" = "$flows_after_deletion"
>>
>> --
>> 2.47.1
>>
>>
> Looks good to me, thanks.
> 
> Acked-by: Ales Musil <amu...@redhat.com>
> 

Thanks, Xavier and Ales!

I fixed up the small nit I had above and pushed this to main, 24.09.  I
didn't backport it to 24.03 because we miss the support for
"uuid-to-cookie" there.  I'm guessing that's probably fine.

Regards,
Dumitru


_______________________________________________
dev mailing list
d...@openvswitch.org
https://mail.openvswitch.org/mailman/listinfo/ovs-dev

Reply via email to