e0088747861dd847aaa54763f6b2fee281594ee9
[clamp.git] / src / test / java / org / onap / clamp / clds / sdc / controller / installer / CsarHandlerTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP CLAMP
4  * ================================================================================
5  * Copyright (C) 2018 AT&T Intellectual Property. All rights
6  *                             reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END============================================
20  * ===================================================================
21  *
22  */
23
24 package org.onap.clamp.clds.sdc.controller.installer;
25
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertFalse;
28 import static org.junit.Assert.assertNotNull;
29 import static org.junit.Assert.assertTrue;
30 import static org.junit.Assert.fail;
31
32 import java.io.File;
33 import java.io.IOException;
34 import java.nio.file.Files;
35 import java.nio.file.Path;
36 import java.nio.file.Paths;
37 import java.util.ArrayList;
38 import java.util.List;
39
40 import org.apache.commons.io.IOUtils;
41 import org.junit.Test;
42 import org.mockito.Mockito;
43 import org.onap.clamp.clds.exception.sdc.controller.CsarHandlerException;
44 import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException;
45 import org.onap.clamp.clds.util.ResourceFileUtil;
46 import org.onap.sdc.api.notification.IArtifactInfo;
47 import org.onap.sdc.api.notification.INotificationData;
48 import org.onap.sdc.api.notification.IResourceInstance;
49 import org.onap.sdc.api.results.IDistributionClientDownloadResult;
50 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
51
52 public class CsarHandlerTest {
53
54     private static final String SDC_FOLDER = "/tmp/csar-handler-tests";
55     private static final String CSAR_ARTIFACT_NAME = "testArtifact.csar";
56     private static final String SERVICE_UUID = "serviceUUID";
57     private static final String RESOURCE1_UUID = "resource1UUID";
58     private static final String RESOURCE1_INSTANCE_NAME = "sim-1802 0";
59     private static final String RESOURCE1_INSTANCE_NAME_IN_CSAR = "sim18020";
60     private static final String BLUEPRINT1_NAME = "FOI.Simfoimap223S0112.event_proc_bp.yaml";
61     private static final String BLUEPRINT2_NAME = "FOI.Simfoimap223S0112.event_proc_bp2.yaml";
62
63     @Test
64     public void testConstructor() throws CsarHandlerException {
65         IArtifactInfo serviceArtifact = Mockito.mock(IArtifactInfo.class);
66         Mockito.when(serviceArtifact.getArtifactType()).thenReturn(CsarHandler.CSAR_TYPE);
67         Mockito.when(serviceArtifact.getArtifactName()).thenReturn(CSAR_ARTIFACT_NAME);
68         List<IArtifactInfo> servicesList = new ArrayList<>();
69         servicesList.add(serviceArtifact);
70         INotificationData notifData = Mockito.mock(INotificationData.class);
71         Mockito.when(notifData.getServiceArtifacts()).thenReturn(servicesList);
72         CsarHandler csar = new CsarHandler(notifData, "test-controller", SDC_FOLDER);
73         assertEquals(SDC_FOLDER + "/test-controller" + "/" + CSAR_ARTIFACT_NAME, csar.getFilePath());
74     }
75
76     @Test(expected = CsarHandlerException.class)
77     public void testFailingConstructor() throws CsarHandlerException {
78         INotificationData notifData = Mockito.mock(INotificationData.class);
79         Mockito.when(notifData.getServiceArtifacts()).thenReturn(new ArrayList<>());
80         new CsarHandler(notifData, "test-controller", "/tmp/csar-handler-tests");
81         fail("Exception should have been raised");
82     }
83
84     private INotificationData buildFakeSdcNotification() {
85         // BUild what is needed for CSAR
86         IArtifactInfo serviceArtifact = Mockito.mock(IArtifactInfo.class);
87         Mockito.when(serviceArtifact.getArtifactType()).thenReturn(CsarHandler.CSAR_TYPE);
88         Mockito.when(serviceArtifact.getArtifactName()).thenReturn(CSAR_ARTIFACT_NAME);
89         List<IArtifactInfo> servicesList = new ArrayList<>();
90         servicesList.add(serviceArtifact);
91         INotificationData notifData = Mockito.mock(INotificationData.class);
92         Mockito.when(notifData.getServiceArtifacts()).thenReturn(servicesList);
93         // Build what is needed for UUID
94         Mockito.when(notifData.getServiceInvariantUUID()).thenReturn(SERVICE_UUID);
95         // Build fake resource with one artifact BLUEPRINT
96         IResourceInstance resource1 = Mockito.mock(IResourceInstance.class);
97         Mockito.when(resource1.getResourceType()).thenReturn("VF");
98         Mockito.when(resource1.getResourceInvariantUUID()).thenReturn(RESOURCE1_UUID);
99         Mockito.when(resource1.getResourceInstanceName()).thenReturn(RESOURCE1_INSTANCE_NAME);
100         // Create a fake artifact for resource
101         IArtifactInfo blueprintArtifact = Mockito.mock(IArtifactInfo.class);
102         Mockito.when(blueprintArtifact.getArtifactType()).thenReturn(CsarHandler.BLUEPRINT_TYPE);
103         List<IArtifactInfo> artifactsListForResource = new ArrayList<>();
104         artifactsListForResource.add(blueprintArtifact);
105         Mockito.when(resource1.getArtifacts()).thenReturn(artifactsListForResource);
106         List<IResourceInstance> resourcesList = new ArrayList<>();
107         resourcesList.add(resource1);
108         Mockito.when(notifData.getResources()).thenReturn(resourcesList);
109         return notifData;
110     }
111
112     private IDistributionClientDownloadResult buildFakeSdcResut() throws IOException {
113         IDistributionClientDownloadResult resultArtifact = Mockito.mock(IDistributionClientDownloadResult.class);
114         Mockito.when(resultArtifact.getArtifactPayload()).thenReturn(
115             IOUtils.toByteArray(ResourceFileUtil.getResourceAsStream("example/sdc/service-Simsfoimap0112.csar")));
116         return resultArtifact;
117     }
118
119     private IDistributionClientDownloadResult buildFakeSdcResultWithoutPolicyModel() throws IOException {
120         IDistributionClientDownloadResult resultArtifact = Mockito.mock(IDistributionClientDownloadResult.class);
121         Mockito.when(resultArtifact.getArtifactPayload()).thenReturn(
122             IOUtils.toByteArray(ResourceFileUtil.getResourceAsStream("example/sdc/service-without-policy.csar")));
123         return resultArtifact;
124     }
125
126     @Test
127     public void testSave()
128         throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException {
129         CsarHandler csar = new CsarHandler(buildFakeSdcNotification(), "test-controller", "/tmp/csar-handler-tests");
130         // Test the save
131         csar.save(buildFakeSdcResut());
132         assertTrue((new File(SDC_FOLDER + "/test-controller/" + CSAR_ARTIFACT_NAME)).exists());
133         assertEquals(CSAR_ARTIFACT_NAME, csar.getArtifactElement().getArtifactName());
134         assertNotNull(csar.getSdcCsarHelper());
135         // Test dcaeBlueprint
136         String blueprint = csar.getMapOfBlueprints().get(BLUEPRINT1_NAME).getDcaeBlueprint();
137         assertNotNull(blueprint);
138         assertTrue(!blueprint.isEmpty());
139         assertTrue(blueprint.contains("DCAE-VES-PM-EVENT-v1"));
140         // Test additional properties from Sdc notif
141         assertEquals(BLUEPRINT1_NAME, csar.getMapOfBlueprints().get(BLUEPRINT1_NAME).getBlueprintArtifactName());
142         assertEquals(RESOURCE1_UUID,
143             csar.getMapOfBlueprints().get(BLUEPRINT1_NAME).getResourceAttached().getResourceInvariantUUID());
144         assertEquals(SERVICE_UUID, csar.getMapOfBlueprints().get(BLUEPRINT1_NAME).getBlueprintInvariantServiceUuid());
145
146         // Just check the second one is there as well
147         assertEquals(BLUEPRINT2_NAME, csar.getMapOfBlueprints().get(BLUEPRINT2_NAME).getBlueprintArtifactName());
148         blueprint = csar.getMapOfBlueprints().get(BLUEPRINT2_NAME).getDcaeBlueprint();
149         assertNotNull(blueprint);
150         assertTrue(!blueprint.isEmpty());
151         assertTrue(blueprint.contains("DCAE-VES-PM-EVENT-v1"));
152         // Do some cleanup
153         Path path = Paths.get(SDC_FOLDER + "/test-controller/" + CSAR_ARTIFACT_NAME);
154         Files.deleteIfExists(path);
155
156     }
157
158     @Test
159     public void testLoadingOfPolicyModelFromCsar()
160         throws CsarHandlerException, IOException, SdcArtifactInstallerException, SdcToscaParserException {
161         CsarHandler csar = new CsarHandler(buildFakeSdcNotification(), "test-controller", "/tmp/csar-handler-tests");
162         csar.save(buildFakeSdcResut());
163         String policyModelYaml = csar.getPolicyModelYaml().get();
164         assertTrue(policyModelYaml.contains("tosca_simple_yaml_1_0_0"));
165     }
166
167     @Test
168     public void testLoadingOfNonexistentPolicyModelFromCsar()
169         throws CsarHandlerException, IOException, SdcArtifactInstallerException, SdcToscaParserException {
170         CsarHandler csar = new CsarHandler(buildFakeSdcNotification(), "test-controller", "/tmp/csar-handler-tests");
171         csar.save(buildFakeSdcResultWithoutPolicyModel());
172         assertFalse(csar.getPolicyModelYaml().isPresent());
173     }
174
175     @Test
176     public void testDoubleSave()
177         throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException {
178         CsarHandler csar = new CsarHandler(buildFakeSdcNotification(), "test-controller", "/tmp/csar-handler-tests");
179         // Test the save
180         csar.save(buildFakeSdcResut());
181         assertTrue((new File(SDC_FOLDER + "/test-controller/" + CSAR_ARTIFACT_NAME)).exists());
182         assertEquals(CSAR_ARTIFACT_NAME, csar.getArtifactElement().getArtifactName());
183         assertNotNull(csar.getSdcCsarHelper());
184         // Test dcaeBlueprint
185         String blueprint = csar.getMapOfBlueprints().get(BLUEPRINT1_NAME).getDcaeBlueprint();
186         assertNotNull(blueprint);
187         assertTrue(!blueprint.isEmpty());
188         assertTrue(blueprint.contains("DCAE-VES-PM-EVENT-v1"));
189         // Test additional properties from Sdc notif
190         assertEquals(BLUEPRINT1_NAME, csar.getMapOfBlueprints().get(BLUEPRINT1_NAME).getBlueprintArtifactName());
191         assertEquals(RESOURCE1_UUID,
192             csar.getMapOfBlueprints().get(BLUEPRINT1_NAME).getResourceAttached().getResourceInvariantUUID());
193         assertEquals(SERVICE_UUID, csar.getMapOfBlueprints().get(BLUEPRINT1_NAME).getBlueprintInvariantServiceUuid());
194         Path path = Paths.get(SDC_FOLDER + "/test-controller/" + CSAR_ARTIFACT_NAME);
195         // A double save should simply overwrite the existing
196         csar.save(buildFakeSdcResut());
197         // Do some cleanup
198         Files.deleteIfExists(path);
199     }
200 }