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.api;
23 import static org.testng.AssertJUnit.assertEquals;
24 import static org.testng.AssertJUnit.assertNotNull;
25 import static org.testng.AssertJUnit.assertTrue;
27 import java.io.IOException;
28 import java.util.ArrayList;
29 import java.util.Collection;
30 import java.util.HashMap;
31 import java.util.HashSet;
32 import java.util.LinkedHashMap;
33 import java.util.List;
35 import java.util.Map.Entry;
36 import java.util.function.Function;
38 import java.util.stream.Collectors;
40 import org.apache.commons.lang3.tuple.ImmutablePair;
41 import org.junit.rules.TestName;
42 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
43 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
44 import org.openecomp.sdc.be.model.CapReqDef;
45 import org.openecomp.sdc.be.model.CapabilityDefinition;
46 import org.openecomp.sdc.be.model.Component;
47 import org.openecomp.sdc.be.model.ComponentInstance;
48 import org.openecomp.sdc.be.model.Product;
49 import org.openecomp.sdc.be.model.RequirementAndRelationshipPair;
50 import org.openecomp.sdc.be.model.RequirementCapabilityRelDef;
51 import org.openecomp.sdc.be.model.RequirementDefinition;
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.ci.tests.datatypes.ComponentInstanceReqDetails;
56 import org.openecomp.sdc.ci.tests.datatypes.ComponentReqDetails;
57 import org.openecomp.sdc.ci.tests.datatypes.ProductReqDetails;
58 import org.openecomp.sdc.ci.tests.datatypes.ResourceReqDetails;
59 import org.openecomp.sdc.ci.tests.datatypes.ServiceReqDetails;
60 import org.openecomp.sdc.ci.tests.datatypes.enums.NormativeTypesEnum;
61 import org.openecomp.sdc.ci.tests.datatypes.enums.ResourceCategoryEnum;
62 import org.openecomp.sdc.ci.tests.datatypes.enums.ServiceCategoriesEnum;
63 import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
64 import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
65 import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
66 import org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils;
67 import org.openecomp.sdc.ci.tests.utils.rest.ComponentInstanceRestUtils;
68 import org.openecomp.sdc.ci.tests.utils.rest.ComponentRestUtils;
69 import org.openecomp.sdc.ci.tests.utils.rest.ProductRestUtils;
70 import org.openecomp.sdc.ci.tests.utils.rest.ResourceRestUtils;
71 import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
72 import org.openecomp.sdc.ci.tests.utils.rest.ServiceRestUtils;
73 import org.testng.Assert;
75 public class ComponentInstanceBaseTest extends ComponentBaseTest {
76 public static final String acceptHeaderData = "application/json";
77 // Req/cap of container component
78 protected Map<String, List<CapabilityDefinition>> expectedContainerCapabilities;
79 protected Map<String, List<RequirementDefinition>> expectedContainerRequirements;
80 protected Map<String, Map<String, List<RequirementDefinition>>> removedRequirements;
81 protected Map<String, ImmutablePair<Map<String, List<CapabilityDefinition>>, Map<String, List<RequirementDefinition>>>> expectedContInstReqCap;
83 protected User sdncPsDetails1;
84 protected User sdncPsDetails2;
85 protected User sdncPmDetails1;
86 protected User sdncPmDetails2;
87 protected User sdncDesignerDetails;
88 protected User sdncAdminDetails;
89 protected User sdncTesterDetails;
90 protected ResourceReqDetails resourceDetailsVFC_01;
91 protected ResourceReqDetails resourceDetailsVFC_02;
92 protected ResourceReqDetails resourceDetailsVF_01;
93 protected ResourceReqDetails resourceDetailsVF_02;
94 protected ResourceReqDetails resourceDetailsCP_01;
95 protected ResourceReqDetails resourceDetailsCP_02;
96 protected ResourceReqDetails resourceDetailsVL_01;
97 protected ResourceReqDetails resourceDetailsVL_02;
98 protected ServiceReqDetails serviceDetails_01;
99 protected ServiceReqDetails serviceDetails_02;
100 protected ServiceReqDetails serviceDetails_03;
101 protected ProductReqDetails productDetails_01;
102 protected ProductReqDetails productDetails_02;
105 // Req/caps of inner componentInstances
106 expectedContainerCapabilities = new LinkedHashMap<String, List<CapabilityDefinition>>();
107 expectedContainerRequirements = new LinkedHashMap<String, List<RequirementDefinition>>();
108 removedRequirements = new HashMap<>();
109 expectedContInstReqCap = new HashMap<>();
111 sdncPsDetails1 = ElementFactory.getDefaultUser(UserRoleEnum.PRODUCT_STRATEGIST1);
112 sdncPsDetails2 = ElementFactory.getDefaultUser(UserRoleEnum.PRODUCT_STRATEGIST2);
113 sdncPmDetails1 = ElementFactory.getDefaultUser(UserRoleEnum.PRODUCT_MANAGER1);
114 sdncPmDetails2 = ElementFactory.getDefaultUser(UserRoleEnum.PRODUCT_MANAGER2);
115 sdncDesignerDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
116 sdncAdminDetails = ElementFactory.getDefaultUser(UserRoleEnum.ADMIN);
117 sdncTesterDetails = ElementFactory.getDefaultUser(UserRoleEnum.TESTER);
118 resourceDetailsVFC_01 = ElementFactory.getDefaultResourceByType("ciVFC100", NormativeTypesEnum.SOFTWARE_COMPONENT, ResourceCategoryEnum.GENERIC_DATABASE, sdncDesignerDetails.getUserId(), ResourceTypeEnum.VFC.toString()); // resourceType = VFC
119 resourceDetailsVFC_02 = ElementFactory.getDefaultResourceByType("ciVFC200", NormativeTypesEnum.COMPUTE, ResourceCategoryEnum.GENERIC_INFRASTRUCTURE, sdncDesignerDetails.getUserId(), ResourceTypeEnum.VFC.toString());
120 resourceDetailsVF_01 = ElementFactory.getDefaultResourceByType("ciVF100", NormativeTypesEnum.ROOT, ResourceCategoryEnum.GENERIC_INFRASTRUCTURE, sdncDesignerDetails.getUserId(), ResourceTypeEnum.VF.toString());
121 resourceDetailsVF_02 = ElementFactory.getDefaultResourceByType("ciVF200", NormativeTypesEnum.ROOT, ResourceCategoryEnum.GENERIC_INFRASTRUCTURE, sdncDesignerDetails.getUserId(), ResourceTypeEnum.VF.toString());
122 resourceDetailsCP_01 = ElementFactory.getDefaultResourceByType("ciCP100", NormativeTypesEnum.PORT, ResourceCategoryEnum.GENERIC_NETWORK_ELEMENTS, sdncDesignerDetails.getUserId(), ResourceTypeEnum.CP.toString());
123 resourceDetailsCP_02 = ElementFactory.getDefaultResourceByType("ciCP200", NormativeTypesEnum.PORT, ResourceCategoryEnum.GENERIC_DATABASE, sdncDesignerDetails.getUserId(), ResourceTypeEnum.CP.toString());
124 resourceDetailsVL_01 = ElementFactory.getDefaultResourceByType("ciVL100", NormativeTypesEnum.NETWORK, ResourceCategoryEnum.GENERIC_NETWORK_ELEMENTS, sdncDesignerDetails.getUserId(), ResourceTypeEnum.VL.toString());
125 resourceDetailsVL_02 = ElementFactory.getDefaultResourceByType("ciVL200", NormativeTypesEnum.NETWORK, ResourceCategoryEnum.GENERIC_NETWORK_ELEMENTS, sdncDesignerDetails.getUserId(), ResourceTypeEnum.VL.toString());
126 serviceDetails_01 = ElementFactory.getDefaultService("ciNewtestservice1", ServiceCategoriesEnum.MOBILITY, sdncDesignerDetails.getUserId());
127 serviceDetails_02 = ElementFactory.getDefaultService("ciNewtestservice2", ServiceCategoriesEnum.MOBILITY, sdncDesignerDetails.getUserId());
128 serviceDetails_03 = ElementFactory.getDefaultService("ciNewtestservice3", ServiceCategoriesEnum.MOBILITY, sdncDesignerDetails.getUserId());
129 productDetails_01 = ElementFactory.getDefaultProduct("ciProduct01");
130 productDetails_02 = ElementFactory.getDefaultProduct("ciProduct02");
133 public ComponentInstanceBaseTest(TestName testName, String className) {
134 super(testName, className);
137 public void verifyVFReqCap(String componentId) throws Exception {
138 RestResponse restResponse = ResourceRestUtils.getResource(componentId);
139 Resource resource = ResponseParser.parseToObject(restResponse.getResponse(), Resource.class);
140 verifyReqCap(resource);
143 public void verifyServiceReqCap(String componentId) throws Exception {
144 RestResponse restResponse = ServiceRestUtils.getService(componentId, sdncDesignerDetails);
145 Service service = ResponseParser.parseToObject(restResponse.getResponse(), Service.class);
146 verifyReqCap(service);
149 public void verifyProductReqCap(String componentId) throws Exception {
150 RestResponse restResponse = ProductRestUtils.getProduct(componentId, sdncPsDetails1.getUserId());
151 Product product = ResponseParser.parseToObject(restResponse.getResponse(), Product.class);
152 verifyReqCap(product);
155 public void verifyReqCap(Component actualComponent) {
156 verifyContainerReqCap(actualComponent);
157 verifyCompInstReqCap(actualComponent);
160 public RestResponse changeServiceInstanceVersion(String componentUniqueId, String serviceInstanceToReplaceUniqueId, String serviceUniqueId, User sdncModifierDetails, ComponentTypeEnum componentType, boolean isHighestLevel) throws Exception {
161 RestResponse changeResourceInstanceVersion = ProductRestUtils.changeServiceInstanceVersion(componentUniqueId, serviceInstanceToReplaceUniqueId, serviceUniqueId, sdncModifierDetails, componentType);
162 if (changeResourceInstanceVersion.getErrorCode().equals(BaseRestUtils.STATUS_CODE_SUCCESS) && isHighestLevel) {
164 * // Add RI Capabilities and Requirements to expected MAP --> expectedVfCapabilities and expectedVfRequirements
166 * ComponentInstance componentInstance = ResponseParser.parseToObjectUsingMapper( changeResourceInstanceVersion.getResponse(), ComponentInstance.class); addCompInstReqCapToExpected(componentInstance, componentType);
169 return changeResourceInstanceVersion;
172 protected void updateExpectedReqCapAfterChangeLifecycleState(String oldContainerUniqueIdToReplace, String newContainerUniqueId) {
174 // Update of container req/cap
176 Set<String> compInstKeysToChange = new HashSet<>();
178 for (String expKey : expectedContainerCapabilities.keySet()) {
179 List<CapabilityDefinition> expCapList = expectedContainerCapabilities.get(expKey);
180 for (CapabilityDefinition cap : expCapList) {
181 String ownerId = cap.getOwnerId();
183 if (ownerId.contains(oldContainerUniqueIdToReplace)) {
184 compInstKeysToChange.add(ownerId);
185 cap.setOwnerId(cap.getOwnerId().replaceAll(oldContainerUniqueIdToReplace, newContainerUniqueId));
190 for (String expKey : expectedContainerRequirements.keySet()) {
191 List<RequirementDefinition> expCapList = expectedContainerRequirements.get(expKey);
192 for (RequirementDefinition cap : expCapList) {
193 String ownerId = cap.getOwnerId();
194 if (ownerId.contains(oldContainerUniqueIdToReplace)) {
195 compInstKeysToChange.add(ownerId);
196 cap.setOwnerId(cap.getOwnerId().replaceAll(oldContainerUniqueIdToReplace, newContainerUniqueId));
201 // Update of internal comp instances req/cap
202 for (String oldKey : compInstKeysToChange) {
203 ImmutablePair<Map<String, List<CapabilityDefinition>>, Map<String, List<RequirementDefinition>>> immutablePair = expectedContInstReqCap.get(oldKey);
204 if (immutablePair != null) {
205 expectedContInstReqCap.remove(oldKey);
206 String newKey = oldKey.replaceAll(oldContainerUniqueIdToReplace, newContainerUniqueId);
207 expectedContInstReqCap.put(newKey, immutablePair);
211 // Update of removed req
212 for (String oldKey : compInstKeysToChange) {
213 Map<String, List<RequirementDefinition>> map = removedRequirements.get(oldKey);
215 removedRequirements.remove(oldKey);
216 String newKey = oldKey.replaceAll(oldContainerUniqueIdToReplace, newContainerUniqueId);
217 Collection<List<RequirementDefinition>> values = map.values();
218 if (values != null) {
219 for (List<RequirementDefinition> list : values) {
220 for (RequirementDefinition reqDef : list) {
221 reqDef.setOwnerId(reqDef.getOwnerId().replaceAll(oldContainerUniqueIdToReplace, newContainerUniqueId));
225 removedRequirements.put(newKey, map);
230 private void verifyCompInstReqCap(Component actualComponent) {
231 List<ComponentInstance> componentInstances = actualComponent.getComponentInstances();
232 if (componentInstances != null) {
233 assertEquals(expectedContInstReqCap.size(), componentInstances.size());
234 for (ComponentInstance compInst : componentInstances) {
235 String uniqueId = compInst.getUniqueId();
236 // System.out.println("Verifying req/cap of component instance
238 Map<String, List<RequirementDefinition>> actualCompInstReq = compInst.getRequirements();
239 if (actualCompInstReq == null) {
240 actualCompInstReq = new HashMap<>();
242 Map<String, List<CapabilityDefinition>> actualCompInstCap = compInst.getCapabilities();
243 if (actualCompInstCap == null) {
244 actualCompInstCap = new HashMap<>();
246 ImmutablePair<Map<String, List<CapabilityDefinition>>, Map<String, List<RequirementDefinition>>> expReqCap = expectedContInstReqCap.get(uniqueId);
247 assertNotNull(expReqCap);
248 // System.out.println("expected instance requirements:
249 // "+expReqCap.right);
250 // System.out.println("expected instance capabilities:
251 // "+expReqCap.left);
252 // System.out.println("actual instance requirements:
253 // "+actualCompInstReq);
254 // System.out.println("actual instance capabilities:
255 // "+actualCompInstCap);
258 compareReqCapMaps(expReqCap.right, actualCompInstReq);
261 compareReqCapMaps(expReqCap.left, actualCompInstCap);
265 assertTrue(expectedContInstReqCap.isEmpty());
269 private void verifyContainerReqCap(Component actualComponent) {
270 Map<String, List<RequirementDefinition>> actualContainerRequirements = actualComponent.getRequirements();
271 if (actualContainerRequirements == null) {
272 actualContainerRequirements = new HashMap<>();
274 Map<String, List<CapabilityDefinition>> actualContainerCapabilities = actualComponent.getCapabilities();
275 if (actualContainerCapabilities == null) {
276 actualContainerCapabilities = new HashMap<>();
278 // System.out.println("Verifying req/cap of container component "+
279 // actualComponent.getUniqueId());
280 // System.out.println("expected container requirements:
281 // "+expectedContainerRequirements);
282 // System.out.println("expected container capabilities:
283 // "+expectedContainerCapabilities);
284 // System.out.println("actual container requirements:
285 // "+actualContainerRequirements);
286 // System.out.println("actual container capabilities:
287 // "+actualContainerCapabilities);
290 compareReqCapMaps(expectedContainerRequirements, actualContainerRequirements);
293 compareReqCapMaps(expectedContainerCapabilities, actualContainerCapabilities);
296 private <T> void compareReqCapMaps(Map<String, List<T>> expectedMap, Map<String, List<T>> actualMap) {
297 assertEquals(expectedMap.size(), actualMap.size());
298 for (String expKey : expectedMap.keySet()) {
299 List<?> expCapList = expectedMap.get(expKey);
300 List<?> actCapList = actualMap.get(expKey);
301 assertEquals(expCapList.size(), actCapList.size());
302 assertEquals(new HashSet<>(expCapList), new HashSet<>(actCapList));
306 public void addCompInstReqCapToExpected(ComponentInstance componentInstance, ComponentTypeEnum containerComponentType) throws Exception {
307 String uniqueId = componentInstance.getUniqueId();
308 String name = componentInstance.getName();
309 String originComponentId = componentInstance.getComponentUid();
310 RestResponse getResponse = null;
311 ComponentTypeEnum compInstType = getCompInstTypeByContainerType(containerComponentType);
312 Component component = null;
313 if (compInstType == ComponentTypeEnum.RESOURCE) {
314 getResponse = ResourceRestUtils.getResource(sdncDesignerDetails, originComponentId);
315 ResourceRestUtils.checkSuccess(getResponse);
316 component = ResponseParser.parseToObjectUsingMapper(getResponse.getResponse(), Resource.class);
317 } else if (compInstType == ComponentTypeEnum.SERVICE) {
318 getResponse = ServiceRestUtils.getService(originComponentId, sdncDesignerDetails);
319 ResourceRestUtils.checkSuccess(getResponse);
320 component = ResponseParser.parseToObjectUsingMapper(getResponse.getResponse(), Service.class);
322 Assert.fail("Unsupported type - " + containerComponentType);
325 Map<String, List<RequirementDefinition>> resourceRequirements = component.getRequirements();
326 if (resourceRequirements == null) {
327 resourceRequirements = new HashMap<>();
330 Function<Entry<String, List<RequirementDefinition>>, List<RequirementDefinition>> requirementDefinitionMapper = e -> new ArrayList<>(e.getValue().stream().map(item -> new RequirementDefinition(item)).collect(Collectors.toList()));
331 Map<String, List<RequirementDefinition>> reqCopy = resourceRequirements.entrySet().stream().collect(Collectors.toMap(e -> e.getKey(), requirementDefinitionMapper));
333 Map<String, List<CapabilityDefinition>> resourceCapabilities = component.getCapabilities();
334 if (resourceCapabilities == null) {
335 resourceCapabilities = new HashMap<>();
338 Function<? super Entry<String, List<CapabilityDefinition>>, List<CapabilityDefinition>> capabilityDefinitionMapper = e -> new ArrayList<>(e.getValue().stream().map(item -> new CapabilityDefinition(item)).collect(Collectors.toList()));
339 Map<String, List<CapabilityDefinition>> capCopy = resourceCapabilities.entrySet().stream().collect(Collectors.toMap(e -> e.getKey(), capabilityDefinitionMapper));
341 setupContainerExpectedReqCap(uniqueId, name, resourceRequirements, resourceCapabilities);
342 if (component.getComponentType().equals(ComponentTypeEnum.RESOURCE) && ((Resource) component).getResourceType() != ResourceTypeEnum.VF) {
343 setupConstInstExpectedReqCap(uniqueId, name, reqCopy, capCopy);
346 // adding entry for expected componentInstance
347 ImmutablePair<Map<String, List<CapabilityDefinition>>, Map<String, List<RequirementDefinition>>> compInstReqCapPair = new ImmutablePair<Map<String, List<CapabilityDefinition>>, Map<String, List<RequirementDefinition>>>(capCopy, reqCopy);
348 expectedContInstReqCap.put(uniqueId, compInstReqCapPair);
351 private void setupContainerExpectedReqCap(String uniqueId, String name, Map<String, List<RequirementDefinition>> componentRequirements, Map<String, List<CapabilityDefinition>> componentCapabilities) {
352 for (Entry<String, List<RequirementDefinition>> resReq : componentRequirements.entrySet()) {
353 List<RequirementDefinition> reqListToAdd = resReq.getValue();
354 for (RequirementDefinition requirementDefinition : reqListToAdd) {
355 requirementDefinition.setOwnerId(uniqueId);
356 requirementDefinition.setOwnerName(name);
358 List<RequirementDefinition> expectedReqList = expectedContainerRequirements.get(resReq.getKey());
359 if (expectedReqList == null) {
360 expectedReqList = reqListToAdd;
362 expectedReqList.addAll(reqListToAdd);
364 expectedContainerRequirements.put(resReq.getKey(), expectedReqList);
367 for (Entry<String, List<CapabilityDefinition>> resCap : componentCapabilities.entrySet()) {
368 List<CapabilityDefinition> capListToAdd = resCap.getValue();
369 for (CapabilityDefinition capDefinition : capListToAdd) {
370 capDefinition.setOwnerId(uniqueId);
371 capDefinition.setOwnerName(name);
373 List<CapabilityDefinition> expectedCapList = expectedContainerCapabilities.get(resCap.getKey());
374 if (expectedCapList == null) {
375 expectedCapList = capListToAdd;
377 expectedCapList.addAll(capListToAdd);
379 expectedContainerCapabilities.put(resCap.getKey(), expectedCapList);
383 private void setupConstInstExpectedReqCap(String uniqueId, String name, Map<String, List<RequirementDefinition>> componentRequirements, Map<String, List<CapabilityDefinition>> componentCapabilities) {
384 for (Entry<String, List<RequirementDefinition>> resReq : componentRequirements.entrySet()) {
385 List<RequirementDefinition> reqListToAdd = resReq.getValue();
386 for (RequirementDefinition requirementDefinition : reqListToAdd) {
387 requirementDefinition.setOwnerId(uniqueId);
388 requirementDefinition.setOwnerName(name);
392 for (Entry<String, List<CapabilityDefinition>> resCap : componentCapabilities.entrySet()) {
393 List<CapabilityDefinition> capListToAdd = resCap.getValue();
394 for (CapabilityDefinition capDefinition : capListToAdd) {
395 capDefinition.setOwnerId(uniqueId);
396 capDefinition.setOwnerName(name);
401 private ComponentTypeEnum getCompInstTypeByContainerType(ComponentTypeEnum componentType) {
402 switch (componentType) {
404 return ComponentTypeEnum.RESOURCE;
406 return ComponentTypeEnum.RESOURCE;
408 return ComponentTypeEnum.SERVICE;
415 public void deleteCompInstReqCapFromExpected(String componentInstanceId) {
416 List<String> entriesRequirementsToRemove = new ArrayList<>();
417 List<String> entriesCapabilitiesToRemove = new ArrayList<>();
418 for (Entry<String, List<RequirementDefinition>> reqEntry : expectedContainerRequirements.entrySet()) {
419 List<RequirementDefinition> reqList = reqEntry.getValue();
420 List<RequirementDefinition> reqListToDelete = new ArrayList<>();
421 for (RequirementDefinition requirementDefinition : reqList) {
422 if (requirementDefinition.getOwnerId().equals(componentInstanceId)) {
423 reqListToDelete.add(requirementDefinition);
426 reqList.removeAll(reqListToDelete);
427 if (reqList.isEmpty()) {
428 entriesRequirementsToRemove.add(reqEntry.getKey());
432 for (String ekey : entriesRequirementsToRemove) {
433 expectedContainerRequirements.remove(ekey);
436 for (Entry<String, List<CapabilityDefinition>> capEntry : expectedContainerCapabilities.entrySet()) {
437 List<CapabilityDefinition> capList = capEntry.getValue();
438 List<CapabilityDefinition> capListToDelete = new ArrayList<>();
439 for (CapabilityDefinition capabilityDefinition : capList) {
440 if (capabilityDefinition.getOwnerId().equals(componentInstanceId)) {
441 capListToDelete.add(capabilityDefinition);
444 capList.removeAll(capListToDelete);
445 if (capList.isEmpty()) {
446 entriesCapabilitiesToRemove.add(capEntry.getKey());
449 for (String ekey : entriesCapabilitiesToRemove) {
450 expectedContainerCapabilities.remove(ekey);
453 expectedContInstReqCap.remove(componentInstanceId);
457 // Automatically updates the expected req/cap of the container
458 protected RestResponse createAtomicInstanceForVF(ResourceReqDetails containerDetails, ResourceReqDetails compInstOriginDetails, User modifier) throws Exception {
459 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.RESOURCE, true);
462 // Automatically updates the expected req/cap of the container
463 protected RestResponse createAtomicInstanceForService(ServiceReqDetails containerDetails, ResourceReqDetails compInstOriginDetails, User modifier) throws Exception {
464 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.SERVICE, true);
467 // Automatically updates the expected req/cap of the container
468 protected RestResponse createVFInstance(ServiceReqDetails containerDetails, ResourceReqDetails compInstOriginDetails, User modifier) throws Exception {
469 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.SERVICE, true);
472 // Automatically updates the expected req/cap of the container
473 protected RestResponse createServiceInstance(ProductReqDetails containerDetails, ServiceReqDetails compInstOriginDetails, User modifier) throws Exception {
474 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.PRODUCT, true);
477 // Automatically updates the expected req/cap of the container
478 protected RestResponse deleteAtomicInstanceForVF(String compInstUniqueId, ResourceReqDetails containerDetails, User modifier) throws IOException, Exception {
479 return deleteComponentInstance(compInstUniqueId, containerDetails, modifier, ComponentTypeEnum.RESOURCE, true);
482 // Automatically updates the expected req/cap of the container
483 protected RestResponse deleteAtomicInstanceForService(String compInstUniqueId, ServiceReqDetails containerDetails, User modifier) throws IOException, Exception {
484 return deleteComponentInstance(compInstUniqueId, containerDetails, modifier, ComponentTypeEnum.SERVICE, true);
487 // Automatically updates the expected req/cap of the container
488 protected RestResponse deleteVFInstance(String compInstUniqueId, ServiceReqDetails containerDetails, User modifier) throws IOException, Exception {
489 return deleteComponentInstance(compInstUniqueId, containerDetails, modifier, ComponentTypeEnum.SERVICE, true);
493 // Automatically updates the expected req/cap of the container
494 protected RestResponse deleteServiceInstance(String compInstUniqueId, ProductReqDetails containerDetails, User modifier) throws IOException, Exception {
495 return deleteComponentInstance(compInstUniqueId, containerDetails, modifier, ComponentTypeEnum.PRODUCT, true);
498 // Setup of lower components - Doesn't affect req/cap of the container (for
499 // example, setup of VF for testing a Product)
500 protected RestResponse createAtomicInstanceForVFDuringSetup(ResourceReqDetails containerDetails, ResourceReqDetails compInstOriginDetails, User modifier) throws Exception {
501 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.RESOURCE, false);
504 // Setup of lower components - Doesn't affect req/cap of the container (for
505 // example, setup of VF for testing a Product)
506 protected RestResponse createAtomicInstanceForServiceDuringSetup(ServiceReqDetails containerDetails, ResourceReqDetails compInstOriginDetails, User modifier) throws Exception {
507 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.SERVICE, false);
510 // Setup of lower components - Doesn't affect req/cap of the container (for
511 // example, setup of VF for testing a Product)
512 protected RestResponse createVFInstanceDuringSetup(ServiceReqDetails containerDetails, ResourceReqDetails compInstOriginDetails, User modifier) throws Exception {
513 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.SERVICE, false);
516 // Setup of lower components - Doesn't affect req/cap of the container (for
517 // example, setup of VF for testing a Product)
518 protected RestResponse createServiceInstanceDuringSetup(ProductReqDetails containerDetails, ServiceReqDetails compInstOriginDetails, User modifier) throws Exception {
519 return createComponentInstance(containerDetails, compInstOriginDetails, modifier, ComponentTypeEnum.PRODUCT, false);
522 // Setup of lower components - Doesn't affect req/cap of the container (for
523 // example, setup of VF for testing a Product)
524 protected RestResponse deleteAtomicInstanceForVFDuringSetup(String compInstUniqueId, ResourceReqDetails containerDetails, User modifier) throws IOException, Exception {
525 return deleteComponentInstance(compInstUniqueId, containerDetails, modifier, ComponentTypeEnum.RESOURCE, false);
528 // Setup of lower components - Doesn't affect req/cap of the container (for
529 // example, setup of VF for testing a Product)
530 protected RestResponse deleteAtomicInstanceForServiceDuringSetup(String compInstUniqueId, ServiceReqDetails containerDetails, User modifier) throws IOException, Exception {
531 return deleteComponentInstance(compInstUniqueId, containerDetails, modifier, ComponentTypeEnum.SERVICE, false);
534 // Setup of lower components - Doesn't affect req/cap of the container (for
535 // example, setup of VF for testing a Product)
536 protected RestResponse deleteVFInstanceDuringSetup(String compInstUniqueId, ServiceReqDetails containerDetails, User modifier) throws IOException, Exception {
537 return deleteComponentInstance(compInstUniqueId, containerDetails, modifier, ComponentTypeEnum.SERVICE, false);
541 // Setup of lower components - Doesn't affect req/cap of the container (for
542 // example, setup of VF for testing a Product)
543 protected RestResponse deleteServiceInstanceDuringSetup(String compInstUniqueId, ProductReqDetails containerDetails, User modifier) throws IOException, Exception {
544 return deleteComponentInstance(compInstUniqueId, containerDetails, modifier, ComponentTypeEnum.PRODUCT, false);
547 protected Component getComponentAndValidateRIs(ComponentReqDetails componentDetails, int numberOfRIs, int numberOfRelations) throws IOException, Exception {
549 RestResponse getResponse = null;
550 Component component = null;
551 if (componentDetails instanceof ResourceReqDetails) {
552 getResponse = ResourceRestUtils.getResource(sdncAdminDetails, componentDetails.getUniqueId());
553 component = ResponseParser.parseToObjectUsingMapper(getResponse.getResponse(), Resource.class);
554 } else if (componentDetails instanceof ServiceReqDetails) {
555 getResponse = ServiceRestUtils.getService((ServiceReqDetails) componentDetails, sdncAdminDetails);
556 component = ResponseParser.parseToObjectUsingMapper(getResponse.getResponse(), Service.class);
557 } else if (componentDetails instanceof ProductReqDetails) {
558 getResponse = ProductRestUtils.getProduct(componentDetails.getUniqueId(), sdncAdminDetails.getUserId());
559 component = ResponseParser.parseToObjectUsingMapper(getResponse.getResponse(), Product.class);
561 Assert.fail("Unsupported type of componentDetails - " + componentDetails.getClass().getSimpleName());
563 ResourceRestUtils.checkSuccess(getResponse);
564 int numberOfActualRIs = component.getComponentInstances() != null ? component.getComponentInstances().size() : 0;
565 int numberOfActualRelations = component.getComponentInstancesRelations() != null ? component.getComponentInstancesRelations().size() : 0;
566 assertEquals("Check number of RIs meet the expected number", numberOfRIs, numberOfActualRIs);
567 assertEquals("Check number of RI relations meet the expected number", numberOfRelations, numberOfActualRelations);
568 verifyReqCap(component);
573 protected void getComponentAndValidateRIsAfterChangeLifecycleState(String oldComponentUniqueIdToReplace, ComponentReqDetails componentDetails, int numOfRIs, int numOfRelations) throws IOException, Exception {
574 updateExpectedReqCapAfterChangeLifecycleState(oldComponentUniqueIdToReplace, componentDetails.getUniqueId());
575 getComponentAndValidateRIs(componentDetails, numOfRIs, numOfRelations);
578 private RestResponse createComponentInstance(ComponentReqDetails containerDetails, ComponentReqDetails compInstOriginDetails, User modifier, ComponentTypeEnum containerComponentTypeEnum, boolean isHighestLevel) throws IOException, Exception {
579 ComponentInstanceReqDetails resourceInstanceReqDetails = ElementFactory.getComponentResourceInstance(compInstOriginDetails);
580 RestResponse createResourceInstanceResponse = ComponentInstanceRestUtils.createComponentInstance(resourceInstanceReqDetails, modifier, containerDetails.getUniqueId(), containerComponentTypeEnum);
581 if (createResourceInstanceResponse.getErrorCode().equals(BaseRestUtils.STATUS_CODE_CREATED) && isHighestLevel) {
582 // Add RI Capabilities and Requirements to expected MAP -->
583 // expectedVfCapabilities and expectedVfRequirements
584 ComponentInstance componentInstance = ResponseParser.parseToObjectUsingMapper(createResourceInstanceResponse.getResponse(), ComponentInstance.class);
585 addCompInstReqCapToExpected(componentInstance, containerComponentTypeEnum);
587 return createResourceInstanceResponse;
590 private RestResponse deleteComponentInstance(String compInstUniqueId, ComponentReqDetails containerDetails, User modifier, ComponentTypeEnum componentTypeEnum, boolean isHighestLevel) throws Exception {
591 RestResponse deleteResourceInstanceResponse = ComponentInstanceRestUtils.deleteComponentInstance(modifier, containerDetails.getUniqueId(), compInstUniqueId, componentTypeEnum);
592 if (deleteResourceInstanceResponse.getErrorCode().equals(BaseRestUtils.STATUS_CODE_DELETE) && isHighestLevel) {
593 deleteCompInstReqCapFromExpected(compInstUniqueId);
595 return deleteResourceInstanceResponse;
598 // Create Atomic resource ( VFC/CP/VL)
599 protected void createAtomicResource(ResourceReqDetails resourceDetails) throws Exception {
600 RestResponse createResourceResponse = ResourceRestUtils.createResource(resourceDetails, sdncDesignerDetails);
601 ResourceRestUtils.checkCreateResponse(createResourceResponse);
605 protected void createVF(ResourceReqDetails resourceDetails) throws Exception {
606 createVF(resourceDetails, sdncDesignerDetails);
610 protected void createVF(ResourceReqDetails resourceDetails, User sdncModifier) throws Exception {
611 RestResponse createVfResponse = ResourceRestUtils.createResource(resourceDetails, sdncModifier);
612 ResourceRestUtils.checkCreateResponse(createVfResponse);
615 protected void createService(ServiceReqDetails serviceDetails) throws Exception {
616 createService(serviceDetails, sdncDesignerDetails);
619 protected void createService(ServiceReqDetails serviceDetails, User sdncModifier) throws Exception {
620 RestResponse createServiceResponse = ServiceRestUtils.createService(serviceDetails, sdncModifier);
621 ResourceRestUtils.checkCreateResponse(createServiceResponse);
624 protected void createProduct(ProductReqDetails productDetails) throws Exception {
625 createProduct(productDetails, sdncPmDetails1);
628 protected void createProduct(ProductReqDetails productDetails, User sdncModifier) throws Exception {
629 RestResponse createProductResponse = ProductRestUtils.createProduct(productDetails, sdncModifier);
630 ResourceRestUtils.checkCreateResponse(createProductResponse);
633 protected RestResponse associateComponentInstancesForService(RequirementCapabilityRelDef requirementDef, ComponentReqDetails containerDetails, User user) throws IOException {
635 RestResponse associateInstances = ComponentInstanceRestUtils.associateInstances(requirementDef, user, containerDetails.getUniqueId(), ComponentTypeEnum.SERVICE);
636 ResourceRestUtils.checkSuccess(associateInstances);
637 deleteAssociatedFromExpected(requirementDef);
639 return associateInstances;
642 private void deleteAssociatedFromExpected(RequirementCapabilityRelDef requirementDef) {
643 // removing from requirements
644 RequirementAndRelationshipPair relationship = requirementDef.getRelationships().get(0);
645 String type = relationship.getRelationship().getType();
646 String fromId = requirementDef.getFromNode();
647 List<RequirementDefinition> reqList = expectedContainerRequirements.get(type);
648 List<CapabilityDefinition> capList = expectedContainerCapabilities.get(type);
649 RequirementDefinition toDelete = null;
650 if (reqList != null) {
651 for (RequirementDefinition reqDef : reqList) {
652 if (reqDef.getOwnerId().equals(fromId)) {
656 if (toDelete != null) {
657 reqList.remove(toDelete);
658 if (reqList.isEmpty()) {
659 expectedContainerRequirements.remove(type);
661 String ownerId = toDelete.getOwnerId();
662 Map<String, List<RequirementDefinition>> map = removedRequirements.get(ownerId);
664 map = new HashMap<>();
665 removedRequirements.put(ownerId, map);
667 List<RequirementDefinition> list = map.get(type);
669 list = new ArrayList<>();
676 for (CapabilityDefinition capabilityDefinition : capList) {
677 if (capabilityDefinition.getType().equals(type)) {
678 int minOccurrences = Integer.parseInt(capabilityDefinition.getMinOccurrences()) - 1;
679 if (minOccurrences < 0)
681 String minOccurrencesString = Integer.toString(minOccurrences);
682 capabilityDefinition.setMinOccurrences(minOccurrencesString);
683 if (!capabilityDefinition.getMaxOccurrences().equals("UNBOUNDED")) {
684 int maxOccurrences = Integer.parseInt(capabilityDefinition.getMaxOccurrences()) - 1;
685 if (maxOccurrences < 0)
687 String maxOccurrencesString = Integer.toString(maxOccurrences);
688 capabilityDefinition.setMaxOccurrences(maxOccurrencesString);
692 expectedContainerCapabilities.put(type, capList);
695 protected void dissociateComponentInstancesForService(RequirementCapabilityRelDef requirementDef, ComponentReqDetails containerDetails, User user) throws IOException {
697 RestResponse dissociateInstances = ComponentInstanceRestUtils.dissociateInstances(requirementDef, user, containerDetails.getUniqueId(), ComponentTypeEnum.SERVICE);
698 ResourceRestUtils.checkSuccess(dissociateInstances);
699 addDissociatedToExpected(requirementDef);
702 protected void fulfillCpRequirement(ComponentReqDetails component, String cpCompInstId, String cpReqFulfillerCompInstId, String cpReqFulfillerOwnerId, User user, ComponentTypeEnum containerCompType) throws IOException {
703 // Fulfilling cp's "binding" requirement - US626240
704 String requirementName = "binding";
705 String capType = "tosca.capabilities.network.Bindable";
706 RestResponse getResourceResponse = ComponentRestUtils.getComponentRequirmentsCapabilities(user, component);
707 ResourceRestUtils.checkSuccess(getResourceResponse);
708 CapReqDef capReqDef = ResponseParser.parseToObject(getResourceResponse.getResponse(), CapReqDef.class);
709 List<CapabilityDefinition> capList = capReqDef.getCapabilities().get(capType);
710 List<RequirementDefinition> reqList = capReqDef.getRequirements().get(capType);
711 RequirementCapabilityRelDef reqCapRelation = ElementFactory.getReqCapRelation(cpCompInstId, cpReqFulfillerCompInstId, cpCompInstId, cpReqFulfillerOwnerId, capType, requirementName, capList, reqList);
712 RestResponse associateInstances = ComponentInstanceRestUtils.associateInstances(reqCapRelation, user, component.getUniqueId(), containerCompType);
713 ResourceRestUtils.checkSuccess(associateInstances);
716 protected void consumeVlCapability(ComponentReqDetails component, String vlCapConsumerCompInstId, String vlCompInstId, String vlCapConsumerOwnerId, User user, ComponentTypeEnum containerCompType) throws IOException {
717 // Consuming vl's "link" capability - US626240
718 String requirementName = "link";
719 String capType = "tosca.capabilities.network.Linkable";
720 RestResponse getResourceResponse = ComponentRestUtils.getComponentRequirmentsCapabilities(user, component);
721 ResourceRestUtils.checkSuccess(getResourceResponse);
722 CapReqDef capReqDef = ResponseParser.parseToObject(getResourceResponse.getResponse(), CapReqDef.class);
723 List<CapabilityDefinition> capList = capReqDef.getCapabilities().get(capType);
724 List<RequirementDefinition> reqList = capReqDef.getRequirements().get(capType);
725 RequirementCapabilityRelDef reqCapRelation = ElementFactory.getReqCapRelation(vlCapConsumerCompInstId, vlCompInstId, vlCapConsumerOwnerId, vlCompInstId, capType, requirementName, capList, reqList);
726 RestResponse associateInstances = ComponentInstanceRestUtils.associateInstances(reqCapRelation, user, component.getUniqueId(), containerCompType);
727 ResourceRestUtils.checkSuccess(associateInstances);
730 private void addDissociatedToExpected(RequirementCapabilityRelDef requirementDef) {
731 // adding to requirements
732 RequirementAndRelationshipPair relationship = requirementDef.getRelationships().get(0);
733 String type = relationship.getRelationship().getType();
734 String fromId = requirementDef.getFromNode();
735 Map<String, List<RequirementDefinition>> map = removedRequirements.get(fromId);
737 List<RequirementDefinition> list = map.get(type);
738 if (list != null && !list.isEmpty()) {
739 List<RequirementDefinition> reqList = expectedContainerRequirements.get(type);
740 if (reqList == null) {
741 reqList = new ArrayList<>();
742 expectedContainerRequirements.put(type, reqList);
744 reqList.add(list.remove(0));
748 List<CapabilityDefinition> capList = expectedContainerCapabilities.get(type);
750 for (CapabilityDefinition capabilityDefinition : capList) {
751 if (capabilityDefinition.getType().equals(type)) {
752 int minOccurrences = Integer.parseInt(capabilityDefinition.getMinOccurrences()) + 1;
753 String minOccurrencesString = Integer.toString(minOccurrences);
754 capabilityDefinition.setMinOccurrences(minOccurrencesString);
755 if (!capabilityDefinition.getMaxOccurrences().equals("UNBOUNDED")) {
756 int maxOccurrences = Integer.parseInt(capabilityDefinition.getMaxOccurrences()) + 1;
757 String maxOccurrencesString = Integer.toString(maxOccurrences);
758 capabilityDefinition.setMaxOccurrences(maxOccurrencesString);
762 expectedContainerCapabilities.put(type, capList);