kamera geht

This commit is contained in:
marcinator_2 committed 2026-10-14 05:07:07 +02:00
1 parent bfecfd0640
commit d370f992ce
19 files changed
+1365 -1128

No files matched your search

+66
View File
@@ -0,0 +1,66 @@
"""Installer ohne Netzwerk; optionaler Smoke-Test mit echten Modellgewichten."""
from contextlib import redirect_stdout
import hashlib
import importlib.util
from io import BytesIO, StringIO
import os
from pathlib import Path
import tempfile
import unittest
from unittest.mock import patch
from PIL import Image
from halloween.detection import NanoDet
class InstallerTest(unittest.TestCase):
def setUp(self):
spec = importlib.util.spec_from_file_location('model_installer', Path(__file__).parents[1] / 'tools/install_detection_model.py')
self.installer = importlib.util.module_from_spec(spec)
spec.loader.exec_module(self.installer)
self.folder = tempfile.TemporaryDirectory()
self.addCleanup(self.folder.cleanup)
self.data = b'test-model'
self.manifest = {'file': 'model.onnx', 'sha256': hashlib.sha256(self.data).hexdigest(),
'size': len(self.data), 'url': 'https://example.invalid/model'}
self.target = Path(self.folder.name) / 'models/model.onnx'
def install(self, data):
with patch.object(self.installer.json, 'loads', return_value=self.manifest), \
patch.object(self.installer.urllib.request, 'urlopen', return_value=BytesIO(data)) as download, \
patch('sys.argv', ['installer', '--state-dir', self.folder.name]), redirect_stdout(StringIO()):
self.installer.main()
return download
def test_verified_download_is_atomic_and_idempotent(self):
self.assertEqual(self.install(self.data).call_count, 1)
self.assertEqual(self.target.read_bytes(), self.data)
self.assertEqual(self.install(self.data).call_count, 0)
self.assertEqual(list(self.target.parent.iterdir()), [self.target])
def test_bad_download_keeps_existing_file(self):
self.target.parent.mkdir()
self.target.write_bytes(b'old-corrupt-model')
with self.assertRaises(ValueError):
self.install(b'bad-model!')
self.assertEqual(self.target.read_bytes(), b'old-corrupt-model')
self.assertEqual(list(self.target.parent.iterdir()), [self.target])
def test_oversized_download_is_rejected_and_cleaned(self):
with self.assertRaises(ValueError):
self.install(self.data+b'extra')
self.assertEqual(list(self.target.parent.iterdir()), [])
@unittest.skipUnless(os.environ.get('HALLOWEEN_TEST_MODEL'), 'Optionales Modell nicht angegeben')
class ModelSmokeTest(unittest.TestCase):
def test_real_model_outputs_and_empty_frame(self):
model = NanoDet(Path(os.environ['HALLOWEEN_TEST_MODEL']))
frame = BytesIO()
Image.new('RGB', (640,480)).save(frame, format='JPEG')
self.assertEqual(model.detect(frame.getvalue()), [])
if __name__ == '__main__':
unittest.main()