• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #![warn(rust_2018_idioms)]
2 #![cfg(all(feature = "full", not(target_os = "wasi")))] // WASI does not support all fs operations
3 
4 use tokio::fs;
5 
6 use std::io::Write;
7 use tempfile::tempdir;
8 
9 #[tokio::test]
test_hard_link()10 async fn test_hard_link() {
11     let dir = tempdir().unwrap();
12     let src = dir.path().join("src.txt");
13     let dst = dir.path().join("dst.txt");
14 
15     std::fs::File::create(&src)
16         .unwrap()
17         .write_all(b"hello")
18         .unwrap();
19 
20     fs::hard_link(&src, &dst).await.unwrap();
21 
22     std::fs::File::create(&src)
23         .unwrap()
24         .write_all(b"new-data")
25         .unwrap();
26 
27     let content = fs::read(&dst).await.unwrap();
28     assert_eq!(content, b"new-data");
29 
30     // test that this is not a symlink:
31     assert!(fs::read_link(&dst).await.is_err());
32 }
33 
34 #[cfg(unix)]
35 #[tokio::test]
test_symlink()36 async fn test_symlink() {
37     let dir = tempdir().unwrap();
38     let src = dir.path().join("src.txt");
39     let dst = dir.path().join("dst.txt");
40 
41     std::fs::File::create(&src)
42         .unwrap()
43         .write_all(b"hello")
44         .unwrap();
45 
46     fs::symlink(&src, &dst).await.unwrap();
47 
48     std::fs::File::create(&src)
49         .unwrap()
50         .write_all(b"new-data")
51         .unwrap();
52 
53     let content = fs::read(&dst).await.unwrap();
54     assert_eq!(content, b"new-data");
55 
56     let read = fs::read_link(dst.clone()).await.unwrap();
57     assert!(read == src);
58 
59     let symlink_meta = fs::symlink_metadata(dst.clone()).await.unwrap();
60     assert!(symlink_meta.file_type().is_symlink());
61 }
62