Catalog alignment
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / csar / CsarBusinessLogicTest.java
1 /*
2
3  * Copyright (c) 2018 Huawei Intellectual Property.
4
5  * Modifications Copyright (c) 2019 Samsung
6
7  * Licensed under the Apache License, Version 2.0 (the "License");
8
9  * you may not use this file except in compliance with the License.
10
11  * You may obtain a copy of the License at
12
13  *
14
15  *     http://www.apache.org/licenses/LICENSE-2.0
16
17  *
18
19  * Unless required by applicable law or agreed to in writing, software
20
21  * distributed under the License is distributed on an "AS IS" BASIS,
22
23  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
24
25  * See the License for the specific language governing permissions and
26
27  * limitations under the License.
28
29  */
30
31 package org.openecomp.sdc.be.components.csar;
32
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;
54
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;
62 import java.util.Map;
63
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;
70
71
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);
76
77
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);
83
84     private CsarBusinessLogic test = new CsarBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
85         groupBusinessLogic, interfaceOperation,  interfaceLifecycleTypeOperation, yamlHandler, artifactToscaOperation);
86
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";
95
96     private static final String RESOURCE_NAME = "resourceName";
97     private static final String PAYLOAD_NAME = "mock_vf.csar";
98
99     @Before
100     public void setUp() throws Exception {
101         test.setCsarOperation(csarOperation);
102         test.setToscaOperationFacade(toscaOperationFacade);
103         test.setComponentsUtils(componentsUtils);
104     }
105
106     @Test()
107     public void testGetCsarInfo() {
108         // given
109         Resource resource = new Resource();
110         resource.setName(RESOURCE_NAME);
111
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));
116
117         // when
118         CsarInfo csarInfo = test.getCsarInfo(resource, null, user, null, CSAR_UUID);
119
120         // then
121         assertNotNull(csarInfo);
122
123         assertEquals(CSAR_UUID, csarInfo.getCsarUUID());
124         assertEquals(CSAR_ENTRY, csarInfo.getMainTemplateName());
125         assertEquals(RESOURCE_NAME, csarInfo.getVfResourceName());
126
127         assertEquals(CSAR_ENTRY_CONTENT, csarInfo.getMainTemplateContent());
128         assertTrue(csarInfo.getCsar().keySet().containsAll(Arrays.asList(CSAR_ENTRY, CSAR_METADATA)));
129     }
130
131     @Test()
132     public void testGetCsarInfoWithPayload() throws IOException, URISyntaxException, ZipException {
133         // given
134         Resource resource = new Resource();
135         resource.setName(RESOURCE_NAME);
136
137         Map<String, byte[]> payload = loadPayload(PAYLOAD_NAME);
138
139         // when
140         CsarInfo csarInfo = test.getCsarInfo(resource, null, user, payload, CSAR_UUID);
141
142         // then
143         assertNotNull(csarInfo);
144
145         assertEquals(CSAR_UUID, csarInfo.getCsarUUID());
146         assertEquals(CSAR_ENTRY, csarInfo.getMainTemplateName());
147         assertEquals(RESOURCE_NAME, csarInfo.getVfResourceName());
148
149         assertTrue(csarInfo.getMainTemplateContent().startsWith(CSAR_ENTRY_CONTENT));
150         assertTrue(csarInfo.getCsar().keySet().containsAll(Arrays.asList(CSAR_ENTRY, CSAR_METADATA)));
151     }
152
153     @Test(expected = ComponentException.class)
154     public void testGetCsarInfoWithBadData(){
155         // given
156         Resource resource = new Resource();
157         resource.setName(RESOURCE_NAME);
158
159         Map<String, byte[]> csar_data = new HashMap<>();
160         when(csarOperation.getCsar(anyString(), any(User.class))).thenReturn(Either.left(csar_data));
161
162         // when
163         test.getCsarInfo(resource, null, user, null, CSAR_UUID);
164     }
165
166     @Test
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);
172     }
173
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");
182     }
183
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");
191     }
192
193     public Map<String, byte[]> loadPayload(String payloadName) throws IOException, URISyntaxException, ZipException {
194
195         Path path = Paths.get(getClass().getResource("/" + payloadName).toURI());
196         byte[] data = Files.readAllBytes(path);
197
198         return ZipUtils.readZip(data, false);
199     }
200 }