|
20 | 20 |
|
21 | 21 | # pylint: disable=missing-docstring |
22 | 22 |
|
| 23 | +from unittest import mock |
23 | 24 |
|
24 | 25 | import qubesadmin.tests |
25 | 26 | import qubesadmin.device_protocol |
26 | 27 |
|
27 | 28 | from qubesadmin.device_protocol import ( |
28 | 29 | DeviceAssignment, DeviceInfo, UnknownDevice, |
29 | 30 | AssignmentMode) |
30 | | - |
| 31 | +from qubesadmin.events import EventsDispatcher |
31 | 32 |
|
32 | 33 | serialized_test_device = ( |
33 | 34 | b"0\0dev1 port_id='dev1' devclass='test' vendor='itl' product='test-device'" |
@@ -416,3 +417,29 @@ def test_085_allow_device_multiple(self): |
416 | 417 | qubesadmin.device_protocol.DeviceInterface("m******"), |
417 | 418 | ) |
418 | 419 | self.assertAllCalled() |
| 420 | + |
| 421 | + def test_100_cache_invalidate(self): |
| 422 | + # this also enables caching |
| 423 | + dispatcher = EventsDispatcher(self.app) |
| 424 | + handler = mock.Mock() |
| 425 | + dispatcher.add_handler("device-added:test", handler) |
| 426 | + self.app.expected_calls[("test-vm", "admin.vm.device.test.Available", None, None)] = \ |
| 427 | + serialized_test_device + b"device_id='1234:5678:0123456789:?*******'\n" |
| 428 | + vm = self.app.domains.get("test-vm") |
| 429 | + # this also populates cache |
| 430 | + dev = vm.devices["test"]["dev1"] |
| 431 | + self.assertIsInstance(dev, DeviceInfo) |
| 432 | + self.assertNotIsInstance(dev, UnknownDevice) |
| 433 | + self.assertEqual(dev.device_id, "1234:5678:0123456789:?*******") |
| 434 | + dispatcher.handle("test-vm", "device-added:test", device="test-vm:dev1:1234:5678:0123456789:?*******") |
| 435 | + handler.assert_called_once_with(vm, "device-added:test", device=dev) |
| 436 | + handler.reset_mock() |
| 437 | + dispatcher.handle("test-vm", "device-removed:test", port="test-vm:dev1") |
| 438 | + self.app.expected_calls[("test-vm", "admin.vm.device.test.Available", None, None)] = \ |
| 439 | + serialized_test_device + b"device_id='8765:4321:0123456789:?*******'\n" |
| 440 | + dispatcher.handle("test-vm", "device-added:test", device="test-vm:dev1:8765:4321:0123456789:?*******") |
| 441 | + handler.assert_called_once_with(vm, "device-added:test", device=mock.ANY) |
| 442 | + self.assertIsInstance(handler.mock_calls[0].kwargs["device"], DeviceInfo) |
| 443 | + self.assertNotIsInstance(handler.mock_calls[0].kwargs["device"], UnknownDevice) |
| 444 | + self.assertEqual(handler.mock_calls[0].kwargs["device"].device_id, "8765:4321:0123456789:?*******") |
| 445 | + self.assertAllCalled() |
0 commit comments