@@ -51,7 +51,7 @@ def _fail_replace(src: str, dst: str) -> None:
5151 assert updated is False
5252
5353
54- def test_ensure_proxy_runs_container_as_current_user_and_forwards_userns_mode (
54+ def test_ensure_proxy_runs_container_as_current_user_and_omits_podman_userns_mode_on_docker (
5555 tmp_path : Path , monkeypatch
5656) -> None :
5757 class _FakeContainers :
@@ -87,7 +87,7 @@ def __init__(self) -> None:
8787 run_kwargs = manager .client .containers .run_kwargs # type: ignore[union-attr]
8888 assert run_kwargs is not None
8989 assert run_kwargs ["user" ] == "1234:2345"
90- assert run_kwargs [ "userns_mode" ] == "keep-id"
90+ assert "userns_mode" not in run_kwargs
9191 assert "ports" not in run_kwargs
9292 assert run_kwargs ["extra_hosts" ] == {"host.docker.internal" : "host-gateway" }
9393 assert db_path .parent .exists ()
@@ -128,6 +128,74 @@ def __init__(self) -> None:
128128 assert run_kwargs ["userns_mode" ] == "keep-id"
129129
130130
131+ def test_ensure_datasette_omits_podman_userns_mode_on_docker (tmp_path : Path , monkeypatch ) -> None :
132+ class _FakeContainers :
133+ def __init__ (self ) -> None :
134+ self .run_kwargs : dict | None = None
135+
136+ def run (self , ** kwargs ):
137+ self .run_kwargs = kwargs
138+ return {"id" : "datasette" }
139+
140+ class _FakeClient :
141+ def __init__ (self ) -> None :
142+ self .containers = _FakeContainers ()
143+
144+ manager = object .__new__ (DockerManager )
145+ manager .client = _FakeClient () # type: ignore[assignment]
146+ manager .runtime = "docker"
147+
148+ monkeypatch .setattr (DockerManager , "find_datasette" , lambda self : None )
149+
150+ logs_db_path = tmp_path / "logs" / "logs.db"
151+ proxy_db_path = tmp_path / "proxy" / "proxy.db"
152+ manager .ensure_datasette (
153+ image = "vibepod/datasette:latest" ,
154+ logs_db_path = logs_db_path ,
155+ proxy_db_path = proxy_db_path ,
156+ port = 8001 ,
157+ userns_mode = "keep-id" ,
158+ )
159+
160+ run_kwargs = manager .client .containers .run_kwargs # type: ignore[union-attr]
161+ assert run_kwargs is not None
162+ assert "userns_mode" not in run_kwargs
163+
164+
165+ def test_ensure_proxy_forwards_podman_userns_mode (tmp_path : Path , monkeypatch ) -> None :
166+ class _FakeContainers :
167+ def __init__ (self ) -> None :
168+ self .run_kwargs : dict | None = None
169+
170+ def run (self , ** kwargs ):
171+ self .run_kwargs = kwargs
172+ return {"id" : "proxy" }
173+
174+ class _FakeClient :
175+ def __init__ (self ) -> None :
176+ self .containers = _FakeContainers ()
177+
178+ manager = object .__new__ (DockerManager )
179+ manager .client = _FakeClient () # type: ignore[assignment]
180+ manager .runtime = "podman"
181+
182+ monkeypatch .setattr (DockerManager , "find_proxy" , lambda self : None )
183+
184+ db_path = tmp_path / "proxy" / "proxy.db"
185+ ca_dir = tmp_path / "proxy" / "mitmproxy"
186+ manager .ensure_proxy (
187+ image = "vibepod/proxy:latest" ,
188+ db_path = db_path ,
189+ ca_dir = ca_dir ,
190+ network = "vibepod-network" ,
191+ userns_mode = "keep-id" ,
192+ )
193+
194+ run_kwargs = manager .client .containers .run_kwargs # type: ignore[union-attr]
195+ assert run_kwargs is not None
196+ assert run_kwargs ["userns_mode" ] == "keep-id"
197+
198+
131199def test_ensure_proxy_connects_existing_proxy_to_requested_network (monkeypatch ) -> None :
132200 connected : list [tuple [object , str ]] = []
133201
0 commit comments