#[cfg(test)]
mod tests {
use crate::source::file::rotation::{compare, Delta, Snapshot};
fn snap(inode: u64, size: u64) -> Snapshot {
Snapshot { inode, size, dev: 1 }
}
#[test]
fn unchanged_snapshot() {
let a = snap(1, 100);
let b = snap(1, 100);
assert_eq!(compare(&a, &b), Delta::Unchanged);
}
#[test]
fn growth_is_append() {
let a = snap(1, 100);
let b = snap(1, 200);
assert_eq!(compare(&a, &b), Delta::Appended);
}
#[test]
fn shrink_is_truncation() {
let a = snap(1, 200);
let b = snap(1, 64);
assert_eq!(compare(&a, &b), Delta::Truncated);
}
#[test]
fn different_inode_is_rotation() {
let a = snap(1, 100);
let b = snap(2, 0);
assert_eq!(compare(&a, &b), Delta::Rotated);
}
#[test]
fn different_device_is_replaced() {
let a = Snapshot { inode: 1, size: 100, dev: 1 };
let b = Snapshot { inode: 1, size: 100, dev: 2 };
assert_eq!(compare(&a, &b), Delta::Replaced);
}
#[test]
fn truncated_and_rotated_both_require_reopen() {
assert!(Delta::Truncated.requires_reopen());
assert!(Delta::Rotated.requires_reopen());
assert!(Delta::Replaced.requires_reopen());
assert!(!Delta::Appended.requires_reopen());
assert!(!Delta::Unchanged.requires_reopen());
}
#[test]
fn zero_size_reopen_after_rotation() {
let old = snap(17, 9_000_000);
let new = snap(42, 0);
assert_eq!(compare(&old, &new), Delta::Rotated);
}
}