tpfs_krypt 7.1.8

An interface for accessing secrets
Documentation
use super::*;
#[cfg(feature = "hashicorp-vault")]
use crate::hashicorp_vault_key_manager::HashicorpVaultKeyManagerConfig;
use crate::{
    config::{KeyManagerConfig, KryptConfig},
    file_key_manager::FileKeyManagerConfig,
    in_memory_key_manager::InMemoryKeyManagerConfig,
};
use std::fs::write;
use tempfile::{tempdir, TempDir};
#[cfg(feature = "hashicorp-vault")]
use url::Url;

fn create_file_keymanager_config() -> (TempDir, KryptConfig) {
    let directory = tempdir().unwrap();

    let config = KryptConfig {
        key_manager_config: KeyManagerConfig::FileKeyManager(FileKeyManagerConfig {
            keypair_directory_path: directory.path().to_str().unwrap().to_string(),
        }),
    };

    (directory, config)
}

#[test]
fn valid_config() {
    let (_drop_me, config) = create_file_keymanager_config();

    let result = from_config(config);

    assert!(result.is_ok());
}

#[test]
fn invalid_empty_config() {
    let config = KryptConfig {
        key_manager_config: KeyManagerConfig::FileKeyManager(FileKeyManagerConfig {
            keypair_directory_path: String::from(""),
        }),
    };
    let result = from_config(config);

    assert!(result.is_err());
}

fn create_ok_config_file_keymanager_config_file() -> (TempDir, TempDir, String) {
    create_file_keymanager_config_file(format_ok_config)
}

fn format_ok_config(keypair_directory_path: String) -> String {
    format!(
        r#"
            [key_manager_config.FileKeyManager]
            keypair_directory_path = "{}"
        "#,
        keypair_directory_path
    )
}

fn create_file_keymanager_config_file<F>(config_formmater: F) -> (TempDir, TempDir, String)
where
    F: Fn(String) -> String,
{
    let keypair_directory = tempdir().unwrap();
    let config_string = config_formmater(keypair_directory.path().to_str().unwrap().to_string());
    let config_directory = tempdir().unwrap();
    let config_directory_string = config_directory.path().to_str().unwrap().to_string();
    let config_file_path = config_directory.path().join("krypt.toml");
    write(config_file_path, config_string).unwrap();

    (keypair_directory, config_directory, config_directory_string)
}

#[test]
fn valid_config_file() {
    let (_drop_me, _drop_me_too, config_path) = create_ok_config_file_keymanager_config_file();

    let result = from_config_path(&config_path);

    assert!(result.is_ok());
}

fn format_invalid_serde_config(keypair_directory_path: String) -> String {
    format!(
        r#"
            [key_manager_config]
            keypair_directory_path = "{}"
        "#,
        keypair_directory_path
    )
}

#[test]
fn invalid_serde_config_file() {
    let (_drop_me, _drop_me_too, config_path) =
        create_file_keymanager_config_file(format_invalid_serde_config);

    let result = from_config_path(&config_path);

    assert!(result.is_err());
}

#[test]
fn valid_in_memory_config() {
    let in_memory_config = InMemoryKeyManagerConfig {
        initial_keys: vec![],
    };
    let config = KryptConfig {
        key_manager_config: KeyManagerConfig::InMemoryKeyManager(in_memory_config),
    };

    let result = from_config(config);

    assert!(result.is_ok());
}

#[test]
#[cfg(feature = "hashicorp-vault")]
fn invalid_vault_config() {
    let vault_key_config = HashicorpVaultKeyManagerConfig {
        vault_path: String::from("new/keypath/location/"),
        vault_token: String::from("sometoken"),
        vault_addr: Url::parse("http://127.0.0.1:3700").unwrap(),
    };
    let config = KryptConfig {
        key_manager_config: KeyManagerConfig::HashicorpVaultKeyManager(vault_key_config),
    };

    let result = from_config(config);

    assert!(result.is_err());
}