|
7 | 7 |
|
8 | 8 | import stat |
9 | 9 | from pathlib import Path |
| 10 | +from typing import Any |
10 | 11 |
|
11 | 12 | import executorch.backends.arm.vgf.check_env as check_env |
12 | 13 | import executorch.backends.arm.vgf.model_converter as model_converter |
13 | 14 |
|
14 | 15 | import pytest |
| 16 | +from executorch.backends.arm.test import conftest as arm_conftest |
15 | 17 | from executorch.backends.arm.vgf import backend as vgf_backend |
16 | 18 | from executorch.backends.arm.vgf.compile_spec import VgfCompileSpec |
17 | 19 |
|
@@ -151,6 +153,137 @@ def test_model_converter_check_reports_version(monkeypatch, tmp_path): |
151 | 153 | assert "0.9.0" in result.detail |
152 | 154 |
|
153 | 155 |
|
| 156 | +def test_get_model_converter_version_text(monkeypatch, tmp_path): |
| 157 | + converter = _make_executable( |
| 158 | + tmp_path / "model-converter", |
| 159 | + "#!/usr/bin/env python3\n" |
| 160 | + "import sys\n" |
| 161 | + "if '--version' in sys.argv:\n" |
| 162 | + " print('model-converter d8c1b8e')\n" |
| 163 | + " raise SystemExit(0)\n" |
| 164 | + "raise SystemExit(1)\n", |
| 165 | + ) |
| 166 | + monkeypatch.setattr( |
| 167 | + model_converter, "find_model_converter_binary", lambda: str(converter) |
| 168 | + ) |
| 169 | + |
| 170 | + assert model_converter.get_model_converter_version_text() == ( |
| 171 | + "model-converter d8c1b8e" |
| 172 | + ) |
| 173 | + |
| 174 | + |
| 175 | +def test_parse_model_converter_version_uses_known_build_alias(monkeypatch, tmp_path): |
| 176 | + converter = _make_executable( |
| 177 | + tmp_path / "model-converter", |
| 178 | + "#!/usr/bin/env python3\n" |
| 179 | + "import sys\n" |
| 180 | + "if '--version' in sys.argv:\n" |
| 181 | + " print('model-converter d8c1b8e')\n" |
| 182 | + " raise SystemExit(0)\n" |
| 183 | + "raise SystemExit(1)\n", |
| 184 | + ) |
| 185 | + monkeypatch.setattr( |
| 186 | + model_converter, "find_model_converter_binary", lambda: str(converter) |
| 187 | + ) |
| 188 | + |
| 189 | + version_text = model_converter.get_model_converter_version_text() |
| 190 | + |
| 191 | + assert version_text is not None |
| 192 | + assert model_converter.parse_model_converter_version(version_text) == ( |
| 193 | + model_converter.Version("0.9.0") |
| 194 | + ) |
| 195 | + |
| 196 | + |
| 197 | +def test_below_minimum_model_converter_reason(monkeypatch, tmp_path): |
| 198 | + converter = _make_executable( |
| 199 | + tmp_path / "model-converter", |
| 200 | + "#!/usr/bin/env python3\n" |
| 201 | + "import sys\n" |
| 202 | + "if '--version' in sys.argv:\n" |
| 203 | + " print('model-converter d8c1b8e')\n" |
| 204 | + " raise SystemExit(0)\n" |
| 205 | + "raise SystemExit(1)\n", |
| 206 | + ) |
| 207 | + monkeypatch.setattr( |
| 208 | + model_converter, "find_model_converter_binary", lambda: str(converter) |
| 209 | + ) |
| 210 | + |
| 211 | + version_text = model_converter.get_model_converter_version_text() |
| 212 | + |
| 213 | + assert version_text is not None |
| 214 | + assert model_converter.get_model_converter_minimum_version_failure_reason( |
| 215 | + version_text, |
| 216 | + model_converter.MIN_MODEL_CONVERTER_VERSION_FOR_VGF_TESTS, |
| 217 | + requirement_name="the copied RIFE VGF quant tests", |
| 218 | + ) == ( |
| 219 | + "model-converter d8c1b8e is below the minimum supported version " |
| 220 | + "0.10.0 required for the copied RIFE VGF quant tests" |
| 221 | + ) |
| 222 | + |
| 223 | + |
| 224 | +def test_mark_rife_vgf_xfails_marks_only_rife_vgf_quant(): |
| 225 | + class DummyItem: |
| 226 | + def __init__(self, nodeid: str): |
| 227 | + self.nodeid = nodeid |
| 228 | + self.markers: list[Any] = [] |
| 229 | + |
| 230 | + def add_marker(self, marker: Any) -> None: |
| 231 | + self.markers.append(marker) |
| 232 | + |
| 233 | + matching = DummyItem("backends/arm/test/models/test_RIFE.py::test_vgf_quant") |
| 234 | + non_matching = DummyItem("backends/arm/test/models/test_RIFE.py::test_tosa") |
| 235 | + |
| 236 | + arm_conftest._mark_rife_vgf_xfails_for_model_converter_below_minimum_version( |
| 237 | + [matching, non_matching], "below minimum version" |
| 238 | + ) |
| 239 | + |
| 240 | + assert len(matching.markers) == 1 |
| 241 | + assert matching.markers[0].name == "xfail" |
| 242 | + assert not non_matching.markers |
| 243 | + |
| 244 | + |
| 245 | +def test_has_rife_vgf_quant_tests_matches_only_rife_vgf_quant(): |
| 246 | + class DummyItem: |
| 247 | + __slots__ = ("nodeid",) |
| 248 | + |
| 249 | + def __init__(self, nodeid: str): |
| 250 | + self.nodeid = nodeid |
| 251 | + |
| 252 | + assert arm_conftest._has_rife_vgf_quant_tests( |
| 253 | + [ |
| 254 | + DummyItem("backends/arm/test/models/test_RIFE.py::test_tosa"), |
| 255 | + DummyItem("backends/arm/test/models/test_RIFE.py::test_vgf_quant"), |
| 256 | + ] |
| 257 | + ) |
| 258 | + assert not arm_conftest._has_rife_vgf_quant_tests( |
| 259 | + [ |
| 260 | + DummyItem("backends/arm/test/models/test_RIFE.py::test_tosa"), |
| 261 | + DummyItem("backends/arm/test/ops/test_add.py::test_basic"), |
| 262 | + ] |
| 263 | + ) |
| 264 | + |
| 265 | + |
| 266 | +def test_collection_hook_skips_converter_probe_when_no_rife_vgf_quant(monkeypatch): |
| 267 | + class DummyItem: |
| 268 | + __slots__ = ("nodeid",) |
| 269 | + |
| 270 | + def __init__(self, nodeid: str): |
| 271 | + self.nodeid = nodeid |
| 272 | + |
| 273 | + def fail_probe(): |
| 274 | + raise AssertionError("converter probe should not run") |
| 275 | + |
| 276 | + monkeypatch.setattr(model_converter, "get_model_converter_version_text", fail_probe) |
| 277 | + |
| 278 | + arm_conftest.pytest_collection_modifyitems( |
| 279 | + None, |
| 280 | + [ |
| 281 | + DummyItem("backends/arm/test/models/test_RIFE.py::test_tosa"), |
| 282 | + DummyItem("backends/arm/test/ops/test_add.py::test_basic"), |
| 283 | + ], |
| 284 | + ) |
| 285 | + |
| 286 | + |
154 | 287 | def test_model_converter_lib_dir_fails_when_invalid(monkeypatch, tmp_path): |
155 | 288 | missing = tmp_path / "missing" |
156 | 289 | monkeypatch.setenv("MODEL_CONVERTER_LIB_DIR", str(missing)) |
|
0 commit comments