let tests override KEY_TIMER/VERIFY_TIMER to tolerate slow test hosts
I've seen intermittent failures in test_cli.PregeneratedCode.test_text_subprocess where the host was slow (or overloaded) enough that the "Waiting for sender.." pacifier message was displayed, which flunks the test because we're looking for a specific output string. We patch this 1-second timer in the non-subprocess tests, but you can't patch across a process boundary. This patch adds an undocumented environment variable that lets you override the timer values. The test then sets it to something large. For future consideration: another approach would be to change the test to tolerate the extra message. This would be trickier to validate, though.
This commit is contained in:
parent
e4e8216d2c
commit
d42ac47ac8
|
@ -14,8 +14,8 @@ from .welcome import handle_welcome
|
|||
|
||||
APPID = u"lothar.com/wormhole/text-or-file-xfer"
|
||||
|
||||
KEY_TIMER = 1.0
|
||||
VERIFY_TIMER = 1.0
|
||||
KEY_TIMER = float(os.environ.get("_MAGIC_WORMHOLE_TEST_KEY_TIMER", 1.0))
|
||||
VERIFY_TIMER = float(os.environ.get("_MAGIC_WORMHOLE_TEST_VERIFY_TIMER", 1.0))
|
||||
|
||||
class RespondError(Exception):
|
||||
def __init__(self, response):
|
||||
|
|
|
@ -13,7 +13,7 @@ from ..util import dict_to_bytes, bytes_to_dict, bytes_to_hexstr
|
|||
from .welcome import handle_welcome
|
||||
|
||||
APPID = u"lothar.com/wormhole/text-or-file-xfer"
|
||||
VERIFY_TIMER = 1
|
||||
VERIFY_TIMER = float(os.environ.get("_MAGIC_WORMHOLE_TEST_VERIFY_TIMER", 1.0))
|
||||
|
||||
def send(args, reactor=reactor):
|
||||
"""I implement 'wormhole send'. I return a Deferred that fires with None
|
||||
|
|
|
@ -468,6 +468,15 @@ class PregeneratedCode(ServerBase, ScriptsBase, unittest.TestCase):
|
|||
elif send_cfg.what:
|
||||
content_args = [send_cfg.what]
|
||||
|
||||
# raise the rx KEY_TIMER to some large number here, to avoid
|
||||
# spurious test failures on hosts that are slow enough to trigger
|
||||
# the "Waiting for sender..." pacifier message. We can do in
|
||||
# not-as_subprocess, because we can directly patch the value before
|
||||
# running the receiver. But we can't patch across the subprocess
|
||||
# boundary, so we use an environment variable.
|
||||
env = self._env.copy()
|
||||
env["_MAGIC_WORMHOLE_TEST_KEY_TIMER"] = "999999"
|
||||
env["_MAGIC_WORMHOLE_TEST_VERIFY_TIMER"] = "999999"
|
||||
send_args = [
|
||||
'--relay-url', self.relayurl,
|
||||
'--transit-helper', '',
|
||||
|
@ -479,7 +488,7 @@ class PregeneratedCode(ServerBase, ScriptsBase, unittest.TestCase):
|
|||
send_d = getProcessOutputAndValue(
|
||||
wormhole_bin, send_args,
|
||||
path=send_dir,
|
||||
env=self._env,
|
||||
env=env,
|
||||
)
|
||||
recv_args = [
|
||||
'--relay-url', self.relayurl,
|
||||
|
@ -495,7 +504,7 @@ class PregeneratedCode(ServerBase, ScriptsBase, unittest.TestCase):
|
|||
receive_d = getProcessOutputAndValue(
|
||||
wormhole_bin, recv_args,
|
||||
path=receive_dir,
|
||||
env=self._env,
|
||||
env=env,
|
||||
)
|
||||
|
||||
(send_res, receive_res) = yield gatherResults([send_d, receive_d],
|
||||
|
|
Loading…
Reference in New Issue
Block a user