Skip to content

Commit 33bbe5a

Browse files
authored
Merge pull request #83 from twittner/tokio
Use tokio in tests.
2 parents d60fca8 + 96246ce commit 33bbe5a

File tree

5 files changed

+34
-26
lines changed

5 files changed

+34
-26
lines changed

Cargo.toml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,11 @@ static_assertions = "1"
2020

2121
[dev-dependencies]
2222
anyhow = "1"
23-
async-std = "1"
2423
criterion = "0.3"
2524
futures = "0.3.4"
2625
quickcheck = "0.9"
26+
tokio = { version = "0.2", features = ["tcp", "rt-threaded", "macros"] }
27+
tokio-util = { version = "0.3", features = ["compat"] }
2728

2829
[[bench]]
2930
name = "concurrent"

benches/concurrent.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
// at https://www.apache.org/licenses/LICENSE-2.0 and a copy of the MIT license
99
// at https://opensource.org/licenses/MIT.
1010

11-
use async_std::task;
1211
use criterion::{criterion_group, criterion_main, Criterion};
1312
use futures::{channel::mpsc, future, prelude::*, ready};
1413
use std::{fmt, io, pin::Pin, sync::Arc, task::{Context, Poll}};
14+
use tokio::{runtime::Runtime, task};
1515
use yamux::{Config, Connection, Mode};
1616

