@@ -4,6 +4,7 @@ use futures::future::join_all;
4
4
use std:: collections:: HashMap ;
5
5
use tokio:: { spawn, task:: JoinHandle } ;
6
6
7
+
7
8
pub async fn get_envs ( env_vars : HashMap < String , String > ) -> Result < HashMap < String , String > > {
8
9
let sdk_config = aws_config:: load_from_env ( ) . await ;
9
10
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
31
32
results. insert ( key, value) ;
32
33
} ) ;
33
34
}
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
35
36
} ,
36
37
Err ( error) => return Err ( anyhow:: anyhow!( error. to_string( ) ) ) , // Return error if task fails
37
38
}
@@ -55,6 +56,8 @@ async fn ssm_get_parameter(
55
56
Ok ( response) => {
56
57
if let Some ( parameter) = response. parameter {
57
58
items. insert ( name, parameter. value . unwrap ( ) ) ;
59
+ } else {
60
+ return Err ( anyhow:: anyhow!( "Parameter not found: {}" , path) ) ;
58
61
}
59
62
}
60
63
Err ( error) => {
@@ -120,6 +123,9 @@ async fn ssm_get_parameters_by_path(
120
123
}
121
124
}
122
125
}
126
+ if items. is_empty ( ) {
127
+ return Err ( anyhow:: anyhow!( "Parameters not found for path: {}" , path) ) ;
128
+ }
123
129
Ok ( items)
124
130
}
125
131
@@ -166,6 +172,7 @@ mod test {
166
172
. overwrite ( true )
167
173
. send ( )
168
174
. await ?;
175
+
169
176
let env_vars: HashMap < String , String > = HashMap :: from ( [
170
177
( "EXISTING" . to_string ( ) , "existingvalue" . to_string ( ) ) ,
171
178
(
@@ -189,18 +196,53 @@ mod test {
189
196
( "DB_URL" . to_string ( ) , "mysql2://u:p@host:3306" . to_string ( ) ) ,
190
197
( "NR_KEY" . to_string ( ) , "z6y5x4w3v2u1" . to_string ( ) ) ,
191
198
] ) ;
199
+
200
+ match get_envs ( env_vars. clone ( ) ) . await {
201
+ Ok ( result) => println ! ( "BLAH ::: {:?}" , result) ,
202
+ Err ( e) => println ! ( "Error: {:?}" , e) ,
203
+ }
204
+
192
205
let results = get_envs ( env_vars) . await . expect ( "Should fetch parameters" ) ;
206
+
207
+
193
208
assert_eq ! ( results, expected) ;
194
209
Ok ( ( ) )
195
210
}
196
211
197
212
#[ 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 ?;
199
224
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
+ ) ,
200
230
( "NON_EXISTENT_PARAM" . to_string ( ) , "x-crypteia-ssm:/crypteia/v5/myapp/NON_EXISTENT_PARAM" . to_string ( ) ) ,
201
231
] ) ;
202
-
203
232
let result = get_envs ( env_vars) . await ;
204
233
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 ( ( ) )
205
247
}
206
248
}
0 commit comments