fslite-conformance 0.1.0

A transport-independent, async virtual filesystem with a SQLite-backed persistent backend, HTTP adapter, and CLI.
Documentation
use fslite_core::{Capability, CreateOptions, ErrorCode, RequestContext, VirtualPath};

use crate::ConformanceFactory;

pub(crate) async fn run(factory: &dyn ConformanceFactory) {
    read_only_context_cannot_write(factory).await;
}

async fn read_only_context_cannot_write(factory: &dyn ConformanceFactory) {
    let fs = factory.fresh().await;
    let workspace_id = factory.workspace(&*fs).await;
    let read_only = RequestContext::new(workspace_id, Default::default(), [Capability::Read]);

    let error = fs
        .mkdir(
            &read_only,
            &VirtualPath::parse("/a").unwrap(),
            CreateOptions::default(),
        )
        .await
        .unwrap_err();
    assert_eq!(error.code(), ErrorCode::PermissionDenied);
}