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 org.codehaus.jackson.map.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 public class ImportReqDetails extends ResourceReqDetails {
50 private String payloadName;
51 private String payloadData;
53 private Map<String, Object> requirements;
54 private Map<String, Object> capabilities;
56 private List<String> derivedList;
57 private String derivedFromField;
59 public ImportReqDetails(String resourceName, String description, List<String> tags, List<String> derivedFrom,
60 String vendorName, String vendorRelease, String contactId, String icon) {
61 super(resourceName, description, tags, null, derivedFrom, vendorName, vendorRelease, contactId, icon);
64 public String getPayloadName() {
68 public void setPayloadName(String payloadName) {
69 this.payloadName = payloadName;
72 public String getPayloadData() {
76 public void setPayloadData(String payloadData) {
77 this.payloadData = payloadData;
81 public String toString() {
82 return "ImportReqDetails [payloadName=" + payloadName + ", payloadData=" + payloadData + "]";
85 public void setReqirementsAndCapabilities(String path, String fileName, User user, String derivedFromSource)
87 setRequirements(path, fileName, user, derivedFromSource);
88 setCapabilities(path, fileName, user, derivedFromSource);
91 public List<String> getDerivedList() {
95 public void setDerivedList(List<String> derivedList) {
96 this.derivedList = derivedList;
99 public String getDerivedFromField() {
100 return derivedFromField;
103 public void setDerivedFromField(String derivedFromField) {
104 this.derivedFromField = derivedFromField;
107 public Map<String, Object> getRequirements() {
111 public void setRequirements(String path, String fileName, User user, String derivedFromSource) throws Exception {
112 Map<String, Object> requirementsFromFile = getRequirementsMapFromFile(path + File.separator + fileName,
113 toscaResourceName, "requirements");
114 Map<String, Object> requirements = organizeRequirementsMap(requirementsFromFile);
115 getDerivedReqCap(user, requirements, "requirements", derivedFromSource);
116 this.requirements = requirements;
119 private void getDerivedReqCap(User user, Map<String, Object> reqCapMap, String field, String derivedFromResource)
120 throws IOException, JSONException {
122 if (derivedFromResource == null) {
123 derivedFromResource = "Root";
126 RestResponse rest = getResourceSource(user, derivedFromResource);
127 Map<String, Object> parsedFieldFromResponseAsMap = ResponseParser.getJsonValueAsMap(rest, field);
128 Iterator<String> iterator = parsedFieldFromResponseAsMap.keySet().iterator();
129 Map<String, Object> convertListToMap = null;
130 while (iterator.hasNext()) {
131 String type = iterator.next();
132 List<Object> lst = (List<Object>) parsedFieldFromResponseAsMap.get(type);
133 convertListToMap = convertListToMap(lst);
135 if (field.equals("capabilities")) {
136 convertListToMap.replace("capabilitySources", derivedList);
137 lst = new ArrayList<Object>(Arrays.asList(convertListToMap));
140 Object existingValue = reqCapMap.get(type);
141 if (existingValue != null) {
142 Map<String, Object> convertedExistingValue = convertListToMap((List<Object>) existingValue);
143 if (convertedExistingValue.get("name").toString().toLowerCase()
144 .equals(convertListToMap.get("name").toString().toLowerCase())) {
145 lst = new ArrayList<Object>(Arrays.asList(convertedExistingValue));
147 lst.add(convertedExistingValue);
151 reqCapMap.put(type, lst);
155 private RestResponse getResourceSource(User user, String source) throws IOException, JSONException {
156 org.codehaus.jettison.json.JSONObject getResourceJSONObject = null;
157 RestResponse rest = ResourceRestUtils.getResourceByNameAndVersion(user.getUserId(), source, "1.0");
158 if (rest.getErrorCode().intValue() == 200) {
159 JSONArray jArray = new JSONArray(rest.getResponse());
160 for (int i = 0; i < jArray.length(); i++) {
161 getResourceJSONObject = jArray.getJSONObject(i);
162 String resourceType = getResourceJSONObject.get("resourceType").toString();
163 if (!resourceType.equals("VF")) {
164 rest.setResponse(getResourceJSONObject.toString());
171 public Map<String, Object> getCapabilities() {
175 public void setCapabilities(String path, String fileName, User user, String derivedFromSource) throws Exception {
176 Map<String, Object> capabilitiesFromFile = getCapabilitiesMapFromFile(path + File.separator + fileName,
177 toscaResourceName, "capabilities");
178 Map<String, Object> capabilities = organizeCapabilitiesMap(capabilitiesFromFile);
179 getDerivedReqCap(user, capabilities, "capabilities", derivedFromSource);
180 this.capabilities = capabilities;
183 private Map<String, Object> organizeCapabilitiesMap(Map<String, Object> capabilitiesFromFile) {
184 Iterator<String> iterator = capabilitiesFromFile.keySet().iterator();
185 Map<String, Object> capMap = new HashMap<String, Object>();
186 while (iterator.hasNext()) {
187 List<Object> valueList = new ArrayList<Object>();
188 String next = iterator.next();
189 Map<String, Object> valuesMap = (Map<String, Object>) capabilitiesFromFile.get(next);
190 String key = valuesMap.remove("type").toString();
191 valuesMap.put("name", next);
192 valuesMap.put("capabilitySources", derivedList);
193 valuesMap.put("type", key);
195 if (!valuesMap.containsKey("occurrences")) {
196 valuesMap.put("minOccurrences", "1");
197 valuesMap.put("maxOccurrences", "UNBOUNDED");
200 Object tempValue = capMap.get(key);
201 if (tempValue == null) {
202 valueList.add(valuesMap);
204 Map<String, Object> convertValue = convertListToMap((List<Object>) tempValue);
205 valueList = new ArrayList<Object>(Arrays.asList(convertValue, valuesMap));
207 capMap.put(key, valueList);
212 private Map<String, Object> getCapabilitiesMapFromFile(String fileName, String toscaResourceName,
213 String fieldToTest) throws Exception {
214 Map<String, Object> resourceToscaMap = getToscaResourceFromFile(fileName, toscaResourceName);
215 Object capMap = resourceToscaMap.get(fieldToTest);
216 if (capMap == null) {
217 return new HashMap<String, Object>();
219 return (Map<String, Object>) capMap;
222 private Map<String, Object> organizeRequirementsMap(Map<String, Object> requirementsFromFile) {
223 Map<String, Object> reqMap = new HashMap<String, Object>();
224 List<Object> valueList = new ArrayList<Object>();
225 Iterator<String> iterator = requirementsFromFile.keySet().iterator();
226 while (iterator.hasNext()) {
227 String key = iterator.next();
228 Map<String, Object> valuesMap = (Map<String, Object>) requirementsFromFile.get(key);
229 valuesMap.put("name", key);
230 String capability = valuesMap.get("capability").toString();
232 List<Object> occurencesList = (List<Object>) valuesMap.remove("occurrences");
233 if (occurencesList != null) {
234 valuesMap.put("minOccurrences", occurencesList.get(0).toString());
235 valuesMap.put("maxOccurrences", occurencesList.get(1).toString());
238 valueList.add(valuesMap);
239 reqMap.put(capability, valueList);
245 private Map<String, Object> getRequirementsMapFromFile(String fileName, String toscaResourceName,
246 String fieldToTest) throws Exception {
247 Map<String, Object> resourceToscaMap = getToscaResourceFromFile(fileName, toscaResourceName);
248 List<Object> reqListFromFile = (List<Object>) resourceToscaMap.get(fieldToTest);
249 if (reqListFromFile == null) {
250 return new HashMap<String, Object>();
252 Map<String, Object> testedMapFromFile = convertListToMap(reqListFromFile);
253 return testedMapFromFile;
256 private Map<String, Object> getToscaResourceFromFile(String fullFileName, String toscaResourceName)
258 Map<String, Object> nodesTypesMap = getNodesTypesMapFromFile(fullFileName);
259 Map<String, Object> resourceToscaMap = (Map<String, Object>) nodesTypesMap.get(toscaResourceName);
261 derivedFromField = resourceToscaMap.get("derived_from").toString();
263 return resourceToscaMap;
266 private Map<String, Object> getNodesTypesMapFromFile(String fullFileName) throws FileNotFoundException {
267 Yaml yaml = new Yaml();
268 File file = new File(fullFileName);
269 InputStream inputStream = new FileInputStream(file);
270 Map<?, ?> mapFromFile = (Map<?, ?>) yaml.load(inputStream);
271 Map<String, Object> nodesTypesMap = (Map<String, Object>) mapFromFile.get("node_types");
272 return nodesTypesMap;
275 private Map<String, Object> convertListToMap(List<Object> testedListFromFile) {
276 Map<String, Object> testedMapFromFile = new HashMap<String, Object>();
277 for (int i = 0; i < testedListFromFile.size(); i++) {
278 Object req = testedListFromFile.get(i);
279 ObjectMapper m = new ObjectMapper();
280 Map<? extends String, ? extends String> mappedObject = m.convertValue(req, Map.class);
281 testedMapFromFile.putAll(mappedObject);
283 return testedMapFromFile;
286 public void compareRequirementsOrCapabilities(Map<String, Object> exepectedReq, Map<String, Object> actualReq) {
287 Iterator<String> iterator = exepectedReq.keySet().iterator();
288 while (iterator.hasNext()) {
289 String key = iterator.next();
290 List<Object> expectedValues = (List<Object>) exepectedReq.get(key);
291 List<Object> actualValues = (List<Object>) actualReq.get(key);
292 assertNotNull(actualValues);
294 List<Map<String, Object>> expectedMapsList = convertListToMapList(expectedValues);
295 List<Map<String, Object>> actualMapsList = convertListToMapList(actualValues);
296 assertEquals(expectedMapsList.size(), actualMapsList.size());
298 for (int i = 0; i < expectedMapsList.size(); i++) {
299 Map<String, Object> expectedMap = expectedMapsList.get(i);
300 Map<String, Object> actualdMap = actualMapsList.get(i);
301 if (expectedMap.get("name").equals(actualdMap.get("name"))) {
302 Iterator<String> iterator2 = expectedMap.keySet().iterator();
303 while (iterator2.hasNext()) {
304 String innerKey = iterator2.next();
306 "check " + innerKey + " in " + key + ":\nexpected: "
307 + expectedMap.get(innerKey).toString() + "\nactual: "
308 + actualdMap.get(innerKey).toString(),
309 expectedMap.get(innerKey).equals(actualdMap.get(innerKey)));
318 private List<Map<String, Object>> convertListToMapList(List<Object> testedListFromFile) {
319 List<Map<String, Object>> listOfMaps = new ArrayList<Map<String, Object>>();
320 for (int i = 0; i < testedListFromFile.size(); i++) {
321 Object req = testedListFromFile.get(i);
322 ObjectMapper m = new ObjectMapper();
323 Map<? extends String, ? extends String> mappedObject = m.convertValue(req, Map.class);
324 mappedObject.remove("uniqueId");
325 Map<String, Object> testedMapFromFile = new HashMap<String, Object>();
326 testedMapFromFile.putAll(mappedObject);
327 listOfMaps.add(testedMapFromFile);