@@ -91,7 +91,7 @@ class OSEINTRTest(EINTRBaseTest):
91
91
""" EINTR tests for the os module. """
92
92
93
93
def new_sleep_process (self ):
94
- code = 'import time; time.sleep(%r)' % self .sleep_time
94
+ code = f 'import time; time.sleep({ self .sleep_time !r } )'
95
95
return self .subprocess (code )
96
96
97
97
def _test_wait_multiple (self , wait_func ):
@@ -123,65 +123,45 @@ def test_waitpid(self):
123
123
def test_wait4 (self ):
124
124
self ._test_wait_single (lambda pid : os .wait4 (pid , 0 ))
125
125
126
- def test_read (self ):
126
+ def _interrupted_reads (self ):
127
+ """Make a fd which will force block on read of expected bytes."""
127
128
rd , wr = os .pipe ()
128
129
self .addCleanup (os .close , rd )
129
130
# wr closed explicitly by parent
130
131
131
132
# the payload below are smaller than PIPE_BUF, hence the writes will be
132
133
# atomic
133
- datas = [b"hello" , b"world" , b"spam" ]
134
+ data = [b"hello" , b"world" , b"spam" ]
134
135
135
136
code = '\n ' .join ((
136
137
'import os, sys, time' ,
137
138
'' ,
138
139
'wr = int(sys.argv[1])' ,
139
- 'datas = %r' % datas ,
140
- 'sleep_time = %r' % self .sleep_time ,
140
+ f'data = { data !r } ' ,
141
+ f 'sleep_time = { self .sleep_time !r } ' ,
141
142
'' ,
142
- 'for data in datas :' ,
143
+ 'for item in data :' ,
143
144
' # let the parent block on read()' ,
144
145
' time.sleep(sleep_time)' ,
145
- ' os.write(wr, data )' ,
146
+ ' os.write(wr, item )' ,
146
147
))
147
148
148
149
proc = self .subprocess (code , str (wr ), pass_fds = [wr ])
149
150
with kill_on_error (proc ):
150
151
os .close (wr )
151
- for data in datas :
152
- self . assertEqual ( data , os . read ( rd , len ( data )))
152
+ for datum in data :
153
+ yield rd , datum
153
154
self .assertEqual (proc .wait (), 0 )
154
155
155
- def test_readinto (self ):
156
- rd , wr = os .pipe ()
157
- self .addCleanup (os .close , rd )
158
- # wr closed explicitly by parent
159
-
160
- # the payload below are smaller than PIPE_BUF, hence the writes will be
161
- # atomic
162
- datas = [b"hello" , b"world" , b"spam" ]
163
-
164
- code = '\n ' .join ((
165
- 'import os, sys, time' ,
166
- '' ,
167
- 'wr = int(sys.argv[1])' ,
168
- 'datas = %r' % datas ,
169
- 'sleep_time = %r' % self .sleep_time ,
170
- '' ,
171
- 'for data in datas:' ,
172
- ' # let the parent block on read()' ,
173
- ' time.sleep(sleep_time)' ,
174
- ' os.write(wr, data)' ,
175
- ))
156
+ def test_read (self ):
157
+ for fd , expected in self ._interrupted_reads ():
158
+ self .assertEqual (expected , os .read (fd , len (expected )))
176
159
177
- proc = self .subprocess (code , str (wr ), pass_fds = [wr ])
178
- with kill_on_error (proc ):
179
- os .close (wr )
180
- for data in datas :
181
- buffer = bytearray (len (data ))
182
- self .assertEqual (os .readinto (rd , buffer ), len (data ))
183
- self .assertEqual (buffer , data )
184
- self .assertEqual (proc .wait (), 0 )
160
+ def test_readinto (self ):
161
+ for fd , expected in self ._interrupted_reads ():
162
+ buffer = bytearray (len (expected ))
163
+ self .assertEqual (os .readinto (fd , buffer ), len (expected ))
164
+ self .assertEqual (buffer , expected )
185
165
186
166
def test_write (self ):
187
167
rd , wr = os .pipe ()
@@ -195,8 +175,8 @@ def test_write(self):
195
175
'import io, os, sys, time' ,
196
176
'' ,
197
177
'rd = int(sys.argv[1])' ,
198
- 'sleep_time = %r' % self .sleep_time ,
199
- 'data = b"x" * %s' % support .PIPE_MAX_SIZE ,
178
+ f 'sleep_time = { self .sleep_time !r } ' ,
179
+ f 'data = b"x" * { support .PIPE_MAX_SIZE } ' ,
200
180
'data_len = len(data)' ,
201
181
'' ,
202
182
'# let the parent block on write()' ,
@@ -209,8 +189,8 @@ def test_write(self):
209
189
'' ,
210
190
'value = read_data.getvalue()' ,
211
191
'if value != data:' ,
212
- ' raise Exception("read error: %s vs %s bytes"' ,
213
- ' % (len(value), data_len) )' ,
192
+ ' raise Exception(f "read error: {len(value)}'
193
+ ' vs { data_len} bytes" )' ,
214
194
))
215
195
216
196
proc = self .subprocess (code , str (rd ), pass_fds = [rd ])
@@ -233,33 +213,33 @@ def _test_recv(self, recv_func):
233
213
# wr closed explicitly by parent
234
214
235
215
# single-byte payload guard us against partial recv
236
- datas = [b"x" , b"y" , b"z" ]
216
+ data = [b"x" , b"y" , b"z" ]
237
217
238
218
code = '\n ' .join ((
239
219
'import os, socket, sys, time' ,
240
220
'' ,
241
221
'fd = int(sys.argv[1])' ,
242
- 'family = %s' % int (wr .family ),
243
- 'sock_type = %s' % int (wr .type ),
244
- 'datas = %r' % datas ,
245
- 'sleep_time = %r' % self .sleep_time ,
222
+ f 'family = { int (wr .family )} ' ,
223
+ f 'sock_type = { int (wr .type )} ' ,
224
+ f'data = { data !r } ' ,
225
+ f 'sleep_time = { self .sleep_time !r } ' ,
246
226
'' ,
247
227
'wr = socket.fromfd(fd, family, sock_type)' ,
248
228
'os.close(fd)' ,
249
229
'' ,
250
230
'with wr:' ,
251
- ' for data in datas :' ,
231
+ ' for item in data :' ,
252
232
' # let the parent block on recv()' ,
253
233
' time.sleep(sleep_time)' ,
254
- ' wr.sendall(data )' ,
234
+ ' wr.sendall(item )' ,
255
235
))
256
236
257
237
fd = wr .fileno ()
258
238
proc = self .subprocess (code , str (fd ), pass_fds = [fd ])
259
239
with kill_on_error (proc ):
260
240
wr .close ()
261
- for data in datas :
262
- self .assertEqual (data , recv_func (rd , len (data )))
241
+ for item in data :
242
+ self .assertEqual (item , recv_func (rd , len (item )))
263
243
self .assertEqual (proc .wait (), 0 )
264
244
265
245
def test_recv (self ):
@@ -281,10 +261,10 @@ def _test_send(self, send_func):
281
261
'import os, socket, sys, time' ,
282
262
'' ,
283
263
'fd = int(sys.argv[1])' ,
284
- 'family = %s' % int (rd .family ),
285
- 'sock_type = %s' % int (rd .type ),
286
- 'sleep_time = %r' % self .sleep_time ,
287
- 'data = b"xyz" * %s' % ( support .SOCK_MAX_SIZE // 3 ) ,
264
+ f 'family = { int (rd .family )} ' ,
265
+ f 'sock_type = { int (rd .type )} ' ,
266
+ f 'sleep_time = { self .sleep_time !r } ' ,
267
+ f 'data = b"xyz" * { support .SOCK_MAX_SIZE // 3 } ' ,
288
268
'data_len = len(data)' ,
289
269
'' ,
290
270
'rd = socket.fromfd(fd, family, sock_type)' ,
@@ -300,8 +280,8 @@ def _test_send(self, send_func):
300
280
' n += rd.recv_into(memoryview(received_data)[n:])' ,
301
281
'' ,
302
282
'if received_data != data:' ,
303
- ' raise Exception("recv error: %s vs %s bytes"' ,
304
- ' % (len(received_data), data_len) )' ,
283
+ ' raise Exception(f "recv error: {len(received_data)}'
284
+ ' vs { data_len} bytes" )' ,
305
285
))
306
286
307
287
fd = rd .fileno ()
@@ -333,9 +313,9 @@ def test_accept(self):
333
313
code = '\n ' .join ((
334
314
'import socket, time' ,
335
315
'' ,
336
- 'host = %r' % socket_helper .HOST ,
337
- 'port = %s' % port ,
338
- 'sleep_time = %r' % self .sleep_time ,
316
+ f 'host = { socket_helper .HOST !r } ' ,
317
+ f 'port = { port } ' ,
318
+ f 'sleep_time = { self .sleep_time !r } ' ,
339
319
'' ,
340
320
'# let parent block on accept()' ,
341
321
'time.sleep(sleep_time)' ,
@@ -363,15 +343,15 @@ def _test_open(self, do_open_close_reader, do_open_close_writer):
363
343
os_helper .unlink (filename )
364
344
try :
365
345
os .mkfifo (filename )
366
- except PermissionError as e :
367
- self .skipTest ('os.mkfifo(): %s' % e )
346
+ except PermissionError as exc :
347
+ self .skipTest (f 'os.mkfifo(): { exc !r } ' )
368
348
self .addCleanup (os_helper .unlink , filename )
369
349
370
350
code = '\n ' .join ((
371
351
'import os, time' ,
372
352
'' ,
373
- 'path = %a' % filename ,
374
- 'sleep_time = %r' % self .sleep_time ,
353
+ f 'path = { filename !a } ' ,
354
+ f 'sleep_time = { self .sleep_time !r } ' ,
375
355
'' ,
376
356
'# let the parent block' ,
377
357
'time.sleep(sleep_time)' ,
@@ -427,21 +407,20 @@ class SignalEINTRTest(EINTRBaseTest):
427
407
428
408
def check_sigwait (self , wait_func ):
429
409
signum = signal .SIGUSR1
430
- pid = os .getpid ()
431
410
432
411
old_handler = signal .signal (signum , lambda * args : None )
433
412
self .addCleanup (signal .signal , signum , old_handler )
434
413
435
414
code = '\n ' .join ((
436
415
'import os, time' ,
437
- 'pid = %s' % os .getpid (),
438
- 'signum = %s' % int (signum ),
439
- 'sleep_time = %r' % self .sleep_time ,
416
+ f 'pid = { os .getpid ()} ' ,
417
+ f 'signum = { int (signum )} ' ,
418
+ f 'sleep_time = { self .sleep_time !r } ' ,
440
419
'time.sleep(sleep_time)' ,
441
420
'os.kill(pid, signum)' ,
442
421
))
443
422
444
- old_mask = signal .pthread_sigmask (signal .SIG_BLOCK , [signum ])
423
+ signal .pthread_sigmask (signal .SIG_BLOCK , [signum ])
445
424
self .addCleanup (signal .pthread_sigmask , signal .SIG_UNBLOCK , [signum ])
446
425
447
426
proc = self .subprocess (code )
0 commit comments