summaryrefslogtreecommitdiffstats
path: root/tokio/tests/io_read_exact.rs
diff options
context:
space:
mode:
authorCarl Lerche <me@carllerche.com>2019-06-26 14:42:19 -0700
committerGitHub <noreply@github.com>2019-06-26 14:42:19 -0700
commit11f6b2862fc458204aabbed9a6f919c65215aeb5 (patch)
tree544c19e0b13a21f3eeb66e2eff910f37511c2b71 /tokio/tests/io_read_exact.rs
parent8404f796ac99504ac9fbbce898e78bb02f05804a (diff)
tokio: move I/O helpers to ext traits (#1204)
Refs: #1203
Diffstat (limited to 'tokio/tests/io_read_exact.rs')
-rw-r--r--tokio/tests/io_read_exact.rs46
1 files changed, 46 insertions, 0 deletions
diff --git a/tokio/tests/io_read_exact.rs b/tokio/tests/io_read_exact.rs
new file mode 100644
index 00000000..94e35514
--- /dev/null
+++ b/tokio/tests/io_read_exact.rs
@@ -0,0 +1,46 @@
+#![deny(warnings, rust_2018_idioms)]
+
+use tokio::io::{AsyncRead, AsyncReadExt};
+use tokio_test::assert_ready_ok;
+use tokio_test::task::MockTask;
+
+use pin_utils::pin_mut;
+use std::future::Future;
+use std::io;
+use std::pin::Pin;
+use std::task::{Context, Poll};
+
+#[test]
+fn read_exact() {
+ struct Rd {
+ val: &'static [u8; 11],
+ }
+
+ impl AsyncRead for Rd {
+ fn poll_read(
+ mut self: Pin<&mut Self>,
+ _cx: &mut Context<'_>,
+ buf: &mut [u8]
+ ) -> Poll<io::Result<usize>> {
+ let me = &mut *self;
+ let len = buf.len();
+
+ buf[..].copy_from_slice(&me.val[..len]);
+ Poll::Ready(Ok(buf.len()))
+ }
+ }
+
+ let mut buf = Box::new([0; 8]);
+ let mut task = MockTask::new();
+
+ task.enter(|cx| {
+ let mut rd = Rd { val: b"hello world" };
+
+ let read = rd.read_exact(&mut buf[..]);
+ pin_mut!(read);
+
+ let n = assert_ready_ok!(read.poll(cx));
+ assert_eq!(n, 8);
+ assert_eq!(buf[..], b"hello wo"[..]);
+ });
+}