Skip to content

Commit

Permalink
add a new test if param path isnt found try to bubble error up furthe…
Browse files Browse the repository at this point in the history
…r into main
  • Loading branch information
jeremiahlukus committed Jun 13, 2024
1 parent 8a852bd commit 70a5c7f
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 10 deletions.
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 7 additions & 6 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,9 @@ const ENV_FILE: &str = "/tmp/crypteia.json";
async fn main() -> Result<(), Error> {
log::cloudwatch_metric("main", "initialized", false, None);
let env_vars: HashMap<String, String> = std::env::vars().collect();
let env_map = ssm::get_envs(env_vars).await.unwrap();
let env_map = ssm::get_envs(env_vars).await?;
log::cloudwatch_metric("main", "fetched", false, None);
write_envs_to_tmp_json(env_map);
write_envs_to_tmp_json(env_map)?;
let func = service_fn(parameters_extension);
lambda_extension::run(func).await
}
Expand All @@ -28,8 +28,9 @@ async fn parameters_extension(event: LambdaEvent) -> Result<(), Error> {
Ok(())
}

fn write_envs_to_tmp_json(env_map: HashMap<String, String>) {
fn write_envs_to_tmp_json(env_map: HashMap<String, String>) -> Result<(), std::io::Error> {
let envs_json = serde_json::to_string(&env_map).unwrap();
let mut file = File::create(ENV_FILE).unwrap();
file.write_all(envs_json.as_bytes()).unwrap();
}
let mut file = File::create(ENV_FILE)?;
file.write_all(envs_json.as_bytes())?;
Ok(())
}
48 changes: 45 additions & 3 deletions src/ssm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ use futures::future::join_all;
use std::collections::HashMap;
use tokio::{spawn, task::JoinHandle};


pub async fn get_envs(env_vars: HashMap<String, String>) -> Result<HashMap<String, String>> {
let sdk_config = aws_config::load_from_env().await;
let ssm_client: aws_sdk_ssm::Client = aws_sdk_ssm::Client::new(&sdk_config);
Expand Down Expand Up @@ -31,7 +32,7 @@ pub async fn get_envs(env_vars: HashMap<String, String>) -> Result<HashMap<Strin
results.insert(key, value);
});
}
Err(error) => return Err(error), // Return error if parameter is not found
Err(error) => return Err(anyhow::anyhow!(format!("Parameter not found: {}", error))), // Return error if parameter is not found
},
Err(error) => return Err(anyhow::anyhow!(error.to_string())), // Return error if task fails
}
Expand All @@ -55,6 +56,8 @@ async fn ssm_get_parameter(
Ok(response) => {
if let Some(parameter) = response.parameter {
items.insert(name, parameter.value.unwrap());
} else {
return Err(anyhow::anyhow!("Parameter not found: {}", path));
}
}
Err(error) => {
Expand Down Expand Up @@ -120,6 +123,9 @@ async fn ssm_get_parameters_by_path(
}
}
}
if items.is_empty() {
return Err(anyhow::anyhow!("Parameters not found for path: {}", path));
}
Ok(items)
}

Expand Down Expand Up @@ -166,6 +172,7 @@ mod test {
.overwrite(true)
.send()
.await?;

let env_vars: HashMap<String, String> = HashMap::from([
("EXISTING".to_string(), "existingvalue".to_string()),
(
Expand All @@ -189,18 +196,53 @@ mod test {
("DB_URL".to_string(), "mysql2://u:p@host:3306".to_string()),
("NR_KEY".to_string(), "z6y5x4w3v2u1".to_string()),
]);

match get_envs(env_vars.clone()).await {
Ok(result) => println!("BLAH ::: {:?}", result),
Err(e) => println!("Error: {:?}", e),
}

let results = get_envs(env_vars).await.expect("Should fetch parameters");


assert_eq!(results, expected);
Ok(())
}

#[tokio::test]
async fn should_fail_if_param_not_found() {
async fn should_fail_if_param_not_found() -> Result<()> {
let sdk_config = aws_config::load_from_env().await;
let ssm_client = aws_sdk_ssm::Client::new(&sdk_config);
ssm_client
.put_parameter()
.name("/crypteia/v5/myapp/SECRET2".to_owned())
.value("1A2B3C4D5E6F".to_owned())
.r#type(ParameterType::SecureString)
.overwrite(true)
.send()
.await?;
let env_vars: HashMap<String, String> = HashMap::from([
("EXISTING".to_string(), "existingvalue".to_string()),
(
"SECRET2".to_string(),
"x-crypteia-ssm:/crypteia/v5/myapp/SECRET".to_string(),
),
("NON_EXISTENT_PARAM".to_string(), "x-crypteia-ssm:/crypteia/v5/myapp/NON_EXISTENT_PARAM".to_string()),
]);

let result = get_envs(env_vars).await;
assert!(result.is_err(), "Expected an error when parameter is not found");
Ok(())
}



#[tokio::test]
async fn should_fail_if_param_not_found_in_path() -> Result<()> {
let sdk_config = aws_config::load_from_env().await;
let ssm_client = aws_sdk_ssm::Client::new(&sdk_config);
let result = ssm_get_parameters_by_path(&ssm_client, "NON_EXISTENT_PARAM".to_string(), "/crypteia/v5/myapp/non_existent_path".to_string()).await;
assert!(result.is_err(), "Expected an error when parameters are not found for the given path");

Ok(())
}
}

0 comments on commit 70a5c7f

Please sign in to comment.