#![warn(rust_2018_idioms)] #![cfg(all(feature = "full", not(tokio_wasi)))] // Wasi does not support file operations use tokio::fs; use std::io::prelude::*; use std::io::BufReader; use tempfile::tempdir; #[tokio::test] async fn test_hard_link() { let dir = tempdir().unwrap(); let src = dir.path().join("src.txt"); let dst = dir.path().join("dst.txt"); { let mut file = std::fs::File::create(&src).unwrap(); file.write_all(b"hello").unwrap(); } let dst_2 = dst.clone(); assert!(fs::hard_link(src, dst_2.clone()).await.is_ok()); let mut content = String::new(); { let file = std::fs::File::open(dst).unwrap(); let mut reader = BufReader::new(file); reader.read_to_string(&mut content).unwrap(); } assert!(content == "hello"); } #[cfg(unix)] #[tokio::test] async fn test_symlink() { let dir = tempdir().unwrap(); let src = dir.path().join("src.txt"); let dst = dir.path().join("dst.txt"); { let mut file = std::fs::File::create(&src).unwrap(); file.write_all(b"hello").unwrap(); } let src_2 = src.clone(); let dst_2 = dst.clone(); assert!(fs::symlink(src_2.clone(), dst_2.clone()).await.is_ok()); let mut content = String::new(); { let file = std::fs::File::open(dst.clone()).unwrap(); let mut reader = BufReader::new(file); reader.read_to_string(&mut content).unwrap(); } assert!(content == "hello"); let read = fs::read_link(dst.clone()).await.unwrap(); assert!(read == src); let symlink_meta = fs::symlink_metadata(dst.clone()).await.unwrap(); assert!(symlink_meta.file_type().is_symlink()); }