@@ -91,7 +91,7 @@ class OSEINTRTest(EINTRBaseTest):
9191 """ EINTR tests for the os module. """
9292
9393 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 } )'
9595 return self .subprocess (code )
9696
9797 def _test_wait_multiple (self , wait_func ):
@@ -123,65 +123,45 @@ def test_waitpid(self):
123123 def test_wait4 (self ):
124124 self ._test_wait_single (lambda pid : os .wait4 (pid , 0 ))
125125
126- def test_read (self ):
126+ def _interrupted_reads (self ):
127+ """Make a fd which will force block on read of expected bytes."""
127128 rd , wr = os .pipe ()
128129 self .addCleanup (os .close , rd )
129130 # wr closed explicitly by parent
130131
131132 # the payload below are smaller than PIPE_BUF, hence the writes will be
132133 # atomic
133- datas = [b"hello" , b"world" , b"spam" ]
134+ data = [b"hello" , b"world" , b"spam" ]
134135
135136 code = '\n ' .join ((
136137 'import os, sys, time' ,
137138 '' ,
138139 '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 } ' ,
141142 '' ,
142- 'for data in datas :' ,
143+ 'for item in data :' ,
143144 ' # let the parent block on read()' ,
144145 ' time.sleep(sleep_time)' ,
145- ' os.write(wr, data )' ,
146+ ' os.write(wr, item )' ,
146147 ))
147148
148149 proc = self .subprocess (code , str (wr ), pass_fds = [wr ])
149150 with kill_on_error (proc ):
150151 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
153154 self .assertEqual (proc .wait (), 0 )
154155
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 )))
176159
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 )
185165
186166 def test_write (self ):
187167 rd , wr = os .pipe ()
@@ -195,8 +175,8 @@ def test_write(self):
195175 'import io, os, sys, time' ,
196176 '' ,
197177 '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 } ' ,
200180 'data_len = len(data)' ,
201181 '' ,
202182 '# let the parent block on write()' ,
@@ -209,8 +189,8 @@ def test_write(self):
209189 '' ,
210190 'value = read_data.getvalue()' ,
211191 '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" )' ,
214194 ))
215195
216196 proc = self .subprocess (code , str (rd ), pass_fds = [rd ])
@@ -233,33 +213,33 @@ def _test_recv(self, recv_func):
233213 # wr closed explicitly by parent
234214
235215 # single-byte payload guard us against partial recv
236- datas = [b"x" , b"y" , b"z" ]
216+ data = [b"x" , b"y" , b"z" ]
237217
238218 code = '\n ' .join ((
239219 'import os, socket, sys, time' ,
240220 '' ,
241221 '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 } ' ,
246226 '' ,
247227 'wr = socket.fromfd(fd, family, sock_type)' ,
248228 'os.close(fd)' ,
249229 '' ,
250230 'with wr:' ,
251- ' for data in datas :' ,
231+ ' for item in data :' ,
252232 ' # let the parent block on recv()' ,
253233 ' time.sleep(sleep_time)' ,
254- ' wr.sendall(data )' ,
234+ ' wr.sendall(item )' ,
255235 ))
256236
257237 fd = wr .fileno ()
258238 proc = self .subprocess (code , str (fd ), pass_fds = [fd ])
259239 with kill_on_error (proc ):
260240 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 )))
263243 self .assertEqual (proc .wait (), 0 )
264244
265245 def test_recv (self ):
@@ -281,10 +261,10 @@ def _test_send(self, send_func):
281261 'import os, socket, sys, time' ,
282262 '' ,
283263 '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 } ' ,
288268 'data_len = len(data)' ,
289269 '' ,
290270 'rd = socket.fromfd(fd, family, sock_type)' ,
@@ -300,8 +280,8 @@ def _test_send(self, send_func):
300280 ' n += rd.recv_into(memoryview(received_data)[n:])' ,
301281 '' ,
302282 '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" )' ,
305285 ))
306286
307287 fd = rd .fileno ()
@@ -333,9 +313,9 @@ def test_accept(self):
333313 code = '\n ' .join ((
334314 'import socket, time' ,
335315 '' ,
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 } ' ,
339319 '' ,
340320 '# let parent block on accept()' ,
341321 'time.sleep(sleep_time)' ,
@@ -363,15 +343,15 @@ def _test_open(self, do_open_close_reader, do_open_close_writer):
363343 os_helper .unlink (filename )
364344 try :
365345 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 } ' )
368348 self .addCleanup (os_helper .unlink , filename )
369349
370350 code = '\n ' .join ((
371351 'import os, time' ,
372352 '' ,
373- 'path = %a' % filename ,
374- 'sleep_time = %r' % self .sleep_time ,
353+ f 'path = { filename !a } ' ,
354+ f 'sleep_time = { self .sleep_time !r } ' ,
375355 '' ,
376356 '# let the parent block' ,
377357 'time.sleep(sleep_time)' ,
@@ -427,21 +407,20 @@ class SignalEINTRTest(EINTRBaseTest):
427407
428408 def check_sigwait (self , wait_func ):
429409 signum = signal .SIGUSR1
430- pid = os .getpid ()
431410
432411 old_handler = signal .signal (signum , lambda * args : None )
433412 self .addCleanup (signal .signal , signum , old_handler )
434413
435414 code = '\n ' .join ((
436415 '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 } ' ,
440419 'time.sleep(sleep_time)' ,
441420 'os.kill(pid, signum)' ,
442421 ))
443422
444- old_mask = signal .pthread_sigmask (signal .SIG_BLOCK , [signum ])
423+ signal .pthread_sigmask (signal .SIG_BLOCK , [signum ])
445424 self .addCleanup (signal .pthread_sigmask , signal .SIG_UNBLOCK , [signum ])
446425
447426 proc = self .subprocess (code )
0 commit comments