sync: add blocking_recv and blocking_send in mpsc (#2684)

Fixes: #2629
This commit is contained in:
xd009642
2020-08-26 21:39:06 +02:00
committed by GitHub
parent 2e7e42bca7
commit 347e18bc77
3 changed files with 120 additions and 5 deletions
+44
View File
@@ -2,6 +2,8 @@
#![warn(rust_2018_idioms)]
#![cfg(feature = "full")]
use std::thread;
use tokio::runtime::Runtime;
use tokio::sync::mpsc;
use tokio::sync::mpsc::error::{TryRecvError, TrySendError};
use tokio_test::task;
@@ -490,3 +492,45 @@ fn try_recv_unbounded() {
_ => panic!(),
}
}
#[test]
fn blocking_recv() {
let (mut tx, mut rx) = mpsc::channel::<u8>(1);
let sync_code = thread::spawn(move || {
assert_eq!(Some(10), rx.blocking_recv());
});
Runtime::new().unwrap().block_on(async move {
let _ = tx.send(10).await;
});
sync_code.join().unwrap()
}
#[tokio::test]
#[should_panic]
async fn blocking_recv_async() {
let (_tx, mut rx) = mpsc::channel::<()>(1);
let _ = rx.blocking_recv();
}
#[test]
fn blocking_send() {
let (mut tx, mut rx) = mpsc::channel::<u8>(1);
let sync_code = thread::spawn(move || {
tx.blocking_send(10).unwrap();
});
Runtime::new().unwrap().block_on(async move {
assert_eq!(Some(10), rx.recv().await);
});
sync_code.join().unwrap()
}
#[tokio::test]
#[should_panic]
async fn blocking_send_async() {
let (mut tx, _rx) = mpsc::channel::<()>(1);
let _ = tx.blocking_send(());
}