liteboxfs 0.2.0

A modern POSIX filesystem in a SQLite database
Documentation
use liteboxfs::{Connection, CreateOptions, FileMode};
use xpct::{equal, expect};

#[test]
fn filesystem_id_is_stable_within_a_connection() -> liteboxfs::Result<()> {
    let mut conn = Connection::open_in_memory(&CreateOptions::new())?;

    let (first, second) =
        conn.exec(|fs| liteboxfs::Result::Ok((fs.filesystem_id(), fs.filesystem_id())))?;

    expect!(first).to(equal(second));

    Ok(())
}

#[test]
fn filesystem_id_differs_between_databases() -> liteboxfs::Result<()> {
    let mut conn_a = Connection::open_in_memory(&CreateOptions::new())?;
    let mut conn_b = Connection::open_in_memory(&CreateOptions::new())?;

    let id_a = conn_a.exec(|fs| liteboxfs::Result::Ok(fs.filesystem_id()))?;
    let id_b = conn_b.exec(|fs| liteboxfs::Result::Ok(fs.filesystem_id()))?;

    expect!(id_a).to_not(equal(id_b));

    Ok(())
}

#[test]
fn umask_default_is_other_w() -> liteboxfs::Result<()> {
    let mut conn = Connection::open_in_memory(&CreateOptions::new())?;

    conn.exec(|fs| {
        expect!(fs.umask()).to(equal(FileMode::OTHER_W));
        liteboxfs::Result::Ok(())
    })?;

    Ok(())
}

#[test]
fn umask_reflects_set_umask() -> liteboxfs::Result<()> {
    let mut conn = Connection::open_in_memory(&CreateOptions::new())?;

    conn.exec(|fs| {
        let new_umask = FileMode::GROUP_W | FileMode::OTHER_W;
        fs.set_umask(new_umask);
        expect!(fs.umask()).to(equal(new_umask));
        liteboxfs::Result::Ok(())
    })?;

    Ok(())
}

#[test]
fn umask_can_be_cleared() -> liteboxfs::Result<()> {
    let mut conn = Connection::open_in_memory(&CreateOptions::new())?;

    conn.exec(|fs| {
        fs.set_umask(FileMode::empty());
        expect!(fs.umask()).to(equal(FileMode::empty()));
        liteboxfs::Result::Ok(())
    })?;

    Ok(())
}