Skip to content

Commit edc80de

Browse files
committed
Check for dom0 messages in more agent tests
Use a utility function for doing so, instead of open-coding the checks. Some code goes away.
1 parent 2be9adc commit edc80de

File tree

1 file changed

+29
-42
lines changed

1 file changed

+29
-42
lines changed

qrexec/tests/socket/agent.py

+29-42
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,15 @@ class TestAgentBase(unittest.TestCase):
4747
target_domain = 43
4848
target_port = 1024
4949

50+
def check_dom0(self, dom0):
51+
self.assertEqual(
52+
dom0.recv_message(),
53+
(
54+
qrexec.MSG_CONNECTION_TERMINATED,
55+
struct.pack("<LL", self.target_domain, self.target_port),
56+
),
57+
)
58+
5059
def setUp(self):
5160
self.tempdir = tempfile.mkdtemp()
5261
os.mkdir(os.path.join(self.tempdir, "local-rpc"))
@@ -157,14 +166,7 @@ def test_just_exec(self):
157166
lambda: os.path.exists(os.path.join(self.tempdir, "new_file")),
158167
"file created",
159168
)
160-
161-
self.assertEqual(
162-
dom0.recv_message(),
163-
(
164-
qrexec.MSG_CONNECTION_TERMINATED,
165-
struct.pack("<LL", self.target_domain, self.target_port),
166-
),
167-
)
169+
self.check_dom0(dom0)
168170

169171
def test_exec_cmdline(self):
170172
self.start_agent()
@@ -196,14 +198,7 @@ def test_exec_cmdline(self):
196198
(qrexec.MSG_DATA_EXIT_CODE, b"\0\0\0\0"),
197199
],
198200
)
199-
200-
self.assertEqual(
201-
dom0.recv_message(),
202-
(
203-
qrexec.MSG_CONNECTION_TERMINATED,
204-
struct.pack("<LL", self.target_domain, self.target_port),
205-
),
206-
)
201+
self.check_dom0(dom0)
207202

208203
def test_trigger_service(self):
209204
self.start_agent()
@@ -229,13 +224,7 @@ def test_trigger_service(self):
229224
)
230225

231226
client.close()
232-
self.assertEqual(
233-
dom0.recv_message(),
234-
(
235-
qrexec.MSG_CONNECTION_TERMINATED,
236-
struct.pack("<LL", self.target_domain, self.target_port),
237-
),
238-
)
227+
self.check_dom0(dom0)
239228

240229
def test_trigger_service_refused(self):
241230
self.start_agent()
@@ -310,15 +299,6 @@ def execute_qubesrpc(self, service: str, src_domain_name: str):
310299
target.handshake()
311300
return target, dom0
312301

313-
def check_dom0(self, dom0):
314-
self.assertEqual(
315-
dom0.recv_message(),
316-
(
317-
qrexec.MSG_CONNECTION_TERMINATED,
318-
struct.pack("<LL", self.target_domain, self.target_port),
319-
),
320-
)
321-
322302
def make_executable_service(self, *args):
323303
util.make_executable_service(self.tempdir, *args)
324304

