Skip to content

Commit f49af3f

Browse files
ShaharNavehyouknowone
authored andcommitted
Update _test_eintr.py from 3.14.3
1 parent 9ddd07a commit f49af3f

File tree

1 file changed

+54
-44
lines changed

1 file changed

+54
-44
lines changed

Lib/test/_test_eintr.py

Lines changed: 54 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -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,36 +123,47 @@ 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-
@unittest.expectedFailure # TODO: RUSTPYTHON InterruptedError: [Errno 4] Interrupted system call
156+
def test_read(self):
157+
for fd, expected in self._interrupted_reads():
158+
self.assertEqual(expected, os.read(fd, len(expected)))
159+
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)
165+
166+
@unittest.expectedFailure # TODO: RUSTPYTHON; InterruptedError: [Errno 4] Interrupted system call
156167
def test_write(self):
157168
rd, wr = os.pipe()
158169
self.addCleanup(os.close, wr)
@@ -165,8 +176,8 @@ def test_write(self):
165176
'import io, os, sys, time',
166177
'',
167178
'rd = int(sys.argv[1])',
168-
'sleep_time = %r' % self.sleep_time,
169-
'data = b"x" * %s' % support.PIPE_MAX_SIZE,
179+
f'sleep_time = {self.sleep_time!r}',
180+
f'data = b"x" * {support.PIPE_MAX_SIZE}',
170181
'data_len = len(data)',
171182
'',
172183
'# let the parent block on write()',
@@ -179,8 +190,8 @@ def test_write(self):
179190
'',
180191
'value = read_data.getvalue()',
181192
'if value != data:',
182-
' raise Exception("read error: %s vs %s bytes"',
183-
' % (len(value), data_len))',
193+
' raise Exception(f"read error: {len(value)}'
194+
' vs {data_len} bytes")',
184195
))
185196

186197
proc = self.subprocess(code, str(rd), pass_fds=[rd])
@@ -203,33 +214,33 @@ def _test_recv(self, recv_func):
203214
# wr closed explicitly by parent
204215

205216
# single-byte payload guard us against partial recv
206-
datas = [b"x", b"y", b"z"]
217+
data = [b"x", b"y", b"z"]
207218

208219
code = '\n'.join((
209220
'import os, socket, sys, time',
210221
'',
211222
'fd = int(sys.argv[1])',
212-
'family = %s' % int(wr.family),
213-
'sock_type = %s' % int(wr.type),
214-
'datas = %r' % datas,
215-
'sleep_time = %r' % self.sleep_time,
223+
f'family = {int(wr.family)}',
224+
f'sock_type = {int(wr.type)}',
225+
f'data = {data!r}',
226+
f'sleep_time = {self.sleep_time!r}',
216227
'',
217228
'wr = socket.fromfd(fd, family, sock_type)',
218229
'os.close(fd)',
219230
'',
220231
'with wr:',
221-
' for data in datas:',
232+
' for item in data:',
222233
' # let the parent block on recv()',
223234
' time.sleep(sleep_time)',
224-
' wr.sendall(data)',
235+
' wr.sendall(item)',
225236
))
226237

227238
fd = wr.fileno()
228239
proc = self.subprocess(code, str(fd), pass_fds=[fd])
229240
with kill_on_error(proc):
230241
wr.close()
231-
for data in datas:
232-
self.assertEqual(data, recv_func(rd, len(data)))
242+
for item in data:
243+
self.assertEqual(item, recv_func(rd, len(item)))
233244
self.assertEqual(proc.wait(), 0)
234245

235246
def test_recv(self):
@@ -251,10 +262,10 @@ def _test_send(self, send_func):
251262
'import os, socket, sys, time',
252263
'',
253264
'fd = int(sys.argv[1])',
254-
'family = %s' % int(rd.family),
255-
'sock_type = %s' % int(rd.type),
256-
'sleep_time = %r' % self.sleep_time,
257-
'data = b"xyz" * %s' % (support.SOCK_MAX_SIZE // 3),
265+
f'family = {int(rd.family)}',
266+
f'sock_type = {int(rd.type)}',
267+
f'sleep_time = {self.sleep_time!r}',
268+
f'data = b"xyz" * {support.SOCK_MAX_SIZE // 3}',
258269
'data_len = len(data)',
259270
'',
260271
'rd = socket.fromfd(fd, family, sock_type)',
@@ -270,8 +281,8 @@ def _test_send(self, send_func):
270281
' n += rd.recv_into(memoryview(received_data)[n:])',
271282
'',
272283
'if received_data != data:',
273-
' raise Exception("recv error: %s vs %s bytes"',
274-
' % (len(received_data), data_len))',
284+
' raise Exception(f"recv error: {len(received_data)}'
285+
' vs {data_len} bytes")',
275286
))
276287

