2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 - 2019 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.onap.sdc.tosca.parser.impl;
23 import org.apache.commons.lang3.StringUtils;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.junit.runner.RunWith;
27 import org.mockito.Mock;
28 import org.mockito.runners.MockitoJUnitRunner;
29 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
30 import org.onap.sdc.tosca.parser.enums.PropertySchemaType;
31 import org.onap.sdc.tosca.parser.utils.PropertyUtils;
32 import org.onap.sdc.toscaparser.api.NodeTemplate;
33 import org.onap.sdc.toscaparser.api.Property;
34 import org.onap.sdc.toscaparser.api.ToscaTemplate;
35 import org.onap.sdc.toscaparser.api.elements.Metadata;
37 import java.util.LinkedHashMap;
38 import java.util.NoSuchElementException;
40 import static org.junit.Assert.assertTrue;
41 import static org.junit.jupiter.api.Assertions.assertFalse;
42 import static org.mockito.Mockito.when;
44 @RunWith(MockitoJUnitRunner.class)
45 public class ToscaParserNodeTemplateMockTest {
47 private NodeTemplate nodeTemplate;
50 private Metadata metadata;
53 private ToscaTemplate toscaTemplate;
56 private Property property;
58 private static final String dataTypeA = String.format(".%s.aaa", PropertySchemaType.DATATYPE.getSchemaTypeName());
59 private static final String dataTypeB = String.format(".%s.bbb", PropertySchemaType.DATATYPE.getSchemaTypeName());
60 private static final String dataTypeD = String.format(".%s.ddd", PropertySchemaType.DATATYPE.getSchemaTypeName());
61 private static final String dataTypeR = String.format(".%s.rrr", PropertySchemaType.DATATYPE.getSchemaTypeName());
65 when(property.getType()).thenReturn(dataTypeA);
70 public void verifyCorrectPropertyPath() {
71 String[] path = String.format("%s#%s#%s#%s", "x", "y", "z", "q").split("#");
72 LinkedHashMap<String, Object> bProp = fillDataTypeEntry(dataTypeA, "y", dataTypeB);
73 LinkedHashMap<String, Object> cProp = fillDataTypeEntry(dataTypeB, "z", dataTypeD);
74 LinkedHashMap<String, Object> dProp = fillDataTypeEntry(dataTypeD, "q", PropertySchemaType.STRING.getSchemaTypeName());
76 when(nodeTemplate.getCustomDef())
81 assertTrue(PropertyUtils.isPropertyTypeSimpleOrListOfSimpleTypes(nodeTemplate, path, property));
85 public void verifyPropertyPathWithMapOfStringsType() {
86 String[] path = String.format("%s#%s#%s#%s", "x", "y", "z", "q").split("#");
87 LinkedHashMap<String, Object> bProp = fillDataTypeEntry(dataTypeA, "y", dataTypeB);
88 LinkedHashMap<String, Object> cProp = fillDataTypeEntry(dataTypeB, "z", PropertySchemaType.MAP.getSchemaTypeName());
89 LinkedHashMap<String, Object> dProp = fillDataTypeEntry(PropertySchemaType.MAP.getSchemaTypeName(), "q", PropertySchemaType.STRING.getSchemaTypeName());
91 when(nodeTemplate.getCustomDef())
96 assertTrue(PropertyUtils.isPropertyTypeSimpleOrListOfSimpleTypes(nodeTemplate, path, property));
100 public void verifyPropertyPathWithMapType() {
101 String[] path = String.format("%s#%s#%s", "x", "y", "z").split("#");
102 LinkedHashMap<String, Object> bProp = fillDataTypeEntry(dataTypeA, "y", dataTypeB);
103 LinkedHashMap<String, Object> cProp = fillDataTypeEntry(dataTypeB, "z", PropertySchemaType.MAP.getSchemaTypeName());
105 when(nodeTemplate.getCustomDef())
109 assertFalse(PropertyUtils.isPropertyTypeSimpleOrListOfSimpleTypes(nodeTemplate, path, property));
114 public void verifyPropertyPathWithListOfDataTypeShouldBeRejected() {
115 String[] path = String.format("%s#%s#%s#%s", "x", "y", "z", "m").split("#");
116 LinkedHashMap<String, Object> bProp = fillDataTypeEntry(dataTypeA, "y", dataTypeB);
117 LinkedHashMap<String, Object> cProp = fillDataTypeEntry(dataTypeB, "z", dataTypeD);
118 LinkedHashMap<String, Object> dProp = fillDataTypeEntry(dataTypeD, "m", PropertySchemaType.LIST.getSchemaTypeName(), dataTypeR);
120 when(nodeTemplate.getCustomDef())
125 assertFalse(PropertyUtils.isPropertyTypeSimpleOrListOfSimpleTypes(nodeTemplate, path, property));
129 public void verifyPropertyPathWithListOfIntegersAsType() {
130 String[] path = String.format("%s#%s#%s#%s", "x", "y", "z", "m").split("#");
131 LinkedHashMap<String, Object> bProp = fillDataTypeEntry(dataTypeA, "y", dataTypeB);
132 LinkedHashMap<String, Object> cProp = fillDataTypeEntry(dataTypeB, "z", dataTypeD);
133 LinkedHashMap<String, Object> dProp = fillDataTypeEntry(dataTypeD, "m", PropertySchemaType.LIST.getSchemaTypeName(), PropertySchemaType.INTEGER.getSchemaTypeName());
135 when(nodeTemplate.getCustomDef())
140 assertTrue(PropertyUtils.isPropertyTypeSimpleOrListOfSimpleTypes(nodeTemplate, path, property));
144 public void propertyPathIsRejectedAsShorterThanExpected() {
145 String[] path = String.format("%s#%s", "x", "y").split("#");
146 LinkedHashMap<String, Object> bProp = fillDataTypeEntry(dataTypeA, "y", dataTypeB);
147 LinkedHashMap<String, Object> dProp = fillDataTypeEntry(dataTypeB, "z", PropertySchemaType.STRING.getSchemaTypeName());
149 when(nodeTemplate.getCustomDef())
153 assertFalse(PropertyUtils.isPropertyTypeSimpleOrListOfSimpleTypes(nodeTemplate, path, property));
156 @Test(expected = NoSuchElementException.class)
157 public void propertyPathIsRejectedAsLongerThanExpected() {
158 String[] path = String.format("%s#%s#%s#%s", "x", "y", "z", "q").split("#");
159 LinkedHashMap<String, Object> bProp = fillDataTypeEntry(dataTypeA, "y", dataTypeB);
160 LinkedHashMap<String, Object> dProp = fillDataTypeEntry(dataTypeB, "z", PropertySchemaType.STRING.getSchemaTypeName());
162 when(nodeTemplate.getCustomDef())
166 PropertyUtils.isPropertyTypeSimpleOrListOfSimpleTypes(nodeTemplate, path, property);
169 @Test(expected = NoSuchElementException.class)
170 public void propertyPathIsRejectedAsPropertyIsNotFound() {
171 String[] path = String.format("%s#%s", "x", "y").split("#");
172 LinkedHashMap<String, Object> bProp = fillDataTypeEntry(dataTypeA, "t", dataTypeB);
173 when(nodeTemplate.getCustomDef())
176 assertFalse(PropertyUtils.isPropertyTypeSimpleOrListOfSimpleTypes(nodeTemplate, path, property));
180 public void verifyNodeTypeIsNotSupported() {
181 when(nodeTemplate.getMetaData()).thenReturn(metadata);
182 when(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_TYPE)).thenReturn("VFC-TEST");
184 ISdcCsarHelper sdcCsarHelper = new SdcCsarHelperImpl(toscaTemplate);
185 assertFalse(sdcCsarHelper.isNodeTypeSupported(nodeTemplate));
189 private LinkedHashMap<String, Object> fillDataTypeEntry(String dataTypeName, String propertyName, String type) {
190 return fillDataTypeEntry(dataTypeName, propertyName, type, "");
193 private LinkedHashMap<String, Object> fillDataTypeEntry(String dataTypeName, String propertyName, String type, String entrySchemaType) {
194 LinkedHashMap<String, Object> dataTypes = new LinkedHashMap<>();
195 LinkedHashMap<String, Object> properties = new LinkedHashMap<>();
196 LinkedHashMap<String, Object> property = new LinkedHashMap<>();
197 LinkedHashMap<String, Object> dataType = new LinkedHashMap<>();
198 property.put(SdcPropertyNames.PROPERTY_NAME_TYPE, type);
199 property.put(SdcPropertyNames.PROPERTY_NAME_NAME, propertyName);
201 PropertySchemaType propertySchemaType = PropertySchemaType.getEnumByValue(type);
203 if (!StringUtils.isEmpty(entrySchemaType) &&
204 (propertySchemaType.getSchemaTypeComplexity() == PropertySchemaType.PropertySchemaComplexity.Complex)) {
205 LinkedHashMap<String, Object> entry_schema = new LinkedHashMap<>();
206 entry_schema.put(SdcPropertyNames.PROPERTY_NAME_TYPE, entrySchemaType);
207 property.put(SdcPropertyNames.PROPERTY_NAME_ENTRY_SCHEMA, entry_schema);
209 properties.put(propertyName, property);
210 dataType.put(SdcPropertyNames.PROPERTY_NAME_PROPERTIES, properties);
211 dataTypes.put(dataTypeName, dataType);