v0.2.5-pre.002

This commit is contained in:
2026-08-19 09:56:01 +02:00
parent c2ccef3849
commit c97a8739ab
19 changed files with 1037 additions and 27 deletions

View File

@@ -0,0 +1,9 @@
// file: crates/ksp-wallet-lib/unit_tests/capability.rs
// version: 1
#[test]
fn capability_variants_are_distinct_and_stable() {
assert_ne!(super::WalletCapability::View, super::WalletCapability::Owner);
assert_eq!(format!("{:?}", super::WalletCapability::View), "View");
assert_eq!(format!("{:?}", super::WalletCapability::Owner), "Owner");
}

View File

@@ -0,0 +1,56 @@
// file: crates/ksp-wallet-lib/unit_tests/metadata.rs
// version: 1
fn test_pubkey() -> ksp_core_lib::Pubkey {
return ksp_core_lib::PRGIDPK_SOLANA_SYSTEM;
}
#[test]
fn authorized_info_exposes_metadata_after_authorization() {
let note = super::WalletNote { id: std::string::String::from("purpose"), text: std::string::String::from("devnet test wallet") };
let info = super::WalletInfo {
format_version: 1,
capability: crate::WalletCapability::View,
pubkey: test_pubkey(),
alias: std::option::Option::Some(std::string::String::from("devnet-owner")),
notes: std::vec![note],
};
assert_eq!(info.format_version(), 1);
assert_eq!(info.capability(), crate::WalletCapability::View);
assert_eq!(info.pubkey(), &test_pubkey());
assert_eq!(info.alias(), std::option::Option::Some("devnet-owner"));
assert_eq!(info.notes()[0].id(), "purpose");
assert_eq!(info.notes()[0].text(), "devnet test wallet");
}
#[test]
fn authorized_info_debug_redacts_alias_and_note_text() {
let note = super::WalletNote {
id: std::string::String::from("NOTE-ID-CANARY"),
text: std::string::String::from("NOTE-SECRET-CANARY"),
};
let info = super::WalletInfo {
format_version: 1,
capability: crate::WalletCapability::Owner,
pubkey: test_pubkey(),
alias: std::option::Option::Some(std::string::String::from("ALIAS-SECRET-CANARY")),
notes: std::vec![note],
};
let rendered = format!("{info:?}");
assert!(rendered.contains("<redacted>"));
assert!(rendered.contains("note_count"));
assert!(!rendered.contains("ALIAS-SECRET-CANARY"));
assert!(!rendered.contains("NOTE-ID-CANARY"));
assert!(!rendered.contains("NOTE-SECRET-CANARY"));
}
#[test]
fn locked_info_does_not_carry_authorized_identity_or_metadata() {
let info = super::LockedWalletInfo { format_version: 1, view_enabled: true };
assert_eq!(info.format_version(), 1);
assert!(info.view_enabled());
let rendered = format!("{info:?}");
assert!(!rendered.contains("Pubkey"));
assert!(!rendered.contains("alias"));
assert!(!rendered.contains("notes"));
}

View File

@@ -0,0 +1,24 @@
// file: crates/ksp-wallet-lib/unit_tests/password.rs
// version: 1
#[test]
fn view_password_debug_is_redacted() {
let password = super::ViewPassword::new(std::string::String::from("VIEW-SECRET-CANARY"));
let rendered = format!("{password:?}");
assert_eq!(rendered, "ViewPassword(<redacted>)");
assert!(!rendered.contains("VIEW-SECRET-CANARY"));
}
#[test]
fn owner_password_debug_is_redacted() {
let password = super::OwnerPassword::new(std::string::String::from("OWNER-SECRET-CANARY"));
let rendered = format!("{password:?}");
assert_eq!(rendered, "OwnerPassword(<redacted>)");
assert!(!rendered.contains("OWNER-SECRET-CANARY"));
}
#[test]
fn password_wrappers_require_drop_for_zeroization() {
assert!(std::mem::needs_drop::<super::ViewPassword>());
assert!(std::mem::needs_drop::<super::OwnerPassword>());
}