summaryrefslogtreecommitdiffstats
path: root/tests/runtime.rs
diff options
context:
space:
mode:
Diffstat (limited to 'tests/runtime.rs')
-rw-r--r--tests/runtime.rs52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/runtime.rs b/tests/runtime.rs
new file mode 100644
index 00000000..ddda4860
--- /dev/null
+++ b/tests/runtime.rs
@@ -0,0 +1,52 @@
+extern crate futures;
+extern crate tokio;
+extern crate tokio_io;
+extern crate env_logger;
+
+use futures::prelude::*;
+use tokio::net::{TcpStream, TcpListener};
+use tokio_io::io;
+
+macro_rules! t {
+ ($e:expr) => (match $e {
+ Ok(e) => e,
+ Err(e) => panic!("{} failed with {:?}", stringify!($e), e),
+ })
+}
+
+#[test]
+fn basic_runtime_usage() {
+ let _ = env_logger::init();
+
+ // TODO: Don't require the lazy wrapper
+ tokio::run(::futures::future::lazy(|| {
+ let server = t!(TcpListener::bind(&"127.0.0.1:0".parse().unwrap()));
+ let addr = t!(server.local_addr());
+ let client = TcpStream::connect(&addr);
+
+ let server = server.incoming().take(1)
+ .map_err(|e| println!("accept err = {:?}", e))
+ .for_each(|socket| {
+ tokio::spawn({
+ io::write_all(socket, b"hello")
+ .map(|_| println!("write done"))
+ .map_err(|e| println!("write err = {:?}", e))
+ })
+ })
+ .map(|_| println!("accept done"));
+
+ let client = client
+ .map_err(|e| println!("connect err = {:?}", e))
+ .and_then(|client| {
+ // Read all
+ io::read_to_end(client, vec![])
+ .map(|_| println!("read done"))
+ .map_err(|e| println!("read err = {:?}", e))
+ });
+
+ tokio::spawn({
+ server.join(client)
+ .map(|_| println!("done"))
+ })
+ }));
+}