2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2018 AT&T Intellectual Property. All rights
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
24 package org.onap.clamp.clds.sdc.controller.installer;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertNotNull;
28 import static org.junit.Assert.assertTrue;
29 import static org.junit.Assert.fail;
31 import com.att.aft.dme2.internal.apache.commons.io.IOUtils;
34 import java.io.IOException;
35 import java.nio.file.Files;
36 import java.nio.file.Path;
37 import java.nio.file.Paths;
38 import java.util.ArrayList;
39 import java.util.List;
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;
52 public class CsarHandlerTest {
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 BLUEPRINT1_NAME = "blueprint1-name";
61 public void testConstructor() throws CsarHandlerException {
62 IArtifactInfo serviceArtifact = Mockito.mock(IArtifactInfo.class);
63 Mockito.when(serviceArtifact.getArtifactType()).thenReturn(CsarHandler.CSAR_TYPE);
64 Mockito.when(serviceArtifact.getArtifactName()).thenReturn(CSAR_ARTIFACT_NAME);
65 List<IArtifactInfo> servicesList = new ArrayList<>();
66 servicesList.add(serviceArtifact);
67 INotificationData notifData = Mockito.mock(INotificationData.class);
68 Mockito.when(notifData.getServiceArtifacts()).thenReturn(servicesList);
69 CsarHandler csar = new CsarHandler(notifData, "test-controller", SDC_FOLDER);
70 assertEquals(SDC_FOLDER + "/test-controller" + "/" + CSAR_ARTIFACT_NAME, csar.getFilePath());
73 @Test(expected = CsarHandlerException.class)
74 public void testFailingConstructor() throws CsarHandlerException {
75 INotificationData notifData = Mockito.mock(INotificationData.class);
76 Mockito.when(notifData.getServiceArtifacts()).thenReturn(new ArrayList<>());
77 new CsarHandler(notifData, "test-controller", "/tmp/csar-handler-tests");
78 fail("Exception should have been raised");
81 private INotificationData buildFakeSdcNotification() {
82 // BUild what is needed for CSAR
83 IArtifactInfo serviceArtifact = Mockito.mock(IArtifactInfo.class);
84 Mockito.when(serviceArtifact.getArtifactType()).thenReturn(CsarHandler.CSAR_TYPE);
85 Mockito.when(serviceArtifact.getArtifactName()).thenReturn(CSAR_ARTIFACT_NAME);
86 List<IArtifactInfo> servicesList = new ArrayList<>();
87 servicesList.add(serviceArtifact);
88 INotificationData notifData = Mockito.mock(INotificationData.class);
89 Mockito.when(notifData.getServiceArtifacts()).thenReturn(servicesList);
90 // Build what is needed for UUID
91 Mockito.when(notifData.getServiceInvariantUUID()).thenReturn(SERVICE_UUID);
92 // Build fake resource with one artifact BLUEPRINT
93 IResourceInstance resource1 = Mockito.mock(IResourceInstance.class);
94 Mockito.when(resource1.getResourceType()).thenReturn("VF");
95 Mockito.when(resource1.getResourceInvariantUUID()).thenReturn(RESOURCE1_UUID);
96 // Create a fake artifact for resource
97 IArtifactInfo blueprintArtifact = Mockito.mock(IArtifactInfo.class);
98 Mockito.when(blueprintArtifact.getArtifactType()).thenReturn(CsarHandler.BLUEPRINT_TYPE);
99 Mockito.when(blueprintArtifact.getArtifactName()).thenReturn(BLUEPRINT1_NAME);
100 List<IArtifactInfo> artifactsListForResource = new ArrayList<>();
101 artifactsListForResource.add(blueprintArtifact);
102 Mockito.when(resource1.getArtifacts()).thenReturn(artifactsListForResource);
103 List<IResourceInstance> resourcesList = new ArrayList<>();
104 resourcesList.add(resource1);
105 Mockito.when(notifData.getResources()).thenReturn(resourcesList);
109 private IDistributionClientDownloadResult buildFakeSdcResut() throws IOException {
110 IDistributionClientDownloadResult resultArtifact = Mockito.mock(IDistributionClientDownloadResult.class);
111 Mockito.when(resultArtifact.getArtifactPayload()).thenReturn(
112 IOUtils.toByteArray(ResourceFileUtil.getResourceAsStream("example/sdc/service-Simsfoimap0112.csar")));
113 return resultArtifact;
117 public void testSave()
118 throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException {
119 CsarHandler csar = new CsarHandler(buildFakeSdcNotification(), "test-controller", "/tmp/csar-handler-tests");
121 csar.save(buildFakeSdcResut());
122 assertTrue((new File(SDC_FOLDER + "/test-controller/" + CSAR_ARTIFACT_NAME)).exists());
123 assertEquals(CSAR_ARTIFACT_NAME, csar.getArtifactElement().getArtifactName());
124 assertNotNull(csar.getSdcCsarHelper());
125 // Test dcaeBlueprint
126 String blueprint = csar.getDcaeBlueprint();
127 assertNotNull(blueprint);
128 assertTrue(!blueprint.isEmpty());
129 assertTrue(blueprint.contains("DCAE-VES-PM-EVENT-v1"));
130 // Test additional properties from Sdc notif
131 assertEquals(BLUEPRINT1_NAME, csar.getBlueprintArtifactName());
132 assertEquals(RESOURCE1_UUID, csar.getBlueprintInvariantResourceUuid());
133 assertEquals(SERVICE_UUID, csar.getBlueprintInvariantServiceUuid());
135 Path path = Paths.get(SDC_FOLDER + "/test-controller/" + CSAR_ARTIFACT_NAME);
136 Files.deleteIfExists(path);
140 public void testDoubleSave()
141 throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException {
142 CsarHandler csar = new CsarHandler(buildFakeSdcNotification(), "test-controller", "/tmp/csar-handler-tests");
144 csar.save(buildFakeSdcResut());
145 assertTrue((new File(SDC_FOLDER + "/test-controller/" + CSAR_ARTIFACT_NAME)).exists());
146 assertEquals(CSAR_ARTIFACT_NAME, csar.getArtifactElement().getArtifactName());
147 assertNotNull(csar.getSdcCsarHelper());
148 // Test dcaeBlueprint
149 String blueprint = csar.getDcaeBlueprint();
150 assertNotNull(blueprint);
151 assertTrue(!blueprint.isEmpty());
152 assertTrue(blueprint.contains("DCAE-VES-PM-EVENT-v1"));
153 // Test additional properties from Sdc notif
154 assertEquals(BLUEPRINT1_NAME, csar.getBlueprintArtifactName());
155 assertEquals(RESOURCE1_UUID, csar.getBlueprintInvariantResourceUuid());
156 assertEquals(SERVICE_UUID, csar.getBlueprintInvariantServiceUuid());
157 Path path = Paths.get(SDC_FOLDER + "/test-controller/" + CSAR_ARTIFACT_NAME);
158 // A double save should simply overwrite the existing
159 csar.save(buildFakeSdcResut());
161 Files.deleteIfExists(path);