48
48
from mobly import asserts
49
49
50
50
51
+ async def wait_for_server_initialization (server_port , timeout = 5 ):
52
+ """Wait until the server is ready by checking if it opens the expected port."""
53
+ start_time = asyncio .get_event_loop ().time ()
54
+ elapsed_time = 0
55
+ retry_interval = 1
56
+
57
+ logging .info (f"Waiting for server to initialize on TCP port { server_port } for up to { timeout } seconds." )
58
+
59
+ while elapsed_time < timeout :
60
+ try :
61
+ # Try connecting to the server to check if it's ready
62
+ reader , writer = await asyncio .open_connection ('::1' , server_port )
63
+ writer .close ()
64
+ await writer .wait_closed ()
65
+ logging .info (f"TH_SERVER_NO_UID is initialized and ready on port { server_port } ." )
66
+ return
67
+ except (ConnectionRefusedError , OSError ) as e :
68
+ logging .warning (f"Connection to port { server_port } failed: { e } . Retrying in { retry_interval } seconds..." )
69
+
70
+ await asyncio .sleep (retry_interval )
71
+ elapsed_time = asyncio .get_event_loop ().time () - start_time
72
+
73
+ raise TimeoutError (f"Server on port { server_port } did not initialize within { timeout } seconds. "
74
+ f"Total time waited: { elapsed_time } seconds." )
75
+
51
76
# TODO: Make this class more generic. Issue #35348
77
+
78
+
52
79
class Subprocess (threading .Thread ):
53
80
54
81
def __init__ (self , args : list = [], stdout_cb = None , tag = "" , ** kw ):
@@ -228,7 +255,7 @@ def setup_class(self):
228
255
229
256
self .th_server_port = 5544
230
257
self .th_server_discriminator = self .th_fsa_bridge_discriminator + 1
231
- self .th_server_passcode = 20202021
258
+ self .th_server_passcode = 20202022
232
259
233
260
# Start the TH_SERVER_NO_UID app.
234
261
self .th_server = AppServer (
@@ -238,6 +265,12 @@ def setup_class(self):
238
265
discriminator = self .th_server_discriminator ,
239
266
passcode = self .th_server_passcode )
240
267
268
+ # Wait for TH_SERVER_NO_UID get initialized.
269
+ try :
270
+ asyncio .run (wait_for_server_initialization (self .th_server_port ))
271
+ except TimeoutError :
272
+ asserts .fail (f"TH_SERVER_NO_UID server failed to open port { self .th_server_port } " )
273
+
241
274
def teardown_class (self ):
242
275
if self .th_fsa_controller is not None :
243
276
self .th_fsa_controller .stop ()
@@ -271,6 +304,7 @@ async def test_TC_MCORE_FS_1_4(self):
271
304
self .step (1 )
272
305
273
306
th_server_th_node_id = 1
307
+
274
308
await self .default_controller .CommissionOnNetwork (
275
309
nodeId = th_server_th_node_id ,
276
310
setupPinCode = self .th_server_passcode ,
0 commit comments