Skip to content

Commit 71f0231

Browse files
Merge pull request #298 from webtech-network/fix/deliberate-execution-error-handling
fix: restore error handling in deliberate execution service
2 parents 39c93d6 + fb48eab commit 71f0231

2 files changed

Lines changed: 46 additions & 1 deletion

File tree

tests/web/test_deliberate_execution_service.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,12 +191,42 @@ async def test_execute_code_execution_error():
191191

192192
assert len(response.results) == 1
193193
assert response.results[0].category == ResponseCategory.SYSTEM_ERROR
194-
assert "container crashed" in response.results[0].error_message
194+
assert response.results[0].error_message == "An unexpected error occurred. Please try again later."
195+
assert "container crashed" not in response.results[0].error_message
195196
assert response.results[0].output == ""
196197
# Sandbox must still be released in the finally block
197198
mock_manager.release_sandbox.assert_called_once()
198199

199200

201+
# ---------------------------------------------------------------------------
202+
# execute_code – execution error with multiple test cases
203+
# ---------------------------------------------------------------------------
204+
205+
@pytest.mark.asyncio
206+
async def test_execute_code_execution_error_multiple_test_cases():
207+
"""On exception, SYSTEM_ERROR count matches the number of requested test cases."""
208+
mock_sandbox = Mock()
209+
mock_sandbox.prepare_workdir = Mock()
210+
211+
mock_manager = Mock()
212+
mock_manager.get_sandbox = Mock(return_value=mock_sandbox)
213+
mock_manager.release_sandbox = Mock()
214+
215+
request = _make_request(test_cases=[["1"], ["2"], ["3"]])
216+
217+
with patch("web.service.deliberate_execution_service.get_sandbox_manager", return_value=mock_manager), \
218+
patch("asyncio.to_thread", new=AsyncMock(side_effect=RuntimeError("container crashed"))):
219+
220+
response = await execute_code(request)
221+
222+
assert len(response.results) == 3
223+
for result in response.results:
224+
assert result.category == ResponseCategory.SYSTEM_ERROR
225+
assert result.error_message == "An unexpected error occurred. Please try again later."
226+
assert result.output == ""
227+
mock_manager.release_sandbox.assert_called_once()
228+
229+
200230
# ---------------------------------------------------------------------------
201231
# execute_code – runtime error response from sandbox
202232
# ---------------------------------------------------------------------------

web/service/deliberate_execution_service.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,21 @@ async def execute_code(request: DeliberateCodeExecutionRequest) -> DeliberateCod
185185

186186
return DeliberateCodeExecutionResponse(results=execution_results)
187187

188+
except Exception as e: # pylint: disable=broad-exception-caught
189+
logger.error("Execution failed: %s", e, exc_info=True)
190+
num_results = len(request.test_cases) if request.test_cases else 1
191+
return DeliberateCodeExecutionResponse(
192+
results=[
193+
DeliberateCodeExecutionResult(
194+
output="",
195+
category=ResponseCategory.SYSTEM_ERROR,
196+
error_message="An unexpected error occurred. Please try again later.",
197+
execution_time=0.0
198+
)
199+
for _ in range(num_results)
200+
]
201+
)
202+
188203
finally:
189204
# Always release sandbox back to pool
190205
if sandbox and sandbox_manager:

0 commit comments

Comments
 (0)