66 lines
2.5 KiB
Python
66 lines
2.5 KiB
Python
import hashlib
|
|
import json
|
|
|
|
from iqpilot.selfdrive.dmonitoringmodeld import prebuilt_models
|
|
|
|
|
|
def write_outputs(models_dir, check_path):
|
|
outputs = {}
|
|
for name, contents in {
|
|
'dmonitoring_model_tinygrad.pkl': b'tinygrad',
|
|
'dmonitoring_model_metadata.pkl': b'metadata',
|
|
}.items():
|
|
(models_dir / name).write_bytes(contents)
|
|
outputs[name] = hashlib.sha256(contents).hexdigest()
|
|
check_path.write_text(json.dumps({'dmonitoring_model': {'outputs': outputs}}))
|
|
|
|
|
|
def test_packaged_prebuilt_without_onnx(tmp_path, monkeypatch):
|
|
models_dir = tmp_path / 'models'
|
|
models_dir.mkdir()
|
|
check_path = models_dir / 'prebuilt_check.json'
|
|
write_outputs(models_dir, check_path)
|
|
monkeypatch.setattr(prebuilt_models, 'MODELS_DIR', models_dir)
|
|
monkeypatch.setattr(prebuilt_models, 'CHECK_PATH', check_path)
|
|
|
|
assert prebuilt_models.packaged_prebuilt_matches('dmonitoring_model')
|
|
assert not prebuilt_models.verify_prebuilt('dmonitoring_model', 'flags')
|
|
|
|
|
|
def test_packaged_prebuilt_rejects_corrupt_output(tmp_path, monkeypatch):
|
|
models_dir = tmp_path / 'models'
|
|
models_dir.mkdir()
|
|
check_path = models_dir / 'prebuilt_check.json'
|
|
write_outputs(models_dir, check_path)
|
|
(models_dir / 'dmonitoring_model_tinygrad.pkl').write_bytes(b'corrupt')
|
|
monkeypatch.setattr(prebuilt_models, 'MODELS_DIR', models_dir)
|
|
monkeypatch.setattr(prebuilt_models, 'CHECK_PATH', check_path)
|
|
|
|
assert not prebuilt_models.packaged_prebuilt_matches('dmonitoring_model')
|
|
|
|
|
|
def test_source_checkout_is_not_packaged_prebuilt(tmp_path, monkeypatch):
|
|
models_dir = tmp_path / 'models'
|
|
models_dir.mkdir()
|
|
check_path = models_dir / 'prebuilt_check.json'
|
|
write_outputs(models_dir, check_path)
|
|
(models_dir / 'dmonitoring_model.onnx').write_bytes(b'onnx')
|
|
monkeypatch.setattr(prebuilt_models, 'MODELS_DIR', models_dir)
|
|
monkeypatch.setattr(prebuilt_models, 'CHECK_PATH', check_path)
|
|
|
|
assert not prebuilt_models.packaged_prebuilt_matches('dmonitoring_model')
|
|
|
|
|
|
def test_vendored_tinygrad_revision(tmp_path, monkeypatch):
|
|
revision = '0123456789abcdef0123456789abcdef01234567'
|
|
pyproject = tmp_path / 'pyproject.toml'
|
|
revision_file = tmp_path / '.iqpilot-revision'
|
|
pyproject.write_text('dependencies = ["tinygrad"]\n')
|
|
revision_file.write_text(f'{revision}\n')
|
|
monkeypatch.setattr(prebuilt_models, 'PYPROJECT', pyproject)
|
|
monkeypatch.setattr(prebuilt_models, 'TINYGRAD_REVISION_FILE', revision_file)
|
|
prebuilt_models._tinygrad_revision.cache_clear()
|
|
|
|
assert prebuilt_models._tinygrad_revision() == revision
|
|
prebuilt_models._tinygrad_revision.cache_clear()
|