re base code
[sdc.git] / test-apis-ci / src / main / java / org / openecomp / sdc / ci / tests / utils / CsarParserUtils.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.utils;
22
23 import org.apache.commons.codec.binary.Base64;
24 import org.json.simple.JSONArray;
25 import org.json.simple.JSONObject;
26 import org.json.simple.parser.JSONParser;
27 import org.json.simple.parser.ParseException;
28 import org.junit.Assert;
29 import org.openecomp.sdc.be.model.ArtifactUiDownloadData;
30 import org.openecomp.sdc.be.model.Component;
31 import org.openecomp.sdc.be.model.User;
32 import org.openecomp.sdc.ci.tests.datatypes.GroupHeatMetaDefinition;
33 import org.openecomp.sdc.ci.tests.datatypes.HeatMetaFirstLevelDefinition;
34 import org.openecomp.sdc.ci.tests.datatypes.PropertyHeatMetaDefinition;
35 import org.openecomp.sdc.ci.tests.datatypes.TypeHeatMetaDefinition;
36 import org.openecomp.sdc.ci.tests.datatypes.enums.ArtifactTypeEnum;
37 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
38 import org.openecomp.sdc.ci.tests.tosca.datatypes.ToscaParameterConstants;
39 import org.openecomp.sdc.ci.tests.utils.rest.ArtifactRestUtils;
40 import org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils;
41 import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
42 import org.openecomp.sdc.ci.tests.utils.validation.CsarValidationUtils;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
45
46 import java.io.File;
47 import java.util.ArrayList;
48 import java.util.List;
49 import java.util.Set;
50
51 import static org.testng.AssertJUnit.assertTrue;
52
53 public class CsarParserUtils {
54         public static final String CSAR_ARTIFACT = "assettoscacsar";
55         private static Logger log = LoggerFactory.getLogger(CsarValidationUtils.class.getName());
56
57         public static byte[] downloadComponentCsar(Component csarOwner, User user) throws Exception {
58                 String artifactUniqeId = csarOwner.getToscaArtifacts().get(CSAR_ARTIFACT).getUniqueId();
59                 RestResponse csarResponse = ArtifactRestUtils.downloadResourceArtifactInternalApi(csarOwner.getUniqueId(), user, artifactUniqeId);
60                 Assert.assertNotNull(csarResponse);
61                 BaseRestUtils.checkSuccess(csarResponse);
62                 ArtifactUiDownloadData artifactUiDownloadData = ResponseParser.parseToObject(csarResponse.getResponse(),
63                                 ArtifactUiDownloadData.class);
64                 byte[] fromUiDownload = artifactUiDownloadData.getBase64Contents().getBytes();
65                 return Base64.decodeBase64(fromUiDownload);
66         }
67         
68         public static List<TypeHeatMetaDefinition> getListTypeHeatMetaDefinition(File csarFileLocation) throws Exception {
69
70                 String artifactHeatMetaLocation = ToscaParameterConstants.HEAT_META_PATH;
71                 String csarPayload = ToscaParserUtils.getYamlPayloadFromCsar(csarFileLocation, artifactHeatMetaLocation);
72                 return getListTypeHeatMetaDefinitionByPayload(csarPayload);
73         }
74
75         public static List<TypeHeatMetaDefinition> getListTypeHeatMetaDefinition(String csarUUID) throws Exception {
76                 
77                 String artifactHeatMetaLocation = ToscaParameterConstants.HEAT_META_PATH;
78                 String csarPayload = ToscaParserUtils.getCsarPayload(csarUUID, artifactHeatMetaLocation);
79                 return getListTypeHeatMetaDefinitionByPayload(csarPayload);
80         }
81
82         public static List<TypeHeatMetaDefinition> getListTypeHeatMetaDefinitionByPayload(String csarPayload) throws ParseException {
83                 JSONParser parser = new JSONParser();
84                 if (csarPayload != null) {
85                         Object parse = parser.parse(csarPayload);
86                         JSONObject jsonObject = (JSONObject) parse;
87                         JSONObject jsonObjectImportStructure = (JSONObject) jsonObject.get(ToscaParameterConstants.IMPORT_STRUCTURE);
88                         List<TypeHeatMetaDefinition> listHeatMetaDefenition = new ArrayList<>();
89                         listHeatMetaDefenition = getArtifactsByGroup(jsonObjectImportStructure, listHeatMetaDefenition);
90                         return listHeatMetaDefenition;
91                 }
92                 return null;
93         }
94         
95         
96         protected static List<TypeHeatMetaDefinition> getArtifactsByGroup(JSONObject jsonObjectImportStructure, List<TypeHeatMetaDefinition> listHeatMetaDefenition) {
97
98                 @SuppressWarnings("unchecked")
99                 Set<Object> typeSet = jsonObjectImportStructure.keySet();
100                 for (Object type : typeSet) {
101                         TypeHeatMetaDefinition heatMetaDefenition = new TypeHeatMetaDefinition();
102                         log.debug(type.toString());
103                         log.debug("{}", jsonObjectImportStructure.get(type));
104                         JSONArray array = (JSONArray) jsonObjectImportStructure.get(type);
105                         heatMetaDefenition.setTypeName((String) type);
106                         List<GroupHeatMetaDefinition> groupHeatMetaDefinitions = new ArrayList<>();
107                         heatMetaDefenition.setGroupHeatMetaDefinition(fetchArtifactByGroupFromJsonArray(array, groupHeatMetaDefinitions, true, false));
108                         listHeatMetaDefenition.add(heatMetaDefenition);
109                 }
110                 return listHeatMetaDefenition;
111         }
112         
113         protected static List<GroupHeatMetaDefinition> fetchArtifactByGroupFromJsonArray(JSONArray array, List<GroupHeatMetaDefinition> listGroupHeatMetaDefinition, Boolean openNewGroup, Boolean isNested) {
114
115                 GroupHeatMetaDefinition groupHeatMetaDefinition;
116
117                 if (array != null) {
118                         for (int i = 0; i < array.size(); i++) {
119                                 if (openNewGroup) {
120                                         groupHeatMetaDefinition = new GroupHeatMetaDefinition();
121                                         int groupNumber = listGroupHeatMetaDefinition.size() + 1;
122                                         log.debug("groupName={}", groupNumber);
123                                         groupHeatMetaDefinition.setGroup(groupNumber);
124                                         listGroupHeatMetaDefinition.add(groupHeatMetaDefinition);
125                                         PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
126                                         propertyHeatMetaDefinition.setName("isBase");
127                                         propertyHeatMetaDefinition.setValue(false);
128                                         groupHeatMetaDefinition.setPropertyHeatMetaDefinition(propertyHeatMetaDefinition);
129                                 }
130                                 groupHeatMetaDefinition = listGroupHeatMetaDefinition.get(listGroupHeatMetaDefinition.size() - 1);
131                                 JSONObject jsonObject = (JSONObject) array.get(i);
132                                 if (openNewGroup) {
133                                         String groupName;
134                                         int lastIndexOfDot = jsonObject.get("fileName").toString().lastIndexOf(".");
135                                         if(lastIndexOfDot == -1){
136                                                 groupName = jsonObject.get("fileName").toString();
137                                         }else {
138                                                 groupName = jsonObject.get("fileName").toString().substring(0, lastIndexOfDot);
139                                         }
140                                         groupHeatMetaDefinition.setGroupName(groupName);
141                                 }
142                                 fetchArtifactByGroupFromJsonObject(listGroupHeatMetaDefinition, groupHeatMetaDefinition, jsonObject, isNested);
143                         }
144                 }
145                 return listGroupHeatMetaDefinition;
146         }
147         
148         
149         public static void fetchArtifactByGroupFromJsonObject(List<GroupHeatMetaDefinition> listGroupHeatMetaDefinition, GroupHeatMetaDefinition groupHeatMetaDefinition, JSONObject jsonObject, Boolean isNested) {
150                 @SuppressWarnings("unchecked")
151                 Set<Object> groupsKey = jsonObject.keySet();
152                 for (Object groupKey : groupsKey) {
153                         String groupKeyStr = (String) groupKey;
154                         if (groupKeyStr.equals("isBase")) {
155                                 PropertyHeatMetaDefinition propertyHeatMetaDefinition = new PropertyHeatMetaDefinition();
156                                 propertyHeatMetaDefinition.setName(groupKeyStr);
157                                 propertyHeatMetaDefinition.setValue((boolean) jsonObject.get(groupKeyStr));
158                                 if (!groupHeatMetaDefinition.getPropertyHeatMetaDefinition().equals(propertyHeatMetaDefinition)) {
159                                         groupHeatMetaDefinition.getPropertyHeatMetaDefinition().setValue((boolean) jsonObject.get(groupKeyStr));
160                                 }
161                         }
162                         if (groupKeyStr.equals("fileName")) {
163                                 String artifactName = (String) jsonObject.get(groupKeyStr);
164                                 String artifactType = ArtifactTypeEnum.HEAT_ARTIFACT.getType();
165                                 if(isNested){
166                                         artifactType = ArtifactTypeEnum.HEAT_NESTED.getType();
167                                 }
168                                 if(jsonObject.get("type") != null && isNested == false){
169                                         artifactType = (String) jsonObject.get("type");
170                                 }
171                                 HeatMetaFirstLevelDefinition heatMetaFirstLevelDefinition = new HeatMetaFirstLevelDefinition(artifactName, artifactType, null);
172                                 List<HeatMetaFirstLevelDefinition> listArtifactNames = groupHeatMetaDefinition.getArtifactList();
173                                 listArtifactNames.add(heatMetaFirstLevelDefinition);
174                                 groupHeatMetaDefinition.setArtifactList(listArtifactNames);
175                         } else {
176                                 if((groupKeyStr.equals("env"))){
177                                         if (jsonObject.get(groupKeyStr) instanceof JSONObject){
178                                                 fetchArtifactByGroupFromJsonObject(listGroupHeatMetaDefinition, groupHeatMetaDefinition, (JSONObject) jsonObject.get(groupKeyStr), false);
179                                         }else{
180                                                 assertTrue("Expected object is JSONObject, but actual: " + jsonObject.get(groupKeyStr).getClass(), jsonObject.get(groupKeyStr).getClass().equals("JSONObject"));
181                                         }
182                                 }
183                                 if((groupKeyStr.equals("nested"))){
184                                         if (jsonObject.get(groupKeyStr) instanceof JSONArray){
185                                                 fetchArtifactByGroupFromJsonArray((JSONArray) jsonObject.get(groupKeyStr), listGroupHeatMetaDefinition, false, true);
186                                         }else{
187                                                 assertTrue("Expected object is JSONArray, but actual: " + jsonObject.get(groupKeyStr).getClass(), jsonObject.get(groupKeyStr).getClass().equals("JSONArray"));
188                                         }
189                                         
190                                 }else if (!(groupKeyStr.equals("isBase") || groupKeyStr.equals("type") || groupKeyStr.equals("env"))) {
191                                         if (jsonObject.get(groupKeyStr) instanceof JSONArray){
192                                                 fetchArtifactByGroupFromJsonArray((JSONArray) jsonObject.get(groupKeyStr), listGroupHeatMetaDefinition, false, false);
193                                         }else{
194                                                 assertTrue("Expected object is JSONArray, but actual: " + jsonObject.get(groupKeyStr).getClass(), jsonObject.get(groupKeyStr).getClass().equals("JSONArray"));
195                                         }
196                                 }
197                         }
198                 }
199         }
200         
201 }