2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.vendorsoftwareproduct.impl;
23 import org.apache.commons.collections.CollectionUtils;
24 import org.junit.Assert;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.InjectMocks;
28 import org.mockito.MockitoAnnotations;
29 import org.mockito.Spy;
30 import org.openecomp.core.utilities.file.FileUtils;
31 import org.openecomp.sdc.common.errors.CoreException;
32 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
33 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
34 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
35 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
36 import org.openecomp.sdc.vendorsoftwareproduct.impl.CompositionEntityDataManagerImpl;
37 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId;
38 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
39 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
40 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
41 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NetworkCompositionSchemaInput;
42 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
43 import org.openecomp.sdc.versioning.dao.types.Version;
45 import java.util.ArrayList;
46 import java.util.Collection;
47 import java.util.List;
50 import static org.mockito.Mockito.doReturn;
52 public class CompositionEntityDataManagerImplTest {
53 private static final String VSP1 = "vsp1";
54 private static final Version VERSION = new Version(0, 1);
55 private static final String COMPONENT1 = "component1";
56 private static final String NIC1 = "nic1";
57 private static final String SIMPLE_SCHEMA = "{\n" +
58 " \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n" +
59 " \"type\": \"object\",\n" +
60 " \"properties\": {\n" +
62 " \"type\": \"number\"\n" +
66 private static final String NETWORK_COMPOSITION_SCHEMA = "{\n" +
67 " \"$schema\": \"http://json-schema.org/draft-04/schema#\",\n" +
68 " \"type\": \"object\",\n" +
69 " \"properties\": {\n" +
71 " \"type\": \"string\",\n" +
73 " \"network1 name\"\n" +
75 " \"default\": \"network1 name\"\n" +
78 " \"type\": \"boolean\",\n" +
82 " \"default\": true\n" +
85 " \"additionalProperties\": false,\n" +
86 " \"required\": [\n" +
92 private Map<CompositionEntityId, Collection<String>> errorsById;
95 private CompositionEntityDataManagerImpl compositionEntityDataManager;
98 public void setUp() throws Exception {
99 MockitoAnnotations.initMocks(this);
102 @Test(expected = CoreException.class)
103 public void testAddNullEntity_negative() {
104 compositionEntityDataManager.addEntity(null, null);
108 public void testAddEntity() {
109 compositionEntityDataManager
110 .addEntity(new VspQuestionnaireEntity(VSP1, VERSION), null);
112 String invalidQuestionnaireData = "{\"a\": \"b\"}";
114 ComponentEntity component = new ComponentEntity(VSP1, VERSION, COMPONENT1);
115 component.setQuestionnaireData(invalidQuestionnaireData);
116 compositionEntityDataManager.addEntity(component, null);
118 NicEntity nic = new NicEntity(VSP1, VERSION, COMPONENT1, NIC1);
119 nic.setQuestionnaireData(invalidQuestionnaireData);
120 compositionEntityDataManager.addEntity(nic, null);
123 // TODO: 3/15/2017 fix and enable
124 //@Test(dependsOnMethods = "testAddEntity")
125 public void testValidateEntitiesQuestionnaire() {
126 doReturn(SIMPLE_SCHEMA).when(compositionEntityDataManager)
127 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.vsp, null);
128 doReturn(SIMPLE_SCHEMA).when(compositionEntityDataManager)
129 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.component, null);
130 doReturn(SIMPLE_SCHEMA).when(compositionEntityDataManager)
131 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, null);
133 errorsById = compositionEntityDataManager.validateEntitiesQuestionnaire();
134 Assert.assertNotNull(errorsById);
135 Assert.assertEquals(errorsById.size(), 2); // both component and nic data don't mach schemas
136 CompositionEntityId nicId =
137 new NicEntity(VSP1, VERSION, COMPONENT1, NIC1).getCompositionEntityId();
138 Assert.assertTrue(errorsById.containsKey(nicId));
139 Assert.assertTrue(errorsById.containsKey(nicId.getParentId()));
143 public void testBuildTrees() {
145 compositionEntityDataManager.buildTrees();
148 // TODO: 3/15/2017 fix and enable
149 //@Test(dependsOnMethods = "testBuildTrees")
150 public void testAddErrorsToTrees() {
151 compositionEntityDataManager.addErrorsToTrees(errorsById);
154 // TODO: 3/15/2017 fix and enable
155 //@Test(dependsOnMethods = "testAddErrorsToTrees")
156 public void testGetTrees() {
157 Collection<CompositionEntityValidationData> trees = compositionEntityDataManager.getTrees();
158 Assert.assertNotNull(trees);
159 Assert.assertEquals(trees.size(), 1);
161 CompositionEntityValidationData vspValidationData = trees.iterator().next();
162 assertValidationData(vspValidationData, VSP1, CompositionEntityType.vsp, false);
163 Assert.assertEquals(vspValidationData.getSubEntitiesValidationData().size(), 1);
165 CompositionEntityValidationData componentValidationData =
166 vspValidationData.getSubEntitiesValidationData().iterator().next();
167 assertValidationData(componentValidationData, COMPONENT1, CompositionEntityType.component,
169 Assert.assertEquals(componentValidationData.getSubEntitiesValidationData().size(), 1);
171 CompositionEntityValidationData nicValidationData =
172 componentValidationData.getSubEntitiesValidationData().iterator().next();
173 assertValidationData(nicValidationData, NIC1, CompositionEntityType.nic, true);
174 Assert.assertNull(nicValidationData.getSubEntitiesValidationData());
178 public void testValidateValidEntity() {
179 NetworkEntity networkEntity = new NetworkEntity(VSP1, VERSION, "network1");
180 Network network = new Network();
181 network.setName("network1 name");
182 network.setDhcp(true);
183 networkEntity.setNetworkCompositionData(network);
185 NetworkCompositionSchemaInput schemaTemplateInput = new NetworkCompositionSchemaInput();
186 schemaTemplateInput.setManual(false);
187 schemaTemplateInput.setNetwork(network);
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, false);
199 public void testValidateInvalidEntity() {
200 NetworkEntity networkEntity = new NetworkEntity(VSP1, VERSION, "network1");
201 Network network = new Network();
202 network.setName("network1 name changed");
203 network.setDhcp(false);
204 networkEntity.setNetworkCompositionData(network);
206 NetworkCompositionSchemaInput schemaTemplateInput = new NetworkCompositionSchemaInput();
207 schemaTemplateInput.setManual(false);
208 Network origNetwork = new Network();
209 origNetwork.setName("network1 name");
210 origNetwork.setDhcp(true);
211 schemaTemplateInput.setNetwork(origNetwork);
213 doReturn(NETWORK_COMPOSITION_SCHEMA).when(compositionEntityDataManager)
214 .generateSchema(SchemaTemplateContext.composition, CompositionEntityType.network,
215 schemaTemplateInput);
217 CompositionEntityValidationData validationData = compositionEntityDataManager
218 .validateEntity(networkEntity, SchemaTemplateContext.composition, schemaTemplateInput);
219 assertValidationData(validationData, "network1", CompositionEntityType.network, true);
220 Assert.assertEquals(validationData.getErrors().size(), 2);
224 public void testNicAndComponentValidQuestionnaire() {
225 compositionEntityDataManager
226 .addEntity(new VspQuestionnaireEntity(VSP1, VERSION), null);
228 ComponentEntity componentEntity = new ComponentEntity(VSP1, VERSION, COMPONENT1);
229 componentEntity.setQuestionnaireData(loadFileToString("quesionnaire/validComponent.json"));
230 compositionEntityDataManager.addEntity(componentEntity, null);
232 NicEntity nicEntity = new NicEntity(VSP1, VERSION, COMPONENT1, NIC1);
233 nicEntity.setQuestionnaireData(loadFileToString("quesionnaire/validNic.json"));
234 compositionEntityDataManager.addEntity(nicEntity, null);
236 doReturn(SIMPLE_SCHEMA)
237 .when(compositionEntityDataManager)
238 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.vsp, null);
240 doReturn(loadFileToString("quesionnaire/schema/componentQuestionnaire.json"))
241 .when(compositionEntityDataManager)
242 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.component, null);
244 doReturn(loadFileToString("quesionnaire/schema/nicQuestionnaire.json"))
245 .when(compositionEntityDataManager)
246 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, null);
248 Map<CompositionEntityId, Collection<String>> errorsById =
249 compositionEntityDataManager.validateEntitiesQuestionnaire();
250 Assert.assertEquals(errorsById.size(), 1);
254 public void testComponentInvalidQuestionnaire() {
255 //JUnit doesn't have depend on logic available
256 testNicAndComponentValidQuestionnaire();
257 ComponentEntity componentEntity = new ComponentEntity(VSP1, VERSION, COMPONENT1);
258 componentEntity.setQuestionnaireData(loadFileToString("quesionnaire/invalidComponent.json"));
259 compositionEntityDataManager.addEntity(componentEntity, null);
261 Map<CompositionEntityId, Collection<String>> errorsById =
262 compositionEntityDataManager.validateEntitiesQuestionnaire();
263 Assert.assertEquals(errorsById.size(), 2);
265 CompositionEntityId component = new ArrayList<>(errorsById.keySet()).get(1);
266 List<String> errors = (List<String>) errorsById.get(component);
267 Assert.assertEquals(errors.size(), 1);
268 Assert.assertEquals(errors.get(0),
269 "#/general/recovery/pointObjective: 20.0 is not lower or equal to 15");
272 private static void assertValidationData(CompositionEntityValidationData validationData,
273 String id, CompositionEntityType type,
275 Assert.assertNotNull(validationData);
276 Assert.assertEquals(validationData.getEntityId(), id);
277 Assert.assertEquals(validationData.getEntityType(), type);
278 Assert.assertTrue(CollectionUtils.isNotEmpty(validationData.getErrors()) == hasErrors);
281 private static String loadFileToString(String path) {
282 return new String(FileUtils.toByteArray(FileUtils.loadFileToInputStream(path)));