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.mockito.InjectMocks;
25 import org.mockito.MockitoAnnotations;
26 import org.mockito.Spy;
27 import org.openecomp.core.utilities.file.FileUtils;
28 import org.openecomp.sdc.common.errors.CoreException;
29 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.ComponentEntity;
30 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NetworkEntity;
31 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.NicEntity;
32 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspQuestionnaireEntity;
33 import org.openecomp.sdc.vendorsoftwareproduct.impl.CompositionEntityDataManagerImpl;
34 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityId;
35 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityType;
36 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionEntityValidationData;
37 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
38 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.NetworkCompositionSchemaInput;
39 import org.openecomp.sdc.vendorsoftwareproduct.types.schemagenerator.SchemaTemplateContext;
40 import org.openecomp.sdc.versioning.dao.types.Version;
41 import org.testng.Assert;
42 import org.testng.annotations.BeforeMethod;
43 import org.testng.annotations.Test;
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(expectedExceptions = 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()));
142 @Test(dependsOnMethods = "testAddEntity")
143 public void testBuildTrees() {
144 compositionEntityDataManager.buildTrees();
147 // TODO: 3/15/2017 fix and enable
148 //@Test(dependsOnMethods = "testBuildTrees")
149 public void testAddErrorsToTrees() {
150 compositionEntityDataManager.addErrorsToTrees(errorsById);
153 // TODO: 3/15/2017 fix and enable
154 //@Test(dependsOnMethods = "testAddErrorsToTrees")
155 public void testGetTrees() {
156 Collection<CompositionEntityValidationData> trees = compositionEntityDataManager.getTrees();
157 Assert.assertNotNull(trees);
158 Assert.assertEquals(trees.size(), 1);
160 CompositionEntityValidationData vspValidationData = trees.iterator().next();
161 assertValidationData(vspValidationData, VSP1, CompositionEntityType.vsp, false);
162 Assert.assertEquals(vspValidationData.getSubEntitiesValidationData().size(), 1);
164 CompositionEntityValidationData componentValidationData =
165 vspValidationData.getSubEntitiesValidationData().iterator().next();
166 assertValidationData(componentValidationData, COMPONENT1, CompositionEntityType.component,
168 Assert.assertEquals(componentValidationData.getSubEntitiesValidationData().size(), 1);
170 CompositionEntityValidationData nicValidationData =
171 componentValidationData.getSubEntitiesValidationData().iterator().next();
172 assertValidationData(nicValidationData, NIC1, CompositionEntityType.nic, true);
173 Assert.assertNull(nicValidationData.getSubEntitiesValidationData());
177 public void testValidateValidEntity() {
178 NetworkEntity networkEntity = new NetworkEntity(VSP1, VERSION, "network1");
179 Network network = new Network();
180 network.setName("network1 name");
181 network.setDhcp(true);
182 networkEntity.setNetworkCompositionData(network);
184 NetworkCompositionSchemaInput schemaTemplateInput = new NetworkCompositionSchemaInput();
185 schemaTemplateInput.setManual(false);
186 schemaTemplateInput.setNetwork(network);
188 doReturn(NETWORK_COMPOSITION_SCHEMA).when(compositionEntityDataManager)
189 .generateSchema(SchemaTemplateContext.composition, CompositionEntityType.network,
190 schemaTemplateInput);
192 CompositionEntityValidationData validationData = compositionEntityDataManager
193 .validateEntity(networkEntity, SchemaTemplateContext.composition, schemaTemplateInput);
194 assertValidationData(validationData, "network1", CompositionEntityType.network, false);
198 public void testValidateInvalidEntity() {
199 NetworkEntity networkEntity = new NetworkEntity(VSP1, VERSION, "network1");
200 Network network = new Network();
201 network.setName("network1 name changed");
202 network.setDhcp(false);
203 networkEntity.setNetworkCompositionData(network);
205 NetworkCompositionSchemaInput schemaTemplateInput = new NetworkCompositionSchemaInput();
206 schemaTemplateInput.setManual(false);
207 Network origNetwork = new Network();
208 origNetwork.setName("network1 name");
209 origNetwork.setDhcp(true);
210 schemaTemplateInput.setNetwork(origNetwork);
212 doReturn(NETWORK_COMPOSITION_SCHEMA).when(compositionEntityDataManager)
213 .generateSchema(SchemaTemplateContext.composition, CompositionEntityType.network,
214 schemaTemplateInput);
216 CompositionEntityValidationData validationData = compositionEntityDataManager
217 .validateEntity(networkEntity, SchemaTemplateContext.composition, schemaTemplateInput);
218 assertValidationData(validationData, "network1", CompositionEntityType.network, true);
219 Assert.assertEquals(validationData.getErrors().size(), 2);
223 public void testNicAndComponentValidQuestionnaire() {
224 compositionEntityDataManager
225 .addEntity(new VspQuestionnaireEntity(VSP1, VERSION), null);
227 ComponentEntity componentEntity = new ComponentEntity(VSP1, VERSION, COMPONENT1);
228 componentEntity.setQuestionnaireData(loadFileToString("quesionnaire/validComponent.json"));
229 compositionEntityDataManager.addEntity(componentEntity, null);
231 NicEntity nicEntity = new NicEntity(VSP1, VERSION, COMPONENT1, NIC1);
232 nicEntity.setQuestionnaireData(loadFileToString("quesionnaire/validNic.json"));
233 compositionEntityDataManager.addEntity(nicEntity, null);
235 doReturn(SIMPLE_SCHEMA)
236 .when(compositionEntityDataManager)
237 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.vsp, null);
239 doReturn(loadFileToString("quesionnaire/schema/componentQuestionnaire.json"))
240 .when(compositionEntityDataManager)
241 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.component, null);
243 doReturn(loadFileToString("quesionnaire/schema/nicQuestionnaire.json"))
244 .when(compositionEntityDataManager)
245 .generateSchema(SchemaTemplateContext.questionnaire, CompositionEntityType.nic, null);
247 Map<CompositionEntityId, Collection<String>> errorsById =
248 compositionEntityDataManager.validateEntitiesQuestionnaire();
249 Assert.assertEquals(errorsById.size(), 1);
252 @Test(dependsOnMethods = "testNicAndComponentValidQuestionnaire")
253 public void testComponentInvalidQuestionnaire() {
254 ComponentEntity componentEntity = new ComponentEntity(VSP1, VERSION, COMPONENT1);
255 componentEntity.setQuestionnaireData(loadFileToString("quesionnaire/invalidComponent.json"));
256 compositionEntityDataManager.addEntity(componentEntity, null);
258 Map<CompositionEntityId, Collection<String>> errorsById =
259 compositionEntityDataManager.validateEntitiesQuestionnaire();
260 Assert.assertEquals(errorsById.size(), 2);
262 CompositionEntityId component = new ArrayList<>(errorsById.keySet()).get(1);
263 List<String> errors = (List<String>) errorsById.get(component);
264 Assert.assertEquals(errors.size(), 1);
265 Assert.assertEquals(errors.get(0),
266 "#/general/recovery/pointObjective: 20.0 is not lower or equal to 15");
269 private static void assertValidationData(CompositionEntityValidationData validationData,
270 String id, CompositionEntityType type,
272 Assert.assertNotNull(validationData);
273 Assert.assertEquals(validationData.getEntityId(), id);
274 Assert.assertEquals(validationData.getEntityType(), type);
275 Assert.assertTrue(CollectionUtils.isNotEmpty(validationData.getErrors()) == hasErrors);
278 private static String loadFileToString(String path) {
279 return new String(FileUtils.toByteArray(FileUtils.loadFileToInputStream(path)));