2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications Copyright (c) 2019 Samsung
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.openecomp.sdc.vendorsoftwareproduct.impl;
25 import org.apache.commons.collections.CollectionUtils;
26 import org.junit.Assert;
27 import org.junit.Before;
28 import org.junit.Test;
29 import org.mockito.InjectMocks;
30 import org.mockito.MockitoAnnotations;
31 import org.mockito.Spy;
32 import org.openecomp.core.utilities.file.FileUtils;
33 import org.openecomp.sdc.common.errors.CoreException;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
35 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
36 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
37 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
38 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId;
39 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
40 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
41 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
42 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NetworkCompositionSchemaInput;
43 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
44 import org.openecomp.sdc.versioning.dao.types.Version;
46 import java.util.ArrayList;
47 import java.util.Collection;
48 import java.util.List;
51 import static org.mockito.Mockito.doReturn;
53 public class CompositionEntityDataManagerImplTest {
54 private static final String VSP1 = "vsp1";
55 private static final Version VERSION = new Version(0, 1);
56 private static final String COMPONENT1 = "component1";
57 private static final String NIC1 = "nic1";
58 private static final String SIMPLE_SCHEMA = "{\n" +
59 " \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n" +
60 " \"type\": \"object\",\n" +
61 " \"properties\": {\n" +
63 " \"type\": \"number\"\n" +
67 private static final String NETWORK_COMPOSITION_SCHEMA = "{\n" +
68 " \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n" +
69 " \"type\": \"object\",\n" +
70 " \"properties\": {\n" +
72 " \"type\": \"string\",\n" +
74 " \"network1 name\"\n" +
76 " \"default\": \"network1 name\"\n" +
79 " \"type\": \"boolean\",\n" +
83 " \"default\": true\n" +
86 " \"additionalProperties\": false,\n" +
87 " \"required\": [\n" +
92 String invalidQuestionnaireData = "{\"a\": \"b\"}";
94 private Map<CompositionEntityId, Collection<String>> errorsById;
97 private CompositionEntityDataManagerImpl compositionEntityDataManager;
100 public void setUp() throws Exception {
101 MockitoAnnotations.openMocks(this);
102 compositionEntityDataManager.addEntity(new VspQuestionnaireEntity(VSP1, VERSION), null);
104 doReturn(SIMPLE_SCHEMA).when(compositionEntityDataManager).generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.vsp, null);
105 doReturn(SIMPLE_SCHEMA).when(compositionEntityDataManager).generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.component, null);
106 doReturn(SIMPLE_SCHEMA).when(compositionEntityDataManager).generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, null);
108 ComponentEntity component = new ComponentEntity(VSP1, VERSION, COMPONENT1);
109 component.setQuestionnaireData(invalidQuestionnaireData);
110 compositionEntityDataManager.addEntity(component, null);
112 NicEntity nic = new NicEntity(VSP1, VERSION, COMPONENT1, NIC1);
113 nic.setQuestionnaireData(invalidQuestionnaireData);
114 compositionEntityDataManager.addEntity(nic, null);
117 @Test(expected = CoreException.class)
118 public void testAddNullEntity_negative() {
119 compositionEntityDataManager.addEntity(null, null);
123 public void testValidateEntitiesQuestionnaire() {
124 errorsById = compositionEntityDataManager.validateEntitiesQuestionnaire();
125 Assert.assertNotNull(errorsById);
126 Assert.assertEquals(3, errorsById.size());
127 CompositionEntityId nicId = new NicEntity(VSP1, VERSION, COMPONENT1, NIC1).getCompositionEntityId();
128 Assert.assertTrue(errorsById.containsKey(nicId));
129 Assert.assertTrue(errorsById.containsKey(nicId.getParentId()));
133 public void testGetTrees() {
134 errorsById = compositionEntityDataManager.validateEntitiesQuestionnaire();
135 compositionEntityDataManager.buildTrees();
136 compositionEntityDataManager.addErrorsToTrees(errorsById);
137 Collection<CompositionEntityValidationData> trees = compositionEntityDataManager.getTrees();
138 Assert.assertNotNull(trees);
139 Assert.assertEquals(1, trees.size());
141 CompositionEntityValidationData vspValidationData = trees.iterator().next();
142 Assert.assertEquals(1, vspValidationData.getSubEntitiesValidationData().size());
144 CompositionEntityValidationData componentValidationData = vspValidationData.getSubEntitiesValidationData().iterator().next();
145 assertValidationData(componentValidationData, COMPONENT1, CompositionEntityType.component,true);
146 Assert.assertEquals(1, componentValidationData.getSubEntitiesValidationData().size());
148 CompositionEntityValidationData nicValidationData = componentValidationData.getSubEntitiesValidationData().iterator().next();
149 assertValidationData(nicValidationData, NIC1, CompositionEntityType.nic, true);
150 Assert.assertNull(nicValidationData.getSubEntitiesValidationData());
154 public void testValidateValidEntity() {
155 NetworkEntity networkEntity = new NetworkEntity(VSP1, VERSION, "network1");
156 Network network = new Network();
157 network.setName("network1 name");
158 network.setDhcp(true);
159 networkEntity.setNetworkCompositionData(network);
161 NetworkCompositionSchemaInput schemaTemplateInput = new NetworkCompositionSchemaInput();
162 schemaTemplateInput.setManual(false);
163 schemaTemplateInput.setNetwork(network);
165 doReturn(NETWORK_COMPOSITION_SCHEMA).when(compositionEntityDataManager)
166 .generateSchema(SchemaTemplateContext.composition, CompositionEntityType.network,
167 schemaTemplateInput);
169 CompositionEntityValidationData validationData = compositionEntityDataManager
170 .validateEntity(networkEntity, SchemaTemplateContext.composition, schemaTemplateInput);
171 assertValidationData(validationData, "network1", CompositionEntityType.network, false);
175 public void testValidateInvalidEntity() {
176 NetworkEntity networkEntity = new NetworkEntity(VSP1, VERSION, "network1");
177 Network network = new Network();
178 network.setName("network1 name changed");
179 network.setDhcp(false);
180 networkEntity.setNetworkCompositionData(network);
182 NetworkCompositionSchemaInput schemaTemplateInput = new NetworkCompositionSchemaInput();
183 schemaTemplateInput.setManual(false);
184 Network origNetwork = new Network();
185 origNetwork.setName("network1 name");
186 origNetwork.setDhcp(true);
187 schemaTemplateInput.setNetwork(origNetwork);
189 doReturn(NETWORK_COMPOSITION_SCHEMA).when(compositionEntityDataManager)
190 .generateSchema(SchemaTemplateContext.composition, CompositionEntityType.network,
191 schemaTemplateInput);
193 CompositionEntityValidationData validationData = compositionEntityDataManager
194 .validateEntity(networkEntity, SchemaTemplateContext.composition, schemaTemplateInput);
195 assertValidationData(validationData, "network1", CompositionEntityType.network, true);
196 Assert.assertEquals(validationData.getErrors().size(), 2);
200 public void testNicAndComponentValidQuestionnaire() {
201 compositionEntityDataManager
202 .addEntity(new VspQuestionnaireEntity(VSP1, VERSION), null);
204 ComponentEntity componentEntity = new ComponentEntity(VSP1, VERSION, COMPONENT1);
205 componentEntity.setQuestionnaireData(loadFileToString("quesionnaire/validComponent.json"));
206 compositionEntityDataManager.addEntity(componentEntity, null);
208 NicEntity nicEntity = new NicEntity(VSP1, VERSION, COMPONENT1, NIC1);
209 nicEntity.setQuestionnaireData(loadFileToString("quesionnaire/validNic.json"));
210 compositionEntityDataManager.addEntity(nicEntity, null);
212 doReturn(SIMPLE_SCHEMA)
213 .when(compositionEntityDataManager)
214 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.vsp, null);
216 doReturn(loadFileToString("quesionnaire/schema/componentQuestionnaire.json"))
217 .when(compositionEntityDataManager)
218 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.component, null);
220 doReturn(loadFileToString("quesionnaire/schema/nicQuestionnaire.json"))
221 .when(compositionEntityDataManager)
222 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, null);
224 Map<CompositionEntityId, Collection<String>> errorsById =
225 compositionEntityDataManager.validateEntitiesQuestionnaire();
226 Assert.assertEquals(errorsById.size(), 1);
230 public void testComponentInvalidQuestionnaire() {
231 //JUnit doesn't have depend on logic available
232 testNicAndComponentValidQuestionnaire();
233 ComponentEntity componentEntity = new ComponentEntity(VSP1, VERSION, COMPONENT1);
234 componentEntity.setQuestionnaireData(loadFileToString("quesionnaire/invalidComponent.json"));
235 compositionEntityDataManager.addEntity(componentEntity, null);
237 Map<CompositionEntityId, Collection<String>> errorsById =
238 compositionEntityDataManager.validateEntitiesQuestionnaire();
239 Assert.assertEquals(errorsById.size(), 2);
241 CompositionEntityId component = new ArrayList<>(errorsById.keySet()).get(1);
242 List<String> errors = (List<String>) errorsById.get(component);
243 Assert.assertEquals(errors.size(), 1);
244 Assert.assertEquals(errors.get(0),
245 "#/general/recovery/pointObjective: 20.0 is not lower or equal to 15");
248 private static void assertValidationData(CompositionEntityValidationData validationData,
249 String id, CompositionEntityType type,
251 Assert.assertNotNull(validationData);
252 Assert.assertEquals(validationData.getEntityId(), id);
253 Assert.assertEquals(validationData.getEntityType(), type);
254 Assert.assertTrue(CollectionUtils.isNotEmpty(validationData.getErrors()) == hasErrors);
257 private static String loadFileToString(String path) {
258 return new String(FileUtils.toByteArray(FileUtils.loadFileToInputStream(path)));
261 @Test(expected = CoreException.class)
262 public void shouldReturnCoreException() {
264 NetworkCompositionSchemaInput schemaTemplateInput = new NetworkCompositionSchemaInput();
267 compositionEntityDataManager.validateEntity(null, SchemaTemplateContext.composition, schemaTemplateInput);