Skip to content

Commit e0281de

Browse files
committed
Test VM => dom0 calls with skip-service-descriptor=true
The test currently fails because the command is parsed, the configuration is loaded, and then a GUI session is waited for if needed. Then the parsed command is destroyed, and a _new_ parsed command is created and used for execution, _without_ loading the configuration. This will be fixed by not destroying and re-parsing the configuration. The negative diffstat is because the tests had a massive amount of duplicated code, some of which is now replaced by a common function.
1 parent 7ce4f4e commit e0281de

File tree

1 file changed

+43
-59
lines changed

1 file changed

+43
-59
lines changed

qrexec/tests/socket/daemon.py

+43-59
Original file line numberDiff line numberDiff line change
@@ -930,41 +930,39 @@ def test_run_dom0_service_wait_for_session(self):
930930
self.client.wait()
931931
self.assertEqual(self.client.returncode, 0)
932932

933-
def test_run_dom0_service_socket(self):
934-
socket_path = os.path.join(
935-
self.tempdir, "rpc", "qubes.SocketService+arg"
936-
)
937-
server = qrexec.socket_server(socket_path)
938-
self.addCleanup(server.close)
939-
cmd = "QUBESRPC qubes.SocketService+arg src_domain name src_domain"
940-
source = self.connect_service_request(cmd)
941-
942-
server.accept()
933+
@unittest.expectedFailure
934+
def test_run_dom0_service_socket_no_send_descriptor(self):
935+
"""Socket based service with no service descriptor"""
936+
config_path = os.path.join(self.tempdir, "rpc-config", "qubes.SocketService+arg")
937+
with open(config_path, "w") as f:
938+
f.write("skip-service-descriptor = true\n")
939+
def callback(source, server):
940+
message = b"stdin data"
941+
source.send_message(qrexec.MSG_DATA_STDIN, message)
942+
source.send_message(qrexec.MSG_DATA_STDIN, b"")
943+
self.assertEqual(server.recvall(len(message)), message)
944+
945+
server.sendall(b"stdout data")
946+
server.close()
947+
self._test_run_dom0_service_socket_meta(callback)
943948

944-
expected = b"qubes.SocketService+arg src_domain name src_domain\0"
945-
self.assertEqual(server.recvall(len(expected)), expected)
946-
947-
message = b"stdin data"
948-
source.send_message(qrexec.MSG_DATA_STDIN, message)
949-
source.send_message(qrexec.MSG_DATA_STDIN, b"")
950-
self.assertEqual(server.recvall(len(message)), message)
949+
def test_run_dom0_service_socket(self):
950+
"""Socket based service"""
951+
def callback(source, server):
952+
expected = b"qubes.SocketService+arg src_domain name src_domain\0"
953+
self.assertEqual(server.recvall(len(expected)), expected)
951954

952-
server.sendall(b"stdout data")
953-
server.close()
955+
message = b"stdin data"
956+
source.send_message(qrexec.MSG_DATA_STDIN, message)
957+
source.send_message(qrexec.MSG_DATA_STDIN, b"")
958+
self.assertEqual(server.recvall(len(message)), message)
954959

955-
self.assertEqual(
956-
source.recv_all_messages(),
957-
[
958-
(qrexec.MSG_DATA_STDOUT, b"stdout data"),
959-
(qrexec.MSG_DATA_STDOUT, b""),
960-
(qrexec.MSG_DATA_EXIT_CODE, b"\0\0\0\0"),
961-
],
962-
)
963-
self.client.wait()
964-
self.assertEqual(self.client.returncode, 0)
960+
server.sendall(b"stdout data")
961+
server.close()
962+
self._test_run_dom0_service_socket_meta(callback)
965963

966-
def test_run_dom0_service_socket_no_read(self):
967-
"""Socket based service that don't read its input stream"""
964+
def _test_run_dom0_service_socket_meta(self, callback):
965+
"""Socket based service meta test"""
968966

969967
socket_path = os.path.join(
970968
self.tempdir, "rpc", "qubes.SocketService+arg"
@@ -975,11 +973,7 @@ def test_run_dom0_service_socket_no_read(self):
975973
source = self.connect_service_request(cmd)
976974

977975
server.accept()
978-
server.sendall(b"stdout data")
979-
server.close()
980-
981-
source.send_message(qrexec.MSG_DATA_STDIN, b"stdin data")
982-
source.send_message(qrexec.MSG_DATA_STDIN, b"")
976+
callback(source, server)
983977

984978
self.assertEqual(
985979
source.recv_all_messages(),
@@ -992,31 +986,21 @@ def test_run_dom0_service_socket_no_read(self):
992986
self.client.wait()
993987
self.assertEqual(self.client.returncode, 0)
994988

989+
def test_run_dom0_service_socket_no_read(self):
990+
"""Socket based service that don't read its input stream"""
991+
def callback(source, server):
992+
server.sendall(b"stdout data")
993+
server.close()
994+
source.send_message(qrexec.MSG_DATA_STDIN, b"stdin data")
995+
source.send_message(qrexec.MSG_DATA_STDIN, b"")
996+
self._test_run_dom0_service_socket_meta(callback)
997+
995998
def test_run_dom0_service_socket_close(self):
996999
"""Socket service closes connection"""
997-
998-
socket_path = os.path.join(
999-
self.tempdir, "rpc", "qubes.SocketService+arg"
1000-
)
1001-
server = qrexec.socket_server(socket_path)
1002-
self.addCleanup(server.close)
1003-
cmd = "QUBESRPC qubes.SocketService+arg src_domain name src_domain"
1004-
source = self.connect_service_request(cmd)
1005-
1006-
server.accept()
1007-
server.sendall(b"stdout data")
1008-
server.close()
1009-
1010-
self.assertEqual(
1011-
source.recv_all_messages(),
1012-
[
1013-
(qrexec.MSG_DATA_STDOUT, b"stdout data"),
1014-
(qrexec.MSG_DATA_STDOUT, b""),
1015-
(qrexec.MSG_DATA_EXIT_CODE, b"\0\0\0\0"),
1016-
],
1017-
)
1018-
self.client.wait()
1019-
self.assertEqual(self.client.returncode, 0)
1000+
def callback(source, server):
1001+
server.sendall(b"stdout data")
1002+
server.close()
1003+
self._test_run_dom0_service_socket_meta(callback)
10201004

10211005
def test_run_dom0_service_socket_shutdown_rd(self):
10221006
"""Service does shutdown(SHUT_RD)"""

0 commit comments

Comments
 (0)