3 * Copyright (c) 2018 Huawei Intellectual Property.
5 * Modifications Copyright (c) 2019 Samsung
7 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
15 * http://www.apache.org/licenses/LICENSE-2.0
19 * Unless required by applicable law or agreed to in writing, software
21 * distributed under the License is distributed on an "AS IS" BASIS,
23 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
25 * See the License for the specific language governing permissions and
27 * limitations under the License.
31 package org.openecomp.sdc.be.components.csar;
33 import fj.data.Either;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.mockito.Mockito;
37 import org.openecomp.sdc.be.components.impl.BaseBusinessLogicMock;
38 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
39 import org.openecomp.sdc.be.config.ConfigurationManager;
40 import org.openecomp.sdc.be.dao.api.ActionStatus;
41 import org.openecomp.sdc.be.impl.ComponentsUtils;
42 import org.openecomp.sdc.be.model.Resource;
43 import org.openecomp.sdc.be.model.User;
44 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
45 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
46 import org.openecomp.sdc.be.model.operations.impl.CsarOperation;
47 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
48 import org.openecomp.sdc.common.api.ConfigurationSource;
49 import org.openecomp.sdc.common.impl.ExternalConfiguration;
50 import org.openecomp.sdc.common.impl.FSConfigurationSource;
51 import org.openecomp.sdc.common.zip.ZipUtils;
52 import org.openecomp.sdc.common.zip.exception.ZipException;
53 import org.openecomp.sdc.exception.ResponseFormat;
55 import java.io.IOException;
56 import java.net.URISyntaxException;
57 import java.nio.file.Files;
58 import java.nio.file.Path;
59 import java.nio.file.Paths;
60 import java.util.Arrays;
61 import java.util.HashMap;
64 import static org.junit.Assert.assertEquals;
65 import static org.junit.Assert.assertNotNull;
66 import static org.junit.Assert.assertTrue;
67 import static org.mockito.ArgumentMatchers.any;
68 import static org.mockito.ArgumentMatchers.anyString;
69 import static org.mockito.Mockito.when;
72 public class CsarBusinessLogicTest extends BaseBusinessLogicMock {
73 static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(),
74 "src/test/resources/config/catalog-be");
75 static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
78 private CsarOperation csarOperation = Mockito.mock(CsarOperation.class);
79 private ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
80 private ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
81 private User user = Mockito.mock(User.class);
82 private YamlTemplateParsingHandler yamlHandler = Mockito.mock(YamlTemplateParsingHandler.class);
84 private CsarBusinessLogic test = new CsarBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
85 groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation, yamlHandler, artifactToscaOperation);
87 private static final String CSAR_UUID = "csarUUID";
88 private static final String CSAR_ENTRY = "Definitions/tosca_mock_vf.yaml";
89 private static final String CSAR_METADATA = "TOSCA-Metadata/TOSCA.meta";
90 private static final String CSAR_METADATA_CONTENT = "TOSCA-Meta-File-Version: 1.0\n" +
91 "CSAR-Version: 1.1\n" +
92 "Created-By: OASIS TOSCA TC\n" +
93 "Entry-Definitions:" + CSAR_ENTRY;
94 private static final String CSAR_ENTRY_CONTENT = "tosca_definitions_version: tosca_simple_yaml_1_0\n";
96 private static final String RESOURCE_NAME = "resourceName";
97 private static final String PAYLOAD_NAME = "mock_vf.csar";
100 public void setUp() throws Exception {
101 test.setCsarOperation(csarOperation);
102 test.setToscaOperationFacade(toscaOperationFacade);
103 test.setComponentsUtils(componentsUtils);
107 public void testGetCsarInfo() {
109 Resource resource = new Resource();
110 resource.setName(RESOURCE_NAME);
112 Map<String, byte[]> csar_data = new HashMap<>();
113 csar_data.put(CSAR_METADATA, CSAR_METADATA_CONTENT.getBytes());
114 csar_data.put(CSAR_ENTRY, CSAR_ENTRY_CONTENT.getBytes());
115 when(csarOperation.getCsar(anyString(), any(User.class))).thenReturn(Either.left(csar_data));
118 CsarInfo csarInfo = test.getCsarInfo(resource, null, user, null, CSAR_UUID);
121 assertNotNull(csarInfo);
123 assertEquals(CSAR_UUID, csarInfo.getCsarUUID());
124 assertEquals(CSAR_ENTRY, csarInfo.getMainTemplateName());
125 assertEquals(RESOURCE_NAME, csarInfo.getVfResourceName());
127 assertEquals(CSAR_ENTRY_CONTENT, csarInfo.getMainTemplateContent());
128 assertTrue(csarInfo.getCsar().keySet().containsAll(Arrays.asList(CSAR_ENTRY, CSAR_METADATA)));
132 public void testGetCsarInfoWithPayload() throws IOException, URISyntaxException, ZipException {
134 Resource resource = new Resource();
135 resource.setName(RESOURCE_NAME);
137 Map<String, byte[]> payload = loadPayload(PAYLOAD_NAME);
140 CsarInfo csarInfo = test.getCsarInfo(resource, null, user, payload, CSAR_UUID);
143 assertNotNull(csarInfo);
145 assertEquals(CSAR_UUID, csarInfo.getCsarUUID());
146 assertEquals(CSAR_ENTRY, csarInfo.getMainTemplateName());
147 assertEquals(RESOURCE_NAME, csarInfo.getVfResourceName());
149 assertTrue(csarInfo.getMainTemplateContent().startsWith(CSAR_ENTRY_CONTENT));
150 assertTrue(csarInfo.getCsar().keySet().containsAll(Arrays.asList(CSAR_ENTRY, CSAR_METADATA)));
153 @Test(expected = ComponentException.class)
154 public void testGetCsarInfoWithBadData(){
156 Resource resource = new Resource();
157 resource.setName(RESOURCE_NAME);
159 Map<String, byte[]> csar_data = new HashMap<>();
160 when(csarOperation.getCsar(anyString(), any(User.class))).thenReturn(Either.left(csar_data));
163 test.getCsarInfo(resource, null, user, null, CSAR_UUID);
167 public void testValidateCsarBeforeCreate() {
168 Resource resource = new Resource();
169 StorageOperationStatus status = StorageOperationStatus.OK;
170 when(toscaOperationFacade.validateCsarUuidUniqueness(CSAR_UUID)).thenReturn(status);
171 test.validateCsarBeforeCreate(resource, AuditingActionEnum.ARTIFACT_DOWNLOAD, user, CSAR_UUID);
174 @Test(expected = ComponentException.class)
175 public void testValidateCsarBeforeCreate_Exists() {
176 Resource resource = new Resource();
177 ResponseFormat responseFormat = new ResponseFormat();
178 StorageOperationStatus status = StorageOperationStatus.ENTITY_ALREADY_EXISTS;
179 when(toscaOperationFacade.validateCsarUuidUniqueness(CSAR_UUID)).thenReturn(status);
180 when(componentsUtils.getResponseFormat(ActionStatus.VSP_ALREADY_EXISTS, CSAR_UUID)).thenReturn(responseFormat);
181 test.validateCsarBeforeCreate(resource, AuditingActionEnum.ARTIFACT_DOWNLOAD, user, "csarUUID");
184 @Test(expected = ComponentException.class)
185 public void testValidateCsarBeforeCreate_Fail() {
186 Resource resource = new Resource();
187 String csarUUID = "csarUUID";
188 when(toscaOperationFacade.validateCsarUuidUniqueness(csarUUID)).thenReturn(StorageOperationStatus.EXEUCTION_FAILED);
189 when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.EXEUCTION_FAILED)).thenReturn(ActionStatus.GENERAL_ERROR);
190 test.validateCsarBeforeCreate(resource, AuditingActionEnum.ARTIFACT_DOWNLOAD, user, "csarUUID");
193 public Map<String, byte[]> loadPayload(String payloadName) throws IOException, URISyntaxException, ZipException {
195 Path path = Paths.get(getClass().getResource("/" + payloadName).toURI());
196 byte[] data = Files.readAllBytes(path);
198 return ZipUtils.readZip(data, false);