1 #![warn(rust_2018_idioms)]
2 #![cfg(feature = "full")]
3 
4 use tokio::fs;
5 use tokio_test::assert_ok;
6 
7 use std::sync::{Arc, Mutex};
8 use tempfile::tempdir;
9 
10 #[tokio::test]
create_dir()11 async fn create_dir() {
12     let base_dir = tempdir().unwrap();
13     let new_dir = base_dir.path().join("foo");
14     let new_dir_2 = new_dir.clone();
15 
16     assert_ok!(fs::create_dir(new_dir).await);
17 
18     assert!(new_dir_2.is_dir());
19 }
20 
21 #[tokio::test]
create_all()22 async fn create_all() {
23     let base_dir = tempdir().unwrap();
24     let new_dir = base_dir.path().join("foo").join("bar");
25     let new_dir_2 = new_dir.clone();
26 
27     assert_ok!(fs::create_dir_all(new_dir).await);
28     assert!(new_dir_2.is_dir());
29 }
30 
31 #[tokio::test]
remove()32 async fn remove() {
33     let base_dir = tempdir().unwrap();
34     let new_dir = base_dir.path().join("foo");
35     let new_dir_2 = new_dir.clone();
36 
37     std::fs::create_dir(new_dir.clone()).unwrap();
38 
39     assert_ok!(fs::remove_dir(new_dir).await);
40     assert!(!new_dir_2.exists());
41 }
42 
43 #[tokio::test]
read_inherent()44 async fn read_inherent() {
45     let base_dir = tempdir().unwrap();
46 
47     let p = base_dir.path();
48     std::fs::create_dir(p.join("aa")).unwrap();
49     std::fs::create_dir(p.join("bb")).unwrap();
50     std::fs::create_dir(p.join("cc")).unwrap();
51 
52     let files = Arc::new(Mutex::new(Vec::new()));
53 
54     let f = files.clone();
55     let p = p.to_path_buf();
56 
57     let mut entries = fs::read_dir(p).await.unwrap();
58 
59     while let Some(e) = assert_ok!(entries.next_entry().await) {
60         let s = e.file_name().to_str().unwrap().to_string();
61         f.lock().unwrap().push(s);
62     }
63 
64     let mut files = files.lock().unwrap();
65     files.sort(); // because the order is not guaranteed
66     assert_eq!(
67         *files,
68         vec!["aa".to_string(), "bb".to_string(), "cc".to_string()]
69     );
70 }
71 
72 #[tokio::test]
read_stream()73 async fn read_stream() {
74     use tokio::stream::StreamExt;
75 
76     let base_dir = tempdir().unwrap();
77 
78     let p = base_dir.path();
79     std::fs::create_dir(p.join("aa")).unwrap();
80     std::fs::create_dir(p.join("bb")).unwrap();
81     std::fs::create_dir(p.join("cc")).unwrap();
82 
83     let files = Arc::new(Mutex::new(Vec::new()));
84 
85     let f = files.clone();
86     let p = p.to_path_buf();
87 
88     let mut entries = fs::read_dir(p).await.unwrap();
89 
90     while let Some(res) = entries.next().await {
91         let e = assert_ok!(res);
92         let s = e.file_name().to_str().unwrap().to_string();
93         f.lock().unwrap().push(s);
94     }
95 
96     let mut files = files.lock().unwrap();
97     files.sort(); // because the order is not guaranteed
98     assert_eq!(
99         *files,
100         vec!["aa".to_string(), "bb".to_string(), "cc".to_string()]
101     );
102 }
103