vnr vrf fk issue
[so.git] / asdc-controller / src / test / java / org / onap / so / asdc / installer / heat / ToscaResourceInstallerTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
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.asdc.installer.heat;
22
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;
69
70
71 public class ToscaResourceInstallerTest extends BaseTest {
72     @Autowired
73     private ToscaResourceInstaller toscaInstaller;
74     @Autowired
75     private WatchdogComponentDistributionStatusRepository watchdogCDStatusRepository;
76     @Autowired
77     private AllottedResourceRepository allottedRepo;
78     @Autowired
79     private AllottedResourceCustomizationRepository allottedCustomizationRepo;
80     @Autowired
81     private ServiceRepository serviceRepo;
82     @Mock
83     private SdcCsarHelperImpl sdcCsarHelper;
84     @Mock
85     private Metadata metadata;
86     @Mock
87     private ArtifactInfoImpl artifactInfo;
88     @Mock
89     private List<Group> vfGroups;
90     @Mock
91     private IResourceInstance resourceInstance;
92     @Rule
93     public ExpectedException expectedException = ExpectedException.none();
94     @Mock
95     private NodeTemplate nodeTemplate;
96     @Mock
97     private ToscaResourceStructure toscaResourceStructure;
98     @Mock
99     private ServiceProxyResourceCustomization spResourceCustomization;
100     @Mock
101     private ISdcCsarHelper csarHelper;
102     @Mock
103     private StatefulEntityType entityType;
104     @Mock
105     private Service service;
106
107     private NotificationDataImpl notificationData;
108     private JsonStatusData statusData;
109     private static final String MSO = "SO";
110
111     @Before
112     public void before() {
113         MockitoAnnotations.initMocks(this);
114
115         notificationData = new NotificationDataImpl();
116         statusData = new JsonStatusData();
117     }
118
119     @Test
120     public void isResourceAlreadyDeployedTest() throws Exception {
121         notificationData.setServiceName("serviceName");
122         notificationData.setServiceVersion("123456");
123         notificationData.setServiceUUID("serviceUUID");
124         notificationData.setDistributionID("testStatusSuccessTosca");
125
126         WatchdogComponentDistributionStatus expectedComponentDistributionStatus =
127                 new WatchdogComponentDistributionStatus(notificationData.getDistributionID(), MSO);
128         expectedComponentDistributionStatus
129                 .setComponentDistributionStatus(DistributionStatusEnum.COMPONENT_DONE_OK.name());
130
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();
137
138         toscaInstaller.isResourceAlreadyDeployed(vfResourceStructure, false);
139
140         WatchdogComponentDistributionStatus actualWatchdogComponentDistributionStatus = getWatchdogCDStatusWithName(
141                 watchdogCDStatusRepository.findByDistributionId(notificationData.getDistributionID()), MSO);
142
143         verify(vfResourceStructure, times(3)).getResourceInstance();
144         verify(vfResourceStructure, times(5)).getNotification();
145         assertThat(actualWatchdogComponentDistributionStatus,
146                 sameBeanAs(expectedComponentDistributionStatus).ignoring("createTime").ignoring("modifyTime"));
147     }
148
149     @Test
150     public void isResourceAlreadyDeployedFalseTest() throws Exception {
151         notificationData.setServiceName("serviceName");
152         notificationData.setServiceVersion("123456");
153         notificationData.setServiceUUID("serviceUUID");
154         notificationData.setDistributionID("testStatusSuccess");
155
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();
162
163         toscaInstaller.isResourceAlreadyDeployed(vfResourceStructure, false);
164
165         verify(vfResourceStructure, times(3)).getResourceInstance();
166         verify(vfResourceStructure, times(4)).getNotification();
167     }
168
169     @Test
170     public void isResourceAlreadyDeployedExceptionTest() throws ArtifactInstallerException {
171         expectedException.expect(ArtifactInstallerException.class);
172
173         toscaInstaller.isResourceAlreadyDeployed(vfResourceStructure, false);
174     }
175
176     @Test
177     public void installTheComponentStatusTest() throws Exception {
178         String distributionId = "testStatusSuccessTosca";
179         String componentName = "testComponentName";
180
181         statusData = spy(JsonStatusData.class);
182         doReturn(distributionId).when(statusData).getDistributionID();
183         doReturn(componentName).when(statusData).getComponentName();
184
185         WatchdogComponentDistributionStatus expectedWatchdogComponentDistributionStatus =
186                 new WatchdogComponentDistributionStatus(distributionId, componentName);
187         expectedWatchdogComponentDistributionStatus.setComponentDistributionStatus(statusData.getStatus().toString());
188
189         WatchdogComponentDistributionStatus cdStatus =
190                 new WatchdogComponentDistributionStatus(statusData.getDistributionID(), statusData.getComponentName());
191
192         toscaInstaller.installTheComponentStatus(statusData);
193
194         WatchdogComponentDistributionStatus actualWatchdogComponentDistributionStatus =
195                 getWatchdogCDStatusWithName(watchdogCDStatusRepository.findByDistributionId("testStatusSuccessTosca"),
196                         statusData.getComponentName());
197
198         assertEquals(statusData.getDistributionID(), cdStatus.getDistributionId());
199         assertEquals(statusData.getComponentName(), cdStatus.getComponentName());
200         assertThat(actualWatchdogComponentDistributionStatus,
201                 sameBeanAs(expectedWatchdogComponentDistributionStatus).ignoring("createTime").ignoring("modifyTime"));
202     }
203
204     @Test
205     public void installTheComponentStatusExceptionTest() throws ArtifactInstallerException {
206         expectedException.expect(ArtifactInstallerException.class);
207
208         statusData = spy(JsonStatusData.class);
209         doReturn(null).when(statusData).getStatus();
210
211         toscaInstaller.installTheComponentStatus(statusData);
212     }
213
214     @Test
215     public void installTheResourceExceptionTest() throws Exception {
216         expectedException.expect(ArtifactInstallerException.class);
217
218         notificationData.setDistributionID("testStatusFailureTosca");
219         notificationData.setServiceVersion("123456");
220         notificationData.setServiceUUID("serviceUUID");
221         notificationData.setWorkloadContext("workloadContext");
222
223         doReturn(notificationData).when(vfResourceStructure).getNotification();
224         doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
225
226         toscaInstaller.installTheResource(toscaResourceStruct, vfResourceStructure);
227     }
228
229     @Test
230     public void installTheResourceDBExceptionTest() throws Exception {
231         notificationData.setDistributionID("testStatusSuccessTosca");
232         notificationData.setServiceVersion("123456");
233         notificationData.setServiceUUID("serviceUUID");
234         notificationData.setWorkloadContext("workloadContext");
235
236         doReturn(notificationData).when(vfResourceStructure).getNotification();
237         doReturn(resourceInstance).when(vfResourceStructure).getResourceInstance();
238         doThrow(LockAcquisitionException.class).when(toscaResourceStruct).getToscaArtifact();
239
240         toscaInstaller.installTheResource(toscaResourceStruct, vfResourceStructure);
241     }
242
243     @Test
244     public void verifyTheFilePrefixInStringTest() {
245         String body = "abcabcabcfile:///testfile.txtabcbabacbcabc";
246         String filenameToVerify = "testfile.txt";
247         String expectedFileBody = "abcabcabctestfile.txtabcbabacbcabc";
248
249         String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
250
251         assertEquals(expectedFileBody, newFileBody);
252     }
253
254     @Test
255     public void verifyTheFilePrefixInStringNullBodyTest() {
256         String body = null;
257         String filenameToVerify = "testfile.txt";
258
259         String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
260
261         assertEquals(body, newFileBody);
262     }
263
264     @Test
265     public void verifyTheFilePrefixInStringEmptyBodyTest() {
266         String body = "";
267         String filenameToVerify = "testfile.txt";
268
269         String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
270
271         assertEquals(body, newFileBody);
272     }
273
274     @Test
275     public void verifyTheFilePrefixInStringNullFilenameTest() {
276         String body = "abcabcabcfile:///testfile.txtabcbabacbcabc";
277         String filenameToVerify = null;
278
279         String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
280
281         assertEquals(body, newFileBody);
282     }
283
284     @Test
285     public void verifyTheFilePrefixInStringEmptyFilenameTest() {
286         String body = "abcabcabcfile:///testfile.txtabcbabacbcabc";
287         String filenameToVerify = "";
288
289         String newFileBody = toscaInstaller.verifyTheFilePrefixInString(body, filenameToVerify);
290
291         assertEquals(body, newFileBody);
292     }
293
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;
301                 break;
302             }
303         }
304         return actualWatchdogComponentDistributionStatus;
305     }
306
307
308
309     private void prepareConfigurationResource() {
310         doReturn(metadata).when(nodeTemplate).getMetaData();
311         doReturn(MockConstants.TEMPLATE_TYPE).when(nodeTemplate).getType();
312
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);
321     }
322
323     @Test
324     public void getConfigurationResourceTest() {
325         prepareConfigurationResource();
326
327         ConfigurationResource configResource = toscaInstaller.getConfigurationResource(nodeTemplate);
328
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());
336     }
337
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();
350     }
351
352
353     @Test
354     public void getConfigurationResourceCustomizationTest() {
355         prepareConfigurationResourceCustomization();
356
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());
364     }
365
366     @Test
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();
372
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();
377
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);
383
384         List<ConfigurationResourceCustomization> configList = new ArrayList<>();
385         configList.add(vrfConfigCustom);
386         configList.add(vnrConfigCustom);
387         doReturn(configList).when(service).getConfigurationCustomizations();
388
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);
395     }
396
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";
406
407
408     }
409 }