Skip to content

Commit 4d97260

Browse files
committed
test: add CLI Docker tests to raise edgeflowc coverage (import missing, build+run success, run failure)
1 parent 33e6526 commit 4d97260

1 file changed

Lines changed: 95 additions & 0 deletions

File tree

tests/test_cli_docker.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
import sys
2+
from types import ModuleType
3+
4+
import pytest
5+
6+
import edgeflowc
7+
8+
9+
def _write_cfg(tmp_path, content: str) -> str:
10+
p = tmp_path / "docker.ef"
11+
p.write_text(content, encoding="utf-8")
12+
return str(p)
13+
14+
15+
def test_cli_docker_import_missing(tmp_path, monkeypatch):
16+
"""When --docker is set but docker_manager import fails, exit with code 1."""
17+
cfg = _write_cfg(tmp_path, 'model="m.tflite"\n')
18+
19+
# Ensure docker_manager import fails
20+
if "docker_manager" in sys.modules:
21+
del sys.modules["docker_manager"]
22+
23+
monkeypatch.setattr(sys, "argv", ["edgeflowc.py", cfg, "--docker"]) # type: ignore[attr-defined]
24+
rc = edgeflowc.main()
25+
assert rc == 1
26+
27+
28+
def test_cli_docker_build_and_run_success(tmp_path, monkeypatch):
29+
"""Happy-path: docker build (optional) and run succeed -> exit 0."""
30+
cfg = _write_cfg(tmp_path, 'model="m.tflite"\n')
31+
32+
# Fake docker_manager module
33+
fake = ModuleType("docker_manager")
34+
35+
class FakeDM:
36+
def build_image(self, **kwargs):
37+
return True
38+
39+
def run_optimization_pipeline(self, **kwargs):
40+
return {"success": True, "output_path": "./outputs"}
41+
42+
def validate_docker_setup():
43+
return {
44+
"docker_installed": True,
45+
"compose_installed": True,
46+
"docker_running": True,
47+
}
48+
49+
fake.DockerManager = lambda: FakeDM() # type: ignore[attr-defined]
50+
fake.validate_docker_setup = validate_docker_setup # type: ignore[attr-defined]
51+
monkeypatch.setitem(sys.modules, "docker_manager", fake)
52+
53+
monkeypatch.setattr(
54+
sys,
55+
"argv",
56+
[
57+
"edgeflowc.py",
58+
cfg,
59+
"--docker",
60+
"--docker-build",
61+
"--docker-tag",
62+
"edgeflow:test",
63+
],
64+
) # type: ignore[attr-defined]
65+
rc = edgeflowc.main()
66+
assert rc == 0
67+
68+
69+
def test_cli_docker_run_failure(tmp_path, monkeypatch):
70+
"""If docker run returns success False, exit with code 1."""
71+
cfg = _write_cfg(tmp_path, 'model="m.tflite"\n')
72+
73+
fake = ModuleType("docker_manager")
74+
75+
class FakeDM:
76+
def build_image(self, **kwargs):
77+
return True
78+
79+
def run_optimization_pipeline(self, **kwargs):
80+
return {"success": False, "error": "boom"}
81+
82+
def validate_docker_setup():
83+
return {
84+
"docker_installed": True,
85+
"compose_installed": True,
86+
"docker_running": True,
87+
}
88+
89+
fake.DockerManager = lambda: FakeDM() # type: ignore[attr-defined]
90+
fake.validate_docker_setup = validate_docker_setup # type: ignore[attr-defined]
91+
monkeypatch.setitem(sys.modules, "docker_manager", fake)
92+
93+
monkeypatch.setattr(sys, "argv", ["edgeflowc.py", cfg, "--docker"]) # type: ignore[attr-defined]
94+
rc = edgeflowc.main()
95+
assert rc == 1

0 commit comments

Comments
 (0)