test_docker_git.py 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. """测试 DockerRunner: 创建容器 → 安装配置 git → clone 仓库 → 清理"""
  2. import sys
  3. import logging
  4. logging.basicConfig(level=logging.INFO, format="%(asctime)s [%(name)s] %(levelname)s: %(message)s")
  5. logger = logging.getLogger("test_docker_git")
  6. def main():
  7. from tool_agent.runtime.docker_runner import DockerRunner
  8. runner = DockerRunner(lazy_init=True)
  9. # ---- Step 1: 创建容器 ----
  10. logger.info("=" * 60)
  11. logger.info("Step 1: 创建容器 (ubuntu:22.04)")
  12. result = runner.create_container(
  13. tool_id="test_git_tool",
  14. image="ubuntu:22.04",
  15. mem_limit="512m",
  16. nano_cpus=1_000_000_000,
  17. )
  18. if "error" in result:
  19. logger.error(f"创建容器失败: {result['error']}")
  20. sys.exit(1)
  21. container_id = result["container_id"]
  22. logger.info(f"容器已创建: {container_id[:12]}")
  23. try:
  24. # ---- Step 2: 安装 git ----
  25. logger.info("=" * 60)
  26. logger.info("Step 2: 安装 git")
  27. res = runner.run_command(
  28. container_id,
  29. "apt-get update -qq && apt-get install -y -qq git > /dev/null 2>&1 && git --version",
  30. timeout=120,
  31. )
  32. if res.get("exit_code", -1) != 0:
  33. logger.error(f"安装 git 失败: {res}")
  34. sys.exit(1)
  35. logger.info(f"git 安装成功: {res['stdout'].strip()}")
  36. # ---- Step 3: 配置 git ----
  37. logger.info("=" * 60)
  38. logger.info("Step 3: 配置 git 用户")
  39. res = runner.run_command(
  40. container_id,
  41. 'git config --global user.name "Tool Agent" && '
  42. 'git config --global user.email "agent@tool-agent.local" && '
  43. 'git config --global --list',
  44. )
  45. if res.get("exit_code", -1) != 0:
  46. logger.error(f"配置 git 失败: {res}")
  47. sys.exit(1)
  48. logger.info(f"git 配置:\n{res['stdout'].strip()}")
  49. # ---- Step 4: clone 仓库 ----
  50. logger.info("=" * 60)
  51. logger.info("Step 4: git clone 仓库")
  52. res = runner.run_command(
  53. container_id,
  54. "cd /app && git clone --depth 1 https://github.com/pallets/flask.git",
  55. timeout=120,
  56. )
  57. if res.get("exit_code", -1) != 0:
  58. logger.error(f"clone 失败: {res}")
  59. sys.exit(1)
  60. logger.info("clone 完成")
  61. # ---- Step 5: 验证 clone 结果 ----
  62. logger.info("=" * 60)
  63. logger.info("Step 5: 验证 clone 结果")
  64. res = runner.run_command(
  65. container_id,
  66. "ls -la /app/flask/ && echo '---' && cd /app/flask && git log --oneline -3",
  67. )
  68. if res.get("exit_code", -1) != 0:
  69. logger.error(f"验证失败: {res}")
  70. sys.exit(1)
  71. logger.info(f"仓库内容:\n{res['stdout'].strip()}")
  72. logger.info("=" * 60)
  73. logger.info("ALL TESTS PASSED!")
  74. finally:
  75. # ---- Step 6: 清理 ----
  76. logger.info("=" * 60)
  77. logger.info("Step 6: 销毁容器")
  78. cleanup = runner.destroy_container(container_id)
  79. logger.info(f"清理结果: {cleanup}")
  80. if __name__ == "__main__":
  81. main()