/ tests / tools / test_file_tools_container_config.py
test_file_tools_container_config.py
 1  """Tests for docker container_config key propagation in file_tools."""
 2  
 3  from unittest.mock import patch, MagicMock
 4  import tools.file_tools as file_tools
 5  
 6  
 7  def _make_env_config(**overrides):
 8      base = {
 9          "env_type": "docker",
10          "docker_image": "test-image:latest",
11          "singularity_image": "docker://test",
12          "modal_image": "test",
13          "daytona_image": "test",
14          "cwd": "/workspace",
15          "host_cwd": None,
16          "timeout": 180,
17          "container_cpu": 2,
18          "container_memory": 4096,
19          "container_disk": 20480,
20          "container_persistent": False,
21          "docker_volumes": [],
22          "docker_mount_cwd_to_workspace": True,
23          "docker_forward_env": ["MY_SECRET", "API_KEY"],
24      }
25      base.update(overrides)
26      return base
27  
28  
29  class TestFileToolsContainerConfig:
30      def _run(self, env_config, task_id):
31          captured = {}
32          mock_env = MagicMock()
33  
34          def fake_create_env(**kwargs):
35              captured.update(kwargs)
36              return mock_env
37  
38          with patch("tools.terminal_tool._get_env_config", return_value=env_config),              patch("tools.terminal_tool._task_env_overrides", {}),              patch("tools.terminal_tool._active_environments", {}),              patch("tools.terminal_tool._creation_locks", {}),              patch("tools.terminal_tool._creation_locks_lock", __import__("threading").Lock()),              patch("tools.terminal_tool._create_environment", side_effect=fake_create_env),              patch("tools.terminal_tool._start_cleanup_thread"),              patch("tools.terminal_tool._check_disk_usage_warning"),              patch("tools.file_tools._file_ops_cache", {}),              patch("tools.file_tools._file_ops_lock", __import__("threading").Lock()):
39              file_tools._get_file_ops(task_id)
40  
41          return captured.get("container_config", {})
42  
43      def test_docker_mount_cwd_to_workspace_passed(self):
44          """docker_mount_cwd_to_workspace is forwarded to container_config."""
45          cc = self._run(_make_env_config(docker_mount_cwd_to_workspace=True), "t1")
46          assert cc.get("docker_mount_cwd_to_workspace") is True
47  
48      def test_docker_forward_env_passed(self):
49          """docker_forward_env is forwarded to container_config."""
50          cc = self._run(_make_env_config(docker_forward_env=["MY_SECRET"]), "t2")
51          assert cc.get("docker_forward_env") == ["MY_SECRET"]
52  
53      def test_docker_mount_cwd_defaults_to_false(self):
54          """docker_mount_cwd_to_workspace defaults to False when absent from config."""
55          cfg = _make_env_config()
56          del cfg["docker_mount_cwd_to_workspace"]
57          cc = self._run(cfg, "t3")
58          assert cc.get("docker_mount_cwd_to_workspace") is False
59  
60      def test_docker_forward_env_defaults_to_empty_list(self):
61          """docker_forward_env defaults to [] when absent from config."""
62          cfg = _make_env_config()
63          del cfg["docker_forward_env"]
64          cc = self._run(cfg, "t4")
65          assert cc.get("docker_forward_env") == []