49 lines
2.5 KiB
Python
49 lines
2.5 KiB
Python
"""Evidence gates used by the real private-display integration probe."""
|
|
import tempfile
|
|
import unittest
|
|
from pathlib import Path
|
|
|
|
from dev import smoke
|
|
|
|
|
|
class SmokeEvidenceTests(unittest.TestCase):
|
|
def setUp(self):
|
|
self.tmp = tempfile.TemporaryDirectory(prefix='hydra-smoke-test-')
|
|
self.addCleanup(self.tmp.cleanup)
|
|
root = Path(self.tmp.name)
|
|
self.hidden = root / 'hidden.log'
|
|
self.visible = root / 'visible.log'
|
|
self.hidden.write_text('wl_keyboard#21.enter(1)\nwl_keyboard#21.leave(2)\n')
|
|
self.visible.write_text('wl_keyboard#21.enter(3)\n')
|
|
|
|
def test_focus_parser_ignores_pointer_events(self):
|
|
self.hidden.write_text(self.hidden.read_text() + 'wl_pointer#22.enter(4)\n')
|
|
self.assertEqual(smoke.focus_events(self.hidden), ['enter', 'leave'])
|
|
|
|
def test_old_focus_events_cannot_prove_a_new_switch(self):
|
|
self.assertFalse(smoke.fresh_focus_transition(['enter', 'leave'], ['enter'],
|
|
['enter', 'leave'], ['enter']))
|
|
self.assertTrue(smoke.fresh_focus_transition(['enter'], ['leave'],
|
|
['enter', 'leave'], ['leave', 'enter']))
|
|
|
|
def test_hidden_guest_must_advance_during_hidden_interval(self):
|
|
with self.assertRaisesRegex(AssertionError, 'hidden guest stopped'):
|
|
smoke.measure_hidden_interval(lambda: 10, self.hidden, self.visible, duration=.01)
|
|
readings = iter((10, 20))
|
|
result = smoke.measure_hidden_interval(lambda: next(readings), self.hidden, self.visible, duration=.01)
|
|
self.assertEqual((result['before'], result['after']), (10, 20))
|
|
self.assertGreaterEqual(result['elapsed_seconds'], .01)
|
|
|
|
def test_focus_change_during_sampling_invalidates_hidden_evidence(self):
|
|
def reading():
|
|
self.hidden.write_text(self.hidden.read_text() + 'wl_keyboard#21.enter(4)\n')
|
|
return 10
|
|
with self.assertRaisesRegex(AssertionError, 'focus changed'):
|
|
smoke.measure_hidden_interval(reading, self.hidden, self.visible, duration=.01)
|
|
|
|
def test_compositor_classifier_does_not_hide_other_errors(self):
|
|
occupied = '[ERROR] [xwayland/sockets.c:47] Failed to bind socket @/tmp/.X11-unix/X2: Address already in use'
|
|
self.assertEqual(smoke.classify_compositor_errors(occupied), [occupied])
|
|
with self.assertRaisesRegex(AssertionError, 'Unexpected compositor'):
|
|
smoke.classify_compositor_errors(occupied + '\n[ERROR] [config.c:1] invalid configuration')
|