From 9153067d66b7e93efd42561ebba812a15c5b239b Mon Sep 17 00:00:00 2001 From: Kazuyoshi Kato Date: Tue, 13 Nov 2018 15:28:52 -0800 Subject: [PATCH] fs: add tests for directory-related functions (#704) (#724) This change adds a few tests around directory-related functions. --- tokio-fs/Cargo.toml | 1 + tokio-fs/tests/dir.rs | 83 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 tokio-fs/tests/dir.rs diff --git a/tokio-fs/Cargo.toml b/tokio-fs/Cargo.toml index f2e6336bb..e2e9c8497 100644 --- a/tokio-fs/Cargo.toml +++ b/tokio-fs/Cargo.toml @@ -27,6 +27,7 @@ tokio-io = { version = "0.1.6", path = "../tokio-io" } [dev-dependencies] rand = "0.5" tempfile = "3" +tempdir = "0.3" tokio-io = { version = "0.1.6", path = "../tokio-io" } tokio-codec = { version = "0.1.0", path = "../tokio-codec" } tokio = { version = "0.1.7", path = ".." } diff --git a/tokio-fs/tests/dir.rs b/tokio-fs/tests/dir.rs new file mode 100644 index 000000000..776fc9168 --- /dev/null +++ b/tokio-fs/tests/dir.rs @@ -0,0 +1,83 @@ +extern crate futures; +extern crate tempdir; +extern crate tokio_fs; +extern crate tokio_threadpool; + +use futures::sync::oneshot; +use futures::{Future, Stream}; +use std::fs; +use std::sync::{Arc, Mutex}; +use tempdir::TempDir; +use tokio_fs::*; +use tokio_threadpool::Builder; + +fn run_in_pool(f: F) +where + F: Future + Send + 'static, +{ + let pool = Builder::new().pool_size(1).build(); + let (tx, rx) = oneshot::channel::<()>(); + pool.spawn(f.then(|_| tx.send(()))); + rx.wait().unwrap() +} + +#[test] +fn create() { + let base_dir = TempDir::new("base").unwrap(); + let new_dir = base_dir.path().join("foo"); + + run_in_pool({ create_dir(new_dir.clone()) }); + + assert!(new_dir.is_dir()); +} + +#[test] +fn create_all() { + let base_dir = TempDir::new("base").unwrap(); + let new_dir = base_dir.path().join("foo").join("bar"); + + run_in_pool({ create_dir_all(new_dir.clone()) }); + + assert!(new_dir.is_dir()); +} + +#[test] +fn remove() { + let base_dir = TempDir::new("base").unwrap(); + let new_dir = base_dir.path().join("foo"); + + fs::create_dir(new_dir.clone()).unwrap(); + + run_in_pool({ remove_dir(new_dir.clone()) }); + + assert!(!new_dir.exists()); +} + +#[test] +fn read() { + let base_dir = TempDir::new("base").unwrap(); + + let p = base_dir.path(); + fs::create_dir(p.join("aa")).unwrap(); + fs::create_dir(p.join("bb")).unwrap(); + fs::create_dir(p.join("cc")).unwrap(); + + let files = Arc::new(Mutex::new(Vec::new())); + + let f = files.clone(); + let p = p.to_path_buf(); + run_in_pool({ + read_dir(p).flatten_stream().for_each(move |e| { + let s = e.file_name().to_str().unwrap().to_string(); + f.lock().unwrap().push(s); + Ok(()) + }) + }); + + let mut files = files.lock().unwrap(); + files.sort(); // because the order is not guaranteed + assert_eq!( + *files, + vec!["aa".to_string(), "bb".to_string(), "cc".to_string()] + ); +}