1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
use std::os::unix::fs::MetadataExt;
use std::os::unix::io::AsRawFd;
use tokio::fs::File;
lock_impl!(File);
allocate!(File);
allocate_size!(File);
#[cfg(test)]
mod test {
extern crate tempdir;
use tokio::fs;
use crate::{lock_contended_error, tokio::AsyncFileExt};
#[tokio::test]
async fn lock_replace() {
let tempdir = tempdir::TempDir::new("fs4").unwrap();
let path = tempdir.path().join("fs4");
let file1 = fs::OpenOptions::new().write(true).create(true).open(&path).await.unwrap();
let file2 = fs::OpenOptions::new().write(true).create(true).open(&path).await.unwrap();
file1.lock_exclusive().unwrap();
file1.lock_shared().unwrap();
file2.lock_shared().unwrap();
assert_eq!(file2.try_lock_exclusive().unwrap_err().raw_os_error(),
lock_contended_error().raw_os_error());
file1.lock_shared().unwrap();
}
}