277288
fd = rd.fileno()
@@ -303,9 +314,9 @@ def test_accept(self):
303314
code = '\n'.join((
304315
'import socket, time',
305316
'',
306-
'host = %r' % socket_helper.HOST,
307-
'port = %s' % port,
308-
'sleep_time = %r' % self.sleep_time,
317+
f'host = {socket_helper.HOST!r}',
318+
f'port = {port}',
319+
f'sleep_time = {self.sleep_time!r}',
309320
'',
310321
'# let parent block on accept()',
311322
'time.sleep(sleep_time)',
@@ -333,15 +344,15 @@ def _test_open(self, do_open_close_reader, do_open_close_writer):
333344
os_helper.unlink(filename)
334345
try:
335346
os.mkfifo(filename)
336-
except PermissionError as e:
337-
self.skipTest('os.mkfifo(): %s' % e)
347+
except PermissionError as exc:
348+
self.skipTest(f'os.mkfifo(): {exc!r}')
338349
self.addCleanup(os_helper.unlink, filename)
339350

340351
code = '\n'.join((
341352
'import os, time',
342353
'',
343-
'path = %a' % filename,
344-
'sleep_time = %r' % self.sleep_time,
354+
f'path = {filename!a}',
355+
f'sleep_time = {self.sleep_time!r}',
345356
'',
346357
'# let the parent block',
347358
'time.sleep(sleep_time)',
@@ -400,21 +411,20 @@ class SignalEINTRTest(EINTRBaseTest):
400411

401412
def check_sigwait(self, wait_func):
402413
signum = signal.SIGUSR1
403-
pid = os.getpid()
404414

405415
old_handler = signal.signal(signum, lambda *args: None)
406416
self.addCleanup(signal.signal, signum, old_handler)
407417

408418
code = '\n'.join((
409419
'import os, time',
410-
'pid = %s' % os.getpid(),
411-
'signum = %s' % int(signum),
412-
'sleep_time = %r' % self.sleep_time,
420+
f'pid = {os.getpid()}',
421+
f'signum = {int(signum)}',
422+
f'sleep_time = {self.sleep_time!r}',
413423
'time.sleep(sleep_time)',
414424
'os.kill(pid, signum)',
415425
))
416426

417-
old_mask = signal.pthread_sigmask(signal.SIG_BLOCK, [signum])
427+
signal.pthread_sigmask(signal.SIG_BLOCK, [signum])
418428
self.addCleanup(signal.pthread_sigmask, signal.SIG_UNBLOCK, [signum])
419429

420430
proc = self.subprocess(code)
@@ -452,7 +462,7 @@ def test_select(self):
452462
self.stop_alarm()
453463
self.check_elapsed_time(dt)
454464

455-
@unittest.skip('TODO: RUSTPYTHON timed out at the 10 minute mark')
465+
@unittest.skip("TODO: RUSTPYTHON; timed out at the 10 minute mark")
456466
@unittest.skipIf(sys.platform == "darwin",
457467
"poll may fail on macOS; see issue #28087")
458468
@unittest.skipUnless(hasattr(select, 'poll'), 'need select.poll')
@@ -534,14 +544,14 @@ def _lock(self, lock_func, lock_name):
534544
self.check_elapsed_time(dt)
535545
proc.wait()
536546

537-
@unittest.expectedFailure # TODO: RUSTPYTHON InterruptedError: [Errno 4] Interrupted system call
538547
# Issue 35633: See https://bugs.python.org/issue35633#msg333662
539548
# skip test rather than accept PermissionError from all platforms
549+
@unittest.expectedFailure # TODO: RUSTPYTHON; InterruptedError: [Errno 4] Interrupted system call
540550
@unittest.skipIf(platform.system() == "AIX", "AIX returns PermissionError")
541551
def test_lockf(self):
542552
self._lock(fcntl.lockf, "lockf")
543553

544-
@unittest.expectedFailure # TODO: RUSTPYTHON InterruptedError: [Errno 4] Interrupted system call
554+
@unittest.expectedFailure # TODO: RUSTPYTHON; InterruptedError: [Errno 4] Interrupted system call
545555
def test_flock(self):
546556
self._lock(fcntl.flock, "flock")
547557

0 commit comments

Comments
 (0)