Drop extra dns query
Use result from query loop
Related-PRODX: PRODX-51199
TODO: merge with I61c303145367293f09fcf4f4080dda99c8849633
Change-Id: Ia963234df19d7f8dd9ea2f5a2bcf012694e676ed
diff --git a/designate_tempest_plugin/common/waiters.py b/designate_tempest_plugin/common/waiters.py
index 72fe2a6..7e3ff80 100644
--- a/designate_tempest_plugin/common/waiters.py
+++ b/designate_tempest_plugin/common/waiters.py
@@ -305,3 +305,31 @@
message = '(%s) %s' % (caller, message)
raise lib_exc.TimeoutException(message)
+
+
+def wait_for_result(func, duration, sleep_for, *args, **kwargs):
+ """Call the given function until it returns result
+
+ or until the specified duration (in seconds) elapses (and return False).
+
+ :param func: A callable that returns True on success.
+ :param duration: The number of seconds for which to attempt a
+ successful call of the function.
+ :param sleep_for: The number of seconds to sleep after an unsuccessful
+ invocation of the function.
+ :param args: args that are passed to func.
+ :param kwargs: kwargs that are passed to func.
+ """
+ begin_time = time.time()
+ result = None
+ timeout = begin_time + duration
+ func_name = getattr(func, '__name__', getattr(func.__class__, '__name__'))
+ while time.time() < timeout:
+ result = func(*args, **kwargs)
+ if result:
+ LOG.debug("Call %s returns %s in %f seconds",
+ func_name, result, time.time() - begin_time)
+ return result
+ time.sleep(sleep_for)
+ LOG.debug("Call %s returns false in %f seconds", func_name, duration)
+ return result
diff --git a/designate_tempest_plugin/services/dns/query/query_client.py b/designate_tempest_plugin/services/dns/query/query_client.py
index 13cdf9e..7fd6afd 100644
--- a/designate_tempest_plugin/services/dns/query/query_client.py
+++ b/designate_tempest_plugin/services/dns/query/query_client.py
@@ -15,9 +15,11 @@
import dns.exception
import dns.query
from tempest import config
-from tempest.lib.common.utils import test_utils as utils
from oslo_utils import netutils
+from designate_tempest_plugin.common import waiters
+
+
CONF = config.CONF
@@ -63,17 +65,14 @@
@classmethod
def _dig(cls, name, rdatatype, ip, port, timeout):
query = cls._prepare_query(name, rdatatype)
- utils.call_until_true(dns.query.udp,
- timeout * 5,
- 1,
- query,
- ip.strip('[]'),
- port=port,
- timeout=timeout
- )
-
- return dns.query.udp(
- query, ip.strip('[]'), port=port, timeout=timeout)
+ return waiters.wait_for_result(dns.query.udp,
+ timeout * 5,
+ 1,
+ query,
+ ip.strip('[]'),
+ port=port,
+ timeout=timeout
+ )
class Nameserver(object):