@@ -95,11 +95,11 @@ def test_local_test_builds_and_runs_in_docker(tmp_path, monkeypatch):
9595 from eval_protocol .cli_commands import local_test as lt
9696
9797 monkeypatch .setattr (lt , "_find_dockerfiles" , lambda root : [str (project / "Dockerfile" )])
98- monkeypatch .setattr (lt , "_build_docker_image" , lambda dockerfile , tag , platform = None : True )
98+ monkeypatch .setattr (lt , "_build_docker_image" , lambda dockerfile , tag , build_extras = None : True )
9999
100100 captured = {"target" : "" , "image" : "" }
101101
102- def _fake_run_docker (root : str , image_tag : str , pytest_target : str , platform = None ) -> int :
102+ def _fake_run_docker (root : str , image_tag : str , pytest_target : str , run_extras = None ) -> int :
103103 captured ["target" ] = pytest_target
104104 captured ["image" ] = image_tag
105105 return 0
@@ -143,3 +143,82 @@ def _fake_host(target: str) -> int:
143143 rc = lt .local_test_command (args ) # pyright: ignore[reportArgumentType]
144144 assert rc == 0
145145 assert called ["host" ] is True
146+
147+
148+ def test_local_test_passes_docker_build_extra (tmp_path , monkeypatch ):
149+ project = tmp_path / "proj"
150+ project .mkdir ()
151+ monkeypatch .chdir (project )
152+
153+ test_file = project / "metric" / "test_build_extra.py"
154+ test_file .parent .mkdir (parents = True , exist_ok = True )
155+ test_file .write_text ("def test_dummy():\n assert True\n " , encoding = "utf-8" )
156+
157+ from eval_protocol .cli_commands import local_test as lt
158+
159+ monkeypatch .setattr (lt , "_find_dockerfiles" , lambda root : [str (project / "Dockerfile" )])
160+
161+ captured = {"extras" : None }
162+
163+ def _fake_build (dockerfile , tag , build_extras = None ):
164+ captured ["extras" ] = build_extras
165+ return True
166+
167+ def _fake_run_docker (root : str , image_tag : str , pytest_target : str , run_extras = None ) -> int :
168+ return 0
169+
170+ monkeypatch .setattr (lt , "_build_docker_image" , _fake_build )
171+ monkeypatch .setattr (lt , "_run_pytest_in_docker" , _fake_run_docker )
172+
173+ # Extras string with multiple flags and equals-arg
174+ args = SimpleNamespace (
175+ entry = str (test_file ),
176+ ignore_docker = False ,
177+ yes = True ,
178+ docker_build_extra = "--no-cache --pull --progress=plain --build-arg KEY=VAL" ,
179+ docker_run_extra = "" ,
180+ )
181+ rc = lt .local_test_command (args ) # pyright: ignore[reportArgumentType]
182+ assert rc == 0
183+ # Expect split list preserving tokens order
184+ assert captured ["extras" ] == ["--no-cache" , "--pull" , "--progress=plain" , "--build-arg" , "KEY=VAL" ]
185+
186+
187+ def test_local_test_passes_docker_run_extra (tmp_path , monkeypatch ):
188+ project = tmp_path / "proj"
189+ project .mkdir ()
190+ monkeypatch .chdir (project )
191+
192+ test_file = project / "metric" / "test_run_extra.py"
193+ test_file .parent .mkdir (parents = True , exist_ok = True )
194+ test_file .write_text ("def test_dummy():\n assert True\n " , encoding = "utf-8" )
195+
196+ from eval_protocol .cli_commands import local_test as lt
197+
198+ monkeypatch .setattr (lt , "_find_dockerfiles" , lambda root : [str (project / "Dockerfile" )])
199+ monkeypatch .setattr (lt , "_build_docker_image" , lambda dockerfile , tag , build_extras = None : True )
200+
201+ captured = {"extras" : None }
202+
203+ def _fake_run_docker (root : str , image_tag : str , pytest_target : str , run_extras = None ) -> int :
204+ captured ["extras" ] = run_extras
205+ return 0
206+
207+ monkeypatch .setattr (lt , "_run_pytest_in_docker" , _fake_run_docker )
208+
209+ args = SimpleNamespace (
210+ entry = str (test_file ),
211+ ignore_docker = False ,
212+ yes = True ,
213+ docker_build_extra = "" ,
214+ docker_run_extra = "--env-file .env --memory=8g --cpus=2 --add-host=host.docker.internal:host-gateway" ,
215+ )
216+ rc = lt .local_test_command (args ) # pyright: ignore[reportArgumentType]
217+ assert rc == 0
218+ assert captured ["extras" ] == [
219+ "--env-file" ,
220+ ".env" ,
221+ "--memory=8g" ,
222+ "--cpus=2" ,
223+ "--add-host=host.docker.internal:host-gateway" ,
224+ ]
0 commit comments