From 83cad60ab48f70a00356cd23746b9c2093e658bf Mon Sep 17 00:00:00 2001 From: Don Jayamanne Date: Mon, 2 Jul 2018 18:15:16 -0700 Subject: [PATCH] Wait for socket server before connecting in Tests (#565) * Wait for socket server * wait for process event * remove debug statements --- tests/helpers/debugadapter.py | 12 +++++++----- tests/helpers/debugclient.py | 3 ++- tests/highlevel/test_lifecycle.py | 3 ++- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/tests/helpers/debugadapter.py b/tests/helpers/debugadapter.py index 57e6de58..7a2d8a57 100644 --- a/tests/helpers/debugadapter.py +++ b/tests/helpers/debugadapter.py @@ -75,14 +75,14 @@ def _copy_env(verbose=False, env=None): return variables -def _wait_for_socket_server(addr, timeout=3.0, **kwargs): +def wait_for_socket_server(addr, timeout=3.0, **kwargs): start_time = time.time() while True: try: - sock = socket.create_connection(addr) + sock = socket.create_connection((addr.host, addr.port)) sock.close() return - except ConnectionRefusedError: + except Exception: pass time.sleep(0.1) if time.time() - start_time > timeout: @@ -151,7 +151,9 @@ class DebugAdapter(Closeable): @classmethod def start_for_attach(cls, addr, *args, **kwargs): addr = Address.as_server(*addr) - return cls._start_as(addr, *args, server=True, **kwargs) + adapter = cls._start_as(addr, *args, server=True, **kwargs) + wait_for_socket_server(addr) + return adapter @classmethod def _start_as(cls, addr, name, kind='script', extra=None, server=False, @@ -182,7 +184,7 @@ class DebugAdapter(Closeable): addr=addr, **kwargs ) - _wait_for_socket_server(addr, **kwargs) + wait_for_socket_server(addr, **kwargs) return adapter @classmethod diff --git a/tests/helpers/debugclient.py b/tests/helpers/debugclient.py index 272e3ae9..9f656100 100644 --- a/tests/helpers/debugclient.py +++ b/tests/helpers/debugclient.py @@ -5,7 +5,7 @@ import warnings from ptvsd.socket import Address from ptvsd._util import new_hidden_thread from . import Closeable -from .debugadapter import DebugAdapter +from .debugadapter import DebugAdapter, wait_for_socket_server from .debugsession import DebugSession @@ -116,6 +116,7 @@ class _LifecycleClient(Closeable): if wait_for_connect: wait_for_connect() else: + wait_for_socket_server(addr) self._attach(addr, **kwargs) def _attach(self, addr, **kwargs): diff --git a/tests/highlevel/test_lifecycle.py b/tests/highlevel/test_lifecycle.py index 9b36b00c..6a06ee38 100644 --- a/tests/highlevel/test_lifecycle.py +++ b/tests/highlevel/test_lifecycle.py @@ -64,7 +64,8 @@ class LifecycleTests(HighlevelTest, unittest.TestCase): req_attach = self.send_request('attach', attach_args) # configuration - req_config = self.send_request('configurationDone') + with self._fix.wait_for_events(['process']): + req_config = self.send_request('configurationDone') # Normal ops would go here.