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-
2924if TYPE_CHECKING :
3025 from pluggy import Result
3126
@@ -171,7 +166,7 @@ def pytest_exception_interact(node, call, report):
171166 collected_test = TestRunResultDict ()
172167 collected_test [node_id ] = item_result
173168 cwd = pathlib .Path .cwd ()
174- execution_post (
169+ send_execution_message (
175170 os .fsdecode (cwd ),
176171 "success" ,
177172 collected_test if collected_test else None ,
@@ -295,7 +290,7 @@ def pytest_report_teststatus(report, config): # noqa: ARG001
295290 )
296291 collected_test = TestRunResultDict ()
297292 collected_test [absolute_node_id ] = item_result
298- execution_post (
293+ send_execution_message (
299294 os .fsdecode (cwd ),
300295 "success" ,
301296 collected_test if collected_test else None ,
@@ -329,7 +324,7 @@ def pytest_runtest_protocol(item, nextitem): # noqa: ARG001
329324 )
330325 collected_test = TestRunResultDict ()
331326 collected_test [absolute_node_id ] = item_result
332- execution_post (
327+ send_execution_message (
333328 os .fsdecode (cwd ),
334329 "success" ,
335330 collected_test if collected_test else None ,
@@ -405,15 +400,15 @@ def pytest_sessionfinish(session, exitstatus):
405400 "children" : [],
406401 "id_" : "" ,
407402 }
408- post_response (os .fsdecode (cwd ), error_node )
403+ send_discovery_message (os .fsdecode (cwd ), error_node )
409404 try :
410405 session_node : TestNode | None = build_test_tree (session )
411406 if not session_node :
412407 raise VSCodePytestError (
413408 "Something went wrong following pytest finish, \
414409 no session node was created"
415410 )
416- post_response (os .fsdecode (cwd ), session_node )
411+ send_discovery_message (os .fsdecode (cwd ), session_node )
417412 except Exception as e :
418413 ERRORS .append (
419414 f"Error Occurred, traceback: { (traceback .format_exc () if e .__traceback__ else '' )} "
@@ -425,7 +420,7 @@ def pytest_sessionfinish(session, exitstatus):
425420 "children" : [],
426421 "id_" : "" ,
427422 }
428- post_response (os .fsdecode (cwd ), error_node )
423+ send_discovery_message (os .fsdecode (cwd ), error_node )
429424 else :
430425 if exitstatus == 0 or exitstatus == 1 :
431426 exitstatus_bool = "success"
@@ -435,7 +430,7 @@ def pytest_sessionfinish(session, exitstatus):
435430 )
436431 exitstatus_bool = "error"
437432
438- execution_post (
433+ send_execution_message (
439434 os .fsdecode (cwd ),
440435 exitstatus_bool ,
441436 None ,
@@ -489,7 +484,7 @@ def pytest_sessionfinish(session, exitstatus):
489484 result = file_coverage_map ,
490485 error = None ,
491486 )
492- send_post_request (payload )
487+ send_message (payload )
493488
494489
495490def build_test_tree (session : pytest .Session ) -> TestNode :
@@ -857,8 +852,10 @@ def get_node_path(node: Any) -> pathlib.Path:
857852atexit .register (lambda : __writer .close () if __writer else None )
858853
859854
860- def execution_post (cwd : str , status : Literal ["success" , "error" ], tests : TestRunResultDict | None ):
861- """Sends a POST request with execution payload details.
855+ def send_execution_message (
856+ cwd : str , status : Literal ["success" , "error" ], tests : TestRunResultDict | None
857+ ):
858+ """Sends message execution payload details.
862859
863860 Args:
864861 cwd (str): Current working directory.
@@ -870,10 +867,10 @@ def execution_post(cwd: str, status: Literal["success", "error"], tests: TestRun
870867 )
871868 if ERRORS :
872869 payload ["error" ] = ERRORS
873- send_post_request (payload )
870+ send_message (payload )
874871
875872
876- def post_response (cwd : str , session_node : TestNode ) -> None :
873+ def send_discovery_message (cwd : str , session_node : TestNode ) -> None :
877874 """
878875 Sends a POST request with test session details in payload.
879876
@@ -889,7 +886,7 @@ def post_response(cwd: str, session_node: TestNode) -> None:
889886 }
890887 if ERRORS is not None :
891888 payload ["error" ] = ERRORS
892- send_post_request (payload , cls_encoder = PathEncoder )
889+ send_message (payload , cls_encoder = PathEncoder )
893890
894891
895892class PathEncoder (json .JSONEncoder ):
@@ -901,7 +898,7 @@ def default(self, o):
901898 return super ().default (o )
902899
903900
904- def send_post_request (
901+ def send_message (
905902 payload : ExecutionPayloadDict | DiscoveryPayloadDict | CoveragePayloadDict ,
906903 cls_encoder = None ,
907904):
@@ -926,8 +923,7 @@ def send_post_request(
926923
927924 if __writer is None :
928925 try :
929- __writer = socket_manager .PipeManager (TEST_RUN_PIPE )
930- __writer .connect ()
926+ __writer = open (TEST_RUN_PIPE , "wb" ) # noqa: SIM115, PTH123
931927 except Exception as error :
932928 error_msg = f"Error attempting to connect to extension named pipe { TEST_RUN_PIPE } [vscode-pytest]: { error } "
933929 print (error_msg , file = sys .stderr )
@@ -945,10 +941,18 @@ def send_post_request(
945941 "params" : payload ,
946942 }
947943 data = json .dumps (rpc , cls = cls_encoder )
948-
949944 try :
950945 if __writer :
951- __writer .write (data )
946+ request = (
947+ f"""content-length: { len (data )} \r \n content-type: application/json\r \n \r \n { data } """
948+ )
949+ size = 4096
950+ encoded = request .encode ("utf-8" )
951+ bytes_written = 0
952+ while bytes_written < len (encoded ):
953+ segment = encoded [bytes_written : bytes_written + size ]
954+ bytes_written += __writer .write (segment )
955+ __writer .flush ()
952956 else :
953957 print (
954958 f"Plugin error connection error[vscode-pytest], writer is None \n [vscode-pytest] data: \n { data } \n " ,
0 commit comments