From fe126c1a2eb5f7bd60e188a5da2f272285c3c555 Mon Sep 17 00:00:00 2001 From: Godruoyi Date: Fri, 23 Jun 2023 16:34:45 +0800 Subject: [PATCH] Fix #333 Add debug log if load_via_assume_role_with_web_identity is missing some value --- src/tencent/credential.rs | 58 +++++++++++++++++++++++++++++++++++++-- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/src/tencent/credential.rs b/src/tencent/credential.rs index 1a62e84f..75cb8689 100644 --- a/src/tencent/credential.rs +++ b/src/tencent/credential.rs @@ -115,7 +115,18 @@ impl CredentialLoader { (Some(region), Some(token_file), Some(role_arn), Some(provider_id)) => { (region, token_file, role_arn, provider_id) } - _ => return Ok(None), + _ => { + debug!( + "assume_role_with_web_identity is not configured fully, region: {region:?}, \ + web_identity_token_file: {token_file:?}, role_arn: {role_arn:?}, provider_id: {provider_id:?}", + region = &self.config.region, + token_file = &self.config.web_identity_token_file, + role_arn = &self.config.role_arn, + provider_id = &self.config.provider_id, + ); + + return Ok(None); + } }; let token = fs::read_to_string(token_file)?; @@ -210,10 +221,13 @@ struct AssumeRoleWithWebIdentityError { #[cfg(test)] mod tests { use std::env; + use std::fs::File; + use std::io::Read; use std::str::FromStr; + use env_logger::Target; use http::{Request, StatusCode}; - use log::debug; + use log::{debug, LevelFilter}; use once_cell::sync::Lazy; use tokio::runtime::Runtime; @@ -347,4 +361,44 @@ mod tests { Ok(()) } + + #[tokio::test] + async fn test_assume_role_with_web_identity_none() { + let _ = fs::remove_file("test_reqwest.log"); + + let logfile = File::create("test_reqwest.log").expect("create log file failed"); + let _ = env_logger::builder() + .target(Target::Pipe(Box::new(logfile))) + .filter_level(LevelFilter::Debug) + .is_test(true) + .try_init(); + + let config = Config { + region: Some("region".to_string()), + web_identity_token_file: None, // None web_identity_token_file + role_arn: Some("role".to_string()), + provider_id: None, // None provider_id + ..Default::default() + }; + let loader = CredentialLoader::new(reqwest::Client::new(), config); + let cred = loader + .load_via_assume_role_with_web_identity() + .await + .expect("should load credential"); + + assert!(cred.is_none()); + + // test logfile content + let mut logfile = File::open("test_reqwest.log").expect("open log file"); + let mut content = String::new(); + logfile.read_to_string(&mut content).expect("read log file"); + + assert!(content.contains("region: Some(\"region\")")); + assert!(content.contains("web_identity_token_file: None")); + assert!(content.contains("role_arn: Some(\"role\")")); + assert!(content.contains("provider_id: None")); + + // delete log file + fs::remove_file("test_reqwest.log").expect("remove log file"); + } }