Add a client for querying nameservers
Change-Id: I2d2eedcd162e7aeac4f3c9c92342bff448b4a5f5
diff --git a/designate_tempest_plugin/common/waiters.py b/designate_tempest_plugin/common/waiters.py
index dbdbd5a..efd3625 100644
--- a/designate_tempest_plugin/common/waiters.py
+++ b/designate_tempest_plugin/common/waiters.py
@@ -147,4 +147,49 @@
if caller:
message = '(%s) %s' % (caller, message)
- raise lib_exc.TimeoutException(message)
\ No newline at end of file
+ raise lib_exc.TimeoutException(message)
+
+
+def wait_for_query(client, name, rdatatype, found=True):
+ """Query nameservers until the record of the given name and type is found.
+
+ :param client: A QueryClient
+ :param name: The record name for which to query
+ :param rdatatype: The record type for which to query
+ :param found: If True, wait until the record is found. Else, wait until the
+ record disappears.
+ """
+ state = "found" if found else "removed"
+ LOG.info("Waiting for record %s of type %s to be %s on nameservers %s",
+ name, rdatatype, state, client.nameservers)
+ start = int(time.time())
+
+ while True:
+ time.sleep(client.build_interval)
+
+ responses = client.query(name, rdatatype)
+ if found:
+ all_answers_good = all(r.answer for r in responses)
+ else:
+ all_answers_good = all(not r.answer for r in responses)
+
+ if not client.nameservers or all_answers_good:
+ LOG.info("Record %s of type %s was successfully %s on nameservers "
+ "%s", name, rdatatype, state, client.nameservers)
+ return
+
+ if int(time.time()) - start >= client.build_timeout:
+ message = ('Record %(name)s of type %(rdatatype)s not %(state)s '
+ 'on nameservers %(nameservers)s within the required '
+ 'time (%(timeout)s s)' %
+ {'name': name,
+ 'rdatatype': rdatatype,
+ 'state': state,
+ 'nameservers': client.nameservers,
+ 'timeout': client.build_timeout})
+
+ caller = misc_utils.find_test_caller()
+ if caller:
+ message = "(%s) %s" % (caller, message)
+
+ raise lib_exc.TimeoutException(message)