tests: add a test for aborted service call

Details here:
https://groups.google.com/d/msgid/qubes-users/20150807213935.GN3740%40mail-itl
This commit is contained in:
Marek Marczykowski-Górecki 2015-08-08 02:06:03 +02:00
parent 5199840927
commit bbf22c4449
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724

View File

@ -235,6 +235,42 @@ class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin):
if result.value == 1:
self.fail("Received data differs from what was expected")
def test_055_qrexec_dom0_service_abort(self):
"""
Test if service abort (by dom0) is properly handled by source VM.
If "remote" part of the service terminates, the source part should
properly be notified. This includes closing its stdin (which is
already checked by test_053_qrexec_vm_service_eof_reverse), but also
its stdout - otherwise such service might hang on write(2) call.
"""
def run (src):
p = src.run("/usr/lib/qubes/qrexec-client-vm dom0 "
"test.Abort /bin/cat /dev/zero",
passio_popen=True)
p.communicate()
p.wait()
self.testvm1.start()
service = open("/etc/qubes-rpc/test.Abort", "w")
service.write("sleep 1")
service.close()
self.addCleanup(os.unlink, "/etc/qubes-rpc/test.Abort")
policy = open("/etc/qubes-rpc/policy/test.Abort", "w")
policy.write("%s dom0 allow" % (self.testvm1.name))
policy.close()
self.addCleanup(os.unlink, "/etc/qubes-rpc/policy/test.Abort")
t = multiprocessing.Process(target=run, args=(self.testvm1,))
t.start()
t.join(timeout=10)
if t.is_alive():
t.terminate()
self.fail("Timeout, probably stdout wasn't closed")
def test_060_qrexec_exit_code_dom0(self):
self.testvm1.start()