Skip to content

Commit 70a5c7f

Browse files
committed
add a new test if param path isnt found try to bubble error up further into main
1 parent 8a852bd commit 70a5c7f

File tree

3 files changed

+53
-10
lines changed

3 files changed

+53
-10
lines changed

Diff for: Cargo.lock

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/main.rs

+7-6
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ const ENV_FILE: &str = "/tmp/crypteia.json";
1111
async fn main() -> Result<(), Error> {
1212
log::cloudwatch_metric("main", "initialized", false, None);
1313
let env_vars: HashMap<String, String> = std::env::vars().collect();
14-
let env_map = ssm::get_envs(env_vars).await.unwrap();
14+
let env_map = ssm::get_envs(env_vars).await?;
1515
log::cloudwatch_metric("main", "fetched", false, None);
16-
write_envs_to_tmp_json(env_map);
16+
write_envs_to_tmp_json(env_map)?;
1717
let func = service_fn(parameters_extension);
1818
lambda_extension::run(func).await
1919
}
@@ -28,8 +28,9 @@ async fn parameters_extension(event: LambdaEvent) -> Result<(), Error> {
2828
Ok(())
2929
}
3030

31-
fn write_envs_to_tmp_json(env_map: HashMap<String, String>) {
31+
fn write_envs_to_tmp_json(env_map: HashMap<String, String>) -> Result<(), std::io::Error> {
3232
let envs_json = serde_json::to_string(&env_map).unwrap();
33-
let mut file = File::create(ENV_FILE).unwrap();
34-
file.write_all(envs_json.as_bytes()).unwrap();
35-
}
33+
let mut file = File::create(ENV_FILE)?;
34+
file.write_all(envs_json.as_bytes())?;
35+
Ok(())
36+
}

Diff for: src/ssm.rs

+45-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use futures::future::join_all;
44
use std::collections::HashMap;
55
use tokio::{spawn, task::JoinHandle};
66

7+
78
pub async fn get_envs(env_vars: HashMap<String, String>) -> Result<HashMap<String, String>> {
89
let sdk_config = aws_config::load_from_env().await;
910
let ssm_client: aws_sdk_ssm::Client = aws_sdk_ssm::Client::new(&sdk_config);
@@ -31,7 +32,7 @@ pub async fn get_envs(env_vars: HashMap<String, String>) -> Result<HashMap<Strin
3132
results.insert(key, value);
3233
});
3334
}
34-
Err(error) => return Err(error), // Return error if parameter is not found
35+
Err(error) => return Err(anyhow::anyhow!(format!("Parameter not found: {}", error))), // Return error if parameter is not found
3536
},
3637
Err(error) => return Err(anyhow::anyhow!(error.to_string())), // Return error if task fails
3738
}
@@ -55,6 +56,8 @@ async fn ssm_get_parameter(
5556
Ok(response) => {
5657
if let Some(parameter) = response.parameter {
5758
items.insert(name, parameter.value.unwrap());
59+
} else {
60+
return Err(anyhow::anyhow!("Parameter not found: {}", path));
5861
}
5962
}
6063
Err(error) => {
@@ -120,6 +123,9 @@ async fn ssm_get_parameters_by_path(
120123
}
121124
}
122125
}
126+
if items.is_empty() {
127+
return Err(anyhow::anyhow!("Parameters not found for path: {}", path));
128+
}
123129
Ok(items)
124130
}
125131

@@ -166,6 +172,7 @@ mod test {
166172
.overwrite(true)
167173
.send()
168174
.await?;
175+
169176
let env_vars: HashMap<String, String> = HashMap::from([
170177
("EXISTING".to_string(), "existingvalue".to_string()),
171178
(
@@ -189,18 +196,53 @@ mod test {
189196
("DB_URL".to_string(), "mysql2://u:p@host:3306".to_string()),
190197
("NR_KEY".to_string(), "z6y5x4w3v2u1".to_string()),
191198
]);
199+
200+
match get_envs(env_vars.clone()).await {
201+
Ok(result) => println!("BLAH ::: {:?}", result),
202+
Err(e) => println!("Error: {:?}", e),
203+
}
204+
192205
let results = get_envs(env_vars).await.expect("Should fetch parameters");
206+
207+
193208
assert_eq!(results, expected);
194209
Ok(())
195210
}
196211

197212
#[tokio::test]
198-
async fn should_fail_if_param_not_found() {
213+
async fn should_fail_if_param_not_found() -> Result<()> {
214+
let sdk_config = aws_config::load_from_env().await;
215+
let ssm_client = aws_sdk_ssm::Client::new(&sdk_config);
216+
ssm_client
217+
.put_parameter()
218+
.name("/crypteia/v5/myapp/SECRET2".to_owned())
219+
.value("1A2B3C4D5E6F".to_owned())
220+
.r#type(ParameterType::SecureString)
221+
.overwrite(true)
222+
.send()
223+
.await?;
199224
let env_vars: HashMap<String, String> = HashMap::from([
225+
("EXISTING".to_string(), "existingvalue".to_string()),
226+
(
227+
"SECRET2".to_string(),
228+
"x-crypteia-ssm:/crypteia/v5/myapp/SECRET".to_string(),
229+
),
200230
("NON_EXISTENT_PARAM".to_string(), "x-crypteia-ssm:/crypteia/v5/myapp/NON_EXISTENT_PARAM".to_string()),
201231
]);
202-
203232
let result = get_envs(env_vars).await;
204233
assert!(result.is_err(), "Expected an error when parameter is not found");
234+
Ok(())
235+
}
236+
237+
238+
239+
#[tokio::test]
240+
async fn should_fail_if_param_not_found_in_path() -> Result<()> {
241+
let sdk_config = aws_config::load_from_env().await;
242+
let ssm_client = aws_sdk_ssm::Client::new(&sdk_config);
243+
let result = ssm_get_parameters_by_path(&ssm_client, "NON_EXISTENT_PARAM".to_string(), "/crypteia/v5/myapp/non_existent_path".to_string()).await;
244+
assert!(result.is_err(), "Expected an error when parameters are not found for the given path");
245+
246+
Ok(())
205247
}
206248
}

0 commit comments

Comments
 (0)