mgmt: send artificial 'connection-established' event just after connection

This allows avoid race condition between  registering event handlers and
performing some action. The important thing is the event sent after
registering event handlers in qubesd. This means state changes (like
VM start/stop) after 'connection-established' event will be included in
event stream.

QubesOS/qubes-issues#2622
Cette révision appartient à :
Marek Marczykowski-Górecki 2017-04-14 23:09:16 +02:00
Parent 8cc0af1eda
révision 643cef1e65
Signature inconnue de Gitea
ID de la clé GPG: 063938BA42CFA724
2 fichiers modifiés avec 7 ajouts et 1 suppressions

Voir le fichier

@ -583,6 +583,9 @@ class QubesMgmt(AbstractQubesMgmt):
type(self.app).add_handler('*', handler)
qubes.vm.BaseVM.add_handler('*', handler)
# send artificial event as a confirmation that connection is established
self.send_event(self.app, 'connection-established')
try:
yield from wait_for_cancel
except asyncio.CancelledError:

Voir le fichier

@ -856,7 +856,10 @@ class TC_00_VMs(MgmtTestCase):
self.assertEventFired(self.emitter,
'mgmt-permission:' + 'mgmt.Events')
self.assertEqual(send_event.mock_calls,
[unittest.mock.call(self.vm, 'test-event', arg1='abc')])
[
unittest.mock.call(self.app, 'connection-established'),
unittest.mock.call(self.vm, 'test-event', arg1='abc')
])
def test_990_vm_unexpected_payload(self):