Files
StarPilot/openpilot/starpilot/sentry_mode/tests/test_preferences.py
T
firestar5683 e52e1a6a86 Sentry
Implement Sentry scanning, notification state and worker cancellation through explicit policies and preferences.
2026-10-14 19:56:17 -05:00

53 lines
2.2 KiB
Python

import os
from pathlib import Path
import tempfile
import unittest
from unittest.mock import patch
from openpilot.common.params import Params
from openpilot.starpilot.sentry_mode.policy import Settings
from openpilot.starpilot.sentry_mode.preferences import KEY, Preferences, decode, encode, enabled, read_preferences
class TestPreferences(unittest.TestCase):
def test_codec_requires_exact_finite_document(self):
value = Preferences(True, Settings(0.04, 1.0))
self.assertEqual(decode(encode(value)), value)
corrupt = (
b'{}', b'{"version":1,"enabled":true,"sensitivity":0.04,"warningTimeSeconds":1,"extra":0}',
b'{"version":1,"enabled":true,"enabled":false,"sensitivity":0.04,"warningTimeSeconds":1}',
b'{"version":1,"enabled":true,"sensitivity":NaN,"warningTimeSeconds":1}',
b'{"version":1,"enabled":true,"sensitivity":0.04,"warningTimeSeconds":1e400}',
b'{"version":1,"enabled":1,"sensitivity":0.04,"warningTimeSeconds":1}',
b'[' * 250 + b'0' + b']' * 250,
)
for raw in corrupt:
with self.subTest(raw=raw[:30]):
self.assertIsNone(decode(raw))
def test_actual_params_absent_corrupt_and_oversized_are_off_without_rewrite(self):
with tempfile.TemporaryDirectory() as directory, patch.dict(os.environ, PARAMS_ROOT=directory, OPENPILOT_PREFIX="sentrytest"):
params = Params()
self.assertFalse(enabled(params))
raw = encode(Preferences(True))
Path(params.get_param_path(KEY)).write_bytes(raw)
self.assertTrue(enabled(params))
for invalid in (b'{"version":2}', b'x' * 513):
Path(params.get_param_path(KEY)).write_bytes(invalid)
saved = read_preferences(params)
self.assertFalse(saved.valid)
self.assertFalse(enabled(params))
self.assertEqual(Path(params.get_param_path(KEY)).read_bytes(), invalid)
def test_unreadable_sources_do_not_arm(self):
with tempfile.TemporaryDirectory() as directory, patch.dict(os.environ, PARAMS_ROOT=directory, OPENPILOT_PREFIX="sentrytest"):
params = Params()
source = Path(params.get_param_path(KEY))
source.symlink_to(Path(directory) / "elsewhere")
self.assertFalse(read_preferences(params).readable)
self.assertFalse(enabled(params))
if __name__ == "__main__":
unittest.main()