Sync Integ to Master
[sdc.git] / test-apis-ci / src / main / java / org / openecomp / sdc / ci / tests / datatypes / ImportReqDetails.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.openecomp.sdc.ci.tests.datatypes;
22
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertNotNull;
25 import static org.testng.AssertJUnit.assertTrue;
26
27 import java.io.File;
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;
37 import java.util.Map;
38
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;
47
48 import com.fasterxml.jackson.databind.ObjectMapper;
49
50 public class ImportReqDetails extends ResourceReqDetails {
51
52         private String payloadName;
53         private String payloadData;
54
55         private Map<String, Object> requirements;
56         private Map<String, Object> capabilities;
57
58         private List<String> derivedList;
59         private String derivedFromField;
60
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);
64         }
65
66         public String getPayloadName() {
67                 return payloadName;
68         }
69
70         public void setPayloadName(String payloadName) {
71                 this.payloadName = payloadName;
72         }
73
74         public String getPayloadData() {
75                 return payloadData;
76         }
77
78         public void setPayloadData(String payloadData) {
79                 this.payloadData = payloadData;
80         }
81
82         @Override
83         public String toString() {
84                 return "ImportReqDetails [payloadName=" + payloadName + ", payloadData=" + payloadData + "]";
85         }
86
87         public void setReqirementsAndCapabilities(String path, String fileName, User user, String derivedFromSource)
88                         throws Exception {
89                 setRequirements(path, fileName, user, derivedFromSource);
90                 setCapabilities(path, fileName, user, derivedFromSource);
91         }
92
93         public List<String> getDerivedList() {
94                 return derivedList;
95         }
96
97         public void setDerivedList(List<String> derivedList) {
98                 this.derivedList = derivedList;
99         }
100
101         public String getDerivedFromField() {
102                 return derivedFromField;
103         }
104
105         public void setDerivedFromField(String derivedFromField) {
106                 this.derivedFromField = derivedFromField;
107         }
108
109         public Map<String, Object> getRequirements() {
110                 return requirements;
111         }
112
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;
119         }
120
121         private void getDerivedReqCap(User user, Map<String, Object> reqCapMap, String field, String derivedFromResource)
122                         throws IOException, JSONException {
123
124                 if (derivedFromResource == null) {
125                         derivedFromResource = "Root";
126                 }
127
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);
136
137                         if (field.equals("capabilities")) {
138                                 convertListToMap.replace("capabilitySources", derivedList);
139                                 lst = new ArrayList<Object>(Arrays.asList(convertListToMap));
140                         }
141
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));
148                                 } else {
149                                         lst.add(convertedExistingValue);
150                                 }
151                         }
152
153                         reqCapMap.put(type, lst);
154                 }
155         }
156
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());
167                                 }
168                         }
169                 }
170                 return rest;
171         }
172
173         public Map<String, Object> getCapabilities() {
174                 return capabilities;
175         }
176
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;
183         }
184
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);
196
197                         if (!valuesMap.containsKey("occurrences")) {
198                                 valuesMap.put("minOccurrences", "1");
199                                 valuesMap.put("maxOccurrences", "UNBOUNDED");
200                         }
201
202                         Object tempValue = capMap.get(key);
203                         if (tempValue == null) {
204                                 valueList.add(valuesMap);
205                         } else {
206                                 Map<String, Object> convertValue = convertListToMap((List<Object>) tempValue);
207                                 valueList = new ArrayList<Object>(Arrays.asList(convertValue, valuesMap));
208                         }
209                         capMap.put(key, valueList);
210                 }
211                 return capMap;
212         }
213
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>();
220                 }
221                 return (Map<String, Object>) capMap;
222         }
223
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();
233
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());
238                         }
239
240                         valueList.add(valuesMap);
241                         reqMap.put(capability, valueList);
242                 }
243
244                 return reqMap;
245         }
246
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>();
253                 }
254                 Map<String, Object> testedMapFromFile = convertListToMap(reqListFromFile);
255                 return testedMapFromFile;
256         }
257
258         private Map<String, Object> getToscaResourceFromFile(String fullFileName, String toscaResourceName)
259                         throws Exception {
260                 Map<String, Object> nodesTypesMap = getNodesTypesMapFromFile(fullFileName);
261                 Map<String, Object> resourceToscaMap = (Map<String, Object>) nodesTypesMap.get(toscaResourceName);
262
263                 derivedFromField = resourceToscaMap.get("derived_from").toString();
264
265                 return resourceToscaMap;
266         }
267
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;
275         }
276
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);
284                 }
285                 return testedMapFromFile;
286         }
287
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);
295
296                         List<Map<String, Object>> expectedMapsList = convertListToMapList(expectedValues);
297                         List<Map<String, Object>> actualMapsList = convertListToMapList(actualValues);
298                         assertEquals(expectedMapsList.size(), actualMapsList.size());
299
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();
307                                                 assertTrue(
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)));
312
313                                         }
314
315                                 }
316                         }
317                 }
318         }
319
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);
330                 }
331                 return listOfMaps;
332         }
333
334 }