use std::path::Path;
use liteboxfs::{Connection, CreateOptions, Device, Error, FileKind, FileOrigin, Owner};
use xpct::{be_err, equal, expect, match_pattern, pattern};
#[test]
fn regular_file_kind() -> liteboxfs::Result<()> {
let mut conn = Connection::open_in_memory(&CreateOptions::new())?;
conn.exec(|fs| {
fs.create("test.txt", FileKind::Regular, Owner::ROOT)?;
let file = fs.open("test.txt")?;
expect!(file.kind()).to(equal(&FileKind::Regular));
liteboxfs::Result::Ok(())
})?;
Ok(())
}
#[test]
fn dir_file_kind() -> liteboxfs::Result<()> {
let mut conn = Connection::open_in_memory(&CreateOptions::new())?;
conn.exec(|fs| {
fs.create("dir", FileKind::Dir, Owner::ROOT)?;
let file = fs.open("dir")?;
expect!(file.kind()).to(equal(&FileKind::Dir));
liteboxfs::Result::Ok(())
})?;
Ok(())
}
#[test]
fn symlink_file_kind() -> liteboxfs::Result<()> {
let mut conn = Connection::open_in_memory(&CreateOptions::new())?;
conn.exec(|fs| {
fs.create(
"symlink.txt",
FileKind::Symlink {
target: "target.txt".into(),
},
Owner::ROOT,
)?;
let file = fs.open("symlink.txt")?;
expect!(file.kind()).to(equal(&FileKind::Symlink {
target: "target.txt".into(),
}));
liteboxfs::Result::Ok(())
})?;
Ok(())
}
#[test]
fn block_device_file_kind() -> liteboxfs::Result<()> {
let mut conn = Connection::open_in_memory(&CreateOptions::new())?;
conn.exec(|fs| {
fs.create(
"device",
FileKind::Block {
dev: Device::new(1, 2),
},
Owner::ROOT,
)?;
let file = fs.open("device")?;
expect!(file.kind()).to(equal(&FileKind::Block {
dev: Device::new(1, 2),
}));
liteboxfs::Result::Ok(())
})?;
Ok(())
}
#[test]
fn char_device_file_kind() -> liteboxfs::Result<()> {
let mut conn = Connection::open_in_memory(&CreateOptions::new())?;
conn.exec(|fs| {
fs.create(
"device",
FileKind::Char {
dev: Device::new(1, 2),
},
Owner::ROOT,
)?;
let file = fs.open("device")?;
expect!(file.kind()).to(equal(&FileKind::Char {
dev: Device::new(1, 2),
}));
liteboxfs::Result::Ok(())
})?;
Ok(())
}
#[test]
fn pipe_file_kind() -> liteboxfs::Result<()> {
let mut conn = Connection::open_in_memory(&CreateOptions::new())?;
conn.exec(|fs| {
fs.create("fifo", FileKind::Pipe, Owner::ROOT)?;
let file = fs.open("fifo")?;
expect!(file.kind()).to(equal(&FileKind::Pipe));
liteboxfs::Result::Ok(())
})?;
Ok(())
}
#[test]
fn create_file_that_already_exists_errors() -> liteboxfs::Result<()> {
let mut conn = Connection::open_in_memory(&CreateOptions::new())?;
conn.exec(|fs| {
fs.create("test.txt", FileKind::Regular, Owner::ROOT)?;
let result = fs.create("test.txt", FileKind::Regular, Owner::ROOT);
expect!(result)
.to(be_err())
.to(match_pattern(pattern!(Error::FileAlreadyExists {
path: FileOrigin::Litebox { locator, .. },
..
} if locator == Path::new("/test.txt"))));
liteboxfs::Result::Ok(())
})?;
Ok(())
}