49 lines
2.1 KiB
Rust
49 lines
2.1 KiB
Rust
// file: ks-wallet/tests/public_api.rs
|
|
// version: 1
|
|
|
|
//! External crate-root contract tests for the `ks-wallet` public API.
|
|
|
|
fn write_native_identification_fixture(path: &std::path::Path) {
|
|
let mut bytes = std::vec::Vec::new();
|
|
bytes.extend_from_slice(b"KSWALLET");
|
|
bytes.extend_from_slice(&1_u16.to_le_bytes());
|
|
std::fs::write(path, bytes)
|
|
.unwrap_or_else(|error| panic!("native fixture must be writable: {error}"));
|
|
#[cfg(unix)]
|
|
{
|
|
use std::os::unix::fs::PermissionsExt; // rust-rules: trait-import
|
|
std::fs::set_permissions(path, std::fs::Permissions::from_mode(0o600))
|
|
.unwrap_or_else(|error| panic!("native fixture permissions must be set: {error}"));
|
|
}
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn crate_root_exposes_multi_wallet_discovery_without_path_disclosure() {
|
|
assert_eq!(ks_wallet::KSWALLET_FILE_EXTENSION, "kswallet");
|
|
let directory = tempfile::tempdir()
|
|
.unwrap_or_else(|error| panic!("temporary directory must exist: {error}"));
|
|
let manager = ks_wallet::WalletManager::new(directory.path())
|
|
.unwrap_or_else(|error| panic!("unexpected manager error: {error}"));
|
|
let path = directory.path().join("public-api.kswallet");
|
|
write_native_identification_fixture(&path);
|
|
let handles = manager
|
|
.scan()
|
|
.await
|
|
.unwrap_or_else(|error| panic!("scan must succeed: {error}"));
|
|
assert_eq!(handles.len(), 1);
|
|
assert_eq!(handles[0].alias().as_str(), "public-api");
|
|
assert!(!format!("{:?}", handles[0]).contains(directory.path().to_string_lossy().as_ref()));
|
|
}
|
|
|
|
#[test]
|
|
fn crate_root_exposes_non_secret_temporary_identity() {
|
|
let alias = ks_wallet::WalletAlias::parse("public-identity")
|
|
.unwrap_or_else(|error| panic!("unexpected alias error: {error}"));
|
|
let wallet = ks_wallet::TemporaryWallet::generate(alias.clone());
|
|
let identity: ks_wallet::WalletIdentity = wallet.identity();
|
|
let summary: ks_wallet::WalletSummary = wallet.summary();
|
|
assert_eq!(identity.alias, alias);
|
|
assert_eq!(identity.public_key, summary.public_key);
|
|
assert_eq!(identity.persistence, ks_wallet::WalletPersistence::Temporary);
|
|
}
|