2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.externalApis;
23 import static org.testng.AssertJUnit.assertEquals;
26 import java.io.IOException;
27 import java.io.InputStream;
28 import java.util.ArrayList;
29 import java.util.Enumeration;
30 import java.util.HashMap;
31 import java.util.List;
33 import java.util.zip.ZipEntry;
34 import java.util.zip.ZipException;
35 import java.util.zip.ZipFile;
37 import org.apache.commons.codec.binary.Base64;
38 import org.apache.commons.io.IOUtils;
39 import org.apache.http.HttpResponse;
40 import org.apache.http.client.methods.HttpGet;
41 import org.apache.http.impl.client.CloseableHttpClient;
42 import org.apache.http.impl.client.HttpClients;
43 import org.codehaus.jackson.map.ObjectMapper;
44 import org.junit.Rule;
45 import org.junit.rules.TestName;
46 import org.openecomp.sdc.be.datatypes.elements.ConsumerDataDefinition;
47 import org.openecomp.sdc.be.datatypes.enums.AssetTypeEnum;
48 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
49 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
50 import org.openecomp.sdc.be.model.ArtifactUiDownloadData;
51 import org.openecomp.sdc.be.model.Component;
52 import org.openecomp.sdc.be.model.Resource;
53 import org.openecomp.sdc.be.model.Service;
54 import org.openecomp.sdc.be.model.User;
55 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
56 import org.openecomp.sdc.ci.tests.api.ComponentBaseTest;
57 import org.openecomp.sdc.ci.tests.api.Urls;
58 import org.openecomp.sdc.ci.tests.datatypes.ArtifactReqDetails;
59 import org.openecomp.sdc.ci.tests.datatypes.ResourceAssetStructure;
60 import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
61 import org.openecomp.sdc.ci.tests.datatypes.ServiceAssetStructure;
62 import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
63 import org.openecomp.sdc.ci.tests.datatypes.enums.ArtifactTypeEnum;
64 import org.openecomp.sdc.ci.tests.datatypes.enums.LifeCycleStatesEnum;
65 import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
66 import org.openecomp.sdc.ci.tests.datatypes.expected.ExpectedExternalAudit;
67 import org.openecomp.sdc.ci.tests.datatypes.http.HttpHeaderEnum;
68 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
69 import org.openecomp.sdc.ci.tests.utils.Utils;
70 import org.openecomp.sdc.ci.tests.utils.cassandra.CassandraUtils;
71 import org.openecomp.sdc.ci.tests.utils.general.AtomicOperationUtils;
72 import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
73 import org.openecomp.sdc.ci.tests.utils.rest.ArtifactRestUtils;
74 import org.openecomp.sdc.ci.tests.utils.rest.AssetRestUtils;
75 import org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils;
76 import org.openecomp.sdc.ci.tests.utils.rest.ResourceRestUtils;
77 import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
78 import org.openecomp.sdc.ci.tests.utils.rest.ServiceRestUtils;
79 import org.openecomp.sdc.ci.tests.utils.validation.AuditValidationUtils;
80 import org.openecomp.sdc.common.api.Constants;
81 import org.openecomp.sdc.common.datastructure.AuditingFieldsKeysEnum;
82 import org.testng.annotations.BeforeMethod;
83 import org.testng.annotations.Test;
84 import static org.testng.AssertJUnit.assertTrue;
86 import com.google.gson.Gson;
88 import fj.data.Either;
90 public class GetCSARofVF extends ComponentBaseTest {
92 // protected User sdncUserDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
93 // protected User sdncAdminUserDetails = ElementFactory.getDefaultUser(UserRoleEnum.ADMIN);
94 // protected ConsumerDataDefinition consumerDataDefinition;
97 public static TestName name = new TestName();
99 public GetCSARofVF() {
100 super(name, GetCSARofVF.class.getName());
103 // Gson gson = new Gson();
106 public void setup() throws Exception {
108 // AtomicOperationUtils.createDefaultConsumer(true);
109 // CassandraUtils.truncateAllKeyspaces();
115 public void getResourceToscaModelCheckOutState() throws Exception {
118 Resource resource = AtomicOperationUtils.createResourceByType(ResourceTypeEnum.VF, UserRoleEnum.DESIGNER, true).left().value();
120 // HttpResponse componentToscaModel = AssetRestUtils.getComponentToscaModel(AssetTypeEnum.RESOURCES, resource.getUUID());
121 File toscaModelCsarFile = AssetRestUtils.getToscaModelCsarFile(AssetTypeEnum.RESOURCES, resource.getUUID());
123 // validate tosca structure
124 validateCsarContent(resource, toscaModelCsarFile);
126 // Validate audit message
127 validateAudit(resource);
136 public void getResourceToscaModelCheckInState() throws Exception {
138 Resource resource = AtomicOperationUtils.createResourceByType(ResourceTypeEnum.VF, UserRoleEnum.DESIGNER, true).left().value();
140 AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true);
142 // HttpResponse componentToscaModel = AssetRestUtils.getComponentToscaModel(AssetTypeEnum.RESOURCES, resource.getUUID());
143 File toscaModelCsarFile = AssetRestUtils.getToscaModelCsarFile(AssetTypeEnum.RESOURCES, resource.getUUID());
145 // validate tosca structure
146 validateCsarContent(resource, toscaModelCsarFile);
148 // Validate audit message
149 validateAudit(resource);
156 public void getRsourceToscaModelCertifyState() throws Exception {
158 Resource resource = AtomicOperationUtils.createResourceByType(ResourceTypeEnum.VF, UserRoleEnum.DESIGNER, true).left().value();
160 AtomicOperationUtils.changeComponentState(resource, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true);
162 // HttpResponse componentToscaModel = AssetRestUtils.getComponentToscaModel(AssetTypeEnum.RESOURCES, resource.getUUID());
163 File toscaModelCsarFile = AssetRestUtils.getToscaModelCsarFile(AssetTypeEnum.RESOURCES, resource.getUUID());
165 // validate tosca structure
166 validateCsarContent(resource, toscaModelCsarFile);
168 // Validate audit message
169 validateAudit(resource);
176 public void getServiceToscaModelCheckOutState() throws Exception {
178 Service service = AtomicOperationUtils.createDefaultService(UserRoleEnum.DESIGNER, true).left().value();
180 // HttpResponse componentToscaModel = AssetRestUtils.getComponentToscaModel(AssetTypeEnum.RESOURCES, resource.getUUID());
181 File toscaModelCsarFile = AssetRestUtils.getToscaModelCsarFile(AssetTypeEnum.SERVICES, service.getUUID());
183 // validate tosca structure
184 validateCsarContent(service, toscaModelCsarFile);
186 validateAudit(service);
193 public void getServiceToscaModelCheckInState() throws Exception {
195 Service service = AtomicOperationUtils.createDefaultService(UserRoleEnum.DESIGNER, true).left().value();
197 AtomicOperationUtils.changeComponentState(service, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true);
199 // HttpResponse componentToscaModel = AssetRestUtils.getComponentToscaModel(AssetTypeEnum.RESOURCES, resource.getUUID());
200 File toscaModelCsarFile = AssetRestUtils.getToscaModelCsarFile(AssetTypeEnum.SERVICES, service.getUUID());
202 // validate tosca structure
203 validateCsarContent(service, toscaModelCsarFile);
205 validateAudit(service);
211 public void getServiceToscaModelCertifyState() throws Exception {
213 Service service = AtomicOperationUtils.createDefaultService(UserRoleEnum.DESIGNER, true).left().value();
214 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.OTHER, service, UserRoleEnum.DESIGNER, true, true);
215 AtomicOperationUtils.changeComponentState(service, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true);
217 // HttpResponse componentToscaModel = AssetRestUtils.getComponentToscaModel(AssetTypeEnum.RESOURCES, resource.getUUID());
218 File toscaModelCsarFile = AssetRestUtils.getToscaModelCsarFile(AssetTypeEnum.SERVICES, service.getUUID());
220 // validate tosca structure
221 validateCsarContent(service, toscaModelCsarFile);
223 validateAudit(service);
232 public void validateCsarContent(Component resource, File toscaModelCsarFile) throws ZipException, IOException {
233 ZipFile zipFile = new ZipFile(toscaModelCsarFile);
234 Enumeration<? extends ZipEntry> entries = zipFile.entries();
235 while(entries.hasMoreElements()){
236 ZipEntry nextElement = entries.nextElement();
237 if (!(nextElement.getName().contains("Artifacts")||nextElement.getName().contains("csar.meta"))){
238 assertTrue("missing file in csar template", (nextElement.getName().equals("TOSCA-Metadata/TOSCA.meta") ||
239 nextElement.getName().equals("Definitions/"+ resource.getComponentType().getValue().toLowerCase()+"-"+ resource.getSystemName()+"-template.yml")) ||
240 nextElement.getName().equals("Definitions/"+ resource.getComponentType().getValue().toLowerCase()+"-"+ resource.getSystemName()+"-template-interface.yml"));
245 public void validateAudit(Component resource) throws Exception {
246 ExpectedExternalAudit expectedAudit = null;
247 if (resource.getComponentType().equals(ComponentTypeEnum.RESOURCE)){
248 expectedAudit = ElementFactory.getDefaultExternalAuditObject(AssetTypeEnum.RESOURCES, AuditingActionEnum.GET_TOSCA_MODEL, ("/" + resource.getUUID() + "/toscaModel"));
250 else expectedAudit = ElementFactory.getDefaultExternalAuditObject(AssetTypeEnum.SERVICES, AuditingActionEnum.GET_TOSCA_MODEL, ("/" + resource.getUUID() + "/toscaModel"));
251 expectedAudit.setRESOURCE_NAME(resource.getName());
252 expectedAudit.setSERVICE_INSTANCE_ID(resource.getUUID());
253 expectedAudit.setRESOURCE_TYPE(resource.getComponentType().getValue());
254 // AuditValidationUtils.validateExternalAudit(expectedAudit, AuditingActionEnum.GET_TOSCA_MODEL.getName(), null);
256 Map <AuditingFieldsKeysEnum, String> body = new HashMap<>();
257 body.put(AuditingFieldsKeysEnum.AUDIT_RESOURCE_NAME, expectedAudit.getRESOURCE_NAME());
258 AuditValidationUtils.validateExternalAudit(expectedAudit, AuditingActionEnum.GET_TOSCA_MODEL.getName(), body);