v0.5.2-pre.006-fix-010
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: ks-config/src/settings.rs
|
||||
// version: 24
|
||||
// version: 25
|
||||
|
||||
//! Resolved runtime configuration models retained during the `0.5.1` source-document split.
|
||||
|
||||
@@ -222,8 +222,10 @@ pub struct AccountListenerConfig {
|
||||
/// Wallet configuration.
|
||||
#[derive(Clone, serde::Deserialize, Eq, PartialEq)]
|
||||
pub struct WalletConfig {
|
||||
/// Wallet directory path.
|
||||
/// Persistent native wallet directory path.
|
||||
pub wallet_dir: std::string::String,
|
||||
/// Profile-specific temporary wallet and fixture directory path.
|
||||
pub temporary_wallet_dir: std::string::String,
|
||||
/// Selected cluster name.
|
||||
pub cluster: std::string::String,
|
||||
/// Optional persistent native wallet alias selected by this profile.
|
||||
@@ -734,6 +736,10 @@ pub(crate) fn validate_wallet(config: &WalletConfig) -> ks_core::Result<()> {
|
||||
std::result::Result::Ok(()) => (),
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
}
|
||||
match require_non_empty(&config.temporary_wallet_dir, "wallet.temporary_wallet_dir") {
|
||||
std::result::Result::Ok(()) => (),
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
}
|
||||
match require_non_empty(&config.cluster, "wallet.cluster") {
|
||||
std::result::Result::Ok(()) => (),
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// file: ks-config/src/wallet.rs
|
||||
// version: 4
|
||||
// version: 6
|
||||
|
||||
//! Independent wallet configuration document loading and validation.
|
||||
|
||||
@@ -21,7 +21,7 @@ pub struct WalletConfigDocument {
|
||||
pub struct WalletProfileConfig {
|
||||
/// Profile code.
|
||||
pub name: std::string::String,
|
||||
/// Wallet subdirectory or absolute directory.
|
||||
/// Temporary wallet/fixture subdirectory or absolute directory.
|
||||
pub directory: std::string::String,
|
||||
/// Selected cluster name.
|
||||
pub cluster: std::string::String,
|
||||
@@ -143,14 +143,16 @@ pub fn resolved_wallet_profile(
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => return std::result::Result::Err(error),
|
||||
};
|
||||
let configured = std::path::PathBuf::from(profile.directory.as_str());
|
||||
let wallet_dir = if configured.is_absolute() {
|
||||
configured
|
||||
let persistent_wallet_dir = std::path::PathBuf::from(document.wallets_directory.as_str());
|
||||
let configured_temporary = std::path::PathBuf::from(profile.directory.as_str());
|
||||
let temporary_wallet_dir = if configured_temporary.is_absolute() {
|
||||
configured_temporary
|
||||
} else {
|
||||
std::path::PathBuf::from(document.wallets_directory.as_str()).join(configured)
|
||||
persistent_wallet_dir.join(configured_temporary)
|
||||
};
|
||||
let resolved = crate::WalletConfig {
|
||||
wallet_dir: wallet_dir.display().to_string(),
|
||||
wallet_dir: persistent_wallet_dir.display().to_string(),
|
||||
temporary_wallet_dir: temporary_wallet_dir.display().to_string(),
|
||||
cluster: profile.cluster.clone(),
|
||||
wallet_alias: profile.wallet_alias.clone(),
|
||||
temporary_wallet_enabled: profile.temporary_wallet_enabled,
|
||||
@@ -233,6 +235,25 @@ mod tests {
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn resolved_profile_separates_persistent_and_temporary_wallet_directories() {
|
||||
let resolved_raw = crate::resolve_environment_placeholders(DEFAULT_WALLET);
|
||||
let document = match super::parse_wallet_json(resolved_raw.as_str()) {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("resolved wallet config failed: {error}"),
|
||||
};
|
||||
let resolved = match super::resolved_wallet_profile(&document, "local_devnet") {
|
||||
std::result::Result::Ok(value) => value,
|
||||
std::result::Result::Err(error) => panic!("wallet profile resolution failed: {error}"),
|
||||
};
|
||||
assert!(!resolved.wallet_dir.contains("${"));
|
||||
let expected_temporary = std::path::PathBuf::from(resolved.wallet_dir.as_str())
|
||||
.join("temporary/local_devnet")
|
||||
.display()
|
||||
.to_string();
|
||||
assert_eq!(resolved.temporary_wallet_dir, expected_temporary);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn wallet_profile_without_persistent_alias_remains_backward_compatible() {
|
||||
let mut value = match serde_json::from_str::<serde_json::Value>(DEFAULT_WALLET) {
|
||||
|
||||
Reference in New Issue
Block a user