#[cfg(test)]
mod proxy_integration_tests {
use keeper_secrets_manager_core::cache::KSMCache;
use keeper_secrets_manager_core::core::{ClientOptions, SecretsManager};
use keeper_secrets_manager_core::enums::KvStoreType;
use keeper_secrets_manager_core::storage::InMemoryKeyValueStorage;
use log::Level;
use std::env;
#[test]
#[ignore] fn test_proxy_with_qa_vault() {
let _ = env_logger::builder()
.filter_level(log::LevelFilter::Info)
.try_init();
let config_str = env::var("KSM_CONFIG").expect(
"KSM_CONFIG environment variable not set. \
Run: export KSM_CONFIG=$(cat ~/.keeper/qa_credential)",
);
println!("✓ Found KSM_CONFIG environment variable");
let storage = InMemoryKeyValueStorage::new(Some(config_str))
.expect("Failed to create InMemoryKeyValueStorage");
let config = KvStoreType::InMemory(storage);
println!("✓ Created storage with QA credentials");
let proxy_url = env::var("TEST_PROXY_URL").unwrap_or("http://localhost:8080".to_string());
println!("✓ Using proxy: {}", proxy_url);
let options = ClientOptions::new(
String::new(), config,
Level::Info,
None,
None,
Some(proxy_url.clone()), KSMCache::None,
);
println!("✓ Created ClientOptions with proxy");
let mut secrets_manager =
SecretsManager::new(options).expect("Failed to create SecretsManager");
println!("✓ Initialized SecretsManager");
println!("\n=== Making API request through proxy ===");
println!("Check your proxy logs (mitmproxy UI) for requests to Keeper servers\n");
match secrets_manager.get_secrets(Vec::new()) {
Ok(secrets) => {
println!(
"✓ Successfully retrieved {} secrets through proxy!",
secrets.len()
);
if !secrets.is_empty() {
println!("\nFirst secret UID: {}", secrets[0].uid);
}
println!("\n✅ PROXY TEST PASSED!");
println!(" - Request went through proxy at {}", proxy_url);
println!(" - Successfully retrieved secrets from QA vault");
println!(" - Check proxy logs to confirm traffic routing");
}
Err(e) => {
eprintln!("\n❌ Failed to retrieve secrets: {:?}", e);
panic!(
"Proxy integration test failed. Common issues:\n\
1. Is mitmproxy running on port 8080?\n\
2. Is KSM_CONFIG set correctly?\n\
3. Are QA vault credentials valid?"
);
}
}
}
#[test]
#[ignore] fn test_proxy_with_authentication() {
let _ = env_logger::builder()
.filter_level(log::LevelFilter::Info)
.try_init();
let config_str = env::var("KSM_CONFIG").expect("KSM_CONFIG not set");
let storage =
InMemoryKeyValueStorage::new(Some(config_str)).expect("Failed to create storage");
let config = KvStoreType::InMemory(storage);
let proxy_url = "http://testuser:testpass@localhost:8080";
println!("Testing proxy with authentication: {}", proxy_url);
let options = ClientOptions::new(
String::new(),
config,
Level::Info,
None,
None,
Some(proxy_url.to_string()),
KSMCache::None,
);
let mut secrets_manager = SecretsManager::new(options)
.expect("Failed to create SecretsManager with authenticated proxy");
match secrets_manager.get_secrets(Vec::new()) {
Ok(secrets) => {
println!(
"✓ Authenticated proxy test passed! Retrieved {} secrets",
secrets.len()
);
}
Err(e) => {
println!("Note: Authentication test may fail if proxy doesn't require auth");
println!("Error: {:?}", e);
}
}
}
#[test]
#[ignore] fn test_env_var_proxy() {
let _ = env_logger::builder()
.filter_level(log::LevelFilter::Info)
.try_init();
env::set_var("HTTPS_PROXY", "http://localhost:8080");
println!("Set HTTPS_PROXY=http://localhost:8080");
let config_str = env::var("KSM_CONFIG").expect("KSM_CONFIG not set");
let storage =
InMemoryKeyValueStorage::new(Some(config_str)).expect("Failed to create storage");
let config = KvStoreType::InMemory(storage);
let options = ClientOptions::new(
String::new(),
config,
Level::Info,
None,
None,
None, KSMCache::None,
);
let mut secrets_manager =
SecretsManager::new(options).expect("Failed to create SecretsManager");
println!("Testing environment variable proxy fallback...");
match secrets_manager.get_secrets(Vec::new()) {
Ok(secrets) => {
println!("✓ Environment variable proxy test passed!");
println!(" Retrieved {} secrets using HTTPS_PROXY", secrets.len());
}
Err(e) => {
eprintln!("❌ Environment variable proxy test failed: {:?}", e);
panic!("Failed to use HTTPS_PROXY environment variable");
}
}
env::remove_var("HTTPS_PROXY");
}
}