extern crate file_lock;
extern crate libc;
mod support;
use std::os::unix::io::RawFd;
use file_lock::*;
use support::TempFile;
#[test]
fn invalid_fd() {
for fd in &[-1 as RawFd, 40125] {
for kind in &[LockKind::Blocking, LockKind::NonBlocking] {
assert_eq!(Lock::new(*fd).lock(kind.clone(), AccessMode::Write),
Err(Error::Errno(libc::consts::os::posix88::EBADF)));
}
assert_eq!(Lock::new(*fd).unlock(), Err(Error::Errno(libc::consts::os::posix88::EBADF)));
}
}
#[test]
fn lock_ok() {
let tmp = TempFile::new("file-lock-test");
for kind in &[LockKind::Blocking, LockKind::NonBlocking] {
assert_eq!(Lock::new(tmp.fd()).lock(kind.clone(), AccessMode::Write), Ok(()));
}
}
#[test]
fn unlock_error() {
let tmp = TempFile::new("file-lock-test");
for kind in &[LockKind::Blocking, LockKind::NonBlocking] {
assert_eq!(Lock::new(tmp.fd()).lock(kind.clone(), AccessMode::Write), Ok(()));
assert_eq!(Lock::new(tmp.fd()).lock(kind.clone(), AccessMode::Write), Ok(()));
assert_eq!(Lock::new(tmp.fd()).unlock(), Ok(()));
}
}
#[test]
fn unlock_ok() {
let tmp = TempFile::new("file-lock-test");
for kind in &[LockKind::Blocking, LockKind::NonBlocking] {
let l = Lock::new(tmp.fd());
assert_eq!(l.lock(kind.clone(), AccessMode::Write), Ok(()));
assert_eq!(l.unlock(), Ok(()));
assert!(l.unlock().is_ok(), "extra unlocks are fine");
}
}