canic-backup 0.31.1

Manifest and orchestration primitives for Canic fleet backup and restore
Documentation
use super::*;

#[test]
fn restore_status_starts_all_members_as_planned() {
    let manifest = valid_manifest(IdentityMode::Relocatable);

    let plan = RestorePlanner::plan(&manifest, None).expect("plan should build");
    let status = RestoreStatus::from_plan(&plan);

    assert_eq!(status.status_version, 1);
    assert_eq!(status.backup_id.as_str(), plan.backup_id.as_str());
    assert_eq!(
        status.source_environment.as_str(),
        plan.source_environment.as_str()
    );
    assert_eq!(
        status.source_root_canister.as_str(),
        plan.source_root_canister.as_str()
    );
    assert_eq!(status.topology_hash.as_str(), plan.topology_hash.as_str());
    assert!(status.ready);
    assert!(status.readiness_reasons.is_empty());
    assert!(status.verification_required);
    assert_eq!(status.member_count, 2);
    assert_eq!(status.phase_count, 1);
    assert_eq!(status.planned_snapshot_uploads, 2);
    assert_eq!(status.planned_snapshot_loads, 2);
    assert_eq!(status.planned_code_reinstalls, 0);
    assert_eq!(status.planned_verification_checks, 2);
    assert_eq!(status.planned_operations, 6);
    assert_eq!(status.phases.len(), 1);
    assert_eq!(status.phases[0].restore_group, 1);
    assert_eq!(status.phases[0].members.len(), 2);
    assert_eq!(
        status.phases[0].members[0].state,
        RestoreMemberState::Planned
    );
    assert_eq!(status.phases[0].members[0].source_canister, ROOT);
    assert_eq!(status.phases[0].members[0].target_canister, ROOT);
    assert_eq!(status.phases[0].members[0].snapshot_id, "snap-root");
    assert_eq!(status.phases[0].members[0].artifact_path, "artifacts/root");
    assert_eq!(
        status.phases[0].members[1].state,
        RestoreMemberState::Planned
    );
    assert_eq!(status.phases[0].members[1].source_canister, CHILD);
}