use auth_framework::server::{
ServiceComplexityLevel, TokenExchangeFactory, TokenExchangeManagerFactory,
TokenExchangeService, TokenExchangeUseCase,
};
#[tokio::test]
async fn test_basic_manager_trait_implementation() {
let manager = TokenExchangeManagerFactory::create_basic_manager("test-secret").unwrap();
let supported_types = manager.supported_subject_token_types();
assert!(!supported_types.is_empty());
assert!(supported_types.contains(&"urn:ietf:params:oauth:token-type:jwt".to_string()));
let capabilities = manager.capabilities();
assert_eq!(capabilities.complexity_level, ServiceComplexityLevel::Basic);
assert!(capabilities.basic_exchange);
assert!(!capabilities.multi_party_chains); assert!(!capabilities.audit_trail); }
#[tokio::test]
async fn test_advanced_manager_trait_implementation() {
use auth_framework::server::SessionManager;
use auth_framework::server::{AdvancedTokenExchangeConfig, AdvancedTokenExchangeManager};
use std::sync::Arc;
let config = AdvancedTokenExchangeConfig::default();
let session_manager = Arc::new(SessionManager::new(Default::default()));
match AdvancedTokenExchangeManager::new(config, session_manager) {
Ok(manager) => {
let supported_types = manager.supported_subject_token_types();
assert!(!supported_types.is_empty());
assert!(supported_types.contains(&"urn:ietf:params:oauth:token-type:jwt".to_string()));
let capabilities = manager.capabilities();
assert_eq!(
capabilities.complexity_level,
ServiceComplexityLevel::Advanced
);
assert!(capabilities.basic_exchange);
assert!(capabilities.multi_party_chains); assert!(capabilities.audit_trail); assert!(capabilities.jwt_operations); }
Err(_) => {
println!("Advanced manager creation failed (expected with default keys)");
let requirements = TokenExchangeFactory::get_recommended_config(
&TokenExchangeUseCase::EnterpriseIntegration,
);
assert!(requirements.needs_audit_trail);
assert!(requirements.needs_jwt_operations);
assert_eq!(
TokenExchangeFactory::determine_manager_type(&requirements),
ServiceComplexityLevel::Advanced
);
}
}
}
#[test]
fn test_factory_recommendations() {
let simple_guide =
TokenExchangeManagerFactory::get_setup_guide(TokenExchangeUseCase::SimpleServiceToService);
assert_eq!(
simple_guide.recommended_manager,
ServiceComplexityLevel::Basic
);
assert!(!simple_guide.requirements.needs_audit_trail);
assert!(!simple_guide.requirements.needs_session_integration);
let enterprise_guide =
TokenExchangeManagerFactory::get_setup_guide(TokenExchangeUseCase::EnterpriseIntegration);
assert_eq!(
enterprise_guide.recommended_manager,
ServiceComplexityLevel::Advanced
);
assert!(enterprise_guide.requirements.needs_audit_trail);
assert!(enterprise_guide.requirements.needs_session_integration);
assert!(enterprise_guide.requirements.needs_jwt_operations);
let federation_guide =
TokenExchangeManagerFactory::get_setup_guide(TokenExchangeUseCase::CrossDomainFederation);
assert_eq!(
federation_guide.recommended_manager,
ServiceComplexityLevel::Advanced
);
assert!(federation_guide.requirements.needs_cross_domain);
assert!(federation_guide.requirements.needs_jwt_operations);
}
#[test]
fn test_validation_utilities() {
use auth_framework::server::ValidationUtils;
assert!(
ValidationUtils::validate_grant_type("urn:ietf:params:oauth:grant-type:token-exchange")
.is_ok()
);
assert!(ValidationUtils::validate_grant_type("invalid").is_err());
let supported_types = vec![
"urn:ietf:params:oauth:token-type:jwt".to_string(),
"urn:ietf:params:oauth:token-type:access_token".to_string(),
];
assert!(
ValidationUtils::validate_token_type(
"urn:ietf:params:oauth:token-type:jwt",
&supported_types
)
.is_ok()
);
assert!(ValidationUtils::validate_token_type("unsupported", &supported_types).is_err());
assert_eq!(
ValidationUtils::normalize_token_type("jwt"),
"urn:ietf:params:oauth:token-type:jwt"
);
assert_eq!(
ValidationUtils::normalize_token_type("urn:ietf:params:oauth:token-type:jwt"),
"urn:ietf:params:oauth:token-type:jwt"
);
assert!(ValidationUtils::is_jwt_token_type(
"urn:ietf:params:oauth:token-type:jwt"
));
assert!(ValidationUtils::is_jwt_token_type(
"urn:ietf:params:oauth:token-type:access_token"
));
assert!(!ValidationUtils::is_jwt_token_type(
"urn:ietf:params:oauth:token-type:saml2"
));
}
#[test]
fn test_manager_type_determination() {
use auth_framework::server::ExchangeRequirements;
let simple_req = ExchangeRequirements {
needs_audit_trail: false,
needs_session_integration: false,
needs_context_preservation: false,
needs_multi_party_chains: false,
needs_jwt_operations: false,
needs_policy_control: false,
needs_cross_domain: false,
max_delegation_depth: 1,
};
assert_eq!(
TokenExchangeFactory::determine_manager_type(&simple_req),
ServiceComplexityLevel::Basic
);
let complex_req = ExchangeRequirements {
needs_audit_trail: true,
needs_session_integration: true,
needs_context_preservation: true,
needs_multi_party_chains: true,
needs_jwt_operations: true,
needs_policy_control: true,
needs_cross_domain: true,
max_delegation_depth: 10,
};
assert_eq!(
TokenExchangeFactory::determine_manager_type(&complex_req),
ServiceComplexityLevel::Advanced
);
let partial_req = ExchangeRequirements {
needs_audit_trail: true, needs_session_integration: false,
needs_context_preservation: false,
needs_multi_party_chains: false,
needs_jwt_operations: false,
needs_policy_control: false,
needs_cross_domain: false,
max_delegation_depth: 1,
};
assert_eq!(
TokenExchangeFactory::determine_manager_type(&partial_req),
ServiceComplexityLevel::Advanced
);
}
#[test]
fn test_performance_characteristics() {
let basic_guide =
TokenExchangeManagerFactory::get_setup_guide(TokenExchangeUseCase::SimpleServiceToService);
let perf = &basic_guide.performance_characteristics;
assert_eq!(perf.memory_footprint, "~50KB base");
assert_eq!(perf.latency, "Sub-millisecond");
assert_eq!(perf.throughput, "10,000+ ops/sec");
let advanced_guide =
TokenExchangeManagerFactory::get_setup_guide(TokenExchangeUseCase::EnterpriseIntegration);
let perf = &advanced_guide.performance_characteristics;
assert_eq!(perf.memory_footprint, "~500KB+ base");
assert_eq!(perf.latency, "1-5ms");
assert_eq!(perf.throughput, "1,000-5,000 ops/sec");
}
#[test]
fn test_setup_instructions() {
let guide =
TokenExchangeManagerFactory::get_setup_guide(TokenExchangeUseCase::SimpleServiceToService);
assert!(!guide.setup_instructions.is_empty());
assert!(guide.setup_instructions.len() >= 3);
assert!(!guide.example_code.is_empty());
assert!(guide.example_code.contains("TokenExchangeManager"));
}