@@ -47,6 +47,15 @@ class TestAgentBase(unittest.TestCase):
47
47
target_domain = 43
48
48
target_port = 1024
49
49
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
+
50
59
def setUp (self ):
51
60
self .tempdir = tempfile .mkdtemp ()
52
61
os .mkdir (os .path .join (self .tempdir , "local-rpc" ))
@@ -157,14 +166,7 @@ def test_just_exec(self):
157
166
lambda : os .path .exists (os .path .join (self .tempdir , "new_file" )),
158
167
"file created" ,
159
168
)
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 )
168
170
169
171
def test_exec_cmdline (self ):
170
172
self .start_agent ()
@@ -196,14 +198,7 @@ def test_exec_cmdline(self):
196
198
(qrexec .MSG_DATA_EXIT_CODE , b"\0 \0 \0 \0 " ),
197
199
],
198
200
)
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 )
207
202
208
203
def test_trigger_service (self ):
209
204
self .start_agent ()
@@ -229,13 +224,7 @@ def test_trigger_service(self):
229
224
)
230
225
231
226
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 )
239
228
240
229
def test_trigger_service_refused (self ):
241
230
self .start_agent ()
@@ -310,15 +299,6 @@ def execute_qubesrpc(self, service: str, src_domain_name: str):
310
299
target .handshake ()
311
300
return target , dom0
312
301
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
-
322
302
def make_executable_service (self , * args ):
323
303
util .make_executable_service (self .tempdir , * args )
324
304
@@ -332,7 +312,7 @@ def test_exec_service(self):
332
312
echo "arg: $1, remote domain: $QREXEC_REMOTE_DOMAIN"
333
313
""" ,
334
314
)
335
- target , _ = self .execute_qubesrpc ("qubes.Service+arg" , "domX" )
315
+ target , dom0 = self .execute_qubesrpc ("qubes.Service+arg" , "domX" )
336
316
target .send_message (qrexec .MSG_DATA_STDIN , b"" )
337
317
messages = target .recv_all_messages ()
338
318
self .assertListEqual (
@@ -344,6 +324,7 @@ def test_exec_service(self):
344
324
(qrexec .MSG_DATA_EXIT_CODE , b"\0 \0 \0 \0 " ),
345
325
],
346
326
)
327
+ self .check_dom0 (dom0 )
347
328
348
329
def test_exec_service_keyword (self ):
349
330
util .make_executable_service (
@@ -793,10 +774,10 @@ def execute(self, cmd: str):
793
774
794
775
target = self .connect_target ()
795
776
target .handshake ()
796
- return target
777
+ return target , dom0
797
778
798
779
def test_stdin_stderr (self ):
799
- target = self .execute ('echo "stdout"; echo "stderr" >&2' )
780
+ target , dom0 = self .execute ('echo "stdout"; echo "stderr" >&2' )
800
781
target .send_message (qrexec .MSG_DATA_STDIN , b"" )
801
782
802
783
messages = target .recv_all_messages ()
@@ -812,7 +793,7 @@ def test_stdin_stderr(self):
812
793
)
813
794
814
795
def test_pass_stdin (self ):
815
- target = self .execute ("cat" )
796
+ target , dom0 = self .execute ("cat" )
816
797
817
798
target .send_message (qrexec .MSG_DATA_STDIN , b"data 1" )
818
799
self .assertEqual (
@@ -834,15 +815,16 @@ def test_pass_stdin(self):
834
815
(qrexec .MSG_DATA_EXIT_CODE , b"\0 \0 \0 \0 " ),
835
816
],
836
817
)
818
+ self .check_dom0 (dom0 )
837
819
838
820
def test_close_stdin_early (self ):
839
821
# Make sure that we cover the error on writing stdin into living
840
822
# process.
841
- target = self .execute (
823
+ target , dom0 = self .execute (
842
824
"""
843
825
read
844
826
exec <&-
845
- echo closed stdin
827
+ echo " closed stdin"
846
828
sleep 1
847
829
"""
848
830
)
@@ -862,6 +844,7 @@ def test_close_stdin_early(self):
862
844
(qrexec .MSG_DATA_EXIT_CODE , b"\0 \0 \0 \0 " ),
863
845
],
864
846
)
847
+ self .check_dom0 (dom0 )
865
848
866
849
def test_buffer_stdin (self ):
867
850
# Test to trigger WRITE_STDIN_BUFFERED.
@@ -877,7 +860,7 @@ def test_buffer_stdin(self):
877
860
878
861
fifo = os .path .join (self .tempdir , "fifo" )
879
862
os .mkfifo (fifo )
880
- target = self .execute ("read <{}; cat" .format (fifo ))
863
+ target , dom0 = self .execute ("read <{}; cat" .format (fifo ))
881
864
882
865
for i in range (0 , data_size , msg_size ):
883
866
msg = data [i : i + msg_size ]
@@ -911,9 +894,10 @@ def test_buffer_stdin(self):
911
894
(qrexec .MSG_DATA_EXIT_CODE , b"\0 \0 \0 \0 " ),
912
895
],
913
896
)
897
+ self .check_dom0 (dom0 )
914
898
915
899
def test_close_stdout_stderr_early (self ):
916
- target = self .execute (
900
+ target , dom0 = self .execute (
917
901
"""\
918
902
read
919
903
echo closing stdout
@@ -946,9 +930,10 @@ def test_close_stdout_stderr_early(self):
946
930
target .recv_message (),
947
931
(qrexec .MSG_DATA_EXIT_CODE , struct .pack ("<L" , 42 )),
948
932
)
933
+ self .check_dom0 (dom0 )
949
934
950
935
def test_stdio_socket (self ):
951
- target = self .execute (
936
+ target , dom0 = self .execute (
952
937
"""\
953
938
kill -USR1 $QREXEC_AGENT_PID
954
939
echo hello world >&0
@@ -973,11 +958,12 @@ def test_stdio_socket(self):
973
958
(qrexec .MSG_DATA_EXIT_CODE , b"\0 \0 \0 \0 " ),
974
959
],
975
960
)
961
+ self .check_dom0 (dom0 )
976
962
977
963
def test_exit_before_closing_streams (self ):
978
964
fifo = os .path .join (self .tempdir , "fifo" )
979
965
os .mkfifo (fifo )
980
- target = self .execute (
966
+ target , dom0 = self .execute (
981
967
"""\
982
968
# duplicate original stdin to fd 3, because bash will
983
969
# close original stdin in child process
@@ -1021,6 +1007,7 @@ def test_exit_before_closing_streams(self):
1021
1007
(qrexec .MSG_DATA_EXIT_CODE , struct .pack ("<L" , 42 )),
1022
1008
],
1023
1009
)
1010
+ self .check_dom0 (dom0 )
1024
1011
1025
1012
1026
1013
@unittest .skipIf (os .environ .get ("SKIP_SOCKET_TESTS" ), "socket tests not set up" )
0 commit comments