1717
criterion_group!(benches, concurrent);
@@ -52,16 +52,18 @@ fn concurrent(c: &mut Criterion) {
5252

5353
c.bench_function_over_inputs("one by one", move |b, &&params| {
5454
let data = data1.clone();
55+
let mut rt = Runtime::new().unwrap();
5556
b.iter(move || {
56-
task::block_on(roundtrip(params.streams, params.messages, data.clone(), false))
57+
rt.block_on(roundtrip(params.streams, params.messages, data.clone(), false))
5758
})
5859
},
5960
params);
6061

6162
c.bench_function_over_inputs("all at once", move |b, &&params| {
6263
let data = data2.clone();
64+
let mut rt = Runtime::new().unwrap();
6365
b.iter(move || {
64-
task::block_on(roundtrip(params.streams, params.messages, data.clone(), true))
66+
rt.block_on(roundtrip(params.streams, params.messages, data.clone(), true))
6567
})
6668
},
6769
params);

src/frame/io.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -232,7 +232,7 @@ mod tests {
232232
#[test]
233233
fn encode_decode_identity() {
234234
fn property(f: Frame<()>) -> bool {
235-
async_std::task::block_on(async move {
235+
futures::executor::block_on(async move {
236236
let id = crate::connection::Id::random();
237237
let mut io = Io::new(id, futures::io::Cursor::new(Vec::new()), f.body.len());
238238
if io.send(&f).await.is_err() {

src/tests.rs

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,35 @@
88
// at https://www.apache.org/licenses/LICENSE-2.0 and a copy of the MIT license
99
// at https://opensource.org/licenses/MIT.
1010

11-
use async_std::{net::{TcpStream, TcpListener}, task};
1211
use crate::{Config, Connection, ConnectionError, Mode, Control, connection::State};
1312
use futures::{future, prelude::*};
1413
use quickcheck::{Arbitrary, Gen, QuickCheck, TestResult};
1514
use rand::Rng;
1615
use std::{fmt::Debug, io, net::{Ipv4Addr, SocketAddr, SocketAddrV4}};
16+
use tokio::{net::{TcpStream, TcpListener}, runtime::Runtime, task};
17+
use tokio_util::compat::{Compat, Tokio02AsyncReadCompatExt};
1718

1819
#[test]
1920
fn prop_send_recv() {
2021
fn prop(msgs: Vec<Msg>) -> TestResult {
2122
if msgs.is_empty() {
2223
return TestResult::discard()
2324
}
24-
task::block_on(async move {
25+
let mut rt = Runtime::new().unwrap();
26+
rt.block_on(async move {
2527
let num_requests = msgs.len();
2628
let iter = msgs.into_iter().map(|m| m.0);
2729

28-
let (listener, address) = bind().await.expect("bind");
30+
let (mut listener, address) = bind().await.expect("bind");
2931

3032
let server = async {
31-
let socket = listener.accept().await.expect("accept").0;
33+
let socket = listener.accept().await.expect("accept").0.compat();
3234
let connection = Connection::new(socket, Config::default(), Mode::Server);
3335
repeat_echo(connection).await.expect("repeat_echo")
3436
};
3537

3638
let client = async {
37-
let socket = TcpStream::connect(address).await.expect("connect");
39+
let socket = TcpStream::connect(address).await.expect("connect").compat();
3840
let connection = Connection::new(socket, Config::default(), Mode::Client);
3941
let control = connection.control();
4042
task::spawn(crate::into_stream(connection).for_each(|_| future::ready(())));
@@ -55,19 +57,20 @@ fn prop_max_streams() {
5557
let mut cfg = Config::default();
5658
cfg.set_max_num_streams(max_streams);
5759

58-
task::block_on(async move {
59-
let (listener, address) = bind().await.expect("bind");
60+
let mut rt = Runtime::new().unwrap();
61+
rt.block_on(async move {
62+
let (mut listener, address) = bind().await.expect("bind");
6063

6164
let cfg_s = cfg.clone();
6265
let server = async move {
63-
let socket = listener.accept().await.expect("accept").0;
66+
let socket = listener.accept().await.expect("accept").0.compat();
6467
let connection = Connection::new(socket, cfg_s, Mode::Server);
6568
repeat_echo(connection).await
6669
};
6770

6871
task::spawn(server);
6972

70-
let socket = TcpStream::connect(address).await.expect("connect");
73+
let socket = TcpStream::connect(address).await.expect("connect").compat();
7174
let connection = Connection::new(socket, cfg, Mode::Client);
7275
let mut control = connection.control();
7376
task::spawn(crate::into_stream(connection).for_each(|_| future::ready(())));
@@ -89,12 +92,13 @@ fn prop_max_streams() {
8992
fn prop_send_recv_half_closed() {
9093
fn prop(msg: Msg) {
9194
let msg_len = msg.0.len();
92-
task::block_on(async move {
93-
let (listener, address) = bind().await.expect("bind");
95+
let mut rt = Runtime::new().unwrap();
96+
rt.block_on(async move {
97+
let (mut listener, address) = bind().await.expect("bind");
9498

9599
// Server should be able to write on a stream shutdown by the client.
96100
let server = async {
97-
let socket = listener.accept().await.expect("accept").0;
101+
let socket = listener.accept().await.expect("accept").0.compat();
98102
let mut connection = Connection::new(socket, Config::default(), Mode::Server);
99103
let mut stream = connection.next_stream().await
100104
.expect("S: next_stream")
@@ -108,7 +112,7 @@ fn prop_send_recv_half_closed() {
108112

109113
// Client should be able to read after shutting down the stream.
110114
let client = async {
111-
let socket = TcpStream::connect(address).await.expect("connect");
115+
let socket = TcpStream::connect(address).await.expect("connect").compat();
112116
let connection = Connection::new(socket, Config::default(), Mode::Client);
113117
let mut control = connection.control();
114118
task::spawn(crate::into_stream(connection).for_each(|_| future::ready(())));
@@ -150,7 +154,7 @@ async fn bind() -> io::Result<(TcpListener, SocketAddr)> {
150154
}
151155

152156
/// For each incoming stream of `c` echo back to the sender.
153-
async fn repeat_echo(c: Connection<TcpStream>) -> Result<(), ConnectionError> {
157+
async fn repeat_echo(c: Connection<Compat<TcpStream>>) -> Result<(), ConnectionError> {
154158
let c = crate::into_stream(c);
155159
c.try_for_each_concurrent(None, |mut stream| async move {
156160
{

tests/concurrent.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,18 @@
88
// at https://www.apache.org/licenses/LICENSE-2.0 and a copy of the MIT license
99
// at https://opensource.org/licenses/MIT.
1010

11-
use async_std::{net::{TcpStream, TcpListener}, task};
1211
use futures::{channel::mpsc, prelude::*};
1312
use std::{net::{Ipv4Addr, SocketAddr, SocketAddrV4}, sync::Arc};
13+
use tokio::{net::{TcpStream, TcpListener}, task};
14+
use tokio_util::compat::Tokio02AsyncReadCompatExt;
1415
use yamux::{Config, Connection, Mode};
1516

1617
async fn roundtrip(address: SocketAddr, nstreams: usize, data: Arc<Vec<u8>>) {
17-
let listener = TcpListener::bind(&address).await.expect("bind");
18+
let mut listener = TcpListener::bind(&address).await.expect("bind");
1819
let address = listener.local_addr().expect("local address");
1920

2021
let server = async move {
21-
let socket = listener.accept().await.expect("accept").0;
22+
let socket = listener.accept().await.expect("accept").0.compat();
2223
yamux::into_stream(Connection::new(socket, Config::default(), Mode::Server))
2324
.try_for_each_concurrent(None, |mut stream| async move {
2425
log::debug!("S: accepted new stream");
@@ -36,7 +37,7 @@ async fn roundtrip(address: SocketAddr, nstreams: usize, data: Arc<Vec<u8>>) {
3637

3738
task::spawn(server);
3839

39-
let socket = TcpStream::connect(&address).await.expect("connect");
40+
let socket = TcpStream::connect(&address).await.expect("connect").compat();
4041
let (tx, rx) = mpsc::unbounded();
4142
let conn = Connection::new(socket, Config::default(), Mode::Client);
4243
let mut ctrl = conn.control();
@@ -65,9 +66,9 @@ async fn roundtrip(address: SocketAddr, nstreams: usize, data: Arc<Vec<u8>>) {
6566
assert_eq!(nstreams, n)
6667
}
6768

68-
#[test]
69-
fn concurrent_streams() {
69+
#[tokio::test]
70+
async fn concurrent_streams() {
7071
let data = Arc::new(vec![0x42; 100 * 1024]);
7172
let addr = SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 0));
72-
task::block_on(roundtrip(addr, 1000, data))
73+
roundtrip(addr, 1000, data).await
7374
}

0 commit comments

Comments
 (0)