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 ,
@@ -485,7 +480,7 @@ def pytest_sessionfinish(session, exitstatus):
485480 result = file_coverage_map ,
486481 error = None ,
487482 )
488- send_post_request (payload )
483+ send_message (payload )
489484
490485
491486def build_test_tree (session : pytest .Session ) -> TestNode :
@@ -853,8 +848,10 @@ def get_node_path(node: Any) -> pathlib.Path:
853848atexit .register (lambda : __writer .close () if __writer else None )
854849
855850
856- def execution_post (cwd : str , status : Literal ["success" , "error" ], tests : TestRunResultDict | None ):
857- """Sends a POST request with execution payload details.
851+ def send_execution_message (
852+ cwd : str , status : Literal ["success" , "error" ], tests : TestRunResultDict | None
853+ ):
854+ """Sends message execution payload details.
858855
859856 Args:
860857 cwd (str): Current working directory.
@@ -866,10 +863,10 @@ def execution_post(cwd: str, status: Literal["success", "error"], tests: TestRun
866863 )
867864 if ERRORS :
868865 payload ["error" ] = ERRORS
869- send_post_request (payload )
866+ send_message (payload )
870867
871868
872- def post_response (cwd : str , session_node : TestNode ) -> None :
869+ def send_discovery_message (cwd : str , session_node : TestNode ) -> None :
873870 """
874871 Sends a POST request with test session details in payload.
875872
@@ -885,7 +882,7 @@ def post_response(cwd: str, session_node: TestNode) -> None:
885882 }
886883 if ERRORS is not None :
887884 payload ["error" ] = ERRORS
888- send_post_request (payload , cls_encoder = PathEncoder )
885+ send_message (payload , cls_encoder = PathEncoder )
889886
890887
891888class PathEncoder (json .JSONEncoder ):
@@ -897,7 +894,7 @@ def default(self, o):
897894 return super ().default (o )
898895
899896
900- def send_post_request (
897+ def send_message (
901898 payload : ExecutionPayloadDict | DiscoveryPayloadDict | CoveragePayloadDict ,
902899 cls_encoder = None ,
903900):
@@ -922,8 +919,7 @@ def send_post_request(
922919
923920 if __writer is None :
924921 try :
925- __writer = socket_manager .PipeManager (TEST_RUN_PIPE )
926- __writer .connect ()
922+ __writer = open (TEST_RUN_PIPE , "wb" ) # noqa: SIM115, PTH123
927923 except Exception as error :
928924 error_msg = f"Error attempting to connect to extension named pipe { TEST_RUN_PIPE } [vscode-pytest]: { error } "
929925 print (error_msg , file = sys .stderr )
@@ -941,10 +937,18 @@ def send_post_request(
941937 "params" : payload ,
942938 }
943939 data = json .dumps (rpc , cls = cls_encoder )
944-
945940 try :
946941 if __writer :
947- __writer .write (data )
942+ request = (
943+ f"""content-length: { len (data )} \r \n content-type: application/json\r \n \r \n { data } """
944+ )
945+ size = 4096
946+ encoded = request .encode ("utf-8" )
947+ bytes_written = 0
948+ while bytes_written < len (encoded ):
949+ segment = encoded [bytes_written : bytes_written + size ]
950+ bytes_written += __writer .write (segment )
951+ __writer .flush ()
948952 else :
949953 print (
950954 f"Plugin error connection error[vscode-pytest], writer is None \n [vscode-pytest] data: \n { data } \n " ,
0 commit comments