@@ -156,22 +156,48 @@ def test_get_all_clusters(data):
156
156
157
157
158
158
@patch ("hpc_provisioner.handlers.boto3" )
159
- def test_post (patched_boto3 , post_event ):
159
+ @pytest .mark .parametrize ("key_exists" , [True , False ])
160
+ def test_post (patched_boto3 , post_event , key_exists ):
161
+ test_cluster_name = cluster_name (post_event ["vlab_id" ], post_event ["project_id" ])
160
162
mock_client = MagicMock ()
161
163
patched_boto3 .client .return_value = mock_client
162
- actual_response = handlers .pcluster_create_request_handler (post_event )
163
- mock_client .invoke_async .assert_called_once_with (
164
+ with patch ("hpc_provisioner.handlers.create_keypair" ) as patched_create_keypair :
165
+ if key_exists :
166
+ patched_create_keypair .return_value = {
167
+ "KeyName" : test_cluster_name ,
168
+ }
169
+ else :
170
+ patched_create_keypair .return_value = {
171
+ "KeyMaterial" : "secret_stuff" ,
172
+ "KeyName" : test_cluster_name ,
173
+ }
174
+
175
+ with patch ("hpc_provisioner.handlers.create_secret" ) as patched_create_secret :
176
+ patched_create_keypair .return_value = {
177
+ "KeyMaterial" : "secret_stuff" ,
178
+ "KeyName" : test_cluster_name ,
179
+ }
180
+ patched_create_secret .return_value = {"ARN" : "secret ARN" }
181
+ with patch ("hpc_provisioner.handlers.get_secret" ) as patched_get_secret :
182
+ patched_get_secret .return_value = {"ARN" : "secret ARN" }
183
+ actual_response = handlers .pcluster_create_request_handler (post_event )
184
+ mock_client .invoke_async .assert_called_with (
164
185
FunctionName = "hpc-resource-provisioner-creator" ,
165
186
InvokeArgs = json .dumps (
166
- {"vlab_id" : post_event ["vlab_id" ], "project_id" : post_event ["project_id" ]}
187
+ {
188
+ "vlab_id" : post_event ["vlab_id" ],
189
+ "project_id" : post_event ["project_id" ],
190
+ "keyname" : f"pcluster-{ post_event ['vlab_id' ]} -{ post_event ['project_id' ]} " ,
191
+ }
167
192
),
168
193
)
169
194
expected_response = expected_response_template (
170
195
text = json .dumps (
171
196
{
172
197
"cluster" : {
173
- "clusterName" : cluster_name ( post_event [ "vlab_id" ], post_event [ "project_id" ]) ,
198
+ "clusterName" : test_cluster_name ,
174
199
"clusterStatus" : "CREATE_REQUEST_RECEIVED" ,
200
+ "private_ssh_key_arn" : "secret ARN" ,
175
201
}
176
202
}
177
203
)
@@ -183,7 +209,10 @@ def test_post(patched_boto3, post_event):
183
209
"hpc_provisioner.aws_queries.dynamodb_client" ,
184
210
)
185
211
@patch ("hpc_provisioner.aws_queries.free_subnet" )
186
- def test_delete (patched_free_subnet , patched_dynamodb_client , data , delete_event ):
212
+ @patch ("hpc_provisioner.pcluster_manager.remove_key" )
213
+ def test_delete (
214
+ patched_remove_key , patched_free_subnet , patched_dynamodb_client , data , delete_event
215
+ ):
187
216
mock_client = MagicMock ()
188
217
patched_dynamodb_client .return_value = mock_client
189
218
with patch (
@@ -204,6 +233,7 @@ def test_delete(patched_free_subnet, patched_dynamodb_client, data, delete_event
204
233
expected_response = expected_response_template (text = json .dumps (data ["deletingCluster" ]))
205
234
assert actual_response == expected_response
206
235
patched_get_registered_subnets .assert_called_once ()
236
+ patched_remove_key .assert_called_once ()
207
237
call1 = call (mock_client , "subnet-123" )
208
238
call2 = call (mock_client , "subnet-234" )
209
239
patched_free_subnet .assert_has_calls ([call1 , call2 ], any_order = True )
@@ -235,7 +265,8 @@ def test_get_internal_server_error(get_event):
235
265
@patch (
236
266
"hpc_provisioner.aws_queries.dynamodb_client" ,
237
267
)
238
- def test_delete_not_found (patched_dynamodb_client , delete_event ):
268
+ @patch ("hpc_provisioner.pcluster_manager.remove_key" )
269
+ def test_delete_not_found (patched_remove_key , patched_dynamodb_client , delete_event ):
239
270
error_message = f"Cluster { delete_event ['vlab_id' ]} -{ delete_event ['project_id' ]} does not exist"
240
271
with patch (
241
272
"hpc_provisioner.pcluster_manager.pc.delete_cluster" ,
@@ -245,12 +276,14 @@ def test_delete_not_found(patched_dynamodb_client, delete_event):
245
276
delete_cluster .assert_called_once ()
246
277
assert result == {"statusCode" : 404 , "body" : error_message }
247
278
patched_dynamodb_client .assert_called_once ()
279
+ patched_remove_key .assert_called_once ()
248
280
249
281
250
282
@patch (
251
283
"hpc_provisioner.aws_queries.dynamodb_client" ,
252
284
)
253
- def test_delete_internal_server_error (patched_dynamodb_client , delete_event ):
285
+ @patch ("hpc_provisioner.pcluster_manager.remove_key" )
286
+ def test_delete_internal_server_error (patched_remove_key , patched_dynamodb_client , delete_event ):
254
287
with patch (
255
288
"hpc_provisioner.pcluster_manager.pc.delete_cluster" ,
256
289
side_effect = RuntimeError ,
@@ -259,6 +292,7 @@ def test_delete_internal_server_error(patched_dynamodb_client, delete_event):
259
292
patched_delete_cluster .assert_called_once ()
260
293
assert result == {"statusCode" : 500 , "body" : "<class 'RuntimeError'>" }
261
294
patched_dynamodb_client .assert_called_once ()
295
+ patched_remove_key .assert_called_once ()
262
296
263
297
264
298
@patch ("hpc_provisioner.pcluster_manager.pc.create_cluster" )
@@ -278,9 +312,7 @@ def test_do_create_already_exists(patched_boto3, patched_create_cluster, post_ev
278
312
@patch ("hpc_provisioner.pcluster_manager.get_available_subnet" , return_value = "subnet-123" )
279
313
@patch ("hpc_provisioner.pcluster_manager.get_security_group" , return_value = "sg-123" )
280
314
@patch ("hpc_provisioner.pcluster_manager.get_efs" , return_value = "efs-123" )
281
- @patch ("hpc_provisioner.pcluster_manager.get_keypair" , return_value = "keypair-123" )
282
315
def test_do_create (
283
- patched_get_keypair ,
284
316
patched_get_efs ,
285
317
patched_get_security_group ,
286
318
patched_get_available_subnet ,
@@ -299,13 +331,13 @@ def test_do_create(
299
331
"ec2" : mock_ec2_client ,
300
332
"efs" : mock_efs_client ,
301
333
}[x ]
334
+ post_event ["keyname" ] = cluster_name (post_event ["vlab_id" ], post_event ["project_id" ])
302
335
handlers .pcluster_do_create_handler (post_event )
303
336
patched_create_cluster .assert_called_once ()
304
337
assert patched_create_cluster .call_args .kwargs ["cluster_name" ] == cluster_name (
305
338
post_event ["vlab_id" ], post_event ["project_id" ]
306
339
)
307
340
assert "tmp" in patched_create_cluster .call_args .kwargs ["cluster_configuration" ]
308
- patched_get_keypair .assert_called_once ()
309
341
patched_get_efs .assert_called_once ()
310
342
patched_get_security_group .assert_called_once ()
311
343
patched_get_available_subnet .assert_called_once ()
0 commit comments