]>
git.proxmox.com Git - rustc.git/blob - vendor/flate2/tests/tokio.rs
1 #![cfg(feature = "tokio")]
7 extern crate tokio_tcp
;
8 extern crate tokio_threadpool
;
10 use std
::io
::{Read, Write}
;
12 use std
::net
::{Shutdown, TcpListener}
;
17 use flate2
::Compression
;
19 use rand
::{thread_rng, Rng}
;
20 use tokio_io
::io
::{copy, shutdown}
;
21 use tokio_io
::AsyncRead
;
22 use tokio_tcp
::TcpStream
;
25 fn tcp_stream_echo_pattern() {
27 const M
: usize = 16 * 1024;
29 let listener
= TcpListener
::bind("127.0.0.1:0").unwrap();
30 let addr
= listener
.local_addr().unwrap();
31 let t
= thread
::spawn(move || {
32 let a
= listener
.accept().unwrap().0;
33 let b
= a
.try_clone().unwrap();
35 let t
= thread
::spawn(move || {
36 let mut b
= read
::DeflateDecoder
::new(b
);
39 b
.read_exact(&mut buf
).unwrap();
40 for byte
in buf
.iter() {
45 assert_eq
!(b
.read(&mut buf
).unwrap(), 0);
48 let mut a
= write
::ZlibEncoder
::new(a
, Compression
::default());
51 a
.write_all(&buf
).unwrap();
53 a
.finish().unwrap().shutdown(Shutdown
::Write
).unwrap();
58 let stream
= TcpStream
::connect(&addr
);
61 let (a
, b
) = s
.split();
62 let a
= read
::ZlibDecoder
::new(a
);
63 let b
= write
::DeflateEncoder
::new(b
, Compression
::default());
67 let (amt
, _a
, b
) = result
.unwrap();
68 assert_eq
!(amt
, (N
as u64) * (M
as u64));
69 shutdown(b
).map(|_
| ())
71 .map_err(|err
| panic
!("{}", err
));
73 let threadpool
= tokio_threadpool
::Builder
::new().build();
74 threadpool
.spawn(copy
);
75 threadpool
.shutdown().wait().unwrap();
81 let v
= iter
::repeat(())
83 .map(|()| thread_rng().gen
::<u8>())
85 let listener
= TcpListener
::bind("127.0.0.1:0").unwrap();
86 let addr
= listener
.local_addr().unwrap();
88 let t
= thread
::spawn(move || {
89 let a
= listener
.accept().unwrap().0;
90 let b
= a
.try_clone().unwrap();
92 let mut v3
= v2
.clone();
93 let t
= thread
::spawn(move || {
94 let mut b
= read
::DeflateDecoder
::new(b
);
95 let mut buf
= [0; 1024];
97 let n
= b
.read(&mut buf
).unwrap();
98 for (actual
, expected
) in buf
[..n
].iter().zip(&v3
) {
99 assert_eq
!(*actual
, *expected
);
104 assert_eq
!(b
.read(&mut buf
).unwrap(), 0);
107 let mut a
= write
::ZlibEncoder
::new(a
, Compression
::default());
108 a
.write_all(&v2
).unwrap();
109 a
.finish().unwrap().shutdown(Shutdown
::Write
).unwrap();
114 let stream
= TcpStream
::connect(&addr
);
117 let (a
, b
) = s
.split();
118 let a
= read
::ZlibDecoder
::new(a
);
119 let b
= write
::DeflateEncoder
::new(b
, Compression
::default());
122 .then(move |result
| {
123 let (amt
, _a
, b
) = result
.unwrap();
124 assert_eq
!(amt
, v
.len() as u64);
125 shutdown(b
).map(|_
| ())
127 .map_err(|err
| panic
!("{}", err
));
129 let threadpool
= tokio_threadpool
::Builder
::new().build();
130 threadpool
.spawn(copy
);
131 threadpool
.shutdown().wait().unwrap();