dig-capsule 0.5.0

The DIG Network .dig capsule data plane — one crate over the DIGS format, capsule read-crypto, compiler, staging, and the guest/host serve triad.
use crate::imp::core::config::{
    ChunkerConfig, CompilerError, GenerationId, GenerationState, HostImportsConfig, SecretSalt,
    StoreConfig, TrustedHostKey, Visibility,
};
use crate::imp::core::Bytes32;

#[test]
fn chunker_config_defaults() {
    let c = ChunkerConfig::default();
    assert_eq!(c.min_size, 16 * 1024);
    assert_eq!(c.target_size, 64 * 1024);
    assert_eq!(c.max_size, 256 * 1024);
}

#[test]
fn host_imports_config_defaults() {
    let h = HostImportsConfig::default();
    assert_eq!(h.return_buffer_capacity, 64 * 1024);
    assert_eq!(h.max_return_buffer_size, 16 * 1024 * 1024);
    assert_eq!(h.max_random_bytes, 1024);
}

#[test]
fn visibility_variants() {
    let pubv = Visibility::Public;
    let privv = Visibility::Private(SecretSalt([9; 32]));
    assert_ne!(pubv, privv);
    match privv {
        Visibility::Private(SecretSalt(s)) => assert_eq!(s, [9; 32]),
        _ => panic!("expected private"),
    }
}

#[test]
fn store_config_constructs() {
    let cfg = StoreConfig {
        store_id: Bytes32([1; 32]),
        data_dir: "/var/dig".into(),
        max_size: 1024,
        visibility: Visibility::Public,
        label: None,
        description: None,
    };
    assert_eq!(cfg.max_size, 1024);
}

#[test]
fn generation_state_and_id() {
    let id: GenerationId = 7;
    let gs = GenerationState {
        id,
        root: Bytes32([2; 32]),
        timestamp: 100,
    };
    assert_eq!(gs.id, 7);
}

#[test]
fn trusted_host_key_label_form() {
    let key = TrustedHostKey {
        public_key: [3; 48],
        label: "dig-host-key-v1:deadbeef".into(),
    };
    assert!(key.label.starts_with("dig-host-key-v1:"));
}

#[test]
fn compiler_error_no_trusted_keys() {
    let e = CompilerError::NoTrustedKeys;
    assert_eq!(e, CompilerError::NoTrustedKeys);
}