Containerization feature of SO
[so.git] / adapters / mso-adapter-utils / src / test / java / org / onap / so / openstack / utils / MsoHeatUtilsTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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=========================================================
19  */
20
21 package org.onap.so.openstack.utils;
22
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;
29
30 import java.io.IOException;
31 import java.util.ArrayList;
32 import java.util.HashMap;
33 import java.util.List;
34 import java.util.Map;
35
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;
51
52 import org.springframework.beans.factory.annotation.Autowired;
53
54 public class MsoHeatUtilsTest extends BaseTest{
55
56         @Autowired
57         private MsoHeatUtils heatUtils;
58         
59         @Test
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);
68
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;
88
89                 StubOpenStack.mockOpenStackResponseAccess(wireMockPort);
90                 StubOpenStack.mockOpenStackPostStack_200("OpenstackResponse_Stack_Created.json");
91                 
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)));
96                 
97                 VduInstance actual = heatUtils.instantiateVdu(cloudInfo, instanceName, inputs, vduModel, rollbackOnFailure);
98                 
99                 assertThat(actual, sameBeanAs(expected));
100         }
101
102         
103         @Test
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);
112
113                 CloudInfo cloudInfo = new CloudInfo();
114                 cloudInfo.setCloudSiteId("regionOne");
115                 cloudInfo.setTenantId("tenantId");
116                 String instanceId = "instanceId";
117
118                 StubOpenStack.mockOpenStackResponseAccess(wireMockPort);
119                 StubOpenStack.mockOpenStackPostStack_200("OpenstackResponse_Stack_Created.json");
120
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)));
125
126                 VduInstance actual = heatUtils.queryVdu(cloudInfo, instanceId);
127                 
128                 assertThat(actual, sameBeanAs(expected));
129         }
130
131         @Test
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);
139
140                 CloudInfo cloudInfo = new CloudInfo();
141                 cloudInfo.setCloudSiteId("regionOne");
142                 cloudInfo.setTenantId("tenantId");
143                 String instanceId = "instanceId";
144
145                 int timeoutInMinutes = 1;
146
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)));
151                 
152                 VduInstance actual = heatUtils.deleteVdu(cloudInfo, instanceId, timeoutInMinutes);
153                 
154                 assertThat(actual, sameBeanAs(expected));
155         }
156
157         @Test
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);
168
169                 StringBuilder stringBuilder =  heatUtils.requestToStringBuilder(param);
170
171                 Assert.assertTrue(stringBuilder.toString().contains("StackName:"));
172         }
173
174         @Test
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"));
185         }
186         
187
188 }