2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 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.asdc.installer.heat;
23 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
24 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
25 import static org.junit.Assert.assertEquals;
26 import static org.junit.Assert.assertNotNull;
27 import static org.mockito.Mockito.doReturn;
28 import static org.mockito.Mockito.doThrow;
29 import static org.mockito.Mockito.mock;
30 import static org.mockito.Mockito.spy;
31 import static org.mockito.Mockito.times;
32 import static org.mockito.Mockito.verify;
33 import java.util.ArrayList;
34 import java.util.List;
35 import org.hibernate.exception.LockAcquisitionException;
36 import org.junit.Before;
37 import org.junit.Rule;
38 import org.junit.Test;
39 import org.junit.rules.ExpectedException;
40 import org.mockito.Mock;
41 import org.mockito.MockitoAnnotations;
42 import org.onap.sdc.api.notification.IResourceInstance;
43 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
44 import org.onap.sdc.tosca.parser.impl.SdcCsarHelperImpl;
45 import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
46 import org.onap.sdc.toscaparser.api.Group;
47 import org.onap.sdc.toscaparser.api.NodeTemplate;
48 import org.onap.sdc.toscaparser.api.elements.Metadata;
49 import org.onap.sdc.toscaparser.api.elements.StatefulEntityType;
50 import org.onap.sdc.utils.DistributionStatusEnum;
51 import org.onap.so.asdc.BaseTest;
52 import org.onap.so.asdc.client.exceptions.ArtifactInstallerException;
53 import org.onap.so.asdc.client.test.emulators.ArtifactInfoImpl;
54 import org.onap.so.asdc.client.test.emulators.JsonStatusData;
55 import org.onap.so.asdc.client.test.emulators.NotificationDataImpl;
56 import org.onap.so.asdc.installer.ToscaResourceStructure;
57 import org.onap.so.db.catalog.beans.ConfigurationResource;
58 import org.onap.so.db.catalog.beans.ConfigurationResourceCustomization;
59 import org.onap.so.db.catalog.beans.Service;
60 import org.onap.so.db.catalog.beans.ServiceProxyResourceCustomization;
61 import org.onap.so.db.catalog.data.repository.AllottedResourceCustomizationRepository;
62 import org.onap.so.db.catalog.data.repository.AllottedResourceRepository;
63 import org.onap.so.db.catalog.data.repository.ConfigurationResourceCustomizationRepository;
64 import org.onap.so.db.catalog.data.repository.ServiceRepository;
65 import org.onap.so.db.request.beans.WatchdogComponentDistributionStatus;
66 import org.onap.so.db.request.data.repository.WatchdogComponentDistributionStatusRepository;
67 import org.springframework.beans.factory.annotation.Autowired;
68 import org.springframework.test.util.ReflectionTestUtils;
71 public class ToscaResourceInstallerTest extends BaseTest {
73 private ToscaResourceInstaller toscaInstaller;
75 private WatchdogComponentDistributionStatusRepository watchdogCDStatusRepository;
77 private AllottedResourceRepository allottedRepo;
79 private AllottedResourceCustomizationRepository allottedCustomizationRepo;
81 private ServiceRepository serviceRepo;
83 private SdcCsarHelperImpl sdcCsarHelper;
85 private Metadata metadata;
87 private ArtifactInfoImpl artifactInfo;
89 private List<Group> vfGroups;
91 private IResourceInstance resourceInstance;
93 public ExpectedException expectedException = ExpectedException.none();
95 private NodeTemplate nodeTemplate;
97 private ToscaResourceStructure toscaResourceStructure;
99 private ServiceProxyResourceCustomization spResourceCustomization;
101 private ISdcCsarHelper csarHelper;
103 private StatefulEntityType entityType;
105 private Service service;
107 private NotificationDataImpl notificationData;
108 private JsonStatusData statusData;
109 private static final String MSO = "SO";
112 public void before() {
113 MockitoAnnotations.initMocks(this);
115 notificationData = new NotificationDataImpl();
116 statusData = new JsonStatusData();
120 public void isResourceAlreadyDeployedTest() throws Exception {
121 notificationData.setServiceName("serviceName");
122 notificationData.setServiceVersion("123456");
123 notificationData.setServiceUUID("serviceUUID");
124 notificationData.setDistributionID("testStatusSuccessTosca");
126 WatchdogComponentDistributionStatus expectedComponentDistributionStatus =
127 new WatchdogComponentDistributionStatus(notificationData.getDistributionID(), MSO);
128 expectedComponentDistributionStatus
129 .setComponentDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_OK.name());
131 doReturn(true).when(vfResourceStructure).isDeployedSuccessfully();
132 doReturn(notificationData).when(vfResourceStructure).getNotification();
133 doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
134 doReturn("resourceInstanceName").when(resourceInstance).getResourceInstanceName();
135 doReturn("resourceCustomizationUUID").when(resourceInstance).getResourceCustomizationUUID();
136 doReturn("resourceName").when(resourceInstance).getResourceName();
138 toscaInstaller.isResourceAlreadyDeployed(vfResourceStructure, false);
140 WatchdogComponentDistributionStatus actualWatchdogComponentDistributionStatus = getWatchdogCDStatusWithName(
141 watchdogCDStatusRepository.findByDistributionId(notificationData.getDistributionID()), MSO);
143 verify(vfResourceStructure, times(3)).getResourceInstance();
144 verify(vfResourceStructure, times(5)).getNotification();
145 assertThat(actualWatchdogComponentDistributionStatus,
146 sameBeanAs(expectedComponentDistributionStatus).ignoring("createTime").ignoring("modifyTime"));
150 public void isResourceAlreadyDeployedFalseTest() throws Exception {
151 notificationData.setServiceName("serviceName");
152 notificationData.setServiceVersion("123456");
153 notificationData.setServiceUUID("serviceUUID");
154 notificationData.setDistributionID("testStatusSuccess");
156 doThrow(RuntimeException.class).when(vfResourceStructure).isDeployedSuccessfully();
157 doReturn(notificationData).when(vfResourceStructure).getNotification();
158 doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
159 doReturn("resourceInstanceName").when(resourceInstance).getResourceInstanceName();
160 doReturn("resourceCustomizationUUID").when(resourceInstance).getResourceCustomizationUUID();
161 doReturn("resourceName").when(resourceInstance).getResourceName();
163 toscaInstaller.isResourceAlreadyDeployed(vfResourceStructure, false);
165 verify(vfResourceStructure, times(3)).getResourceInstance();
166 verify(vfResourceStructure, times(4)).getNotification();
170 public void isResourceAlreadyDeployedExceptionTest() throws ArtifactInstallerException {
171 expectedException.expect(ArtifactInstallerException.class);
173 toscaInstaller.isResourceAlreadyDeployed(vfResourceStructure, false);
177 public void installTheComponentStatusTest() throws Exception {
178 String distributionId = "testStatusSuccessTosca";
179 String componentName = "testComponentName";
181 statusData = spy(JsonStatusData.class);
182 doReturn(distributionId).when(statusData).getDistributionID();
183 doReturn(componentName).when(statusData).getComponentName();
185 WatchdogComponentDistributionStatus expectedWatchdogComponentDistributionStatus =
186 new WatchdogComponentDistributionStatus(distributionId, componentName);
187 expectedWatchdogComponentDistributionStatus.setComponentDistributionStatus(statusData.getStatus().toString());
189 WatchdogComponentDistributionStatus cdStatus =
190 new WatchdogComponentDistributionStatus(statusData.getDistributionID(), statusData.getComponentName());
192 toscaInstaller.installTheComponentStatus(statusData);
194 WatchdogComponentDistributionStatus actualWatchdogComponentDistributionStatus =
195 getWatchdogCDStatusWithName(watchdogCDStatusRepository.findByDistributionId("testStatusSuccessTosca"),
196 statusData.getComponentName());
198 assertEquals(statusData.getDistributionID(), cdStatus.getDistributionId());
199 assertEquals(statusData.getComponentName(), cdStatus.getComponentName());
200 assertThat(actualWatchdogComponentDistributionStatus,
201 sameBeanAs(expectedWatchdogComponentDistributionStatus).ignoring("createTime").ignoring("modifyTime"));
205 public void installTheComponentStatusExceptionTest() throws ArtifactInstallerException {
206 expectedException.expect(ArtifactInstallerException.class);
208 statusData = spy(JsonStatusData.class);
209 doReturn(null).when(statusData).getStatus();
211 toscaInstaller.installTheComponentStatus(statusData);
215 public void installTheResourceExceptionTest() throws Exception {
216 expectedException.expect(ArtifactInstallerException.class);
218 notificationData.setDistributionID("testStatusFailureTosca");
219 notificationData.setServiceVersion("123456");
220 notificationData.setServiceUUID("serviceUUID");
221 notificationData.setWorkloadContext("workloadContext");
223 doReturn(notificationData).when(vfResourceStructure).getNotification();
224 doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
226 toscaInstaller.installTheResource(toscaResourceStruct, vfResourceStructure);
230 public void installTheResourceDBExceptionTest() throws Exception {
231 notificationData.setDistributionID("testStatusSuccessTosca");
232 notificationData.setServiceVersion("123456");
233 notificationData.setServiceUUID("serviceUUID");
234 notificationData.setWorkloadContext("workloadContext");
236 doReturn(notificationData).when(vfResourceStructure).getNotification();
237 doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
238 doThrow(LockAcquisitionException.class).when(toscaResourceStruct).getToscaArtifact();
240 toscaInstaller.installTheResource(toscaResourceStruct, vfResourceStructure);
244 public void verifyTheFilePrefixInStringTest() {
245 String body = "abcabcabcfile:///testfile.txtabcbabacbcabc";
246 String filenameToVerify = "testfile.txt";
247 String expectedFileBody = "abcabcabctestfile.txtabcbabacbcabc";
249 String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
251 assertEquals(expectedFileBody, newFileBody);
255 public void verifyTheFilePrefixInStringNullBodyTest() {
257 String filenameToVerify = "testfile.txt";
259 String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
261 assertEquals(body, newFileBody);
265 public void verifyTheFilePrefixInStringEmptyBodyTest() {
267 String filenameToVerify = "testfile.txt";
269 String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
271 assertEquals(body, newFileBody);
275 public void verifyTheFilePrefixInStringNullFilenameTest() {
276 String body = "abcabcabcfile:///testfile.txtabcbabacbcabc";
277 String filenameToVerify = null;
279 String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
281 assertEquals(body, newFileBody);
285 public void verifyTheFilePrefixInStringEmptyFilenameTest() {
286 String body = "abcabcabcfile:///testfile.txtabcbabacbcabc";
287 String filenameToVerify = "";
289 String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
291 assertEquals(body, newFileBody);
294 private WatchdogComponentDistributionStatus getWatchdogCDStatusWithName(
295 List<WatchdogComponentDistributionStatus> watchdogComponentDistributionStatuses, String componentName) {
296 WatchdogComponentDistributionStatus actualWatchdogComponentDistributionStatus =
297 new WatchdogComponentDistributionStatus();
298 for (WatchdogComponentDistributionStatus watchdogComponentDistributionStatus : watchdogComponentDistributionStatuses) {
299 if (componentName.equals(watchdogComponentDistributionStatus.getComponentName())) {
300 actualWatchdogComponentDistributionStatus = watchdogComponentDistributionStatus;
304 return actualWatchdogComponentDistributionStatus;
309 private void prepareConfigurationResource() {
310 doReturn(metadata).when(nodeTemplate).getMetaData();
311 doReturn(MockConstants.TEMPLATE_TYPE).when(nodeTemplate).getType();
313 doReturn(MockConstants.MODEL_NAME).when(metadata).getValue(SdcPropertyNames.PROPERTY_NAME_NAME);
314 doReturn(MockConstants.MODEL_INVARIANT_UUID).when(metadata)
315 .getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID);
316 doReturn(MockConstants.MODEL_UUID).when(metadata).getValue(SdcPropertyNames.PROPERTY_NAME_UUID);
317 doReturn(MockConstants.MODEL_VERSION).when(metadata).getValue(SdcPropertyNames.PROPERTY_NAME_VERSION);
318 doReturn(MockConstants.MODEL_DESCRIPTION).when(metadata).getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION);
319 doReturn(MockConstants.MODEL_NAME).when(metadata).getValue(SdcPropertyNames.PROPERTY_NAME_NAME);
320 doReturn(MockConstants.MODEL_NAME).when(metadata).getValue(SdcPropertyNames.PROPERTY_NAME_NAME);
324 public void getConfigurationResourceTest() {
325 prepareConfigurationResource();
327 ConfigurationResource configResource = toscaInstaller.getConfigurationResource(nodeTemplate);
329 assertNotNull(configResource);
330 assertEquals(MockConstants.MODEL_NAME, configResource.getModelName());
331 assertEquals(MockConstants.MODEL_INVARIANT_UUID, configResource.getModelInvariantUUID());
332 assertEquals(MockConstants.MODEL_UUID, configResource.getModelUUID());
333 assertEquals(MockConstants.MODEL_VERSION, configResource.getModelVersion());
334 assertEquals(MockConstants.MODEL_DESCRIPTION, configResource.getDescription());
335 assertEquals(MockConstants.TEMPLATE_TYPE, nodeTemplate.getType());
338 private void prepareConfigurationResourceCustomization() {
339 prepareConfigurationResource();
340 doReturn(MockConstants.MODEL_CUSTOMIZATIONUUID).when(metadata)
341 .getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID);
342 doReturn(csarHelper).when(toscaResourceStructure).getSdcCsarHelper();
343 doReturn(null).when(csarHelper).getNodeTemplatePropertyLeafValue(nodeTemplate,
344 SdcPropertyNames.PROPERTY_NAME_NFFUNCTION);
345 doReturn(null).when(csarHelper).getNodeTemplatePropertyLeafValue(nodeTemplate,
346 SdcPropertyNames.PROPERTY_NAME_NFROLE);
347 doReturn(null).when(csarHelper).getNodeTemplatePropertyLeafValue(nodeTemplate,
348 SdcPropertyNames.PROPERTY_NAME_NFTYPE);
349 doReturn(MockConstants.MODEL_CUSTOMIZATIONUUID).when(spResourceCustomization).getModelCustomizationUUID();
354 public void getConfigurationResourceCustomizationTest() {
355 prepareConfigurationResourceCustomization();
357 ConfigurationResourceCustomization configurationResourceCustomization =
358 toscaInstaller.getConfigurationResourceCustomization(nodeTemplate, toscaResourceStructure,
359 spResourceCustomization, service);
360 assertNotNull(configurationResourceCustomization);
361 assertNotNull(configurationResourceCustomization.getConfigurationResource());
362 assertEquals(MockConstants.MODEL_CUSTOMIZATIONUUID,
363 configurationResourceCustomization.getServiceProxyResourceCustomizationUUID());
367 public void correlateConfigCustomResourcesTest() {
368 ConfigurationResource vrfConfigResource = mock(ConfigurationResource.class);
369 ConfigurationResourceCustomization vrfConfigCustom = mock(ConfigurationResourceCustomization.class);
370 doReturn(ToscaResourceInstaller.NODES_VRF_ENTRY).when(vrfConfigResource).getToscaNodeType();
371 doReturn(vrfConfigResource).when(vrfConfigCustom).getConfigurationResource();
373 ConfigurationResource vnrConfigResource = mock(ConfigurationResource.class);
374 ConfigurationResourceCustomization vnrConfigCustom = mock(ConfigurationResourceCustomization.class);
375 doReturn(ToscaResourceInstaller.VLAN_NETWORK_RECEPTOR).when(vnrConfigResource).getToscaNodeType();
376 doReturn(vnrConfigResource).when(vnrConfigCustom).getConfigurationResource();
378 ConfigurationResourceCustomizationRepository configCustomizationRepo =
379 spy(ConfigurationResourceCustomizationRepository.class);
380 ReflectionTestUtils.setField(toscaInstaller, "configCustomizationRepo", configCustomizationRepo);
381 doReturn(vrfConfigCustom).when(configCustomizationRepo).save(vrfConfigCustom);
382 doReturn(vnrConfigCustom).when(configCustomizationRepo).save(vnrConfigCustom);
384 List<ConfigurationResourceCustomization> configList = new ArrayList<>();
385 configList.add(vrfConfigCustom);
386 configList.add(vnrConfigCustom);
387 doReturn(configList).when(service).getConfigurationCustomizations();
389 toscaInstaller.correlateConfigCustomResources(service);
390 verify(vrfConfigCustom, times(1)).getConfigurationResource();
391 verify(vrfConfigCustom, times(1)).setConfigResourceCustomization(vnrConfigCustom);
392 verify(service, times(1)).getConfigurationCustomizations();
393 verify(vnrConfigCustom, times(1)).getConfigurationResource();
394 verify(vnrConfigCustom, times(1)).setConfigResourceCustomization(vrfConfigCustom);
397 class MockConstants {
398 public final static String MODEL_NAME = "VLAN Network Receptor Configuration";
399 public final static String MODEL_INVARIANT_UUID = "1608eef4-de53-4334-a8d2-ba79cab4bde0";
400 public final static String MODEL_UUID = "212ca27b-554c-474c-96b9-ddc2f1b1ddba";
401 public final static String MODEL_VERSION = "30.0";
402 public final static String MODEL_DESCRIPTION = "VLAN network receptor configuration object";
403 public final static String MODEL_CUSTOMIZATIONUUID = "2db953e8-679d-437b-bff7-cb262638a8cd";
404 public final static String TEMPLATE_TYPE = "org.openecomp.nodes.VLANNetworkReceptor";
405 public final static String TEMPLATE_NAME = "VLAN Network Receptor Configuration 0";