Abort wait for 404 if the status changes to ERROR
This patch enhances the NotFound/404 waiter to not continue to wait
for a 404 if the zone goes into status ERROR.
Change-Id: I27d5d654b2b2b2b4cd8b8e85fdb1d7b1e4162516
diff --git a/designate_tempest_plugin/common/exceptions.py b/designate_tempest_plugin/common/exceptions.py
new file mode 100644
index 0000000..d3f343d
--- /dev/null
+++ b/designate_tempest_plugin/common/exceptions.py
@@ -0,0 +1,29 @@
+# Copyright 2021 Red Hat.
+#
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+
+class InvalidStatusError(Exception):
+ """
+ Exception raise when an entity changes to an unexpected status.
+ """
+
+ def __init__(self, entity, entity_id, status, expected_status=None):
+ if expected_status:
+ message = ("{0} with ID {1} returned status {2} when {3} was "
+ "expected.".format(entity, entity_id,
+ status, expected_status))
+ else:
+ message = ("{0} with ID {1} returned unexpected status {2}".format(
+ entity, entity_id, status))
+ super(InvalidStatusError, self).__init__(message)
diff --git a/designate_tempest_plugin/common/waiters.py b/designate_tempest_plugin/common/waiters.py
index 2b7a3b6..5a35255 100644
--- a/designate_tempest_plugin/common/waiters.py
+++ b/designate_tempest_plugin/common/waiters.py
@@ -18,6 +18,9 @@
from tempest.lib.common.utils import test_utils
from tempest.lib import exceptions as lib_exc
+from designate_tempest_plugin.common import constants as const
+from designate_tempest_plugin.common import exceptions
+
LOG = logging.getLogger(__name__)
@@ -35,6 +38,10 @@
LOG.info('Zone %s is 404ing', zone_id)
return
+ if zone['status'] == const.ERROR:
+ raise exceptions.InvalidStatusError('Zone', zone_id,
+ zone['status'])
+
if int(time.time()) - start >= client.build_timeout:
message = ('Zone %(zone_id)s failed to 404 within the required '
'time (%(timeout)s s). Current status: '