1
0
Fork 0
mirror of https://github.com/imjasonh/krust synced 2026-07-08 06:45:32 +00:00
krust/tests/credential_helper_integration_test.rs
Jason Hall 672ada3dd2
feat: Add RegistryAuth::from_default() convenience methods
- Add from_default() and from_default_str() methods to RegistryAuth
- These methods automatically resolve auth from Docker config and credential helpers
- Update example to demonstrate both explicit and auto auth approaches
- Simplify krust's auth wrapper to use the new convenience method
- Fix test environment variable pollution

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-06-08 10:49:28 -04:00

120 lines
3.2 KiB
Rust

//! Integration tests for credential helper functionality
use anyhow::Result;
use krust::auth::resolve_auth;
use oci_distribution::secrets::RegistryAuth;
use std::env;
use std::fs;
use tempfile::TempDir;
#[test]
fn test_resolve_auth_anonymous() -> Result<()> {
// Create empty temp directory for Docker config
let tmp_dir = TempDir::new()?;
// Save current env vars
let old_docker_config = env::var("DOCKER_CONFIG").ok();
let old_registry_auth = env::var("REGISTRY_AUTH_FILE").ok();
// Set to empty directory
env::set_var("DOCKER_CONFIG", tmp_dir.path());
env::remove_var("REGISTRY_AUTH_FILE");
// Should resolve to anonymous
let auth = resolve_auth("docker.io/library/alpine")?;
assert!(matches!(auth, RegistryAuth::Anonymous));
// Restore env vars
if let Some(val) = old_docker_config {
env::set_var("DOCKER_CONFIG", val);
} else {
env::remove_var("DOCKER_CONFIG");
}
if let Some(val) = old_registry_auth {
env::set_var("REGISTRY_AUTH_FILE", val);
} else {
env::remove_var("REGISTRY_AUTH_FILE");
}
Ok(())
}
#[test]
fn test_resolve_auth_from_config() -> Result<()> {
let tmp_dir = TempDir::new()?;
let config_path = tmp_dir.path().join("config.json");
// Create a test config
let config = r#"{
"auths": {
"test.registry.io": {
"username": "testuser",
"password": "testpass"
}
}
}"#;
fs::write(&config_path, config)?;
// Save current env var
let old_val = env::var("DOCKER_CONFIG").ok();
env::set_var("DOCKER_CONFIG", tmp_dir.path());
// Should resolve to basic auth
let auth = resolve_auth("test.registry.io/myimage")?;
assert!(matches!(auth, RegistryAuth::Basic(user, pass)
if user == "testuser" && pass == "testpass"));
// Restore env var
if let Some(val) = old_val {
env::set_var("DOCKER_CONFIG", val);
} else {
env::remove_var("DOCKER_CONFIG");
}
Ok(())
}
#[test]
fn test_resolve_auth_bearer_token() -> Result<()> {
let tmp_dir = TempDir::new()?;
let config_path = tmp_dir.path().join("config.json");
// Create a test config with bearer token
let config = r#"{
"auths": {
"ghcr.io": {
"registrytoken": "test-bearer-token"
}
}
}"#;
fs::write(&config_path, config)?;
// Save current env vars
let old_docker_config = env::var("DOCKER_CONFIG").ok();
let old_registry_auth = env::var("REGISTRY_AUTH_FILE").ok();
// Set our test config and clear other env vars
env::set_var("DOCKER_CONFIG", tmp_dir.path());
env::remove_var("REGISTRY_AUTH_FILE");
// Should resolve to bearer auth
let auth = resolve_auth("ghcr.io/user/image")?;
assert!(matches!(auth, RegistryAuth::Bearer(token)
if token == "test-bearer-token"));
// Restore env vars
if let Some(val) = old_docker_config {
env::set_var("DOCKER_CONFIG", val);
} else {
env::remove_var("DOCKER_CONFIG");
}
if let Some(val) = old_registry_auth {
env::set_var("REGISTRY_AUTH_FILE", val);
} else {
env::remove_var("REGISTRY_AUTH_FILE");
}
Ok(())
}