| 337 | |
| 338 | #[tokio::test] |
| 339 | async fn async_stdout_stream_unblocks() { |
| 340 | let (mut read, write) = tokio::io::duplex(32); |
| 341 | let stdout = AsyncStdoutStream::new(32, write); |
| 342 | |
| 343 | let task = tokio::task::spawn(async move { |
| 344 | let mut stream = stdout.p2_stream(); |
| 345 | blocking_write_and_flush(&mut *stream, "x".into()) |
| 346 | .await |
| 347 | .unwrap(); |
| 348 | }); |
| 349 | |
| 350 | let mut buf = [0; 100]; |
| 351 | let n = read.read(&mut buf).await.unwrap(); |
| 352 | assert_eq!(&buf[..n], b"x"); |
| 353 | |
| 354 | task.await.unwrap(); |
| 355 | } |
| 356 | |
| 357 | async fn blocking_write_and_flush(s: &mut dyn OutputStream, mut bytes: Bytes) -> Result<()> { |
| 358 | while !bytes.is_empty() { |