[SDC-29] rebase continue work to align source
[sdc.git] / test-apis-ci / src / main / java / org / openecomp / sdc / ci / tests / execute / imports / ImportGenericResourceCITest.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.execute.imports;
22
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertFalse;
25 import static org.testng.AssertJUnit.assertTrue;
26
27 import java.io.File;
28 import java.io.IOException;
29 import java.nio.file.FileSystems;
30 import java.nio.file.Files;
31 import java.util.ArrayList;
32 import java.util.Arrays;
33 import java.util.HashMap;
34 import java.util.Iterator;
35 import java.util.List;
36 import java.util.Map;
37 import java.util.Map.Entry;
38
39 import org.apache.http.HttpStatus;
40 import org.apache.http.client.ClientProtocolException;
41 import org.apache.http.client.methods.CloseableHttpResponse;
42 import org.apache.http.client.methods.HttpPost;
43 import org.apache.http.entity.ContentType;
44 import org.apache.http.entity.mime.MultipartEntityBuilder;
45 import org.apache.http.entity.mime.content.FileBody;
46 import org.apache.http.entity.mime.content.StringBody;
47 import org.apache.http.impl.client.CloseableHttpClient;
48 import org.apache.http.impl.client.HttpClients;
49
50 import org.junit.Rule;
51 import org.junit.rules.TestName;
52 import org.openecomp.sdc.be.model.LifecycleStateEnum;
53 import org.openecomp.sdc.be.model.category.CategoryDefinition;
54 import org.openecomp.sdc.ci.tests.api.ComponentBaseTest;
55 import org.openecomp.sdc.ci.tests.api.Urls;
56 import org.openecomp.sdc.ci.tests.config.Config;
57 import org.openecomp.sdc.ci.tests.datatypes.enums.ErrorInfo;
58 import org.openecomp.sdc.ci.tests.datatypes.enums.ImportTestTypesEnum;
59 import org.openecomp.sdc.ci.tests.datatypes.enums.NormativeTypesEnum;
60 import org.openecomp.sdc.ci.tests.datatypes.enums.RespJsonKeysEnum;
61 import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
62 import org.openecomp.sdc.ci.tests.datatypes.expected.ExpectedResourceAuditJavaObject;
63 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
64 import org.openecomp.sdc.ci.tests.execute.TODO.ImportCapabilityTypeCITest;
65 import org.openecomp.sdc.ci.tests.utils.DbUtils;
66 import org.openecomp.sdc.ci.tests.utils.Utils;
67 import org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils;
68 import org.openecomp.sdc.ci.tests.utils.rest.ImportRestUtils;
69 import org.openecomp.sdc.ci.tests.utils.rest.ResourceRestUtils;
70 import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
71 import org.openecomp.sdc.ci.tests.utils.validation.AuditValidationUtils;
72 import org.openecomp.sdc.ci.tests.utils.validation.ErrorValidationUtils;
73 import org.slf4j.Logger;
74 import org.slf4j.LoggerFactory;
75 import org.testng.annotations.BeforeClass;
76 import org.testng.annotations.Test;
77
78 import com.google.gson.Gson;
79
80 import fj.data.Either;
81
82 public class ImportGenericResourceCITest extends ComponentBaseTest {
83         private static Logger log = LoggerFactory.getLogger(ImportGenericResourceCITest.class.getName());
84         private static final String FILE_NAME_MY_COMPUTE = "tosca.nodes.MyCompute";
85         private static final String RESOURCE_NAME_UPDATE_COMPUTE = "userUpdateCompute";
86         private static final String RESOURCE_NAME_MY_COMPUTE = "myCompute";
87         private static final String RESOURCE_NAME_USER_COMPUTE = "userCompute";
88         private static final String FILE_NAME_USER_COMPUTE = "tosca.nodes.userCompute";
89         @Rule
90         public static TestName name = new TestName();
91
92         public ImportGenericResourceCITest() {
93                 super(name, ImportGenericResourceCITest.class.getName());
94         }
95
96         @BeforeClass
97         public static void beforeImportClass() throws IOException {
98                 ImportCapabilityTypeCITest.importAllCapabilityTypes();
99                 // removeAllNormativeTypeResources();
100                 // importAllNormativeTypesResources(UserRoleEnum.ADMIN);
101         }
102
103         static Config config = Config.instance();
104
105         public static Map<NormativeTypesEnum, Boolean> removeAllNormativeTypeResources() throws ClientProtocolException, IOException {
106                 Map<NormativeTypesEnum, Boolean> normativeExistInDB = new HashMap<>();
107
108                 for (NormativeTypesEnum current : NormativeTypesEnum.values()) {
109                         Boolean existedBeforeDelete = ImportRestUtils.removeNormativeTypeResource(current);
110                         normativeExistInDB.put(current, existedBeforeDelete);
111                 }
112                 return normativeExistInDB;
113         }
114
115         public static Either<String, Boolean> getNormativeTypeResource(NormativeTypesEnum current) throws ClientProtocolException, IOException {
116                 return getResource(current.getNormativeName(), "1.0");
117         }
118
119         @Test
120         public void importAllTestResources() throws Exception {
121                 for (ImportTestTypesEnum currResource : ImportTestTypesEnum.values()) {
122                         DbUtils.cleanAllAudits();
123
124                         RestResponse importResponse = ImportRestUtils.importTestResource(currResource, UserRoleEnum.ADMIN);
125                         // System.err.println("import Resource
126                         // "+"<"+currResource+">"+"response:
127                         // "+importResponse.getErrorCode());
128                         ImportRestUtils.validateImportTestTypesResp(currResource, importResponse);
129                         if (currResource.getvalidateAudit() == true) {
130                                 // validate audit
131                                 String baseVersion = "1.0";
132                                 ErrorInfo errorInfo = ErrorValidationUtils.parseErrorConfigYaml(currResource.getActionStatus().name());
133                                 ExpectedResourceAuditJavaObject expectedResourceAuditJavaObject = new ExpectedResourceAuditJavaObject();
134                                 String auditAction = "ResourceImport";
135                                 expectedResourceAuditJavaObject.setAction(auditAction);
136                                 expectedResourceAuditJavaObject.setModifierUid(UserRoleEnum.ADMIN.getUserId());
137                                 expectedResourceAuditJavaObject.setModifierName(UserRoleEnum.ADMIN.getUserName());
138                                 expectedResourceAuditJavaObject.setResourceName(currResource.getNormativeName());
139                                 expectedResourceAuditJavaObject.setResourceType("Resource");
140                                 expectedResourceAuditJavaObject.setPrevVersion("");
141                                 expectedResourceAuditJavaObject.setCurrVersion(baseVersion);
142                                 expectedResourceAuditJavaObject.setPrevState("");
143                                 expectedResourceAuditJavaObject.setCurrState(LifecycleStateEnum.CERTIFIED.toString());
144                                 expectedResourceAuditJavaObject.setComment(null);
145                                 expectedResourceAuditJavaObject.setStatus(errorInfo.getCode().toString());
146                                 List<String> variables = (currResource.getErrorParams() != null ? currResource.getErrorParams() : new ArrayList<String>());
147                                 String auditDesc = AuditValidationUtils.buildAuditDescription(errorInfo, variables);
148                                 expectedResourceAuditJavaObject.setDesc(auditDesc);
149                                 AuditValidationUtils.validateAuditImport(expectedResourceAuditJavaObject, auditAction);
150                         }
151                 }
152         }
153
154         // -----------------------------------------------------------------------------------
155         protected void validateMyComputeCapabilities(Map<String, Object> map) {
156                 assertTrue(map.containsKey("capabilities"));
157                 Map<String, Object> capabilities = (Map<String, Object>) map.get("capabilities");
158                 assertTrue(capabilities.containsKey("tosca.capabilities.Container"));
159                 List<Object> hostCapList = (List<Object>) capabilities.get("tosca.capabilities.Container");
160                 assertFalse(hostCapList.isEmpty());
161                 Map<String, Object> hostCap = (Map<String, Object>) hostCapList.get(0);
162                 validateField(hostCap, "type", "tosca.capabilities.Container");
163                 validateField(hostCap, "name", "host");
164                 validateField(hostCap, "validSourceTypes", Arrays.asList(new String[] { "tosca.nodes.SoftwareComponent" }));
165
166                 assertTrue(capabilities.containsKey("tosca.capabilities.Endpoint.Admin"));
167                 List<Object> endPointCapList = (List<Object>) capabilities.get("tosca.capabilities.Endpoint.Admin");
168                 assertFalse(endPointCapList.isEmpty());
169                 Map<String, Object> endPointCap = (Map<String, Object>) endPointCapList.get(0);
170                 validateField(endPointCap, "name", "endpoint");
171                 validateField(endPointCap, "type", "tosca.capabilities.Endpoint.Admin");
172
173                 assertTrue(capabilities.containsKey("tosca.capabilities.OperatingSystem"));
174                 List<Object> osCapList = (List<Object>) capabilities.get("tosca.capabilities.OperatingSystem");
175                 assertFalse(osCapList.isEmpty());
176                 Map<String, Object> osCap = (Map<String, Object>) osCapList.get(0);
177                 validateField(osCap, "name", "os");
178                 validateField(osCap, "type", "tosca.capabilities.OperatingSystem");
179
180                 assertTrue(capabilities.containsKey("tosca.capabilities.Scalable"));
181                 List<Object> scalableCapList = (List<Object>) capabilities.get("tosca.capabilities.Scalable");
182                 assertFalse(scalableCapList.isEmpty());
183                 Map<String, Object> scalableCap = (Map<String, Object>) scalableCapList.get(0);
184                 validateField(scalableCap, "name", "scalable");
185                 validateField(scalableCap, "type", "tosca.capabilities.Scalable");
186
187                 assertTrue(capabilities.containsKey("tosca.capabilities.network.Bindable"));
188                 List<Object> bindingCapList = (List<Object>) capabilities.get("tosca.capabilities.network.Bindable");
189                 assertFalse(bindingCapList.isEmpty());
190                 Map<String, Object> bindingCap = (Map<String, Object>) bindingCapList.get(0);
191                 validateField(bindingCap, "name", "binding");
192                 validateField(bindingCap, "type", "tosca.capabilities.network.Bindable");
193
194         }
195
196         protected void validateMyComputeResource(String resourceName, String resourceVersion, String expectedState) throws ClientProtocolException, IOException {
197                 Either<String, Boolean> eitherMyCompute = getResource(resourceName, resourceVersion);
198                 assertTrue(eitherMyCompute.isLeft());
199                 String testComputeYml = eitherMyCompute.left().value();
200
201                 Map<String, Object> map = new HashMap<String, Object>();
202                 map = (Map<String, Object>) new Gson().fromJson(testComputeYml, map.getClass());
203
204                 validateMyComputeBasicFields(map, resourceName, resourceVersion, expectedState);
205
206                 validateMyComputeCapabilities(map);
207
208                 validateMyComputeRequirements(map);
209                 validateField(map, RespJsonKeysEnum.RESOURCE_VERSION.getRespJsonKeyName(), resourceVersion);
210
211         }
212
213         protected void validateMyComputeResource(String uid, String resourceName, String resourceVersion, String expectedState) throws ClientProtocolException, IOException {
214                 RestResponse resourceResponse = ResourceRestUtils.getResource(uid);
215                 ResourceRestUtils.checkSuccess(resourceResponse);
216                 String testComputeYml = resourceResponse.getResponse();
217
218                 // Either<String, Boolean> eitherMyCompute = getResource(resourceName,
219                 // resourceVersion);
220                 // assertTrue( eitherMyCompute.isLeft() );
221                 // String testComputeYml = eitherMyCompute.left().value();
222
223                 Map<String, Object> map = new HashMap<String, Object>();
224                 map = (Map<String, Object>) new Gson().fromJson(testComputeYml, map.getClass());
225
226                 validateMyComputeBasicFields(map, resourceName, resourceVersion, expectedState);
227
228                 validateMyComputeCapabilities(map);
229
230                 validateMyComputeRequirements(map);
231                 validateField(map, RespJsonKeysEnum.RESOURCE_VERSION.getRespJsonKeyName(), resourceVersion);
232
233         }
234
235         protected void validateMyComputeResourceAfterUpdate(String uid, String resourceName, String resourceVersion, String expectedState) throws ClientProtocolException, IOException {
236                 RestResponse resourceResponse = ResourceRestUtils.getResource(uid);
237                 ResourceRestUtils.checkSuccess(resourceResponse);
238                 String testComputeYml = resourceResponse.getResponse();
239
240                 // Either<String, Boolean> eitherMyCompute = getResource(resourceName,
241                 // resourceVersion);
242                 // assertTrue( eitherMyCompute.isLeft() );
243
244                 // String testComputeYml = eitherMyCompute.left().value();
245
246                 Map<String, Object> map = new HashMap<String, Object>();
247                 map = (Map<String, Object>) new Gson().fromJson(testComputeYml, map.getClass());
248
249                 validateMyComputeBasicFields(map, resourceName, resourceVersion, expectedState);
250                 validateField(map, RespJsonKeysEnum.DESCRIPTION.getRespJsonKeyName(), "Short description");
251                 validateField(map, RespJsonKeysEnum.VENDOR_NAME.getRespJsonKeyName(), "UserVendor");
252                 validateField(map, RespJsonKeysEnum.VENDOR_RELEASE.getRespJsonKeyName(), "1.1.2");
253
254                 // validateMyComputeCapabilities(map);
255                 // AssertJUnit.assertTrue(map.containsKey("capabilities"));
256                 // Map<String, Object> capabilities = (Map<String, Object>)
257                 // map.get("capabilities");
258                 // AssertJUnit.assertTrue(capabilities.containsKey("host"));
259                 // Map<String, Object> hostCap = (Map<String, Object>)
260                 // capabilities.get("host");
261                 // validateField(hostCap, "type", "tosca.capabilities.Container");
262                 // validateField(hostCap, "validSourceTypes", Arrays.asList(new
263                 // String[]{"tosca.nodes.SoftwareComponent"}));
264                 //
265                 // AssertJUnit.assertTrue(capabilities.containsKey("endpoint"));
266                 // Map<String, Object> endPointCap = (Map<String, Object>)
267                 // capabilities.get("endpoint");
268                 // validateField(endPointCap, "type",
269                 // "tosca.capabilities.Endpoint.Admin");
270
271                 assertTrue(map.containsKey("capabilities"));
272                 Map<String, Object> capabilities = (Map<String, Object>) map.get("capabilities");
273                 assertTrue(capabilities.containsKey("tosca.capabilities.Container"));
274                 List<Object> hostCapList = (List<Object>) capabilities.get("tosca.capabilities.Container");
275                 assertFalse(hostCapList.isEmpty());
276                 Map<String, Object> hostCap = (Map<String, Object>) hostCapList.get(0);
277                 validateField(hostCap, "type", "tosca.capabilities.Container");
278                 validateField(hostCap, "name", "host");
279                 validateField(hostCap, "validSourceTypes", Arrays.asList(new String[] { "tosca.nodes.SoftwareComponent" }));
280
281                 assertTrue(capabilities.containsKey("tosca.capabilities.Endpoint.Admin"));
282                 List<Object> endPointCapList = (List<Object>) capabilities.get("tosca.capabilities.Endpoint.Admin");
283                 assertFalse(endPointCapList.isEmpty());
284                 Map<String, Object> endPointCap = (Map<String, Object>) endPointCapList.get(0);
285                 validateField(endPointCap, "name", "endpoint");
286                 validateField(endPointCap, "type", "tosca.capabilities.Endpoint.Admin");
287
288                 validateMyComputeRequirements(map);
289                 validateField(map, RespJsonKeysEnum.RESOURCE_VERSION.getRespJsonKeyName(), resourceVersion);
290
291         }
292
293         protected void validateMyComputeRequirements(Map<String, Object> map) {
294                 assertTrue(map.containsKey("requirements"));
295                 Map<String, Object> requirements = (Map<String, Object>) map.get("requirements");
296
297                 assertTrue(requirements.containsKey("tosca.capabilities.Attachment"));
298                 List<Object> localStorageReqList = (List<Object>) requirements.get("tosca.capabilities.Attachment");
299                 assertFalse(localStorageReqList.isEmpty());
300                 Map<String, Object> localStorageReq = (Map<String, Object>) localStorageReqList.get(0);
301                 validateField(localStorageReq, "capability", "tosca.capabilities.Attachment");
302                 validateField(localStorageReq, "node", "tosca.nodes.BlockStorage");
303                 validateField(localStorageReq, "relationship", "tosca.relationships.AttachesTo");
304                 validateField(localStorageReq, "name", "local_storage");
305         }
306
307         protected void validateMyComputeBasicFields(Map<String, Object> map, String resourceName, String resourceVersion, String expectedState) {
308                 validateField(map, RespJsonKeysEnum.IS_ABSTRACT.getRespJsonKeyName(), false);
309                 // validateField(map, RespJsonKeysEnum.CATEGORIES.getRespJsonKeyName(),
310                 // categoryDefinition);
311                 // validateField(map, RespJsonKeysEnum.UNIQUE_ID.getRespJsonKeyName(),
312                 // UniqueIdBuilder.buildResourceUniqueId(resourceName,
313                 // resourceVersion));
314                 validateField(map, RespJsonKeysEnum.RESOURCE_NAME.getRespJsonKeyName(), resourceName);
315                 validateField(map, RespJsonKeysEnum.TAGS.getRespJsonKeyName(), Arrays.asList(new String[] { resourceName }));
316                 validateField(map, RespJsonKeysEnum.LIFE_CYCLE_STATE.getRespJsonKeyName(), expectedState);
317
318                 validateField(map, RespJsonKeysEnum.DERIVED_FROM.getRespJsonKeyName(), Arrays.asList(new String[] { "tosca.nodes.Root" }));
319         }
320
321         protected static void validateField(Map<String, Object> map, String jsonField, Object expectedValue) {
322                 if (expectedValue == null) {
323                         assertTrue(!map.containsKey(jsonField));
324                 } else {
325                         assertTrue("map does not contain field " + jsonField, map.containsKey(jsonField));
326                         Object foundValue = map.get(jsonField);
327                         compareElements(expectedValue, foundValue);
328                 }
329         }
330
331         protected static void compareElements(Object expectedValue, Object foundValue) {
332                 if (expectedValue instanceof String) {
333                         assertTrue(foundValue instanceof String);
334                         assertTrue(foundValue.equals(expectedValue));
335                 }
336
337                 else if (expectedValue instanceof Boolean) {
338                         assertTrue(foundValue instanceof Boolean);
339                         assertTrue(foundValue == expectedValue);
340                 } else if (expectedValue instanceof Map) {
341                         assertTrue(foundValue instanceof Map);
342                         Map<String, Object> foundMap = (Map<String, Object>) foundValue;
343                         Map<String, Object> excpectedMap = (Map<String, Object>) expectedValue;
344                         assertTrue(foundMap.size() == excpectedMap.size());
345                         Iterator<String> foundkeyItr = foundMap.keySet().iterator();
346                         while (foundkeyItr.hasNext()) {
347                                 String foundKey = foundkeyItr.next();
348                                 assertTrue(excpectedMap.containsKey(foundKey));
349                                 compareElements(excpectedMap.get(foundKey), foundMap.get(foundKey));
350                         }
351
352                 } else if (expectedValue instanceof List) {
353                         assertTrue(foundValue instanceof List);
354                         List<Object> foundList = (List<Object>) foundValue;
355                         List<Object> excpectedList = (List<Object>) expectedValue;
356                         assertTrue(foundList.size() == excpectedList.size());
357                         for (int i = 0; i < foundList.size(); i++) {
358                                 compareElements(excpectedList.get(i), foundList.get(i));
359                         }
360
361                 } else if (expectedValue instanceof CategoryDefinition) {
362                         assertTrue(foundValue instanceof Map);
363                         CategoryDefinition expCat = (CategoryDefinition) expectedValue;
364                         Map<String, Object> actCat = (Map<String, Object>) foundValue;
365                         assertEquals(expCat.getName(), actCat.get("name"));
366
367                         // assertEquals(expCat.getSubcategories().get(0).getName(),
368                         // actCat.get("subcategories").getName());
369                 } else {
370                         assertTrue(foundValue.equals(expectedValue));
371                 }
372         }
373
374         public static void restoreToOriginalState(Map<NormativeTypesEnum, Boolean> originalState, UserRoleEnum userRole) throws IOException {
375                 removeAllNormativeTypeResources();
376
377                 Iterator<Entry<NormativeTypesEnum, Boolean>> iterator = originalState.entrySet().iterator();
378                 while (iterator.hasNext()) {
379                         Entry<NormativeTypesEnum, Boolean> entry = iterator.next();
380                         Boolean isExistBeforeDelete = entry.getValue();
381                         if (isExistBeforeDelete) {
382                                 importNormativeResource(entry.getKey(), userRole);
383                         }
384                 }
385
386         }
387
388         public static void importAllNormativeTypesResources(UserRoleEnum userRole) throws IOException {
389                 for (NormativeTypesEnum currResource : NormativeTypesEnum.values()) {
390                         Either<String, Boolean> resource = getResource(currResource.getNormativeName(), "1.0");
391                         if (resource.isRight()) {
392                                 importNormativeResource(currResource, userRole);
393                         }
394                 }
395
396         }
397
398         protected static Integer importNormativeResource(NormativeTypesEnum resource, UserRoleEnum userRole) throws IOException {
399                 return importResource(resource.getFolderName(), userRole, true);
400         }
401
402         protected static Integer importResource(String folderName, UserRoleEnum userRole, boolean isNormative) throws IOException {
403                 Config config = Utils.getConfig();
404                 CloseableHttpResponse response = null;
405                 MultipartEntityBuilder mpBuilder = MultipartEntityBuilder.create();
406
407                 mpBuilder.addPart("resourceZip", new FileBody(getZipFile(folderName)));
408                 mpBuilder.addPart("resourceMetadata", new StringBody(getJsonStringOfFile(folderName, folderName + ".json"), ContentType.APPLICATION_JSON));
409
410                 String url = String.format(Urls.IMPORT_RESOURCE_NORMATIVE, config.getCatalogBeHost(), config.getCatalogBePort());
411                 if (!isNormative) {
412                         url = String.format(Urls.IMPORT_USER_RESOURCE, config.getCatalogBeHost(), config.getCatalogBePort());
413                 }
414
415                 CloseableHttpClient client = HttpClients.createDefault();
416                 try {
417                         HttpPost httpPost = new HttpPost(url);
418                         httpPost.addHeader("USER_ID", userRole.getUserId());
419                         httpPost.setEntity(mpBuilder.build());
420                         response = client.execute(httpPost);
421                         return response.getStatusLine().getStatusCode();
422                 } finally {
423                         closeResponse(response);
424                         closeHttpClient(client);
425
426                 }
427         }
428
429         public static void closeHttpClient(CloseableHttpClient client) {
430                 try {
431                         if (client != null) {
432                                 client.close();
433                         }
434                 } catch (IOException e) {
435                         log.debug("failed to close client or response: ", e);
436                 }
437         }
438
439         public static void closeResponse(CloseableHttpResponse response) {
440                 try {
441                         if (response != null) {
442                                 response.close();
443                         }
444                 } catch (IOException e) {
445                         log.debug("failed to close client or response: ", e);
446                 }
447         }
448
449         protected static String getJsonStringOfFile(String folderName, String fileName) throws IOException {
450                 String sourceDir = config.getImportResourceConfigDir();
451                 sourceDir += File.separator + "normative-types";
452
453                 java.nio.file.Path filePath = FileSystems.getDefault().getPath(sourceDir + File.separator + folderName, fileName);
454                 byte[] fileContent = Files.readAllBytes(filePath);
455                 String content = new String(fileContent);
456                 return content;
457         }
458
459         protected static File getZipFile(String elementName) throws IOException {
460                 String sourceDir = config.getImportResourceConfigDir();
461                 sourceDir += File.separator + "normative-types";
462
463                 java.nio.file.Path filePath = FileSystems.getDefault().getPath(sourceDir + File.separator + elementName, "normative-types-new-" + elementName + ".zip");
464                 return filePath.toFile();
465         }
466
467         protected static String getTestJsonStringOfFile(String folderName, String fileName) throws IOException {
468                 String sourceDir = config.getImportResourceTestsConfigDir();
469                 java.nio.file.Path filePath = FileSystems.getDefault().getPath(sourceDir + File.separator + folderName, fileName);
470                 byte[] fileContent = Files.readAllBytes(filePath);
471                 String content = new String(fileContent);
472                 return content;
473         }
474
475         protected static File getTestZipFile(String elementName) throws IOException {
476                 String sourceDir = config.getImportResourceTestsConfigDir();
477
478                 java.nio.file.Path filePath = FileSystems.getDefault().getPath(sourceDir + File.separator + elementName, "normative-types-new-" + elementName + ".zip");
479                 return filePath.toFile();
480         }
481
482         protected static Either<String, Boolean> getResource(String name, String version) throws IOException {
483                 RestResponse resource = ResourceRestUtils.getResourceByNameAndVersion(UserRoleEnum.DESIGNER.getUserId(), name, version);
484                 if (resource.getErrorCode() == ImportRestUtils.STATUS_CODE_GET_SUCCESS) {
485                         return Either.left(resource.getResponse());
486                         // return Either.right(true);
487
488                 }
489                 return Either.right(false);
490         }
491
492         @Test
493         public void testImportWithRequirmentsAndCapabilities() throws IOException {
494                 String fileName = FILE_NAME_MY_COMPUTE;
495                 RestResponse response = ImportRestUtils.importNormativeResourceByName(RESOURCE_NAME_MY_COMPUTE, UserRoleEnum.ADMIN);
496                 Integer statusCode = response.getErrorCode();
497                 assertTrue(statusCode == ImportRestUtils.STATUS_CODE_IMPORT_SUCCESS);
498                 String uid = ResponseParser.getUniqueIdFromResponse(response);
499                 validateMyComputeResource(uid, fileName, "1.0", "CERTIFIED");
500         }
501
502         @Test
503         public void testImportWithUpdateNormativeType() throws IOException {
504                 String fileName = FILE_NAME_MY_COMPUTE;
505                 RestResponse response = ImportRestUtils.importNormativeResourceByName(RESOURCE_NAME_MY_COMPUTE, UserRoleEnum.ADMIN);
506                 Integer statusCode = response.getErrorCode();
507                 assertTrue(statusCode == BaseRestUtils.STATUS_CODE_IMPORT_SUCCESS);
508                 String uid = ResponseParser.getUniqueIdFromResponse(response);
509                 validateMyComputeResource(uid, fileName, "1.0", "CERTIFIED");
510
511                 // update
512                 response = ImportRestUtils.importNormativeResourceByName(RESOURCE_NAME_MY_COMPUTE, UserRoleEnum.ADMIN);
513                 statusCode = response.getErrorCode();
514                 assertTrue(statusCode == ImportRestUtils.STATUS_CODE_UPDATE_SUCCESS);
515                 uid = ResponseParser.getUniqueIdFromResponse(response);
516                 validateMyComputeResource(uid, fileName, "2.0", "CERTIFIED");
517
518         }
519
520         @Test
521         public void testImportWithInvalidDefaultValue() throws IOException {
522                 RestResponse response = ImportRestUtils.importNewResourceByName("portInvalidDefaultValue", UserRoleEnum.DESIGNER);
523                 assertTrue(response.getErrorCode() == HttpStatus.SC_BAD_REQUEST);
524         }
525
526         @Test
527         public void testImportUserResource() throws IOException {
528                 String fileName = FILE_NAME_USER_COMPUTE;
529                 RestResponse response = ImportRestUtils.importNewResourceByName(RESOURCE_NAME_USER_COMPUTE, UserRoleEnum.DESIGNER);
530                 Integer statusCode = response.getErrorCode();
531                 assertTrue(statusCode == ImportRestUtils.STATUS_CODE_IMPORT_SUCCESS);
532                 String uid = ResponseParser.getUniqueIdFromResponse(response);
533                 validateMyComputeResource(uid, fileName, "0.1", "NOT_CERTIFIED_CHECKOUT");
534
535         }
536
537         @Test
538         public void testImportAndUpdateUserResource() throws IOException {
539                 String fileName = FILE_NAME_USER_COMPUTE;
540                 RestResponse response = ImportRestUtils.importNewResourceByName(RESOURCE_NAME_USER_COMPUTE, UserRoleEnum.DESIGNER);
541                 Integer statusCode = response.getErrorCode();
542                 assertTrue(statusCode == ImportRestUtils.STATUS_CODE_IMPORT_SUCCESS);
543                 String uid = ResponseParser.getUniqueIdFromResponse(response);
544                 validateMyComputeResource(uid, fileName, "0.1", "NOT_CERTIFIED_CHECKOUT");
545                 response = ImportRestUtils.importNewResourceByName(RESOURCE_NAME_UPDATE_COMPUTE, UserRoleEnum.DESIGNER);
546                 statusCode = response.getErrorCode();
547                 assertTrue(statusCode == ImportRestUtils.STATUS_CODE_UPDATE_SUCCESS);
548                 uid = ResponseParser.getUniqueIdFromResponse(response);
549                 validateMyComputeResourceAfterUpdate(uid, fileName, "0.1", "NOT_CERTIFIED_CHECKOUT");
550
551         }
552
553         @Test
554         public void testImportAndUpdateChangesUserResource() throws IOException {
555                 String fileName = FILE_NAME_USER_COMPUTE;
556                 RestResponse response = ImportRestUtils.importNewResourceByName(RESOURCE_NAME_USER_COMPUTE, UserRoleEnum.DESIGNER);
557                 Integer statusCode = response.getErrorCode();
558                 assertTrue(statusCode == ImportRestUtils.STATUS_CODE_IMPORT_SUCCESS);
559                 String uid = ResponseParser.getUniqueIdFromResponse(response);
560                 validateMyComputeResource(uid, fileName, "0.1", "NOT_CERTIFIED_CHECKOUT");
561                 // Either<String, Boolean> resource = getResource(fileName, "0.1");
562                 // assertTrue(resource.isLeft());
563
564                 response = ImportRestUtils.importNewResourceByName(RESOURCE_NAME_UPDATE_COMPUTE, UserRoleEnum.DESIGNER);
565                 statusCode = response.getErrorCode();
566                 assertTrue(statusCode == ImportRestUtils.STATUS_CODE_UPDATE_SUCCESS);
567                 validateMyComputeResourceAfterUpdate(uid, fileName, "0.1", "NOT_CERTIFIED_CHECKOUT");
568
569         }
570
571         @Test
572         public void testImportCheckoutAndUpdateUserResource() throws IOException {
573                 String fileName = FILE_NAME_USER_COMPUTE;
574                 RestResponse response = ImportRestUtils.importNormativeResourceByName(RESOURCE_NAME_USER_COMPUTE, UserRoleEnum.ADMIN);
575                 Integer statusCode = response.getErrorCode();
576                 assertTrue(statusCode == ImportRestUtils.STATUS_CODE_IMPORT_SUCCESS);
577                 String uid = ResponseParser.getUniqueIdFromResponse(response);
578                 validateMyComputeResource(uid, fileName, "1.0", "CERTIFIED");
579
580                 response = ImportRestUtils.importNewResourceByName(RESOURCE_NAME_USER_COMPUTE, UserRoleEnum.DESIGNER);
581                 statusCode = response.getErrorCode();
582                 assertEquals("check response code after update resource", ImportRestUtils.STATUS_CODE_UPDATE_SUCCESS, statusCode.intValue());
583                 uid = ResponseParser.getUniqueIdFromResponse(response);
584                 validateMyComputeResource(uid, fileName, "1.1", "NOT_CERTIFIED_CHECKOUT");
585
586         }
587
588         @Test
589         public void importNormativeTypesTesterUserRole() throws Exception {
590                 Integer statusCode = ImportRestUtils.importNormativeResourceByName(RESOURCE_NAME_MY_COMPUTE, UserRoleEnum.TESTER).getErrorCode();
591                 assertTrue(statusCode == ImportRestUtils.RESTRICTED_OPERATION);
592         }
593
594         @Test
595         public void importNormativeTypesDesignerUserRole() throws Exception {
596                 Integer statusCode = ImportRestUtils.importNormativeResourceByName(RESOURCE_NAME_MY_COMPUTE, UserRoleEnum.DESIGNER).getErrorCode();
597                 assertTrue(statusCode == 409);
598         }
599
600 }