Skip to content

Commit

Permalink
Add failing unit tests to reproduce issue MagicStack#312
Browse files Browse the repository at this point in the history
  • Loading branch information
tardyp authored and fantix committed May 13, 2020
1 parent c6a0179 commit 88f9712
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions tests/test_process.py
Original file line number Diff line number Diff line change
Expand Up @@ -658,6 +658,55 @@ async def test_subprocess():

loop.run_until_complete(test_subprocess())

def test_write_huge_stdin_8192(self):
self._test_write_huge_stdin(8192)

def test_write_huge_stdin_8193(self):
self._test_write_huge_stdin(8193)

def test_write_huge_stdin_219263(self):
self._test_write_huge_stdin(219263)

def test_write_huge_stdin_219264(self):
self._test_write_huge_stdin(219264)

def _test_write_huge_stdin(self, buf_size):
code = '''
import sys
n = 0
while True:
line = sys.stdin.readline()
if not line:
print("unexpected EOF", file=sys.stderr)
break
if line == "END\\n":
break
n+=1
print(n)'''
num_lines = buf_size - len(b"END\n")
args = [sys.executable, b'-W', b'ignore', b'-c', code]

async def test():
proc = await asyncio.create_subprocess_exec(
*args,
stdout=asyncio.subprocess.PIPE,
stdin=asyncio.subprocess.PIPE)
data = b"\n" * num_lines + b"END\n"
self.assertEqual(len(data), buf_size)
proc.stdin.write(data)
await asyncio.wait_for(proc.stdin.drain(), timeout=1.0)
try:
await asyncio.wait_for(proc.wait(), timeout=1.0)
except asyncio.TimeoutError:
proc.kill()
proc.stdin.close()
await proc.wait()
raise
out = await proc.stdout.read()
self.assertEqual(int(out), num_lines)

self.loop.run_until_complete(test())


class Test_UV_Process(_TestProcess, tb.UVTestCase):

Expand Down

0 comments on commit 88f9712

Please sign in to comment.