peru/tests/test_async.py

34 lines
1.2 KiB
Python

import asyncio
from asyncio.subprocess import PIPE
import sys
from peru.async_helpers import safe_communicate
from shared import PeruTest, make_synchronous
class AsyncTest(PeruTest):
@make_synchronous
async def test_safe_communicate(self):
# Test safe_communicate with both empty and non-empty input.
cat_command = [
sys.executable, "-c",
"import sys; sys.stdout.write(sys.stdin.read())"
]
proc_empty = await asyncio.create_subprocess_exec(
*cat_command, stdin=PIPE, stdout=PIPE)
stdout, _ = await safe_communicate(proc_empty, b"")
self.assertEqual(stdout, b"")
proc_nonempty = await asyncio.create_subprocess_exec(
*cat_command, stdin=PIPE, stdout=PIPE)
stdout, _ = await safe_communicate(proc_nonempty, b"foo bar baz")
self.assertEqual(stdout, b"foo bar baz")
# And test a case with None input as well.
true_command = [sys.executable, "-c", ""]
proc_true = await asyncio.create_subprocess_exec(
*true_command, stdin=PIPE, stdout=PIPE)
stdout, _ = await safe_communicate(proc_true)
self.assertEqual(stdout, b"")