feat: added configurable cache path via the COYOTE_CACHE_PATH environment variable
This commit is contained in:
@@ -33,8 +33,14 @@ pub fn local_path(name: &str) -> PathBuf {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn cache_path() -> PathBuf {
|
pub fn cache_path() -> PathBuf {
|
||||||
|
if let Ok(v) = env::var(get_env_name("cache_dir")) {
|
||||||
|
PathBuf::from(v)
|
||||||
|
} else if let Ok(v) = env::var("XDG_CACHE_HOME") {
|
||||||
|
PathBuf::from(v).join(env!("CARGO_CRATE_NAME"))
|
||||||
|
} else {
|
||||||
let base_dir = dirs::cache_dir().unwrap_or_else(env::temp_dir);
|
let base_dir = dirs::cache_dir().unwrap_or_else(env::temp_dir);
|
||||||
base_dir.join(env!("CARGO_CRATE_NAME"))
|
base_dir.join(env!("CARGO_CRATE_NAME"))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn sandbox_kit_override() -> Option<PathBuf> {
|
pub fn sandbox_kit_override() -> Option<PathBuf> {
|
||||||
|
|||||||
@@ -645,6 +645,7 @@ mod tests {
|
|||||||
|
|
||||||
mod vault_mixins {
|
mod vault_mixins {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
use crate::utils::get_env_name;
|
||||||
use gman::providers::aws_secrets_manager::AwsSecretsManagerProvider;
|
use gman::providers::aws_secrets_manager::AwsSecretsManagerProvider;
|
||||||
use gman::providers::azure_key_vault::AzureKeyVaultProvider;
|
use gman::providers::azure_key_vault::AzureKeyVaultProvider;
|
||||||
use gman::providers::gcp_secret_manager::GcpSecretManagerProvider;
|
use gman::providers::gcp_secret_manager::GcpSecretManagerProvider;
|
||||||
@@ -652,6 +653,46 @@ mod tests {
|
|||||||
use gman::providers::local::LocalProvider;
|
use gman::providers::local::LocalProvider;
|
||||||
use gman::providers::one_password::OnePasswordProvider;
|
use gman::providers::one_password::OnePasswordProvider;
|
||||||
use serial_test::serial;
|
use serial_test::serial;
|
||||||
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
|
|
||||||
|
struct TestCacheDirGuard {
|
||||||
|
key: String,
|
||||||
|
previous: Option<std::ffi::OsString>,
|
||||||
|
path: PathBuf,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl TestCacheDirGuard {
|
||||||
|
fn new() -> Self {
|
||||||
|
let key = get_env_name("cache_dir");
|
||||||
|
let previous = env::var_os(&key);
|
||||||
|
let unique = SystemTime::now()
|
||||||
|
.duration_since(UNIX_EPOCH)
|
||||||
|
.unwrap()
|
||||||
|
.as_nanos();
|
||||||
|
let path = env::temp_dir().join(format!("coyote-sandbox-vault-tests-{unique}"));
|
||||||
|
fs::create_dir_all(&path).unwrap();
|
||||||
|
unsafe {
|
||||||
|
env::set_var(&key, &path);
|
||||||
|
}
|
||||||
|
Self {
|
||||||
|
key,
|
||||||
|
previous,
|
||||||
|
path,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for TestCacheDirGuard {
|
||||||
|
fn drop(&mut self) {
|
||||||
|
unsafe {
|
||||||
|
match &self.previous {
|
||||||
|
Some(v) => env::set_var(&self.key, v),
|
||||||
|
None => env::remove_var(&self.key),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
let _ = fs::remove_dir_all(&self.path);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn returns_none_for_local() {
|
fn returns_none_for_local() {
|
||||||
@@ -664,6 +705,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
#[serial]
|
#[serial]
|
||||||
fn returns_some_for_aws() {
|
fn returns_some_for_aws() {
|
||||||
|
let _guard = TestCacheDirGuard::new();
|
||||||
let p = SupportedProvider::AwsSecretsManager {
|
let p = SupportedProvider::AwsSecretsManager {
|
||||||
provider_def: AwsSecretsManagerProvider {
|
provider_def: AwsSecretsManagerProvider {
|
||||||
aws_profile: None,
|
aws_profile: None,
|
||||||
@@ -680,6 +722,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
#[serial]
|
#[serial]
|
||||||
fn returns_some_for_gcp() {
|
fn returns_some_for_gcp() {
|
||||||
|
let _guard = TestCacheDirGuard::new();
|
||||||
let p = SupportedProvider::GcpSecretManager {
|
let p = SupportedProvider::GcpSecretManager {
|
||||||
provider_def: GcpSecretManagerProvider {
|
provider_def: GcpSecretManagerProvider {
|
||||||
gcp_project_id: None,
|
gcp_project_id: None,
|
||||||
@@ -695,6 +738,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
#[serial]
|
#[serial]
|
||||||
fn returns_some_for_one_password() {
|
fn returns_some_for_one_password() {
|
||||||
|
let _guard = TestCacheDirGuard::new();
|
||||||
let p = SupportedProvider::OnePassword {
|
let p = SupportedProvider::OnePassword {
|
||||||
provider_def: OnePasswordProvider {
|
provider_def: OnePasswordProvider {
|
||||||
vault: None,
|
vault: None,
|
||||||
@@ -711,6 +755,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
#[serial]
|
#[serial]
|
||||||
fn returns_some_for_azure() {
|
fn returns_some_for_azure() {
|
||||||
|
let _guard = TestCacheDirGuard::new();
|
||||||
let p = SupportedProvider::AzureKeyVault {
|
let p = SupportedProvider::AzureKeyVault {
|
||||||
provider_def: AzureKeyVaultProvider { vault_name: None },
|
provider_def: AzureKeyVaultProvider { vault_name: None },
|
||||||
};
|
};
|
||||||
@@ -724,6 +769,7 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
#[serial]
|
#[serial]
|
||||||
fn returns_some_for_gopass() {
|
fn returns_some_for_gopass() {
|
||||||
|
let _guard = TestCacheDirGuard::new();
|
||||||
let p = SupportedProvider::Gopass {
|
let p = SupportedProvider::Gopass {
|
||||||
provider_def: GopassProvider { store: None },
|
provider_def: GopassProvider { store: None },
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user