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