@@ -332,7 +312,7 @@ def test_exec_service(self):
332312
echo "arg: $1, remote domain: $QREXEC_REMOTE_DOMAIN"
333313
""",
334314
)
335-
target, _ = self.execute_qubesrpc("qubes.Service+arg", "domX")
315+
target, dom0 = self.execute_qubesrpc("qubes.Service+arg", "domX")
336316
target.send_message(qrexec.MSG_DATA_STDIN, b"")
337317
messages = target.recv_all_messages()
338318
self.assertListEqual(
@@ -344,6 +324,7 @@ def test_exec_service(self):
344324
(qrexec.MSG_DATA_EXIT_CODE, b"\0\0\0\0"),
345325
],
346326
)
327+
self.check_dom0(dom0)
347328

348329
def test_exec_service_keyword(self):
349330
util.make_executable_service(
@@ -793,10 +774,10 @@ def execute(self, cmd: str):
793774

794775
target = self.connect_target()
795776
target.handshake()
796-
return target
777+
return target, dom0
797778

798779
def test_stdin_stderr(self):
799-
target = self.execute('echo "stdout"; echo "stderr" >&2')
780+
target, dom0 = self.execute('echo "stdout"; echo "stderr" >&2')
800781
target.send_message(qrexec.MSG_DATA_STDIN, b"")
801782

802783
messages = target.recv_all_messages()
@@ -812,7 +793,7 @@ def test_stdin_stderr(self):
812793
)
813794

814795
def test_pass_stdin(self):
815-
target = self.execute("cat")
796+
target, dom0 = self.execute("cat")
816797

817798
target.send_message(qrexec.MSG_DATA_STDIN, b"data 1")
818799
self.assertEqual(
@@ -834,15 +815,16 @@ def test_pass_stdin(self):
834815
(qrexec.MSG_DATA_EXIT_CODE, b"\0\0\0\0"),
835816
],
836817
)
818+
self.check_dom0(dom0)
837819

838820
def test_close_stdin_early(self):
839821
# Make sure that we cover the error on writing stdin into living
840822
# process.
841-
target = self.execute(
823+
target, dom0 = self.execute(
842824
"""
843825
read
844826
exec <&-
845-
echo closed stdin
827+
echo "closed stdin"
846828
sleep 1
847829
"""
848830
)
@@ -862,6 +844,7 @@ def test_close_stdin_early(self):
862844
(qrexec.MSG_DATA_EXIT_CODE, b"\0\0\0\0"),
863845
],
864846
)
847+
self.check_dom0(dom0)
865848

866849
def test_buffer_stdin(self):
867850
# Test to trigger WRITE_STDIN_BUFFERED.
@@ -877,7 +860,7 @@ def test_buffer_stdin(self):
877860

878861
fifo = os.path.join(self.tempdir, "fifo")
879862
os.mkfifo(fifo)
880-
target = self.execute("read <{}; cat".format(fifo))
863+
target, dom0 = self.execute("read <{}; cat".format(fifo))
881864

882865
for i in range(0, data_size, msg_size):
883866
msg = data[i : i + msg_size]
@@ -911,9 +894,10 @@ def test_buffer_stdin(self):
911894
(qrexec.MSG_DATA_EXIT_CODE, b"\0\0\0\0"),
912895
],
913896
)
897+
self.check_dom0(dom0)
914898

915899
def test_close_stdout_stderr_early(self):
916-
target = self.execute(
900+
target, dom0 = self.execute(
917901
"""\
918902
read
919903
echo closing stdout
@@ -946,9 +930,10 @@ def test_close_stdout_stderr_early(self):
946930
target.recv_message(),
947931
(qrexec.MSG_DATA_EXIT_CODE, struct.pack("<L", 42)),
948932
)
933+
self.check_dom0(dom0)
949934

950935
def test_stdio_socket(self):
951-
target = self.execute(
936+
target, dom0 = self.execute(
952937
"""\
953938
kill -USR1 $QREXEC_AGENT_PID
954939
echo hello world >&0
@@ -973,11 +958,12 @@ def test_stdio_socket(self):
973958
(qrexec.MSG_DATA_EXIT_CODE, b"\0\0\0\0"),
974959
],
975960
)
961+
self.check_dom0(dom0)
976962

977963
def test_exit_before_closing_streams(self):
978964
fifo = os.path.join(self.tempdir, "fifo")
979965
os.mkfifo(fifo)
980-
target = self.execute(
966+
target, dom0 = self.execute(
981967
"""\
982968
# duplicate original stdin to fd 3, because bash will
983969
# close original stdin in child process
@@ -1021,6 +1007,7 @@ def test_exit_before_closing_streams(self):
10211007
(qrexec.MSG_DATA_EXIT_CODE, struct.pack("<L", 42)),
10221008
],
10231009
)
1010+
self.check_dom0(dom0)
10241011

10251012

10261013
@unittest.skipIf(os.environ.get("SKIP_SOCKET_TESTS"), "socket tests not set up")

0 commit comments

Comments
 (0)