hl-engine 0.1.12

Safe Rust lifecycle API for the standalone HL Linux guest engine
use std::collections::BTreeSet;

use hl_engine::{
    extension::{ExtensionConfig, ExtensionSpec, ProviderId},
    spec::{
        FilesystemSpec, GuestPlatform, HostResourceEstimate, NamespaceSpec, ResourceSpec,
        SecuritySpec, TimeSpec, Validation,
    },
    Guest, Version,
};

#[test]
fn launch_contracts_are_backend_independent() {
    let provider = ProviderId::new("example.storage").expect("portable provider id");
    let specification = ExtensionSpec {
        provider: provider.clone(),
        version: Version::new(1, 2),
        required: true,
        required_features: BTreeSet::new(),
        optional_features: BTreeSet::new(),
        config: ExtensionConfig::empty("example.storage/v1"),
        namespace: Vec::new(),
        services: Vec::new(),
        memory: Vec::new(),
        environment: Vec::new(),
    };

    assert_eq!(specification.provider, provider);
    assert_eq!(specification.version, Version::new(1, 2));
    assert_eq!(Guest::Aarch64, Guest::Aarch64);
}

#[test]
fn launch_policy_models_construct_without_a_backend() {
    let platform = GuestPlatform::linux(Guest::Aarch64);
    let filesystem = FilesystemSpec::default();
    let namespaces = NamespaceSpec::default();
    let resources = ResourceSpec::default();
    let security = SecuritySpec::default();
    let time = TimeSpec::default();
    let validation = Validation {
        selected_extensions: Vec::new(),
        unavailable_optional_extensions: Vec::new(),
        degraded_features: Vec::new(),
        estimated_memory_bytes: 0,
        namespace_conflicts: Vec::new(),
        resources: HostResourceEstimate::default(),
    };

    assert_eq!(platform.architecture, Guest::Aarch64);
    assert_eq!(filesystem, FilesystemSpec::default());
    assert_eq!(namespaces, NamespaceSpec::default());
    assert_eq!(resources, ResourceSpec::default());
    assert_eq!(security, SecuritySpec::default());
    assert_eq!(time, TimeSpec::default());
    assert!(validation.selected_extensions.is_empty());
}