libfuse-fs 0.1.13

FUSE Filesystem Library
Documentation
#![cfg(target_os = "linux")]

use anyhow::{Context, Result};
use qlean::{Distro, MachineConfig, create_image, with_machine};

#[tokio::test]
async fn test_with_vm() -> Result<()> {
    let image = create_image(Distro::Debian, "debian-13-generic-amd64").await?;
    let config = MachineConfig {
        core: 4,
        mem: 4096,
        disk: Some(20),
        clear: true,
    };

    with_machine(&image, &config, |vm| {
        Box::pin(async {
            let steps = [
                ("Install dependencies", "sudo apt update && sudo apt install -y git curl pkg-config libssl-dev build-essential"),
                ("Check git", "git --version"),
                ("Clone rk8s repo", "cd /tmp && git clone https://github.com/rk8s-dev/rk8s.git"),
                ("Install Rust", "curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh -s -- -y"),
                ("Check cargo", "source $HOME/.cargo/env && cargo --version"),
                ("Build overlay example", "source $HOME/.cargo/env && cd /tmp/rk8s/project/libfuse-fs && cargo build --example overlay --release"),
                ("Install binary", "sudo install -t /usr/sbin/ -m 700 /tmp/rk8s/project/libfuse-fs/target/release/examples/overlay"),
                ("Set permission", "cd /tmp/rk8s/project/libfuse-fs/tests && chmod +x scripts/xfstests_overlay.sh"),
                ("Run integration tests", "cd /tmp/rk8s/project/libfuse-fs/tests && sudo ./scripts/xfstests_overlay.sh"),
            ];

            for (step_name, cmd) in steps {
                let start = std::time::Instant::now();
                println!("➜ Running step: [{}]", step_name);
                let res = vm.exec(cmd)
                    .await
                    .with_context(|| format!("Step failed: '{}' \nCommand: {}", step_name, cmd))?;
                println!("  ✓ Finished in {:?}", start.elapsed());
                println!("  → STDOUT:\n{}", str::from_utf8(&res.stdout)?.trim());
                println!("  → STDERR:\n{}", str::from_utf8(&res.stderr)?.trim());
            }

            Ok(())
        })
    })
    .await?;

    Ok(())
}