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.ci.tests.datatypes;
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertNotNull;
25 import static org.testng.AssertJUnit.assertTrue;
28 import java.io.FileInputStream;
29 import java.io.FileNotFoundException;
30 import java.io.IOException;
31 import java.io.InputStream;
32 import java.util.ArrayList;
33 import java.util.Arrays;
34 import java.util.HashMap;
35 import java.util.Iterator;
36 import java.util.List;
39 import com.fasterxml.jackson.databind.ObjectMapper;
40 import org.codehaus.jettison.json.JSONArray;
41 import org.codehaus.jettison.json.JSONException;
42 import org.openecomp.sdc.be.model.User;
43 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
44 import org.openecomp.sdc.ci.tests.utils.rest.ResourceRestUtils;
45 import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
46 import org.yaml.snakeyaml.Yaml;
48 import com.fasterxml.jackson.databind.ObjectMapper;
50 public class ImportReqDetails extends ResourceReqDetails {
52 private String payloadName;
53 private String payloadData;
55 private Map<String, Object> requirements;
56 private Map<String, Object> capabilities;
58 private List<String> derivedList;
59 private String derivedFromField;
61 public ImportReqDetails(String resourceName, String description, List<String> tags, List<String> derivedFrom,
62 String vendorName, String vendorRelease, String contactId, String icon) {
63 super(resourceName, description, tags, null, derivedFrom, vendorName, vendorRelease, contactId, icon);
66 public String getPayloadName() {
70 public void setPayloadName(String payloadName) {
71 this.payloadName = payloadName;
74 public String getPayloadData() {
78 public void setPayloadData(String payloadData) {
79 this.payloadData = payloadData;
83 public String toString() {
84 return "ImportReqDetails [payloadName=" + payloadName + ", payloadData=" + payloadData + "]";
87 public void setReqirementsAndCapabilities(String path, String fileName, User user, String derivedFromSource)
89 setRequirements(path, fileName, user, derivedFromSource);
90 setCapabilities(path, fileName, user, derivedFromSource);
93 public List<String> getDerivedList() {
97 public void setDerivedList(List<String> derivedList) {
98 this.derivedList = derivedList;
101 public String getDerivedFromField() {
102 return derivedFromField;
105 public void setDerivedFromField(String derivedFromField) {
106 this.derivedFromField = derivedFromField;
109 public Map<String, Object> getRequirements() {
113 public void setRequirements(String path, String fileName, User user, String derivedFromSource) throws Exception {
114 Map<String, Object> requirementsFromFile = getRequirementsMapFromFile(path + File.separator + fileName,
115 toscaResourceName, "requirements");
116 Map<String, Object> requirements = organizeRequirementsMap(requirementsFromFile);
117 getDerivedReqCap(user, requirements, "requirements", derivedFromSource);
118 this.requirements = requirements;
121 private void getDerivedReqCap(User user, Map<String, Object> reqCapMap, String field, String derivedFromResource)
122 throws IOException, JSONException {
124 if (derivedFromResource == null) {
125 derivedFromResource = "Root";
128 RestResponse rest = getResourceSource(user, derivedFromResource);
129 Map<String, Object> parsedFieldFromResponseAsMap = ResponseParser.getJsonValueAsMap(rest, field);
130 Iterator<String> iterator = parsedFieldFromResponseAsMap.keySet().iterator();
131 Map<String, Object> convertListToMap = null;
132 while (iterator.hasNext()) {
133 String type = iterator.next();
134 List<Object> lst = (List<Object>) parsedFieldFromResponseAsMap.get(type);
135 convertListToMap = convertListToMap(lst);
137 if (field.equals("capabilities")) {
138 convertListToMap.replace("capabilitySources", derivedList);
139 lst = new ArrayList<Object>(Arrays.asList(convertListToMap));
142 Object existingValue = reqCapMap.get(type);
143 if (existingValue != null) {
144 Map<String, Object> convertedExistingValue = convertListToMap((List<Object>) existingValue);
145 if (convertedExistingValue.get("name").toString().toLowerCase()
146 .equals(convertListToMap.get("name").toString().toLowerCase())) {
147 lst = new ArrayList<Object>(Arrays.asList(convertedExistingValue));
149 lst.add(convertedExistingValue);
153 reqCapMap.put(type, lst);
157 private RestResponse getResourceSource(User user, String source) throws IOException, JSONException {
158 org.codehaus.jettison.json.JSONObject getResourceJSONObject = null;
159 RestResponse rest = ResourceRestUtils.getResourceByNameAndVersion(user.getUserId(), source, "1.0");
160 if (rest.getErrorCode().intValue() == 200) {
161 JSONArray jArray = new JSONArray(rest.getResponse());
162 for (int i = 0; i < jArray.length(); i++) {
163 getResourceJSONObject = jArray.getJSONObject(i);
164 String resourceType = getResourceJSONObject.get("resourceType").toString();
165 if (!resourceType.equals("VF")) {
166 rest.setResponse(getResourceJSONObject.toString());
173 public Map<String, Object> getCapabilities() {
177 public void setCapabilities(String path, String fileName, User user, String derivedFromSource) throws Exception {
178 Map<String, Object> capabilitiesFromFile = getCapabilitiesMapFromFile(path + File.separator + fileName,
179 toscaResourceName, "capabilities");
180 Map<String, Object> capabilities = organizeCapabilitiesMap(capabilitiesFromFile);
181 getDerivedReqCap(user, capabilities, "capabilities", derivedFromSource);
182 this.capabilities = capabilities;
185 private Map<String, Object> organizeCapabilitiesMap(Map<String, Object> capabilitiesFromFile) {
186 Iterator<String> iterator = capabilitiesFromFile.keySet().iterator();
187 Map<String, Object> capMap = new HashMap<String, Object>();
188 while (iterator.hasNext()) {
189 List<Object> valueList = new ArrayList<Object>();
190 String next = iterator.next();
191 Map<String, Object> valuesMap = (Map<String, Object>) capabilitiesFromFile.get(next);
192 String key = valuesMap.remove("type").toString();
193 valuesMap.put("name", next);
194 valuesMap.put("capabilitySources", derivedList);
195 valuesMap.put("type", key);
197 if (!valuesMap.containsKey("occurrences")) {
198 valuesMap.put("minOccurrences", "1");
199 valuesMap.put("maxOccurrences", "UNBOUNDED");
202 Object tempValue = capMap.get(key);
203 if (tempValue == null) {
204 valueList.add(valuesMap);
206 Map<String, Object> convertValue = convertListToMap((List<Object>) tempValue);
207 valueList = new ArrayList<Object>(Arrays.asList(convertValue, valuesMap));
209 capMap.put(key, valueList);
214 private Map<String, Object> getCapabilitiesMapFromFile(String fileName, String toscaResourceName,
215 String fieldToTest) throws Exception {
216 Map<String, Object> resourceToscaMap = getToscaResourceFromFile(fileName, toscaResourceName);
217 Object capMap = resourceToscaMap.get(fieldToTest);
218 if (capMap == null) {
219 return new HashMap<String, Object>();
221 return (Map<String, Object>) capMap;
224 private Map<String, Object> organizeRequirementsMap(Map<String, Object> requirementsFromFile) {
225 Map<String, Object> reqMap = new HashMap<String, Object>();
226 List<Object> valueList = new ArrayList<Object>();
227 Iterator<String> iterator = requirementsFromFile.keySet().iterator();
228 while (iterator.hasNext()) {
229 String key = iterator.next();
230 Map<String, Object> valuesMap = (Map<String, Object>) requirementsFromFile.get(key);
231 valuesMap.put("name", key);
232 String capability = valuesMap.get("capability").toString();
234 List<Object> occurencesList = (List<Object>) valuesMap.remove("occurrences");
235 if (occurencesList != null) {
236 valuesMap.put("minOccurrences", occurencesList.get(0).toString());
237 valuesMap.put("maxOccurrences", occurencesList.get(1).toString());
240 valueList.add(valuesMap);
241 reqMap.put(capability, valueList);
247 private Map<String, Object> getRequirementsMapFromFile(String fileName, String toscaResourceName,
248 String fieldToTest) throws Exception {
249 Map<String, Object> resourceToscaMap = getToscaResourceFromFile(fileName, toscaResourceName);
250 List<Object> reqListFromFile = (List<Object>) resourceToscaMap.get(fieldToTest);
251 if (reqListFromFile == null) {
252 return new HashMap<String, Object>();
254 Map<String, Object> testedMapFromFile = convertListToMap(reqListFromFile);
255 return testedMapFromFile;
258 private Map<String, Object> getToscaResourceFromFile(String fullFileName, String toscaResourceName)
260 Map<String, Object> nodesTypesMap = getNodesTypesMapFromFile(fullFileName);
261 Map<String, Object> resourceToscaMap = (Map<String, Object>) nodesTypesMap.get(toscaResourceName);
263 derivedFromField = resourceToscaMap.get("derived_from").toString();
265 return resourceToscaMap;
268 private Map<String, Object> getNodesTypesMapFromFile(String fullFileName) throws FileNotFoundException {
269 Yaml yaml = new Yaml();
270 File file = new File(fullFileName);
271 InputStream inputStream = new FileInputStream(file);
272 Map<?, ?> mapFromFile = (Map<?, ?>) yaml.load(inputStream);
273 Map<String, Object> nodesTypesMap = (Map<String, Object>) mapFromFile.get("node_types");
274 return nodesTypesMap;
277 private Map<String, Object> convertListToMap(List<Object> testedListFromFile) {
278 Map<String, Object> testedMapFromFile = new HashMap<String, Object>();
279 for (int i = 0; i < testedListFromFile.size(); i++) {
280 Object req = testedListFromFile.get(i);
281 ObjectMapper m = new ObjectMapper();
282 Map<? extends String, ? extends String> mappedObject = m.convertValue(req, Map.class);
283 testedMapFromFile.putAll(mappedObject);
285 return testedMapFromFile;
288 public void compareRequirementsOrCapabilities(Map<String, Object> exepectedReq, Map<String, Object> actualReq) {
289 Iterator<String> iterator = exepectedReq.keySet().iterator();
290 while (iterator.hasNext()) {
291 String key = iterator.next();
292 List<Object> expectedValues = (List<Object>) exepectedReq.get(key);
293 List<Object> actualValues = (List<Object>) actualReq.get(key);
294 assertNotNull(actualValues);
296 List<Map<String, Object>> expectedMapsList = convertListToMapList(expectedValues);
297 List<Map<String, Object>> actualMapsList = convertListToMapList(actualValues);
298 assertEquals(expectedMapsList.size(), actualMapsList.size());
300 for (int i = 0; i < expectedMapsList.size(); i++) {
301 Map<String, Object> expectedMap = expectedMapsList.get(i);
302 Map<String, Object> actualdMap = actualMapsList.get(i);
303 if (expectedMap.get("name").equals(actualdMap.get("name"))) {
304 Iterator<String> iterator2 = expectedMap.keySet().iterator();
305 while (iterator2.hasNext()) {
306 String innerKey = iterator2.next();
308 "check " + innerKey + " in " + key + ":\nexpected: "
309 + expectedMap.get(innerKey).toString() + "\nactual: "
310 + actualdMap.get(innerKey).toString(),
311 expectedMap.get(innerKey).equals(actualdMap.get(innerKey)));
320 private List<Map<String, Object>> convertListToMapList(List<Object> testedListFromFile) {
321 List<Map<String, Object>> listOfMaps = new ArrayList<Map<String, Object>>();
322 for (int i = 0; i < testedListFromFile.size(); i++) {
323 Object req = testedListFromFile.get(i);
324 ObjectMapper m = new ObjectMapper();
325 Map<? extends String, ? extends String> mappedObject = m.convertValue(req, Map.class);
326 mappedObject.remove("uniqueId");
327 Map<String, Object> testedMapFromFile = new HashMap<String, Object>();
328 testedMapFromFile.putAll(mappedObject);
329 listOfMaps.add(testedMapFromFile);