Skip to content

Commit 7067b9a

Browse files
committed
test_p2p.py:
Wait for signs of life from signaling server. If it fails to startup, abort test immediately
1 parent fed78a4 commit 7067b9a

1 file changed

Lines changed: 22 additions & 4 deletions

File tree

tests/test_p2p.py

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,22 @@
1111
import os
1212
import sys
1313
import copy
14+
import time
1415

1516
g_failed = False
17+
g_server_ready = threading.Event()
18+
g_server_startup_timeout = 3 # seconds
1619

1720
# Thread class that runs a process and captures its output
1821
class RunProcessInThread(threading.Thread):
1922

20-
def __init__( self, tag, cmdline, env, **popen_kwargs ):
23+
def __init__( self, tag, cmdline, env, ready_message=None, ready_event=None, **popen_kwargs ):
2124
threading.Thread.__init__( self, name=tag )
2225
self.daemon = True
2326
self.tag = tag
2427
self.cmdline = cmdline
28+
self.ready_message = ready_message
29+
self.ready_event = ready_event
2530
if env:
2631
self.env = env
2732
else:
@@ -54,6 +59,9 @@ def run( self ):
5459
if sOutput:
5560
sOutput = str(sOutput, 'utf-8', 'ignore')
5661
self.WriteLn( sOutput.rstrip() )
62+
# Check if this is the ready message, then set requested event
63+
if self.ready_message and self.ready_event and self.ready_message in sOutput:
64+
self.ready_event.set()
5765
elif self.process.poll() is not None:
5866
break
5967
self.process.wait()
@@ -81,8 +89,8 @@ def term( self ):
8189
self.process.terminate()
8290
self.join( 5 )
8391

84-
def StartProcessInThread( tag, cmdline, env=None, **popen_kwargs ):
85-
thread = RunProcessInThread( tag, cmdline, env, **popen_kwargs )
92+
def StartProcessInThread( tag, cmdline, env=None, ready_message=None, ready_event=None, **popen_kwargs ):
93+
thread = RunProcessInThread( tag, cmdline, env, ready_message=ready_message, ready_event=ready_event, **popen_kwargs )
8694
thread.start()
8795
return thread
8896

@@ -140,7 +148,17 @@ def SymmetricTest():
140148
print( "Can't find trivial_signaling_server.py" )
141149
sys.exit(1)
142150

143-
signaling = StartProcessInThread( "signaling", [ sys.executable, trivial_signaling_server ] )
151+
signaling = StartProcessInThread( "signaling", [ sys.executable, trivial_signaling_server ],
152+
ready_message="Listening at", ready_event=g_server_ready )
153+
154+
# Wait for the signaling server to be ready before starting tests
155+
if not g_server_ready.wait( timeout=g_server_startup_timeout ):
156+
print( "ERROR: Signaling server failed to start within %d seconds" % g_server_startup_timeout )
157+
g_failed = True
158+
signaling.term()
159+
sys.exit(1)
160+
161+
print( "Signaling server is ready, starting test clients" )
144162

145163
# Run the tests
146164
for test in [ ClientServerTest, SymmetricTest ]:

0 commit comments

Comments
 (0)