91 lines
2.6 KiB
Python
91 lines
2.6 KiB
Python
# -*- coding: utf-8 -*-
|
|
""" Python code execution test."""
|
|
import unittest
|
|
import sys
|
|
|
|
from agentscope.service import execute_python_code
|
|
|
|
|
|
class ExecutePythonCodeTest(unittest.TestCase):
|
|
"""
|
|
Python code execution test.
|
|
"""
|
|
|
|
def setUp(self) -> None:
|
|
"""Init for ExecutePythonCodeTest."""
|
|
|
|
# Basic expression
|
|
self.arg0 = {"code": "print('Hello World')", "timeout": 5}
|
|
|
|
# Raising Exceptions
|
|
self.arg1 = {
|
|
"code": "print('Hello World')\nraise ValueError('An intentional "
|
|
"error')",
|
|
"timeout": 5,
|
|
}
|
|
|
|
# Using External Libraries
|
|
self.arg2 = {"code": "import math\nprint(math.sqrt(16))", "timeout": 5}
|
|
|
|
# Timeout
|
|
self.arg3 = {
|
|
"code": "import time\nprint('Hello World')\ntime.sleep("
|
|
"10)\nprint('This will not print')",
|
|
"timeout": 1,
|
|
}
|
|
|
|
# No input code
|
|
self.arg4 = {"code": "", "timeout": 5}
|
|
|
|
def run_test(
|
|
self,
|
|
args: dict,
|
|
expected_output: str,
|
|
expected_error_substr: str,
|
|
) -> None:
|
|
"""A helper function to avoid code repetition"""
|
|
response = execute_python_code(
|
|
use_docker=False,
|
|
**args,
|
|
)
|
|
self.assertIn(expected_output, response.content)
|
|
self.assertIn(expected_error_substr, response.content)
|
|
|
|
# Uncomment it when test in local
|
|
# response = execute_python_code(
|
|
# use_docker=True,
|
|
# **args,
|
|
# )
|
|
# self.assertIn(expected_output, response.content)
|
|
# self.assertIn(expected_error_substr, response.content)
|
|
|
|
def test_basic_expression(self) -> None:
|
|
"""Execute basic expression test."""
|
|
self.run_test(self.arg0, "Hello World\n", "")
|
|
|
|
def test_raising_exceptions(self) -> None:
|
|
"""Execute raising exceptions test."""
|
|
self.run_test(
|
|
self.arg1,
|
|
"Hello World\n",
|
|
"ValueError: An intentional error\n",
|
|
)
|
|
|
|
def test_using_external_libs(self) -> None:
|
|
"""Execute using external libs test."""
|
|
self.run_test(self.arg2, "4.0\n", "")
|
|
|
|
def test_timeout(self) -> None:
|
|
"""Execute timeout test (NOT available in WinOS.)"""
|
|
if sys.platform == "win32":
|
|
return
|
|
self.run_test(self.arg3, "Hello World\n", "timed out\n")
|
|
|
|
def test_no_input_code(self) -> None:
|
|
"""Execute no input code test."""
|
|
self.run_test(self.arg4, "", "")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|