cloud-sdk 0.50.0

no_std-first provider-neutral cloud SDK foundations.
Documentation
use super::{
    FingerprintBuildError, FingerprintScope, HEADERS, build_canonical_fingerprint, fixture,
    fixture_parts_endpoint, same_fingerprint,
};
use crate::Method;
use crate::transport::{EndpointIdentity, EndpointScheme};

#[test]
fn equivalent_ipv6_endpoint_spellings_have_one_fingerprint_identity() {
    let compact = EndpointIdentity::new(EndpointScheme::Https, "[2001:db8::1]", 443, "/v1");
    let expanded = EndpointIdentity::new(
        EndpointScheme::Https,
        "[2001:0db8:0000:0000:0000:0000:0000:0001]",
        443,
        "/v1",
    );
    let (Ok(compact), Ok(expanded)) = (compact, expanded) else {
        return;
    };
    let Some(compact_prepared) = fixture_parts_endpoint(
        b"{}",
        "/servers",
        Method::Post,
        "list_servers",
        "example",
        "compute",
        &HEADERS,
        compact,
    ) else {
        return;
    };
    let Some(expanded_prepared) = fixture_parts_endpoint(
        b"{}",
        "/servers",
        Method::Post,
        "list_servers",
        "example",
        "compute",
        &HEADERS,
        expanded,
    ) else {
        return;
    };
    assert_eq!(compact, expanded);
    assert!(same_fingerprint(
        compact_prepared,
        compact,
        FingerprintScope::Absent,
        expanded_prepared,
        expanded,
        FingerprintScope::Absent,
    ));
}

#[test]
fn fingerprint_builder_rejects_an_endpoint_outside_prepared_policy() {
    let Some(prepared) = fixture(b"{}", "/servers") else {
        return;
    };
    let Some(other) =
        EndpointIdentity::new(EndpointScheme::Https, "other.example.invalid", 443, "/v1").ok()
    else {
        return;
    };
    let mut storage = [0xA5_u8; 512];
    let result =
        build_canonical_fingerprint(prepared, other, FingerprintScope::Absent, &mut storage);
    assert!(matches!(
        result,
        Err(FingerprintBuildError::EndpointNotAdmitted)
    ));
    drop(result);
    assert!(storage.iter().all(|byte| *byte == 0));
}