2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 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;
23 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
24 import static com.github.tomakehurst.wiremock.client.WireMock.get;
25 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;
26 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
27 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
28 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
30 import java.io.IOException;
31 import java.util.ArrayList;
32 import java.util.HashMap;
33 import java.util.List;
36 import com.woorea.openstack.heat.model.CreateStackParam;
37 import org.apache.http.HttpStatus;
38 import org.junit.Assert;
39 import org.junit.Test;
40 import org.onap.so.BaseTest;
41 import org.onap.so.StubOpenStack;
42 import org.onap.so.adapters.vdu.CloudInfo;
43 import org.onap.so.adapters.vdu.PluginAction;
44 import org.onap.so.adapters.vdu.VduArtifact;
45 import org.onap.so.adapters.vdu.VduArtifact.ArtifactType;
46 import org.onap.so.adapters.vdu.VduInstance;
47 import org.onap.so.adapters.vdu.VduModelInfo;
48 import org.onap.so.adapters.vdu.VduStateType;
49 import org.onap.so.adapters.vdu.VduStatus;
50 import org.onap.so.openstack.exceptions.MsoException;
52 import org.springframework.beans.factory.annotation.Autowired;
54 public class MsoHeatUtilsTest extends BaseTest{
57 private MsoHeatUtils heatUtils;
60 public void instantiateVduTest() throws MsoException, IOException {
61 VduInstance expected = new VduInstance();
62 expected.setVduInstanceId("name/da886914-efb2-4917-b335-c8381528d90b");
63 expected.setVduInstanceName("name");
64 VduStatus status = new VduStatus();
65 status.setState(VduStateType.INSTANTIATED);
66 status.setLastAction((new PluginAction("create", "complete", null)));
67 expected.setStatus(status);
69 CloudInfo cloudInfo = new CloudInfo();
70 cloudInfo.setCloudSiteId("regionOne");
71 cloudInfo.setTenantId("tenantId");
72 VduModelInfo vduModel = new VduModelInfo();
73 vduModel.setModelCustomizationUUID("blueprintId");
74 vduModel.setTimeoutMinutes(1);
75 VduArtifact artifact = new VduArtifact();
76 artifact.setName("name");
77 artifact.setType(ArtifactType.MAIN_TEMPLATE);
78 byte[] content = new byte[1];
79 artifact.setContent(content);
80 List<VduArtifact> artifacts = new ArrayList<>();
81 artifacts.add(artifact);
82 vduModel.setArtifacts(artifacts);
83 Map<String, byte[]> blueprintFiles = new HashMap<>();
84 blueprintFiles.put(artifact.getName(), artifact.getContent());
85 String instanceName = "instanceName";
86 Map<String, Object> inputs = new HashMap<>();
87 boolean rollbackOnFailure = true;
89 StubOpenStack.mockOpenStackResponseAccess(wireMockPort);
90 StubOpenStack.mockOpenStackPostStack_200("OpenstackResponse_Stack_Created.json");
92 stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/instanceName/stackId"))
93 .willReturn(aResponse().withHeader("Content-Type", "application/json")
94 .withBodyFile("OpenstackResponse_StackId.json")
95 .withStatus(HttpStatus.SC_OK)));
97 VduInstance actual = heatUtils.instantiateVdu(cloudInfo, instanceName, inputs, vduModel, rollbackOnFailure);
99 assertThat(actual, sameBeanAs(expected));
104 public void queryVduTest() throws Exception {
105 VduInstance expected = new VduInstance();
106 expected.setVduInstanceId("name/da886914-efb2-4917-b335-c8381528d90b");
107 expected.setVduInstanceName("name");
108 VduStatus status = new VduStatus();
109 status.setState(VduStateType.INSTANTIATED);
110 status.setLastAction((new PluginAction("create", "complete",null)));
111 expected.setStatus(status);
113 CloudInfo cloudInfo = new CloudInfo();
114 cloudInfo.setCloudSiteId("regionOne");
115 cloudInfo.setTenantId("tenantId");
116 String instanceId = "instanceId";
118 StubOpenStack.mockOpenStackResponseAccess(wireMockPort);
119 StubOpenStack.mockOpenStackPostStack_200("OpenstackResponse_Stack_Created.json");
121 stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/instanceId"))
122 .willReturn(aResponse().withHeader("Content-Type", "application/json")
123 .withBodyFile("OpenstackResponse_StackId.json")
124 .withStatus(HttpStatus.SC_OK)));
126 VduInstance actual = heatUtils.queryVdu(cloudInfo, instanceId);
128 assertThat(actual, sameBeanAs(expected));
132 public void deleteVduTest() throws Exception {
133 VduInstance expected = new VduInstance();
134 expected.setVduInstanceId("instanceId");
135 expected.setVduInstanceName("instanceId");
136 VduStatus status = new VduStatus();
137 status.setState(VduStateType.DELETED);
138 expected.setStatus(status);
140 CloudInfo cloudInfo = new CloudInfo();
141 cloudInfo.setCloudSiteId("regionOne");
142 cloudInfo.setTenantId("tenantId");
143 String instanceId = "instanceId";
145 int timeoutInMinutes = 1;
147 StubOpenStack.mockOpenStackResponseAccess(wireMockPort);
148 stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/instanceId")).willReturn(aResponse().withBodyFile("OpenstackResponse_StackId.json").withStatus(HttpStatus.SC_OK)));
149 StubOpenStack.mockOpenStackDelete("name/da886914-efb2-4917-b335-c8381528d90b");
150 stubFor(get(urlPathEqualTo("/mockPublicUrl/stacks/name/da886914-efb2-4917-b335-c8381528d90b")).willReturn(aResponse().withBodyFile("OpenstackResponse_Stack_DeleteComplete.json").withStatus(HttpStatus.SC_OK)));
152 VduInstance actual = heatUtils.deleteVdu(cloudInfo, instanceId, timeoutInMinutes);
154 assertThat(actual, sameBeanAs(expected));
158 public final void requestToStringBuilderTest() {
159 CreateStackParam param = new CreateStackParam();
160 param.setDisableRollback(false);
161 param.setEnvironment("environment");
162 param.setFiles(new HashMap<String, Object>());
163 param.setParameters(new HashMap<>());
164 param.setStackName("stackName");
165 param.setTemplate("template");
166 param.setTemplateUrl("http://templateUrl");
167 param.setTimeoutMinutes(1);
169 StringBuilder stringBuilder = heatUtils.requestToStringBuilder(param);
171 Assert.assertTrue(stringBuilder.toString().contains("StackName:"));
175 public final void copyBaseOutputsToInputsTest() {
176 Map<String, Object> inputs = new HashMap<>();
177 inputs.put("str1", "str");
178 Map<String, Object> otherStackOutputs = new HashMap<>();
179 otherStackOutputs.put("str", "str");
180 List<String> paramNames = new ArrayList<>();
181 Map<String, String> aliases = new HashMap<>();
182 aliases.put("str", "str");
183 heatUtils.copyBaseOutputsToInputs(inputs, otherStackOutputs, null, aliases);
184 Assert.assertEquals("str",otherStackOutputs.get("str"));