Merge "Fix test by waiting to lbaas entity delete"
diff --git a/etc/tempest.conf.sample b/etc/tempest.conf.sample
index 068a666..d75de90 100644
--- a/etc/tempest.conf.sample
+++ b/etc/tempest.conf.sample
@@ -617,6 +617,14 @@
# (string value)
#public_router_id=
+# Timeout in seconds to wait for network operation to
+# complete. (integer value)
+#build_timeout=300
+
+# Time in seconds between network operation status checks.
+# (integer value)
+#build_interval=10
+
[network-feature-enabled]
diff --git a/tempest/api/network/test_load_balancer.py b/tempest/api/network/test_load_balancer.py
index ba92199..695dbf8 100644
--- a/tempest/api/network/test_load_balancer.py
+++ b/tempest/api/network/test_load_balancer.py
@@ -131,6 +131,7 @@
# Verification of vip delete
resp, body = self.client.delete_vip(vip['id'])
self.assertEqual('204', resp['status'])
+ self.client.wait_for_resource_deletion('vip', vip['id'])
# Verification of pool update
new_name = "New_pool"
resp, body = self.client.update_pool(pool['id'],
diff --git a/tempest/config.py b/tempest/config.py
index 46dcbcc..212ee8a 100644
--- a/tempest/config.py
+++ b/tempest/config.py
@@ -366,6 +366,14 @@
default="",
help="Id of the public router that provides external "
"connectivity"),
+ cfg.IntOpt('build_timeout',
+ default=300,
+ help="Timeout in seconds to wait for network operation to "
+ "complete."),
+ cfg.IntOpt('build_interval',
+ default=10,
+ help="Time in seconds between network operation status "
+ "checks."),
]
network_feature_group = cfg.OptGroup(name='network-feature-enabled',
diff --git a/tempest/services/network/network_client_base.py b/tempest/services/network/network_client_base.py
index f1bf548..41a7aa4 100644
--- a/tempest/services/network/network_client_base.py
+++ b/tempest/services/network/network_client_base.py
@@ -10,9 +10,11 @@
# License for the specific language governing permissions and limitations
# under the License.
+import time
import urllib
from tempest import config
+from tempest import exceptions
CONF = config.CONF
@@ -54,6 +56,8 @@
self.rest_client.service = CONF.network.catalog_type
self.version = '2.0'
self.uri_prefix = "v%s" % (self.version)
+ self.build_timeout = CONF.network.build_timeout
+ self.build_interval = CONF.network.build_interval
def get_rest_client(self, auth_provider):
raise NotImplementedError
@@ -189,3 +193,23 @@
resp, body = self.post(uri, body)
body = {'ports': self.deserialize_list(body)}
return resp, body
+
+ def wait_for_resource_deletion(self, resource_type, id):
+ """Waits for a resource to be deleted."""
+ start_time = int(time.time())
+ while True:
+ if self.is_resource_deleted(resource_type, id):
+ return
+ if int(time.time()) - start_time >= self.build_timeout:
+ raise exceptions.TimeoutException
+ time.sleep(self.build_interval)
+
+ def is_resource_deleted(self, resource_type, id):
+ method = 'show_' + resource_type
+ try:
+ getattr(self, method)(id)
+ except AttributeError:
+ raise Exception("Unknown resource type %s " % resource_type)
+ except exceptions.NotFound:
+ return True
+ return False