2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.openstack.utils;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotEquals;
27 import static org.junit.Assert.assertNotNull;
28 import static org.mockito.ArgumentMatchers.eq;
29 import static org.mockito.ArgumentMatchers.isA;
30 import static org.mockito.ArgumentMatchers.isNull;
31 import static org.mockito.Mockito.doNothing;
32 import static org.mockito.Mockito.doReturn;
33 import static org.mockito.Mockito.doThrow;
34 import static org.mockito.Mockito.times;
35 import java.io.IOException;
36 import java.util.HashMap;
38 import org.junit.Before;
39 import org.junit.Rule;
40 import org.junit.Test;
41 import org.junit.rules.ExpectedException;
42 import org.junit.runner.RunWith;
43 import org.mockito.InjectMocks;
44 import org.mockito.Mock;
45 import org.mockito.Mockito;
46 import org.mockito.Spy;
47 import org.mockito.junit.MockitoJUnitRunner;
48 import org.onap.so.db.request.beans.CloudApiRequests;
49 import org.onap.so.db.request.beans.InfraActiveRequests;
50 import org.onap.so.db.request.client.RequestsDbClient;
51 import org.onap.so.openstack.exceptions.MsoException;
52 import org.onap.so.openstack.exceptions.MsoOpenstackException;
53 import org.onap.so.openstack.exceptions.MsoStackAlreadyExists;
54 import org.springframework.core.env.Environment;
55 import com.woorea.openstack.base.client.OpenStackResponseException;
56 import com.woorea.openstack.heat.Heat;
57 import com.woorea.openstack.heat.StackResource;
58 import com.woorea.openstack.heat.StackResource.CreateStack;
59 import com.woorea.openstack.heat.StackResource.DeleteStack;
60 import com.woorea.openstack.heat.model.CreateStackParam;
61 import com.woorea.openstack.heat.model.Resources;
62 import com.woorea.openstack.heat.model.Stack;
64 @RunWith(MockitoJUnitRunner.class)
65 public class MsoHeatUtilsTest extends MsoHeatUtils {
68 public ExpectedException exceptionRule = ExpectedException.none();
72 private MsoHeatUtils heatUtils;
75 private RequestsDbClient requestDbClient;
78 private Heat heatClient;
81 private StackStatusHandler stackStatusHandler;
84 private Environment env;
87 private StackResource stackResource;
90 private NovaClientImpl novaClient;
93 private DeleteStack mockDeleteStack;
96 private Resources mockResources;
99 private CreateStack mockCreateStack;
101 private String cloudSiteId = "cloudSiteId";
102 private String tenantId = "tenantId";
105 public void setup() {
106 doReturn("15").when(env).getProperty("org.onap.so.adapters.po.pollInterval", "15");
107 doReturn("1").when(env).getProperty("org.onap.so.adapters.po.pollMultiplier", "60");
111 public final void pollStackForStatus_Create_Complete_Test() throws MsoException, IOException {
112 Stack stack = new Stack();
114 stack.setStackName("stackName");
115 stack.setStackStatus("CREATE_IN_PROGRESS");
116 stack.setStackStatusReason("Stack Finished");
118 Stack latestStack = new Stack();
119 latestStack.setId("id");
120 latestStack.setStackName("stackName");
121 latestStack.setStackStatus("CREATE_COMPLETE");
122 latestStack.setStackStatusReason("Stack Finished");
123 doReturn(latestStack).when(heatUtils).queryHeatStack(isA(Heat.class), eq("stackName/id"));
124 doReturn(heatClient).when(heatUtils).getHeatClient(cloudSiteId, tenantId);
125 Stack actual = heatUtils.pollStackForStatus(1, stack, "CREATE_IN_PROGRESS", cloudSiteId, tenantId);
126 Mockito.verify(stackStatusHandler, times(1)).updateStackStatus(latestStack);
127 Mockito.verify(heatUtils, times(1)).queryHeatStack(isA(Heat.class), eq("stackName/id"));
128 assertEquals(true, actual != null);
133 public final void pollStackForStatus_Polling_Exhausted_Test() throws MsoException, IOException {
134 Stack stack = new Stack();
136 stack.setStackName("stackName");
137 stack.setStackStatus("CREATE_IN_PROGRESS");
138 stack.setStackStatusReason("Stack Finished");
139 doNothing().when(stackStatusHandler).updateStackStatus(stack);
140 doReturn(stack).when(heatUtils).queryHeatStack(isA(Heat.class), eq("stackName/id"));
141 doReturn(heatClient).when(heatUtils).getHeatClient(cloudSiteId, tenantId);
142 Stack actual = heatUtils.pollStackForStatus(1, stack, "CREATE_IN_PROGRESS", cloudSiteId, tenantId);
143 Mockito.verify(stackStatusHandler, times(1)).updateStackStatus(stack);
144 Mockito.verify(heatUtils, times(1)).queryHeatStack(isA(Heat.class), eq("stackName/id"));
145 assertEquals(true, actual != null);
149 public final void postProcessStackCreate_CREATE_IN_PROGRESS_Test() throws MsoException, IOException {
150 Stack stack = new Stack();
152 stack.setStackName("stackName");
153 stack.setStackStatus("CREATE_IN_PROGRESS");
154 stack.setStackStatusReason("Stack Finished");
155 CreateStackParam createStackParam = new CreateStackParam();
156 createStackParam.setStackName("stackName");
158 exceptionRule.expect(StackCreationException.class);
159 exceptionRule.expectMessage("Stack rollback suppressed, stack not deleted");
160 heatUtils.postProcessStackCreate(stack, false, 120, false, cloudSiteId, tenantId, createStackParam);
164 public final void postProcessStackCreate_Backout_True_Test() throws MsoException, IOException {
165 Stack stack = new Stack();
167 stack.setStackName("stackName");
168 stack.setStackStatus("CREATE_IN_PROGRESS");
169 stack.setStackStatusReason("Stack Finished");
171 Stack deletedStack = new Stack();
172 deletedStack.setId("id");
173 deletedStack.setStackName("stackName");
174 deletedStack.setStackStatus("DELETE_COMPLETE");
175 deletedStack.setStackStatusReason("Stack Deleted");
177 CreateStackParam createStackParam = new CreateStackParam();
178 createStackParam.setStackName("stackName");
179 doReturn(deletedStack).when(heatUtils).handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
180 exceptionRule.expect(StackCreationException.class);
181 exceptionRule.expectMessage(
182 "Stack Creation Failed Openstack Status: CREATE_IN_PROGRESS Status Reason: Stack Finished , Rollback of Stack Creation completed with status: DELETE_COMPLETE Status Reason: Stack Deleted");
183 heatUtils.postProcessStackCreate(stack, true, 120, false, cloudSiteId, tenantId, createStackParam);
184 Mockito.verify(heatUtils, times(1)).handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
188 public final void postProcessStackCreate_Backout_True_Delete_Fail_Test() throws MsoException, IOException {
189 Stack stack = new Stack();
191 stack.setStackName("stackName");
192 stack.setStackStatus("CREATE_IN_PROGRESS");
193 stack.setStackStatusReason("Stack Finished");
195 Stack deletedStack = new Stack();
196 deletedStack.setId("id");
197 deletedStack.setStackName("stackName");
198 deletedStack.setStackStatus("DELETE_COMPLETE");
199 deletedStack.setStackStatusReason("Stack Deleted");
201 CreateStackParam createStackParam = new CreateStackParam();
202 createStackParam.setStackName("stackName");
203 doThrow(new MsoOpenstackException(500, "Error In Delete", "Error In Delete")).when(heatUtils)
204 .handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
205 exceptionRule.expect(MsoException.class);
206 exceptionRule.expectMessage(
207 "Stack Creation Failed Openstack Status: CREATE_IN_PROGRESS Status Reason: Stack Finished , Rollback of Stack Creation failed with sync error: Error In Delete");
208 heatUtils.postProcessStackCreate(stack, true, 120, false, cloudSiteId, tenantId, createStackParam);
209 Mockito.verify(heatUtils, times(1)).handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
213 public final void postProcessStackCreate_Keypair_True_Test() throws MsoException, IOException {
214 Stack stack = new Stack();
216 stack.setStackName("stackName");
217 stack.setStackStatus("CREATE_IN_PROGRESS");
218 stack.setStackStatusReason(
219 "Resource CREATE failed: Conflict: resources.my_keypair: Key pair 'hst3bbfnm0011vm001' already exists. (HTTP 409) (Request-ID: req-941b0af6-63ae-4d6a-afbc-90b728bacf82");
221 Stack createdStack = new Stack();
222 createdStack.setId("id");
223 createdStack.setStackName("stackName");
224 createdStack.setStackStatus("CREATE_COMPLETE");
225 createdStack.setStackStatusReason("Stack Created");
227 CreateStackParam createStackParam = new CreateStackParam();
228 createStackParam.setStackName("stackName");
229 doReturn(createdStack).when(heatUtils).handleKeyPairConflict(cloudSiteId, tenantId, createStackParam, 120, true,
231 heatUtils.postProcessStackCreate(stack, true, 120, true, cloudSiteId, tenantId, createStackParam);
232 Mockito.verify(heatUtils, times(1)).handleKeyPairConflict(cloudSiteId, tenantId, createStackParam, 120, true,
237 public final void handleUnknownCreateStackFailure_Test() throws MsoException, IOException {
239 Stack stack = new Stack();
241 stack.setStackName("stackName");
242 stack.setStackStatus("CREATE_FAILED");
243 stack.setStackStatusReason(
244 "Resource CREATE failed: Conflict: resources.my_keypair: Key pair 'hst3bbfnm0011vm001' already exists. (HTTP 409) (Request-ID: req-941b0af6-63ae-4d6a-afbc-90b728bacf82");
246 Stack deletedStack = new Stack();
247 deletedStack.setId("id");
248 deletedStack.setStackName("stackName");
249 deletedStack.setStackStatus("DELETE_COMPLETE");
250 deletedStack.setStackStatusReason("Stack Deleted");
252 CreateStackParam createStackParam = new CreateStackParam();
253 createStackParam.setStackName("stackName");
254 doReturn(heatClient).when(heatUtils).getHeatClient(cloudSiteId, tenantId);
255 doNothing().when(heatUtils).postProcessStackDelete(deletedStack);
256 doReturn(null).when(heatUtils).executeAndRecordOpenstackRequest(mockDeleteStack);
257 doReturn(stackResource).when(heatClient).getStacks();
258 doReturn(mockDeleteStack).when(stackResource).deleteByName("stackName/id");
259 doReturn(deletedStack).when(heatUtils).pollStackForStatus(120, stack, "DELETE_IN_PROGRESS", cloudSiteId,
262 heatUtils.handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
263 Mockito.verify(heatUtils, times(1)).executeAndRecordOpenstackRequest(mockDeleteStack);
264 Mockito.verify(heatUtils, times(1)).pollStackForStatus(120, stack, "DELETE_IN_PROGRESS", cloudSiteId, tenantId);
265 Mockito.verify(heatUtils, times(1)).postProcessStackDelete(deletedStack);
270 public final void handleUnknownCreateStackFailure_Null_Stack_Test() throws MsoException, IOException {
272 exceptionRule.expect(StackCreationException.class);
273 exceptionRule.expectMessage("Cannot Find Stack Name or Id");
274 heatUtils.handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
278 public final void postProcessStackDelete_Stack_Test() throws MsoException, IOException {
279 Stack deletedStack = new Stack();
280 deletedStack.setId("id");
281 deletedStack.setStackName("stackName");
282 deletedStack.setStackStatus("DELETE_FAILED");
283 deletedStack.setStackStatusReason("Stack DID NOT DELETE");
284 exceptionRule.expect(StackRollbackException.class);
285 exceptionRule.expectMessage(
286 "Stack Deletion completed with status: DELETE_FAILED Status Reason: Stack DID NOT DELETE");
287 heatUtils.postProcessStackDelete(deletedStack);
291 public final void postProcessStackDelete__Null_Stack_Test() throws MsoException, IOException {
293 exceptionRule.expect(StackRollbackException.class);
294 exceptionRule.expectMessage("Cannot Find Stack Name or Id");
295 heatUtils.postProcessStackDelete(stack);
299 public final void isKeyPairFailure_Test() throws MsoException, IOException {
300 boolean actual = heatUtils.isKeyPairFailure(
301 "Exception during create VF 0 : Stack error (CREATE_FAILED): Resource CREATE failed: Conflict: resources.bfnm_my_keypair: Key pair 'hst3bbfnm0011vm001' already exists. (HTTP 409) (Request-ID:req-941b0af6-63ae-4d6a-afbc-90b728bacf82) - stack successfully deleted'rolledBack='true'");
302 assertEquals(true, actual);
306 public final void handleKeyPairConflict_Test() throws MsoException, IOException, NovaClientException {
307 Stack stack = new Stack();
309 stack.setStackName("stackName");
310 stack.setStackStatus("CREATE_FAILED");
311 stack.setStackStatusReason(
312 "Resource CREATE failed: Conflict: resources.my_keypair: Key pair 'hst3bbfnm0011vm001' already exists. (HTTP 409) (Request-ID: req-941b0af6-63ae-4d6a-afbc-90b728bacf82");
314 Stack createdStack = new Stack();
315 createdStack.setId("id");
316 createdStack.setStackName("stackName");
317 createdStack.setStackStatus("CREATE_COMPLETE");
318 createdStack.setStackStatusReason("Stack Created");
320 CreateStackParam createStackParam = new CreateStackParam();
321 createStackParam.setStackName("stackName");
323 doReturn(mockResources).when(heatUtils).queryStackResources(cloudSiteId, tenantId, "stackName", 2);
324 doNothing().when(novaClient).deleteKeyPair(cloudSiteId, tenantId, "KeypairName");
325 doReturn(null).when(heatUtils).handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
326 doReturn(createdStack).when(heatUtils).createStack(createStackParam, cloudSiteId, tenantId);
327 doReturn(createdStack).when(heatUtils).processCreateStack(cloudSiteId, tenantId, 120, true, createdStack,
328 createStackParam, false);
330 heatUtils.handleKeyPairConflict(cloudSiteId, tenantId, createStackParam, 120, true, stack);
331 Mockito.verify(novaClient, times(1)).deleteKeyPair(cloudSiteId, tenantId, "hst3bbfnm0011vm001");
332 Mockito.verify(heatUtils, times(1)).handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);
333 Mockito.verify(heatUtils, times(1)).createStack(createStackParam, cloudSiteId, tenantId);
334 Mockito.verify(heatUtils, times(1)).processCreateStack(cloudSiteId, tenantId, 120, true, createdStack,
335 createStackParam, false);
339 public final void processCreateStack_Test() throws MsoException, IOException, NovaClientException {
340 Stack stack = new Stack();
342 stack.setStackName("stackName");
343 stack.setStackStatus("CREATE_FAILED");
344 stack.setStackStatusReason(
345 "Resource CREATE failed: Conflict: resources.my_keypair: Key pair 'hst3bbfnm0011vm001' already exists. (HTTP 409) (Request-ID: req-941b0af6-63ae-4d6a-afbc-90b728bacf82");
347 Stack createdStack = new Stack();
348 createdStack.setId("id");
349 createdStack.setStackName("stackName");
350 createdStack.setStackStatus("CREATE_COMPLETE");
351 createdStack.setStackStatusReason("Stack Created");
354 CreateStackParam createStackParam = new CreateStackParam();
355 createStackParam.setStackName("stackName");
357 doReturn(createdStack).when(heatUtils).pollStackForStatus(120, stack, "CREATE_IN_PROGRESS", cloudSiteId,
359 doReturn(createdStack).when(heatUtils).postProcessStackCreate(createdStack, true, 120, true, cloudSiteId,
360 tenantId, createStackParam);
362 heatUtils.processCreateStack(cloudSiteId, tenantId, 120, true, stack, createStackParam, true);
363 Mockito.verify(heatUtils, times(1)).pollStackForStatus(120, stack, "CREATE_IN_PROGRESS", cloudSiteId, tenantId);
364 Mockito.verify(heatUtils, times(1)).postProcessStackCreate(createdStack, true, 120, true, cloudSiteId, tenantId,
369 public final void processCreateStack_Exception_Backout_Test()
370 throws MsoException, IOException, NovaClientException {
371 Stack stack = new Stack();
373 stack.setStackName("stackName");
374 stack.setStackStatus("CREATE_FAILED");
375 stack.setStackStatusReason(
376 "Resource CREATE failed: Conflict: resources.my_keypair: Key pair 'hst3bbfnm0011vm001' already exists. (HTTP 409) (Request-ID: req-941b0af6-63ae-4d6a-afbc-90b728bacf82");
378 Stack deletedStack = new Stack();
379 deletedStack.setId("id");
380 deletedStack.setStackName("stackName");
381 deletedStack.setStackStatus("DELETE_COMPLETE");
382 deletedStack.setStackStatusReason("Stack Deleted");
384 CreateStackParam createStackParam = new CreateStackParam();
385 createStackParam.setStackName("stackName");
387 doThrow(new StackCreationException("Error")).when(heatUtils).pollStackForStatus(120, stack,
388 "CREATE_IN_PROGRESS", cloudSiteId, tenantId);
389 exceptionRule.expect(MsoException.class);
390 exceptionRule.expectMessage("Error");
391 heatUtils.processCreateStack(cloudSiteId, tenantId, 120, true, stack, createStackParam, true);
392 Mockito.verify(heatUtils, times(1)).pollStackForStatus(120, stack, "CREATE_IN_PROGRESS", cloudSiteId, tenantId);
393 Mockito.verify(heatUtils, times(1)).postProcessStackCreate(stack, true, 120, true, cloudSiteId, tenantId,
399 public final void createStack_Test() throws MsoException, IOException, NovaClientException {
400 CreateStackParam createStackParam = new CreateStackParam();
401 createStackParam.setStackName("stackName");
403 doReturn(heatClient).when(heatUtils).getHeatClient(cloudSiteId, tenantId);
404 doReturn(stackResource).when(heatClient).getStacks();
405 doReturn(mockCreateStack).when(stackResource).create(createStackParam);
407 doReturn(null).when(heatUtils).executeAndRecordOpenstackRequest(mockCreateStack);
409 heatUtils.createStack(createStackParam, cloudSiteId, tenantId);
410 Mockito.verify(stackResource, times(1)).create(createStackParam);
411 Mockito.verify(heatUtils, times(1)).saveStackRequest(eq(createStackParam), isNull(), eq("stackName"));
412 Mockito.verify(heatClient, times(1)).getStacks();
413 Mockito.verify(stackResource, times(1)).create(createStackParam);
417 public final void saveStack_Test() throws MsoException, IOException, NovaClientException {
418 CreateStackParam createStackParam = new CreateStackParam();
419 createStackParam.setStackName("stackName");
420 Map<String, Object> parameters = new HashMap<String, Object>();
421 parameters.put("test", "value");
422 createStackParam.setParameters(parameters);
423 InfraActiveRequests request = new InfraActiveRequests();
424 request.setRequestId("requestId");
425 doReturn(request).when(requestDbClient).getInfraActiveRequestbyRequestId("requestId");
426 doNothing().when(requestDbClient).updateInfraActiveRequests(request);
427 heatUtils.saveStackRequest(createStackParam, "requestId", "stackName");
428 Mockito.verify(requestDbClient, times(1)).updateInfraActiveRequests(request);
429 assertNotNull(request.getCloudApiRequests().get(0));
430 assertEquals(request.getCloudApiRequests().get(0).getRequestId(), "requestId");
434 public final void saveStack__Exists_Test() throws MsoException, IOException, NovaClientException {
435 CreateStackParam createStackParam = new CreateStackParam();
436 createStackParam.setStackName("stackName");
437 Map<String, Object> parameters = new HashMap<String, Object>();
438 parameters.put("test", "value");
439 createStackParam.setParameters(parameters);
440 InfraActiveRequests request = new InfraActiveRequests();
441 request.setRequestId("requestId");
442 CloudApiRequests cloudRequest = new CloudApiRequests();
443 cloudRequest.setCloudIdentifier("stackName");
444 cloudRequest.setRequestBody("testMe");
445 cloudRequest.setRequestId("requestId");
446 request.getCloudApiRequests().add(cloudRequest);
447 doReturn(request).when(requestDbClient).getInfraActiveRequestbyRequestId("requestId");
448 doNothing().when(requestDbClient).updateInfraActiveRequests(request);
449 heatUtils.saveStackRequest(createStackParam, "requestId", "stackName");
450 Mockito.verify(requestDbClient, times(1)).updateInfraActiveRequests(request);
451 assertNotNull(request.getCloudApiRequests().get(0));
452 assertEquals("requestId", request.getCloudApiRequests().get(0).getRequestId());
453 assertNotEquals("testMe", request.getCloudApiRequests().get(0).getRequestBody());
457 public final void createStack_Error_Test() throws MsoException, IOException, NovaClientException {
458 CreateStackParam createStackParam = new CreateStackParam();
459 createStackParam.setStackName("stackName");
461 doReturn(heatClient).when(heatUtils).getHeatClient(cloudSiteId, tenantId);
462 doReturn(stackResource).when(heatClient).getStacks();
463 doReturn(mockCreateStack).when(stackResource).create(createStackParam);
465 doThrow(new OpenStackResponseException("Unknown Error", 500)).when(heatUtils)
466 .executeAndRecordOpenstackRequest(mockCreateStack);
467 exceptionRule.expect(MsoOpenstackException.class);
468 exceptionRule.expectMessage("Unknown Error");
469 heatUtils.createStack(createStackParam, cloudSiteId, tenantId);
470 Mockito.verify(stackResource, times(1)).create(createStackParam);
471 Mockito.verify(heatUtils, times(1)).saveStackRequest(eq(createStackParam), isNull(), eq("stackName"));
472 Mockito.verify(heatClient, times(1)).getStacks();
473 Mockito.verify(stackResource, times(1)).create(createStackParam);
477 public final void createStack_Error_404_Test() throws MsoException, IOException, NovaClientException {
478 CreateStackParam createStackParam = new CreateStackParam();
479 createStackParam.setStackName("stackName");
481 doReturn(heatClient).when(heatUtils).getHeatClient(cloudSiteId, tenantId);
482 doReturn(stackResource).when(heatClient).getStacks();
483 doReturn(mockCreateStack).when(stackResource).create(createStackParam);
485 doThrow(new OpenStackResponseException("Not Found", 409)).when(heatUtils)
486 .executeAndRecordOpenstackRequest(mockCreateStack);
487 exceptionRule.expect(MsoStackAlreadyExists.class);
488 exceptionRule.expectMessage("Stack stackName already exists in Tenant tenantId in Cloud cloudSiteId");
489 heatUtils.createStack(createStackParam, cloudSiteId, tenantId);
490 Mockito.verify(stackResource, times(1)).create(createStackParam);
491 Mockito.verify(heatUtils, times(1)).saveStackRequest(eq(createStackParam), isNull(), eq("stackName"));
492 Mockito.verify(heatClient, times(1)).getStacks();
493 Mockito.verify(stackResource, times(1)).create(createStackParam);
497 public final void processCreateStack_Exception_No_Backout_Test()
498 throws MsoException, IOException, NovaClientException {
499 Stack stack = new Stack();
501 stack.setStackName("stackName");
502 stack.setStackStatus("CREATE_FAILED");
503 stack.setStackStatusReason(
504 "Resource CREATE failed: Conflict: resources.my_keypair: Key pair 'hst3bbfnm0011vm001' already exists. (HTTP 409) (Request-ID: req-941b0af6-63ae-4d6a-afbc-90b728bacf82");
506 Stack deletedStack = new Stack();
507 deletedStack.setId("id");
508 deletedStack.setStackName("stackName");
509 deletedStack.setStackStatus("DELETE_COMPLETE");
510 deletedStack.setStackStatusReason("Stack Deleted");
512 CreateStackParam createStackParam = new CreateStackParam();
513 createStackParam.setStackName("stackName");
515 doThrow(new StackCreationException("Error")).when(heatUtils).pollStackForStatus(120, stack,
516 "CREATE_IN_PROGRESS", cloudSiteId, tenantId);
518 exceptionRule.expect(MsoException.class);
519 exceptionRule.expectMessage("Error");
520 heatUtils.processCreateStack(cloudSiteId, tenantId, 120, false, stack, createStackParam, true);
521 Mockito.verify(heatUtils, times(1)).pollStackForStatus(120, stack, "CREATE_IN_PROGRESS", cloudSiteId, tenantId);
522 Mockito.verify(heatUtils, times(0)).handleUnknownCreateStackFailure(stack, 120, cloudSiteId, tenantId);