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.ci.tests.sanity;
23 import fj.data.Either;
24 import org.apache.commons.lang3.tuple.Pair;
25 import org.junit.Rule;
26 import org.junit.rules.TestName;
27 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
28 import org.openecomp.sdc.be.model.*;
29 import org.openecomp.sdc.ci.tests.api.ComponentBaseTest;
30 import org.openecomp.sdc.ci.tests.datatypes.enums.*;
31 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
32 import org.openecomp.sdc.ci.tests.utils.general.AtomicOperationUtils;
33 import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
34 import org.slf4j.Logger;
35 import org.slf4j.LoggerFactory;
36 import org.testng.Assert;
37 import org.testng.annotations.Test;
39 import java.util.ArrayList;
40 import java.util.Collection;
41 import java.util.List;
42 import java.util.stream.Collectors;
44 public class CrudE2E extends ComponentBaseTest {
45 private static Logger log = LoggerFactory.getLogger(CrudE2E.class.getName());
47 public Component resourceDetailsVFCcomp_01;
48 public Component resourceDetailsVFCsoft_01;
49 public Component resourceDetailsCP_01;
50 public Component resourceDetailsVL_01;
51 public Component resourceDetailsVF_01;
52 public Component resourceDetailsVF_02;
54 public ComponentInstance resourceDetailsVFC1compIns1;
55 public ComponentInstance resourceDetailsVFC1softIns1;
56 public ComponentInstance resourceDetailsCP1ins_01;
57 public ComponentInstance resourceDetailsVL1ins_01;
58 public ComponentInstance resourceDetailsVF1ins_01;
59 public Component defaultService1;
60 private List<String> variablesAsList = new ArrayList<String>();
63 public static TestName name = new TestName();
66 super(name, CrudE2E.class.getName());
70 public void complexScenario() throws Exception {
72 User designer = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
74 //////// create defaultService1 ///////////////////////
76 Either<Service, RestResponse> createDefaultService1e = AtomicOperationUtils.createDefaultService(UserRoleEnum.DESIGNER, true);
77 defaultService1 = createDefaultService1e.left().value();
79 //////// create VFC1 (resourceDetailsVFCcomp_01) DerivedFrom COMPUTE
80 //////// type add all possible informational artifacts and change state
81 //////// to CERTIFY////////
82 Either<Resource, RestResponse> resourceDetailsVFCcompE = AtomicOperationUtils.createResourcesByTypeNormTypeAndCatregory(ResourceTypeEnum.VFC, NormativeTypesEnum.COMPUTE, ResourceCategoryEnum.GENERIC_INFRASTRUCTURE, UserRoleEnum.DESIGNER,
84 resourceDetailsVFCcomp_01 = resourceDetailsVFCcompE.left().value();
85 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.CHEF, resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, false, true);
86 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.PUPPET, resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, false, true);
87 // AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.SHELL_SCRIPT,
88 // resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, false, true);
89 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.YANG, resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, false, true);
90 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.YANG_XML, resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, false, true);
91 // AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.HEAT,
92 // resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, false, true);
93 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.DG_XML, resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, false, true);
94 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.MURANO_PKG, resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, false, true);
95 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.OTHER, resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, false, true);
96 AtomicOperationUtils.changeComponentState(resourceDetailsVFCcomp_01, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true);
98 //////// create VFC2 (resourceDetailsVFCsoft_01) DerivedFrom SOFTWARE
99 //////// type and change state to CERTIFY////////
100 Either<Resource, RestResponse> resourceDetailsVFCsoftE = AtomicOperationUtils.createResourcesByTypeNormTypeAndCatregory(ResourceTypeEnum.VFC, NormativeTypesEnum.SOFTWARE_COMPONENT, ResourceCategoryEnum.GENERIC_DATABASE, UserRoleEnum.DESIGNER,
102 resourceDetailsVFCsoft_01 = resourceDetailsVFCsoftE.left().value();
103 AtomicOperationUtils.changeComponentState(resourceDetailsVFCsoft_01, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true);
105 //////// create CP1 (resourceDetailsVFCsoft_01) DerivedFrom PORT type
106 //////// and change state to CHECKIN////////
107 Either<Resource, RestResponse> resourceDetailsCP_01e = AtomicOperationUtils.createResourcesByTypeNormTypeAndCatregory(ResourceTypeEnum.CP, NormativeTypesEnum.PORT, ResourceCategoryEnum.GENERIC_DATABASE, UserRoleEnum.DESIGNER, true);
108 resourceDetailsCP_01 = resourceDetailsCP_01e.left().value();
109 AtomicOperationUtils.changeComponentState(resourceDetailsCP_01, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true);
111 //////// create VL1 (resourceDetailsVFCsoft_01) DerivedFrom NETWORK type
112 //////// and change state to CERTIFY////////
113 Either<Resource, RestResponse> resourceDetailsVL_01e = AtomicOperationUtils.createResourcesByTypeNormTypeAndCatregory(ResourceTypeEnum.VL, NormativeTypesEnum.NETWORK, ResourceCategoryEnum.GENERIC_NETWORK_ELEMENTS, UserRoleEnum.DESIGNER,
115 resourceDetailsVL_01 = resourceDetailsVL_01e.left().value();
116 AtomicOperationUtils.changeComponentState(resourceDetailsVL_01, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true);
118 //////// create VF1 (resourceDetailsVFCcomp_01) DerivedFrom COMPUTE type
119 //////// add all possible deployment and informational artifacts
121 Either<Resource, RestResponse> resourceDetailsVF_01e = AtomicOperationUtils.createResourcesByTypeNormTypeAndCatregory(ResourceTypeEnum.VF, NormativeTypesEnum.ROOT, ResourceCategoryEnum.GENERIC_INFRASTRUCTURE, UserRoleEnum.DESIGNER, true);
122 resourceDetailsVF_01 = resourceDetailsVF_01e.left().value();
123 ArtifactDefinition heatArtifact = AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.HEAT, resourceDetailsVF_01, UserRoleEnum.DESIGNER, true, true).left().value();
124 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.HEAT_VOL, resourceDetailsVF_01, UserRoleEnum.DESIGNER, true, true);
125 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.HEAT_NET, resourceDetailsVF_01, UserRoleEnum.DESIGNER, true, true);
126 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.OTHER, resourceDetailsVF_01, UserRoleEnum.DESIGNER, true, true);
128 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.CHEF, resourceDetailsVF_01, UserRoleEnum.DESIGNER, false, true);
129 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.PUPPET, resourceDetailsVF_01, UserRoleEnum.DESIGNER, false, true);
130 // AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.SHELL_SCRIPT,
131 // resourceDetailsVF_01, UserRoleEnum.DESIGNER, false, true);
132 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.YANG, resourceDetailsVF_01, UserRoleEnum.DESIGNER, false, true);
133 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.YANG_XML, resourceDetailsVF_01, UserRoleEnum.DESIGNER, false, true);
134 // AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.HEAT,
135 // resourceDetailsVF_01, UserRoleEnum.DESIGNER, false, true);
136 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.DG_XML, resourceDetailsVF_01, UserRoleEnum.DESIGNER, false, true);
137 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.MURANO_PKG, resourceDetailsVF_01, UserRoleEnum.DESIGNER, false, true);
138 AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.OTHER, resourceDetailsVF_01, UserRoleEnum.DESIGNER, false, true);
140 //////// Add VFC1 VFC2 CP and VL to VF container /////////////
141 resourceDetailsVFC1compIns1 = AtomicOperationUtils.addComponentInstanceToComponentContainer(resourceDetailsVFCcomp_01, resourceDetailsVF_01, UserRoleEnum.DESIGNER, true).left().value();
142 resourceDetailsVFC1softIns1 = AtomicOperationUtils.addComponentInstanceToComponentContainer(resourceDetailsVFCsoft_01, resourceDetailsVF_01, UserRoleEnum.DESIGNER, true).left().value();
143 resourceDetailsCP1ins_01 = AtomicOperationUtils.addComponentInstanceToComponentContainer(resourceDetailsCP_01, resourceDetailsVF_01, UserRoleEnum.DESIGNER, true).left().value();
144 resourceDetailsVL1ins_01 = AtomicOperationUtils.addComponentInstanceToComponentContainer(resourceDetailsVL_01, resourceDetailsVF_01, UserRoleEnum.DESIGNER, true).left().value();
146 //////// associate cp-vl vl-vfcComp and vfcComp-vfcSoft////////
147 resourceDetailsVF_01 = AtomicOperationUtils.getResourceObject(resourceDetailsVF_01, UserRoleEnum.DESIGNER);
148 AtomicOperationUtils.associate2ResourceInstances(resourceDetailsVF_01, resourceDetailsCP1ins_01, resourceDetailsVL1ins_01, AssocType.LINKABLE.getAssocType(), UserRoleEnum.DESIGNER, true);
149 AtomicOperationUtils.associate2ResourceInstances(resourceDetailsVF_01, resourceDetailsCP1ins_01, resourceDetailsVFC1compIns1, AssocType.BINDABLE.getAssocType(), UserRoleEnum.DESIGNER, true);
150 AtomicOperationUtils.associate2ResourceInstances(resourceDetailsVF_01, resourceDetailsVFC1compIns1, resourceDetailsVFC1softIns1, AssocType.NODE.getAssocType(), UserRoleEnum.DESIGNER, true);
152 //////// download all VF1 artifacts////////
154 Collection<ArtifactDefinition> artifacts = resourceDetailsVF_01.getDeploymentArtifacts().values();
155 List<String> collect = artifacts.stream().filter(p -> p.checkEsIdExist() == true).map(p -> p.getUniqueId()).collect(Collectors.toList());
156 artifacts.stream().filter(p -> p.checkEsIdExist() == true).map(p -> p.getUniqueId()).forEach(item -> log.debug(item));
158 //////// get all VF1 artifacts////////
160 Collection<List<ComponentInstanceProperty>> componentInstancesProperties = resourceDetailsVF_01.getComponentInstancesProperties().values();
161 List<String> collect2 = componentInstancesProperties.stream().filter(p -> p.isEmpty() == false).flatMap(l -> l.stream()).collect(Collectors.toList()).stream().map(p -> p.getUniqueId()).collect(Collectors.toList());
162 // PropertyRestUtils.updateProperty(resourceDetailsVF_01.getUniqueId(),
163 // propertyId, "1", designer);
164 // .forEach((someOtherString) -> {
165 // System.out.println("Content With Java: " + someOtherString);
167 // componentInstancesProperties.stream().filter(p ->
168 // p.isEmpty()==false).flatMap(l -> l.stream()).map(e ->
170 // resourceDetailsVF_01.getComponentInstancesProperties().
172 // ArtifactDefinition artifactDefinition =
173 // resourceDetailsVF_01.getDeploymentArtifacts().get(ArtifactTypeEnum.HEAT.getType().toLowerCase()).getEsId();
174 // ArtifactDefinition artifactDefinition =
175 // resource.getDeploymentArtifacts().get(depResArtType);
176 // ArtifactReqDetails artifacJavaObject =
177 // ResponseParser.convertArtifactDefinitionToArtifactReqDetailsObject(artifactDefinition);
178 // ArtifactRestUtils.updateDeploymentArtifactToRI(artifactDetails,
179 // sdncModifierDetails, resourceInstanceId, serviceId)
181 //////// certify VF1 - failed due to uncertified CP instance ////////
183 /*RestResponse changeVfStateFailed = LifecycleRestUtils.changeComponentState(resourceDetailsVF_01, designer, LifeCycleStatesEnum.CERTIFICATIONREQUEST);
184 Resource resResourceDetailsVF_01 = (Resource) resourceDetailsVF_01;
185 variablesAsList = Arrays.asList(resResourceDetailsVF_01.getResourceType().toString(), resourceDetailsCP_01.getName());
186 ErrorValidationUtils.checkBodyResponseOnError(ActionStatus.VALIDATED_RESOURCE_NOT_FOUND.name(), variablesAsList, changeVfStateFailed.getResponse());*/
188 //////// certify resources CP1 ////////
189 resourceDetailsCP_01 = AtomicOperationUtils.changeComponentState(resourceDetailsCP_01, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
191 //////// replace VF1 instances with new certified instances (CP1
192 //////// replaced) ////////
193 Either<Pair<Component, ComponentInstance>, RestResponse> changeComponentInstanceVersion = AtomicOperationUtils.changeComponentInstanceVersion(resourceDetailsVF_01, resourceDetailsCP1ins_01, resourceDetailsCP_01, UserRoleEnum.DESIGNER, true);
194 resourceDetailsVF_01 = changeComponentInstanceVersion.left().value().getLeft();
195 resourceDetailsCP1ins_01 = changeComponentInstanceVersion.left().value().getRight();
197 //////// associate cp-vl and cp-vfc1,////////
198 AtomicOperationUtils.associate2ResourceInstances(resourceDetailsVF_01, resourceDetailsCP1ins_01, resourceDetailsVL1ins_01, AssocType.LINKABLE.getAssocType(), UserRoleEnum.DESIGNER, true);
199 AtomicOperationUtils.associate2ResourceInstances(resourceDetailsVF_01, resourceDetailsCP1ins_01, resourceDetailsVFC1compIns1, AssocType.BINDABLE.getAssocType(), UserRoleEnum.DESIGNER, true);
201 /////// change VF1 state to CHECK-IN and add it as instance to service1
203 resourceDetailsVF_01 = AtomicOperationUtils.changeComponentState(resourceDetailsVF_01, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CHECKIN, true).getLeft();
204 resourceDetailsVF1ins_01 = AtomicOperationUtils.addComponentInstanceToComponentContainer(resourceDetailsVF_01, defaultService1, UserRoleEnum.DESIGNER, true).left().value();
206 //////// distribute service1 - failed due to incorrect LifeCyclestatus
208 RestResponse distributeService = AtomicOperationUtils.distributeService(defaultService1, false);
209 Assert.assertEquals(distributeService, null, "verification failed");
211 //////// certify service1 - failed due to uncertified instances ////////
212 designer = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
213 /*RestResponse changeServicetStateFailed = LifecycleRestUtils.changeComponentState(defaultService1, designer, LifeCycleStatesEnum.CERTIFICATIONREQUEST);
214 variablesAsList = Arrays.asList(defaultService1.getComponentType().toString().toLowerCase(), resourceDetailsVF_01.getName());
215 ErrorValidationUtils.checkBodyResponseOnError(ActionStatus.VALIDATED_RESOURCE_NOT_FOUND.name(), variablesAsList, changeServicetStateFailed.getResponse());
217 ////// change VF1 state to CERTIFIED
218 resourceDetailsVF_01 = AtomicOperationUtils.changeComponentState(resourceDetailsVF_01, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
220 //////// replace VF1 instances with new certified instances ////////
221 changeComponentInstanceVersion = AtomicOperationUtils.changeComponentInstanceVersion(defaultService1, resourceDetailsVF1ins_01, resourceDetailsVF_01, UserRoleEnum.DESIGNER, true);
222 resourceDetailsVF_01 = changeComponentInstanceVersion.left().value().getLeft();
223 resourceDetailsVFC1compIns1 = changeComponentInstanceVersion.left().value().getRight();
225 /////// certify service1 ////////
226 defaultService1 = AtomicOperationUtils.changeComponentState(defaultService1, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
228 //////// distribute service1 - successfully ////////
229 AtomicOperationUtils.distributeService(defaultService1, true);
231 /////// create VF2 ////////
233 Either<Resource, RestResponse> resourceDetailsVF_02e = AtomicOperationUtils.createResourcesByTypeNormTypeAndCatregory(ResourceTypeEnum.VF, NormativeTypesEnum.ROOT, ResourceCategoryEnum.GENERIC_INFRASTRUCTURE, UserRoleEnum.DESIGNER, true);
234 resourceDetailsVF_02 = resourceDetailsVF_02e.left().value();
238 // private void updateArtParameterInResource(Resource resource) throws
241 // ArtifactRestUtils.uploadArtifact(artifactDetails, component,
242 // sdncModifierDetails)
244 // for (String depResArtType : Utils.getListOfDepResArtLabels(true)) {
245 // ArtifactDefinition artifactDefinition =
246 // resource.getDeploymentArtifacts().get(depResArtType);
247 // ArtifactReqDetails artifacJavaObject =
248 // ResponseParser.convertArtifactDefinitionToArtifactReqDetailsObject(artifactDefinition);
250 // //update parameter
251 // List<HeatParameterDefinition> resourceHeatParameters =
252 // resource.getDeploymentArtifacts().get(depResArtType).getHeatParameters();
253 // for (HeatParameterDefinition heatParameterDefinition :
254 // resourceHeatParameters){
255 // if (heatParameterDefinition.getName().equals("address")){
256 // heatParameterDefinition.setCurrentValue("negev");
260 // artifacJavaObject.setHeatParameters(resourceHeatParameters);
261 // artifacJavaObject.setPayloadData(null);
262 // RestResponse updateInformationalArtifactToResource =
263 // ArtifactRestUtils.updateDeploymentArtifactToResource(artifacJavaObject,
264 // sdncDesignerDetails, resource.getUniqueId());
265 // assertTrue("response code is not 200, returned: " +
266 // updateInformationalArtifactToResource.getErrorCode(),updateInformationalArtifactToResource.getErrorCode()