#![allow(dead_code)]
extern crate notify;
extern crate tempdir;
mod utils;
#[cfg(all(target_os = "macos", feature = "timing_tests"))]
mod timing_tests {
use notify::*;
use std::sync::mpsc;
use tempdir::TempDir;
use utils::*;
const TIMEOUT_S: f64 = 5.0;
#[test]
fn fsevents_create_delete_file_0() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.create("file1");
tdir.remove("file1");
let actual = recv_events_with_timeout(&rx, TIMEOUT_S);
if actual == vec![(tdir.mkpath("file1"), op::CREATE | op::REMOVE, None)] {
panic!("single CREATE | REMOVE event");
} else {
assert_eq!(
actual,
vec![
(tdir.mkpath("file1"), op::CREATE, None),
(tdir.mkpath("file1"), op::CREATE | op::REMOVE, None),
]
);
}
}
#[test]
fn fsevents_create_delete_file_1() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.create("file1");
assert_eq!(
recv_events_with_timeout(&rx, 1.0),
vec![(tdir.mkpath("file1"), op::CREATE, None),]
);
tdir.remove("file1");
let actual = recv_events_with_timeout(&rx, TIMEOUT_S);
if actual == vec![(tdir.mkpath("file1"), op::CREATE | op::REMOVE, None)] {
panic!("excessive CREATE event");
} else {
assert_eq!(actual, vec![(tdir.mkpath("file1"), op::REMOVE, None),]);
}
}
#[test]
fn fsevents_create_delete_file_2() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.create("file1");
assert_eq!(
recv_events_with_timeout(&rx, 2.0),
vec![(tdir.mkpath("file1"), op::CREATE, None),]
);
tdir.remove("file1");
let actual = recv_events_with_timeout(&rx, TIMEOUT_S);
if actual == vec![(tdir.mkpath("file1"), op::CREATE | op::REMOVE, None)] {
panic!("excessive CREATE event");
} else {
assert_eq!(actual, vec![(tdir.mkpath("file1"), op::REMOVE, None),]);
}
}
#[test]
fn fsevents_create_delete_file_4() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.create("file1");
assert_eq!(
recv_events_with_timeout(&rx, 4.0),
vec![(tdir.mkpath("file1"), op::CREATE, None),]
);
tdir.remove("file1");
let actual = recv_events_with_timeout(&rx, TIMEOUT_S);
if actual == vec![(tdir.mkpath("file1"), op::CREATE | op::REMOVE, None)] {
panic!("excessive CREATE event");
} else {
assert_eq!(actual, vec![(tdir.mkpath("file1"), op::REMOVE, None),]);
}
}
#[test]
fn fsevents_create_delete_file_8() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.create("file1");
assert_eq!(
recv_events_with_timeout(&rx, 8.0),
vec![(tdir.mkpath("file1"), op::CREATE, None),]
);
tdir.remove("file1");
let actual = recv_events_with_timeout(&rx, TIMEOUT_S);
if actual == vec![(tdir.mkpath("file1"), op::CREATE | op::REMOVE, None)] {
panic!("excessive CREATE event");
} else {
assert_eq!(actual, vec![(tdir.mkpath("file1"), op::REMOVE, None),]);
}
}
#[test]
fn fsevents_create_delete_file_16() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.create("file1");
assert_eq!(
recv_events_with_timeout(&rx, 16.0),
vec![(tdir.mkpath("file1"), op::CREATE, None),]
);
tdir.remove("file1");
let actual = recv_events_with_timeout(&rx, TIMEOUT_S);
if actual == vec![(tdir.mkpath("file1"), op::CREATE | op::REMOVE, None)] {
panic!("excessive CREATE event");
} else {
assert_eq!(actual, vec![(tdir.mkpath("file1"), op::REMOVE, None),]);
}
}
#[test]
fn fsevents_create_delete_file_32() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.create("file1");
assert_eq!(
recv_events_with_timeout(&rx, 32.0),
vec![(tdir.mkpath("file1"), op::CREATE, None),]
);
tdir.remove("file1");
let actual = recv_events_with_timeout(&rx, TIMEOUT_S);
if actual == vec![(tdir.mkpath("file1"), op::CREATE | op::REMOVE, None)] {
panic!("excessive CREATE event");
} else {
assert_eq!(actual, vec![(tdir.mkpath("file1"), op::REMOVE, None),]);
}
}
#[test]
fn fsevents_create_delete_file_64() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.create("file1");
assert_eq!(
recv_events_with_timeout(&rx, 64.0),
vec![(tdir.mkpath("file1"), op::CREATE, None),]
);
tdir.remove("file1");
let actual = recv_events_with_timeout(&rx, TIMEOUT_S);
if actual == vec![(tdir.mkpath("file1"), op::CREATE | op::REMOVE, None)] {
panic!("excessive CREATE event");
} else {
assert_eq!(actual, vec![(tdir.mkpath("file1"), op::REMOVE, None),]);
}
}
#[test]
fn fsevents_rename_rename_file_0() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
tdir.create_all(vec!["file1a"]);
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.rename("file1a", "file1b");
tdir.rename("file1b", "file1c");
let actual = recv_events(&rx);
let cookies = extract_cookies(&actual);
assert_eq!(cookies.len(), 1);
assert_eq!(
actual,
vec![
(tdir.mkpath("file1a"), op::CREATE | op::RENAME, None),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[0])),
(tdir.mkpath("file1c"), op::RENAME, Some(cookies[0])),
]
);
}
#[test]
fn fsevents_rename_rename_file_10() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
tdir.create_all(vec!["file1a"]);
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.rename("file1a", "file1b");
sleep(10);
tdir.rename("file1b", "file1c");
let actual = recv_events(&rx);
let cookies = extract_cookies(&actual);
assert_eq!(cookies.len(), 2);
assert_eq!(
actual,
vec![
(
tdir.mkpath("file1a"),
op::CREATE | op::RENAME,
Some(cookies[0])
),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[0])),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[1])),
(tdir.mkpath("file1c"), op::RENAME, Some(cookies[1])),
]
);
}
#[test]
fn fsevents_rename_rename_file_20() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
tdir.create_all(vec!["file1a"]);
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.rename("file1a", "file1b");
sleep(20);
tdir.rename("file1b", "file1c");
let actual = recv_events(&rx);
let cookies = extract_cookies(&actual);
assert_eq!(cookies.len(), 2);
assert_eq!(
actual,
vec![
(
tdir.mkpath("file1a"),
op::CREATE | op::RENAME,
Some(cookies[0])
),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[0])),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[1])),
(tdir.mkpath("file1c"), op::RENAME, Some(cookies[1])),
]
);
}
#[test]
fn fsevents_rename_rename_back_file_0() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
tdir.create_all(vec!["file1a"]);
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.rename("file1a", "file1b");
tdir.rename("file1b", "file1a");
let actual = recv_events(&rx);
let cookies = extract_cookies(&actual);
assert_eq!(cookies.len(), 1);
assert_eq!(
actual,
vec![
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[0])),
(
tdir.mkpath("file1a"),
op::CREATE | op::RENAME,
Some(cookies[0])
),
]
);
}
#[test]
fn fsevents_rename_rename_back_file_10() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
tdir.create_all(vec!["file1a"]);
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.rename("file1a", "file1b");
sleep(10);
tdir.rename("file1b", "file1a");
let actual = recv_events(&rx);
let cookies = extract_cookies(&actual);
assert_eq!(cookies.len(), 2);
assert_eq!(
actual,
vec![
(
tdir.mkpath("file1a"),
op::CREATE | op::RENAME,
Some(cookies[0])
),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[0])),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[1])),
(
tdir.mkpath("file1a"),
op::CREATE | op::RENAME,
Some(cookies[1])
),
]
);
}
#[test]
fn fsevents_rename_rename_back_file_20() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
tdir.create_all(vec!["file1a"]);
sleep(10);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.rename("file1a", "file1b");
sleep(20);
tdir.rename("file1b", "file1a");
let actual = recv_events(&rx);
let cookies = extract_cookies(&actual);
assert_eq!(cookies.len(), 2);
assert_eq!(
actual,
vec![
(
tdir.mkpath("file1a"),
op::CREATE | op::RENAME,
Some(cookies[0])
),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[0])),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[1])),
(
tdir.mkpath("file1a"),
op::CREATE | op::RENAME,
Some(cookies[1])
),
]
);
}
#[test]
fn fsevents_rename_rename_back_file_sleep() {
let tdir = TempDir::new("temp_dir").expect("failed to create temporary directory");
tdir.create_all(vec!["file1a"]);
sleep(40_000);
let (tx, rx) = mpsc::channel();
let mut watcher: RecommendedWatcher =
Watcher::new_raw(tx).expect("failed to create recommended watcher");
watcher
.watch(tdir.mkpath("."), RecursiveMode::Recursive)
.expect("failed to watch directory");
tdir.rename("file1a", "file1b");
sleep(10);
tdir.rename("file1b", "file1a");
let actual = recv_events(&rx);
let cookies = extract_cookies(&actual);
assert_eq!(cookies.len(), 2);
assert_eq!(
actual,
vec![
(tdir.mkpath("file1a"), op::RENAME, Some(cookies[0])),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[0])),
(tdir.mkpath("file1b"), op::RENAME, Some(cookies[1])),
(tdir.mkpath("file1a"), op::RENAME, Some(cookies[1])),
]
);
}
}