Files
tokio/tests/spawn.rs
T

98 lines
2.2 KiB
Rust
Raw Normal View History

2016-08-31 00:19:29 -07:00
extern crate tokio_core;
extern crate env_logger;
extern crate futures;
use std::sync::mpsc;
use std::thread;
use std::time::Duration;
2016-08-31 00:19:29 -07:00
use futures::Future;
2017-02-05 17:06:57 -08:00
use futures::future;
use futures::sync::oneshot;
use tokio_core::reactor::{Core, Timeout};
2016-08-31 00:19:29 -07:00
#[test]
fn simple() {
drop(env_logger::init());
2016-09-02 11:07:52 -07:00
let mut lp = Core::new().unwrap();
2016-08-31 00:19:29 -07:00
2017-02-05 17:06:57 -08:00
let (tx1, rx1) = oneshot::channel();
let (tx2, rx2) = oneshot::channel();
lp.handle().spawn(future::lazy(|| {
tx1.send(1).unwrap();
2016-08-31 00:19:29 -07:00
Ok(())
}));
2016-09-07 16:11:19 -07:00
lp.remote().spawn(|_| {
2017-02-05 17:06:57 -08:00
future::lazy(|| {
tx2.send(2).unwrap();
2016-08-31 00:19:29 -07:00
Ok(())
})
});
assert_eq!(lp.run(rx1.join(rx2)).unwrap(), (1, 2));
}
#[test]
fn simple_core_poll() {
drop(env_logger::init());
let mut lp = Core::new().unwrap();
let (tx, rx) = mpsc::channel();
let (tx1, tx2) = (tx.clone(), tx.clone());
lp.turn(Some(Duration::new(0, 0)));
2017-02-05 17:06:57 -08:00
lp.handle().spawn(future::lazy(move || {
tx1.send(1).unwrap();
Ok(())
}));
lp.turn(Some(Duration::new(0, 0)));
2017-02-05 17:06:57 -08:00
lp.handle().spawn(future::lazy(move || {
tx2.send(2).unwrap();
Ok(())
}));
assert_eq!(rx.try_recv().unwrap(), 1);
assert!(rx.try_recv().is_err());
lp.turn(Some(Duration::new(0, 0)));
assert_eq!(rx.try_recv().unwrap(), 2);
}
2016-08-31 00:19:29 -07:00
#[test]
fn spawn_in_poll() {
drop(env_logger::init());
2016-09-02 11:07:52 -07:00
let mut lp = Core::new().unwrap();
2016-08-31 00:19:29 -07:00
2017-02-05 17:06:57 -08:00
let (tx1, rx1) = oneshot::channel();
let (tx2, rx2) = oneshot::channel();
2016-09-07 16:11:19 -07:00
let remote = lp.remote();
2017-02-05 17:06:57 -08:00
lp.handle().spawn(future::lazy(move || {
tx1.send(1).unwrap();
2016-09-07 16:11:19 -07:00
remote.spawn(|_| {
2017-02-05 17:06:57 -08:00
future::lazy(|| {
tx2.send(2).unwrap();
2016-08-31 00:19:29 -07:00
Ok(())
})
});
Ok(())
}));
assert_eq!(lp.run(rx1.join(rx2)).unwrap(), (1, 2));
}
#[test]
fn drop_timeout_in_spawn() {
drop(env_logger::init());
let mut lp = Core::new().unwrap();
let (tx, rx) = oneshot::channel();
let remote = lp.remote();
thread::spawn(move || {
remote.spawn(|handle| {
drop(Timeout::new(Duration::new(1, 0), handle));
tx.send(()).unwrap();
Ok(())
});
});
lp.run(rx).unwrap();
}