Fix for radio buttons
[sdc.git] / asdc-tests / 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 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;
47
48 public class ImportReqDetails extends ResourceReqDetails {
49
50         private String payloadName;
51         private String payloadData;
52
53         private Map<String, Object> requirements;
54         private Map<String, Object> capabilities;
55
56         private List<String> derivedList;
57         private String derivedFromField;
58
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);
62         }
63
64         public String getPayloadName() {
65                 return payloadName;
66         }
67
68         public void setPayloadName(String payloadName) {
69                 this.payloadName = payloadName;
70         }
71
72         public String getPayloadData() {
73                 return payloadData;
74         }
75
76         public void setPayloadData(String payloadData) {
77                 this.payloadData = payloadData;
78         }
79
80         @Override
81         public String toString() {
82                 return "ImportReqDetails [payloadName=" + payloadName + ", payloadData=" + payloadData + "]";
83         }
84
85         public void setReqirementsAndCapabilities(String path, String fileName, User user, String derivedFromSource)
86                         throws Exception {
87                 setRequirements(path, fileName, user, derivedFromSource);
88                 setCapabilities(path, fileName, user, derivedFromSource);
89         }
90
91         public List<String> getDerivedList() {
92                 return derivedList;
93         }
94
95         public void setDerivedList(List<String> derivedList) {
96                 this.derivedList = derivedList;
97         }
98
99         public String getDerivedFromField() {
100                 return derivedFromField;
101         }
102
103         public void setDerivedFromField(String derivedFromField) {
104                 this.derivedFromField = derivedFromField;
105         }
106
107         public Map<String, Object> getRequirements() {
108                 return requirements;
109         }
110
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;
117         }
118
119         private void getDerivedReqCap(User user, Map<String, Object> reqCapMap, String field, String derivedFromResource)
120                         throws IOException, JSONException {
121
122                 if (derivedFromResource == null) {
123                         derivedFromResource = "Root";
124                 }
125
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);
134
135                         if (field.equals("capabilities")) {
136                                 convertListToMap.replace("capabilitySources", derivedList);
137                                 lst = new ArrayList<Object>(Arrays.asList(convertListToMap));
138                         }
139
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));
146                                 } else {
147                                         lst.add(convertedExistingValue);
148                                 }
149                         }
150
151                         reqCapMap.put(type, lst);
152                 }
153         }
154
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());
165                                 }
166                         }
167                 }
168                 return rest;
169         }
170
171         public Map<String, Object> getCapabilities() {
172                 return capabilities;
173         }
174
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;
181         }
182
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);
194
195                         if (!valuesMap.containsKey("occurrences")) {
196                                 valuesMap.put("minOccurrences", "1");
197                                 valuesMap.put("maxOccurrences", "UNBOUNDED");
198                         }
199
200                         Object tempValue = capMap.get(key);
201                         if (tempValue == null) {
202                                 valueList.add(valuesMap);
203                         } else {
204                                 Map<String, Object> convertValue = convertListToMap((List<Object>) tempValue);
205                                 valueList = new ArrayList<Object>(Arrays.asList(convertValue, valuesMap));
206                         }
207                         capMap.put(key, valueList);
208                 }
209                 return capMap;
210         }
211
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>();
218                 }
219                 return (Map<String, Object>) capMap;
220         }
221
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();
231
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());
236                         }
237
238                         valueList.add(valuesMap);
239                         reqMap.put(capability, valueList);
240                 }
241
242                 return reqMap;
243         }
244
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>();
251                 }
252                 Map<String, Object> testedMapFromFile = convertListToMap(reqListFromFile);
253                 return testedMapFromFile;
254         }
255
256         private Map<String, Object> getToscaResourceFromFile(String fullFileName, String toscaResourceName)
257                         throws Exception {
258                 Map<String, Object> nodesTypesMap = getNodesTypesMapFromFile(fullFileName);
259                 Map<String, Object> resourceToscaMap = (Map<String, Object>) nodesTypesMap.get(toscaResourceName);
260
261                 derivedFromField = resourceToscaMap.get("derived_from").toString();
262
263                 return resourceToscaMap;
264         }
265
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;
273         }
274
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);
282                 }
283                 return testedMapFromFile;
284         }
285
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);
293
294                         List<Map<String, Object>> expectedMapsList = convertListToMapList(expectedValues);
295                         List<Map<String, Object>> actualMapsList = convertListToMapList(actualValues);
296                         assertEquals(expectedMapsList.size(), actualMapsList.size());
297
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();
305                                                 assertTrue(
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)));
310
311                                         }
312
313                                 }
314                         }
315                 }
316         }
317
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);
328                 }
329                 return listOfMaps;
330         }
331
332 }