def get_results(): rpc_result = self.client.rpc(method, *params_list, **params_dict) if rpc_result.completed: # rpc_result.result is allowed to be False or None, so we # return the entire rpc_result return rpc_result wait(rpc_result.resend_secs)
def test_wait_with_callable_message(): val = ['FOO'] with pytest.raises(TimeoutException) as e: def pred(): val[0] = 'BAR' return False wait(pred=pred, timeout=.1, message=lambda: 'val is %s' % val[0]) assert val[0] == 'BAR' assert e.value.message == 'val is BAR'
def test_wait_exception(): with pytest.raises(Exception, match=".*`message` is required.*"): wait(0.1, pred=lambda: True) wait(0.1) wait(0.1, pred=lambda: True, message='message') wait(0.1, pred=lambda: True, message=False) repeat(0.1, callback=lambda: True)
def iter_output(self, cmds, sleep=1.0, decode='utf-8'): """ Iterate commands output :param [List[Cmd]] cmds: The list of commands to iterate on their output :param [int, float] sleep: How long to sleep between pollings :param [str] decode: Expected output encoding :returns: A MultiObject of tuples containing stdout and stderr :rtype: MultiObject[Tuple[str, str]] """ while not self.is_done(cmds): yield self.get_output(cmds, decode=decode) wait(sleep) yield self.get_output(cmds, decode=decode)
def get_response(self, cmd_idx): item = self._commands.pop(cmd_idx) def has_response(): _check_exiting() if not item.event.wait(timeout=0.5): raise NoResponseForRedisCommand(**item._asdict()) return True wait(REDIS_SOCKET_TIMEOUT + MINUTE, has_response, message=False, progressbar=False, sleep=0) [response] = item.results return response
def test_wait_long_predicate(): """ After the actual check the predicate is held for 3 seconds. Make sure that we don't get a timeout after 2 seconds - because the actual condition should be met in 1 second! """ t = Timer() def pred(): try: return 0.1 < t.duration finally: wait(0.3) wait(0.2, pred, message=False)
def test_wait_do_something_on_final_attempt(multipred): data = [] def pred(is_final_attempt): if is_final_attempt: data.append('final') data.append('regular') return False if multipred: pred = [pred] with pytest.raises(TimeoutException): wait(pred=pred, timeout=.5, sleep=.1, message=False) assert all(iteration == 'regular' for iteration in data[:-2]) assert data[-2] == 'final' assert data[-1] == 'regular'
def send_blocking(self, cmd, *args, timeout=MINUTE, **kwargs): assert timeout is not None timeout = timeout or 1 def _send(): res = self.send(cmd, *args, **kwargs) if res is None: return False if res is False: return self._FALSE return res res = wait(timeout, _send, sleep=0.01, progressbar=False, throw=False) if res == self._FALSE: res = False return res
def rpc(self, method, *params_list, **params_dict): long_operation_timeout_override = params_dict.pop( "long_operation_timeout") or 60 def get_results(): rpc_result = self.client.rpc(method, *params_list, **params_dict) if rpc_result.completed: # rpc_result.result is allowed to be False or None, so we # return the entire rpc_result return rpc_result wait(rpc_result.resend_secs) try: rpc_result = wait(long_operation_timeout_override, get_results, sleep=0) except TimeoutError: raise LongOperationTimeout(method) assert rpc_result.completed return rpc_result.result
def pred(): try: return 0.1 < t.duration finally: wait(0.3)