ThePirateRay/tests/test_meerk40t_mock_spike.py

55 lines
2.3 KiB
Python

import importlib.util
import json
import sys
import types
import unittest
from pathlib import Path
from unittest.mock import patch
SCRIPT = Path(__file__).parents[1] / "scripts" / "spike_meerk40t_mock_mopa.py"
FIXTURE = Path(__file__).parent / "fixtures" / "meerk40t-mock-mopa-trace.json"
HATCH_FIXTURE = Path(__file__).parent / "fixtures" / "meerk40t-hatch-cutplan.json"
SPEC = importlib.util.spec_from_file_location("spike_meerk40t_mock_mopa", SCRIPT)
MODULE = importlib.util.module_from_spec(SPEC)
assert SPEC.loader is not None
SPEC.loader.exec_module(MODULE)
class MockSpikeSafetyTests(unittest.TestCase):
def test_hatch_cutplan_and_spooler_stay_on_mock_transport(self):
result = json.loads(HATCH_FIXTURE.read_text(encoding="utf-8"))
self.assertEqual("MockConnection", result["transport"])
self.assertEqual("trapped; none attempted", result["usb_access"])
self.assertTrue(result["spooler"]["completed"])
self.assertTrue(result["spooler"]["mock_packets_observed"])
self.assertEqual(1, result["cutplan"]["mark_count"])
self.assertTrue(result["cutplan"]["contains_frequency"])
self.assertTrue(result["cutplan"]["contains_pulse_width"])
def test_golden_trace_records_pin_mock_and_mopa_values(self):
result = json.loads(FIXTURE.read_text(encoding="utf-8"))
trace = "\n".join(result["trace"])
self.assertEqual(MODULE.PINNED_COMMIT, result["commit"])
self.assertEqual("MockConnection", result["transport"])
self.assertEqual("trapped; none attempted", result["usb_access"])
self.assertIn("801b:01f4", trace)
self.assertIn("8026:00c8", trace)
self.assertEqual(4, trace.count("listMarkTo"))
def test_usb_trap_rejects_enumeration(self):
with patch.dict(sys.modules, clear=False):
MODULE._install_usb_trap()
import usb.core
with self.assertRaisesRegex(AssertionError, "real USB access"):
usb.core.find(idVendor=0x9588, idProduct=0x9899)
def test_rejects_unpinned_checkout(self):
with patch.object(MODULE, "_commit_of", return_value="wrong"):
with self.assertRaisesRegex(RuntimeError, "expected MeerK40t"):
MODULE.run(Path("unused"))
if __name__ == "__main__":
unittest.main()