[SDC-29] rebase continue work to align source
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / ArtifactBusinessLogicTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 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.openecomp.sdc.be.components.impl;
22
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNull;
25 import static org.junit.Assert.assertTrue;
26 import static org.mockito.Mockito.when;
27
28 import java.io.IOException;
29 import java.util.ArrayList;
30 import java.util.HashMap;
31 import java.util.List;
32 import java.util.Map;
33
34 import org.apache.cassandra.io.sstable.Component;
35 import org.codehaus.jackson.map.DeserializationConfig;
36 import org.codehaus.jackson.map.ObjectMapper;
37 import org.codehaus.jackson.map.SerializationConfig.Feature;
38 import org.codehaus.jackson.map.annotate.JsonSerialize;
39 import org.junit.Before;
40 import org.junit.BeforeClass;
41 import org.junit.Test;
42 import org.mockito.InjectMocks;
43 import org.mockito.Mock;
44 import org.mockito.Mockito;
45 import org.mockito.MockitoAnnotations;
46 import org.openecomp.sdc.be.components.ArtifactsResolver;
47 import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
48 import org.openecomp.sdc.be.config.Configuration.ArtifactTypeConfig;
49 import org.openecomp.sdc.be.config.ConfigurationManager;
50 import org.openecomp.sdc.be.dao.api.ActionStatus;
51 import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
52 import org.openecomp.sdc.be.dao.cassandra.CassandraOperationStatus;
53 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
54 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
55 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
56 import org.openecomp.sdc.be.impl.ComponentsUtils;
57 import org.openecomp.sdc.be.model.ArtifactDefinition;
58 import org.openecomp.sdc.be.model.ArtifactType;
59 import org.openecomp.sdc.be.model.InterfaceDefinition;
60 import org.openecomp.sdc.be.model.Resource;
61 import org.openecomp.sdc.be.model.Service;
62 import org.openecomp.sdc.be.model.User;
63 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
64 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
65 import org.openecomp.sdc.be.model.operations.api.IInterfaceLifecycleOperation;
66 import org.openecomp.sdc.be.model.operations.api.IUserAdminOperation;
67 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
68 import org.openecomp.sdc.be.model.operations.impl.ArtifactOperation;
69 import org.openecomp.sdc.be.model.operations.impl.ServiceOperation;
70 import org.openecomp.sdc.be.resources.data.ESArtifactData;
71 import org.openecomp.sdc.be.servlets.RepresentationUtils;
72 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
73 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
74 import org.openecomp.sdc.common.api.ConfigurationSource;
75 import org.openecomp.sdc.common.impl.ExternalConfiguration;
76 import org.openecomp.sdc.common.impl.FSConfigurationSource;
77 import org.openecomp.sdc.exception.ResponseFormat;
78
79 import com.google.gson.Gson;
80 import com.google.gson.GsonBuilder;
81 import com.google.gson.JsonElement;
82
83 import fj.data.Either;
84
85 public class ArtifactBusinessLogicTest {
86
87         static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
88         static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
89
90         @InjectMocks
91         static ArtifactsBusinessLogic artifactBL = new ArtifactsBusinessLogic();
92
93         public static final ArtifactOperation artifactOperation = Mockito.mock(ArtifactOperation.class);
94         public static final ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
95         public static final IInterfaceLifecycleOperation lifecycleOperation = Mockito.mock(IInterfaceLifecycleOperation.class);
96         public static final IUserAdminOperation userOperation = Mockito.mock(IUserAdminOperation.class);
97         public static final IElementOperation elementOperation = Mockito.mock(IElementOperation.class);
98         public static final ServiceOperation serviceOperation = Mockito.mock(ServiceOperation.class);
99         public static final ArtifactCassandraDao artifactCassandraDao =  Mockito.mock(ArtifactCassandraDao.class);
100         public static final ToscaOperationFacade toscaOperationFacade =  Mockito.mock(ToscaOperationFacade.class);
101
102         // public static final InformationDeployedArtifactsBusinessLogic
103         // informationDeployedArtifactsBusinessLogic =
104         // Mockito.mock(InformationDeployedArtifactsBusinessLogic.class);
105
106         public static final Resource resource = Mockito.mock(Resource.class);
107         private Gson gson = new GsonBuilder().setPrettyPrinting().create();
108
109         @BeforeClass
110         public static void setup() {
111
112                 Either<ArtifactDefinition, StorageOperationStatus> NotFoundResult = Either.right(StorageOperationStatus.NOT_FOUND);
113                 when(artifactOperation.getArtifactById(Mockito.anyString(), Mockito.anyBoolean())).thenReturn(NotFoundResult);
114
115                 Either<Map<String, ArtifactDefinition>, StorageOperationStatus> NotFoundResult2 = Either.right(StorageOperationStatus.NOT_FOUND);
116                 when(artifactOperation.getArtifacts(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Service), Mockito.anyBoolean())).thenReturn(NotFoundResult2);
117                 when(artifactOperation.getArtifacts(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Resource), Mockito.anyBoolean())).thenReturn(NotFoundResult2);
118
119                 Either<Map<String, InterfaceDefinition>, StorageOperationStatus> notFoundInterfaces = Either.right(StorageOperationStatus.NOT_FOUND);
120                 when(lifecycleOperation.getAllInterfacesOfResource(Mockito.anyString(), Mockito.anyBoolean())).thenReturn(notFoundInterfaces);
121
122                 User userJH = new User("John", "Doh", "jh0003", "jh0003@gmail.com", "ADMIN", System.currentTimeMillis());
123                 Either<User, ActionStatus> getUserResult = Either.left(userJH);
124
125                 when(userOperation.getUserData("jh0003", false)).thenReturn(getUserResult);
126
127                 Either<List<ArtifactType>, ActionStatus> getType = Either.left(getAllTypes());
128                 when(elementOperation.getAllArtifactTypes()).thenReturn(getType);
129
130                 when(resource.getResourceType()).thenReturn(ResourceTypeEnum.VFC);
131                 // when(informationDeployedArtifactsBusinessLogic.getAllDeployableArtifacts(Mockito.any(Resource.class))).thenReturn(new
132                 // ArrayList<ArtifactDefinition>());
133         }
134
135         private static List<ArtifactType> getAllTypes() {
136                 List<ArtifactType> artifactTypes = new ArrayList<ArtifactType>();
137                 List<String> artifactTypesList = ConfigurationManager.getConfigurationManager().getConfiguration().getArtifactTypes();
138                 for (String artifactType : artifactTypesList) {
139                         ArtifactType artifactT = new ArtifactType();
140                         artifactT.setName(artifactType);
141                         artifactTypes.add(artifactT);
142                 }
143                 return artifactTypes;
144         }
145
146         @Before
147         public void initMocks() {
148                 MockitoAnnotations.initMocks(this);
149         }
150
151         @Test
152         public void testValidJson() {
153                 ArtifactDefinition ad = createArtifactDef();
154
155                 String jsonArtifact  = "";
156                 
157                 ObjectMapper mapper = new ObjectMapper();
158                 mapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
159                 mapper.configure(Feature.FAIL_ON_EMPTY_BEANS, false);
160                 mapper.setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
161                 
162                 try {
163                         jsonArtifact = mapper.writeValueAsString(ad);
164                 } catch (IOException e) {
165                         // TODO Auto-generated catch block
166                         e.printStackTrace();
167                 }
168
169                 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact, ArtifactDefinition.class);
170                 assertEquals(ad, afterConvert);
171         }
172
173         private ArtifactDefinition createArtifactDef() {
174                 ArtifactDefinition ad = new ArtifactDefinition();
175                 ad.setArtifactName("artifact1.yaml");
176                 ad.setArtifactLabel("label1");
177                 ad.setDescription("description");
178                 ad.setArtifactType(ArtifactTypeEnum.HEAT.getType());
179                 ad.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
180                 ad.setCreationDate(System.currentTimeMillis());
181                 ad.setMandatory(false);
182                 ad.setTimeout(15);
183                 return ad;
184         }
185
186         @Test
187         public void testInvalidStringGroupType() {
188                 ArtifactDefinition ad = new ArtifactDefinition();
189                 ad.setArtifactName("artifact1");
190                 ad.setCreationDate(System.currentTimeMillis());
191                 ad.setMandatory(false);
192                 ad.setTimeout(15);
193
194                 JsonElement jsonArtifact = gson.toJsonTree(ad);
195                 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", "www");
196
197                 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
198                 assertNull(afterConvert);
199         }
200
201         @Test
202         public void testInvalidNumberGroupType() {
203                 ArtifactDefinition ad = new ArtifactDefinition();
204                 ad.setArtifactName("artifact1");
205                 ad.setCreationDate(System.currentTimeMillis());
206                 ad.setMandatory(false);
207                 ad.setTimeout(15);
208
209                 JsonElement jsonArtifact = gson.toJsonTree(ad);
210                 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", 123);
211
212                 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
213                 assertNull(afterConvert);
214         }
215
216         @Test
217         public void testInvalidGroupTypeWithSpace() {
218                 ArtifactDefinition ad = new ArtifactDefinition();
219                 ad.setArtifactName("artifact1");
220                 ad.setCreationDate(System.currentTimeMillis());
221                 ad.setMandatory(false);
222                 ad.setTimeout(15);
223
224                 JsonElement jsonArtifact = gson.toJsonTree(ad);
225                 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", " DEPLOYMENT");
226
227                 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
228                 assertNull(afterConvert);
229         }
230
231         @Test
232         public void testInvalidTimeoutWithSpace() {
233                 ArtifactDefinition ad = new ArtifactDefinition();
234                 ad.setArtifactName("artifact1");
235                 ad.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
236                 ad.setCreationDate(System.currentTimeMillis());
237                 ad.setMandatory(false);
238
239                 JsonElement jsonArtifact = gson.toJsonTree(ad);
240                 jsonArtifact.getAsJsonObject().addProperty("timeout", "dfsdf15");
241
242                 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(), ArtifactDefinition.class);
243                 assertNull(afterConvert);
244         }
245         
246         @Test
247         public void testValidMibAritactsConfiguration() {
248                 Map<String, ArtifactTypeConfig> componentDeploymentArtifacts =
249                                         ConfigurationManager.getConfigurationManager().getConfiguration().getResourceDeploymentArtifacts();
250                 Map<String, ArtifactTypeConfig> componentInstanceDeploymentArtifacts =
251                                         ConfigurationManager.getConfigurationManager().getConfiguration().getResourceInstanceDeploymentArtifacts();
252                 assertTrue(componentDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_POLL.getType()));
253                 assertTrue(componentDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_TRAP.getType()));
254                 assertTrue(componentInstanceDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_POLL.getType()));
255                 assertTrue(componentInstanceDeploymentArtifacts.containsKey(ArtifactTypeEnum.SNMP_TRAP.getType()));
256         }
257         
258         @Test
259         public void testDownloadServiceArtifactByNames() {
260                 Service service = new Service();
261                 String serviceName = "myService";
262                 String serviceVersion = "1.0";
263                 String serviceId = "serviceId";
264                 service.setName(serviceName);
265                 service.setVersion(serviceVersion);
266                 service.setUniqueId(serviceId);
267                 
268                 String artifactName = "service-Myservice-template.yml";
269                 String artifactLabel = "assettoscatemplate";
270                 String esArtifactId = "123123dfgdfgd0";
271                 byte[] payload = "some payload".getBytes();
272                 ArtifactDefinition toscaTemplateArtifact = new ArtifactDefinition();
273                 toscaTemplateArtifact.setArtifactName(artifactName);
274                 toscaTemplateArtifact.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
275                 toscaTemplateArtifact.setArtifactLabel(artifactLabel);
276                 toscaTemplateArtifact.setEsId(esArtifactId);
277                 toscaTemplateArtifact.setPayload(payload);
278                 
279                 Map<String, ArtifactDefinition> toscaArtifacts = new HashMap<>();
280                 toscaArtifacts.put(artifactLabel, toscaTemplateArtifact);
281                 service.setToscaArtifacts(toscaArtifacts);
282                 
283                 ESArtifactData esArtifactData =new ESArtifactData(esArtifactId); 
284                 esArtifactData.setDataAsArray(payload);
285                 Either<ESArtifactData, CassandraOperationStatus> artifactfromESres = Either.left(esArtifactData);
286                 when(artifactCassandraDao.getArtifact(esArtifactId)).thenReturn(artifactfromESres);
287                 List<org.openecomp.sdc.be.model.Component> serviceList = new ArrayList<>();
288                 serviceList.add(service);
289                 Either<List<org.openecomp.sdc.be.model.Component>, StorageOperationStatus> getServiceRes = Either.left(serviceList);
290                 when(toscaOperationFacade.getBySystemName(ComponentTypeEnum.SERVICE, serviceName)).thenReturn(getServiceRes);
291                 Either<byte[], ResponseFormat> downloadServiceArtifactByNamesRes = 
292                 artifactBL.downloadServiceArtifactByNames(serviceName, serviceVersion, artifactName);
293                 assertTrue(downloadServiceArtifactByNamesRes.isLeft());
294                 assertTrue(downloadServiceArtifactByNamesRes.left().value() !=null && downloadServiceArtifactByNamesRes.left().value().length == payload.length);
295         }
296                 
297
298         // @Test
299         // public void convertAndValidateDeploymentArtifactNonHeatSuccess(){
300         // ArtifactDefinition createArtifactDef = createArtifactDef();
301         // createArtifactDef.setArtifactType(ArtifactTypeEnum.YANG_XML.getType());
302         //
303         // Either<ArtifactDefinition, ResponseFormat> validateResult = artifactBL
304         //
305         // assertTrue(validateResult.isLeft());
306         // ArtifactDefinition validatedArtifact = validateResult.left().value();
307         //
308         // assertEquals(createArtifactDef.getArtifactGroupType(),
309         // validatedArtifact.getArtifactGroupType());
310         // assertEquals(new Integer(0), validatedArtifact.getTimeout());
311         // assertFalse(validatedArtifact.getMandatory());
312         // assertFalse(validatedArtifact.getServiceApi());
313         //
314         // }
315 }