2121
2222import pytest
2323
24+ script_dir = pathlib .Path (__file__ ).parent .parent
25+ sys .path .append (os .fspath (script_dir ))
26+ sys .path .append (os .fspath (script_dir / "lib" / "python" ))
27+ from testing_tools import socket_manager # noqa: E402
28+
2429if TYPE_CHECKING :
2530 from pluggy import Result
2631
@@ -166,7 +171,7 @@ def pytest_exception_interact(node, call, report):
166171 collected_test = TestRunResultDict ()
167172 collected_test [node_id ] = item_result
168173 cwd = pathlib .Path .cwd ()
169- send_execution_message (
174+ execution_post (
170175 os .fsdecode (cwd ),
171176 "success" ,
172177 collected_test if collected_test else None ,
@@ -290,7 +295,7 @@ def pytest_report_teststatus(report, config): # noqa: ARG001
290295 )
291296 collected_test = TestRunResultDict ()
292297 collected_test [absolute_node_id ] = item_result
293- send_execution_message (
298+ execution_post (
294299 os .fsdecode (cwd ),
295300 "success" ,
296301 collected_test if collected_test else None ,
@@ -324,7 +329,7 @@ def pytest_runtest_protocol(item, nextitem): # noqa: ARG001
324329 )
325330 collected_test = TestRunResultDict ()
326331 collected_test [absolute_node_id ] = item_result
327- send_execution_message (
332+ execution_post (
328333 os .fsdecode (cwd ),
329334 "success" ,
330335 collected_test if collected_test else None ,
@@ -400,15 +405,15 @@ def pytest_sessionfinish(session, exitstatus):
400405 "children" : [],
401406 "id_" : "" ,
402407 }
403- send_discovery_message (os .fsdecode (cwd ), error_node )
408+ post_response (os .fsdecode (cwd ), error_node )
404409 try :
405410 session_node : TestNode | None = build_test_tree (session )
406411 if not session_node :
407412 raise VSCodePytestError (
408413 "Something went wrong following pytest finish, \
409414 no session node was created"
410415 )
411- send_discovery_message (os .fsdecode (cwd ), session_node )
416+ post_response (os .fsdecode (cwd ), session_node )
412417 except Exception as e :
413418 ERRORS .append (
414419 f"Error Occurred, traceback: { (traceback .format_exc () if e .__traceback__ else '' )} "
@@ -420,7 +425,7 @@ def pytest_sessionfinish(session, exitstatus):
420425 "children" : [],
421426 "id_" : "" ,
422427 }
423- send_discovery_message (os .fsdecode (cwd ), error_node )
428+ post_response (os .fsdecode (cwd ), error_node )
424429 else :
425430 if exitstatus == 0 or exitstatus == 1 :
426431 exitstatus_bool = "success"
@@ -430,7 +435,7 @@ def pytest_sessionfinish(session, exitstatus):
430435 )
431436 exitstatus_bool = "error"
432437
433- send_execution_message (
438+ execution_post (
434439 os .fsdecode (cwd ),
435440 exitstatus_bool ,
436441 None ,
@@ -484,7 +489,7 @@ def pytest_sessionfinish(session, exitstatus):
484489 result = file_coverage_map ,
485490 error = None ,
486491 )
487- send_message (payload )
492+ send_post_request (payload )
488493
489494
490495def build_test_tree (session : pytest .Session ) -> TestNode :
@@ -852,10 +857,8 @@ def get_node_path(node: Any) -> pathlib.Path:
852857atexit .register (lambda : __writer .close () if __writer else None )
853858
854859
855- def send_execution_message (
856- cwd : str , status : Literal ["success" , "error" ], tests : TestRunResultDict | None
857- ):
858- """Sends message execution payload details.
860+ def execution_post (cwd : str , status : Literal ["success" , "error" ], tests : TestRunResultDict | None ):
861+ """Sends a POST request with execution payload details.
859862
860863 Args:
861864 cwd (str): Current working directory.
@@ -867,10 +870,10 @@ def send_execution_message(
867870 )
868871 if ERRORS :
869872 payload ["error" ] = ERRORS
870- send_message (payload )
873+ send_post_request (payload )
871874
872875
873- def send_discovery_message (cwd : str , session_node : TestNode ) -> None :
876+ def post_response (cwd : str , session_node : TestNode ) -> None :
874877 """
875878 Sends a POST request with test session details in payload.
876879
@@ -886,7 +889,7 @@ def send_discovery_message(cwd: str, session_node: TestNode) -> None:
886889 }
887890 if ERRORS is not None :
888891 payload ["error" ] = ERRORS
889- send_message (payload , cls_encoder = PathEncoder )
892+ send_post_request (payload , cls_encoder = PathEncoder )
890893
891894
892895class PathEncoder (json .JSONEncoder ):
@@ -898,7 +901,7 @@ def default(self, o):
898901 return super ().default (o )
899902
900903
901- def send_message (
904+ def send_post_request (
902905 payload : ExecutionPayloadDict | DiscoveryPayloadDict | CoveragePayloadDict ,
903906 cls_encoder = None ,
904907):
@@ -923,7 +926,8 @@ def send_message(
923926
924927 if __writer is None :
925928 try :
926- __writer = open (TEST_RUN_PIPE , "w" , encoding = "utf-8" , newline = "\r \n " ) # noqa: SIM115, PTH123
929+ __writer = socket_manager .PipeManager (TEST_RUN_PIPE )
930+ __writer .connect ()
927931 except Exception as error :
928932 error_msg = f"Error attempting to connect to extension named pipe { TEST_RUN_PIPE } [vscode-pytest]: { error } "
929933 print (error_msg , file = sys .stderr )
@@ -941,11 +945,10 @@ def send_message(
941945 "params" : payload ,
942946 }
943947 data = json .dumps (rpc , cls = cls_encoder )
948+
944949 try :
945950 if __writer :
946- request = f"""content-length: { len (data )} \n content-type: application/json\n \n { data } """
947- __writer .write (request )
948- __writer .flush ()
951+ __writer .write (data )
949952 else :
950953 print (
951954 f"Plugin error connection error[vscode-pytest], writer is None \n [vscode-pytest] data: \n { data } \n " ,
0 commit comments