forked from IQ.Lvbs/IQ.Pilot
87 lines
2.6 KiB
Python
87 lines
2.6 KiB
Python
import hashlib
|
|
|
|
import pytest
|
|
|
|
from openpilot.iqpilot.iq_maps import vendor_mapd_installer as vmi
|
|
|
|
|
|
class FakeParams:
|
|
def __init__(self):
|
|
self.store: dict[str, object] = {}
|
|
|
|
def get(self, key, return_default=False):
|
|
return self.store.get(key)
|
|
|
|
def put(self, key, value):
|
|
self.store[key] = value
|
|
|
|
def remove(self, key):
|
|
self.store.pop(key, None)
|
|
|
|
|
|
@pytest.fixture
|
|
def env(tmp_path, monkeypatch):
|
|
binary = tmp_path / "mapd"
|
|
hash_file = tmp_path / "mapd_hash"
|
|
monkeypatch.setattr(vmi, "VENDOR_MAPD_PATH", str(binary))
|
|
monkeypatch.setattr(vmi, "QUARANTINE_PATH", str(binary) + ".quarantined")
|
|
monkeypatch.setattr(vmi, "_HASH_FILE", str(hash_file))
|
|
monkeypatch.setattr(vmi.sentry, "init", lambda *a, **k: None)
|
|
monkeypatch.setattr(vmi.sentry, "capture_exception", lambda *a, **k: None)
|
|
return binary, hash_file
|
|
|
|
|
|
def test_verified_binary_stamps_version(env):
|
|
binary, hash_file = env
|
|
binary.write_bytes(b"vetted")
|
|
hash_file.write_text(hashlib.sha256(b"vetted").hexdigest())
|
|
|
|
params = FakeParams()
|
|
assert vmi.VendorMapdInstaller(params=params).verify()
|
|
assert params.store["MapdVersion"] == vmi.VENDOR_RELEASE_TAG
|
|
assert binary.exists()
|
|
|
|
|
|
def test_foreign_binary_quarantined(env):
|
|
# the fresh-install poison scenario: a stock release build on disk while the
|
|
# pin points at the vetted build
|
|
binary, hash_file = env
|
|
binary.write_bytes(b"stock release build")
|
|
hash_file.write_text(hashlib.sha256(b"vetted").hexdigest())
|
|
|
|
params = FakeParams()
|
|
params.store["MapdVersion"] = vmi.VENDOR_RELEASE_TAG
|
|
assert not vmi.VendorMapdInstaller(params=params).verify()
|
|
assert not binary.exists()
|
|
assert (binary.parent / "mapd.quarantined").read_bytes() == b"stock release build"
|
|
assert "MapdVersion" not in params.store
|
|
|
|
|
|
def test_verify_clears_stale_quarantine(env):
|
|
binary, hash_file = env
|
|
binary.write_bytes(b"vetted")
|
|
hash_file.write_text(hashlib.sha256(b"vetted").hexdigest())
|
|
quarantine = binary.parent / "mapd.quarantined"
|
|
quarantine.write_bytes(b"old poison")
|
|
|
|
assert vmi.VendorMapdInstaller(params=FakeParams()).verify()
|
|
assert not quarantine.exists()
|
|
|
|
|
|
def test_missing_hash_pin_leaves_binary_alone(env):
|
|
binary, _ = env
|
|
binary.write_bytes(b"anything")
|
|
|
|
assert not vmi.VendorMapdInstaller(params=FakeParams()).verify()
|
|
assert binary.exists()
|
|
|
|
|
|
def test_missing_binary(env):
|
|
_, hash_file = env
|
|
hash_file.write_text(hashlib.sha256(b"vetted").hexdigest())
|
|
|
|
params = FakeParams()
|
|
params.store["MapdVersion"] = vmi.VENDOR_RELEASE_TAG
|
|
assert not vmi.VendorMapdInstaller(params=params).verify()
|
|
assert "MapdVersion" not in params.store
|