From e0f15c59828bc95c7de56475f036b8867f85d3f6 Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Mon, 11 Jan 2021 16:58:49 +0000 Subject: [PATCH] Add WaitForPortCreateEvent in BaseOVSTestCase When a port is created, the test case will wait until the IDL event is raised and the port is effectively created and the local DB cache is updated. Change-Id: I660baccde67a040731538276fc6dff05a10efb68 Related-Bug: #1910717 --- .../tests/functional/agent/common/test_ovs_lib.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/neutron/tests/functional/agent/common/test_ovs_lib.py b/neutron/tests/functional/agent/common/test_ovs_lib.py index c46bd49fb68..fdb5cd54ceb 100644 --- a/neutron/tests/functional/agent/common/test_ovs_lib.py +++ b/neutron/tests/functional/agent/common/test_ovs_lib.py @@ -19,6 +19,7 @@ from unittest import mock from neutron_lib import constants as p_const from neutron_lib.services.qos import constants as qos_constants from oslo_utils import uuidutils +from ovsdbapp.backend.ovs_idl import event from neutron.agent.common import ovs_lib from neutron.agent.linux import ip_lib @@ -37,6 +38,17 @@ OTHER_CONFIG_DEFAULT = {'max-rate': str(MAX_RATE_DEFAULT), 'min-rate': str(MIN_RATE_DEFAULT)} +class WaitForPortCreateEvent(event.WaitEvent): + event_name = 'WaitForPortCreateEvent' + + def __init__(self, port_name): + table = 'Port' + events = (self.ROW_CREATE,) + conditions = (('name', '=', port_name),) + super(WaitForPortCreateEvent, self).__init__( + events, table, conditions, timeout=5) + + class BaseOVSTestCase(base.BaseSudoTestCase): def setUp(self): @@ -111,8 +123,11 @@ class BaseOVSTestCase(base.BaseSudoTestCase): self.elements_to_clean['bridges'].append(self.br_name) def _create_port(self, port_name): + row_event = WaitForPortCreateEvent(port_name) + self.ovs.ovsdb.idl.notify_handler.watch_event(row_event) self.ovs.ovsdb.add_port(self.br_name, port_name).execute( check_error=True) + self.assertTrue(row_event.wait()) def _find_port_uuid(self, port_name): return self.ovs.ovsdb.db_get('Port', port_name, '_uuid').execute()