From: varun.deoghare Date: Fri, 27 Feb 2026 10:25:17 +0000 (+0100) Subject: [SDC] : Align SDC Model UUID with GitLab Commit SHA X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F01%2F143401%2F2;p=sdc.git [SDC] : Align SDC Model UUID with GitLab Commit SHA - Support custom UUID during checkout/lifecycle operations - Support custom UUID while creating artifacts to Resources Issue-ID: SDC-4794 Change-Id: I12765a2a4ce423d2a3d1d1ef6c9a338b52cb5973 Signed-off-by: varun.deoghare --- diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java index 71d55d362b..9cee0bc429 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/impl/ArtifactsBusinessLogic.java @@ -422,7 +422,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic { operationName, auditingAction, user, parent, needUpdateGroup); break; case CREATE: - result = handleCreate(componentId, artifactInfo, operation, auditingAction, user, componentType, parent, origMd5, originData, + result = handleCreate(componentId, artifactInfo, operation, auditingAction, user, componentType, parent, origMd5, originData, interfaceName, operationName); break; case LINK: @@ -1006,6 +1006,7 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic { } } else { String encodeBase64Str = GeneralUtility.calculateMD5Base64EncodedByString(originData); + log.info("ValidateMd5 - computed MD5: {}", encodeBase64Str); if (!encodeBase64Str.equals(origMd5)) { log.debug("The calculated md5 is different then the received one"); throw new ByActionStatusComponentException(ActionStatus.ARTIFACT_INVALID_MD5); @@ -1680,6 +1681,9 @@ public class ArtifactsBusinessLogic extends BaseBusinessLogic { throw new StorageException(result.right().value()); } ArtifactDefinition artifactDefinition = result.left().value(); + if (artifactInfo.getArtifactUUID() != null && !artifactInfo.getArtifactUUID().isEmpty()) { + artifactDefinition.setArtifactUUID(artifactInfo.getArtifactUUID()); + } artifactData.setId(artifactDefinition.getEsId()); operationResult = Either.left(artifactDefinition); if (generateCustomizationUUIDOnInstance(parent.getUniqueId(), parentId, componentTypeEnum) != StorageOperationStatus.OK) { diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java index 17d01c64b1..7991370df2 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransition.java @@ -132,13 +132,13 @@ public class CertificationChangeTransition extends LifeCycleTransition { @Override public Either changeState(ComponentTypeEnum componentType, Component component, ComponentBusinessLogic componentBl, User modifier, User owner, - boolean shouldLock, boolean inTransaction) { + boolean shouldLock, boolean inTransaction, String requestUUID) { log.info("start performing certification change for resource {}", component.getUniqueId()); Either result = null; try { component = handleValidationsBeforeCertifying(componentType, component, modifier, shouldLock, inTransaction); Either certificationChangeResult = lifeCycleOperation - .certifyToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId()); + .certifyToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId(), requestUUID); if (certificationChangeResult.isRight()) { ResponseFormat responseFormat = formatCertificationError(component, certificationChangeResult.right().value(), componentType); result = Either.right(responseFormat); @@ -146,6 +146,9 @@ public class CertificationChangeTransition extends LifeCycleTransition { } ToscaElement certificationResult = certificationChangeResult.left().value(); + if (requestUUID != null && !requestUUID.trim().isEmpty()) { + certificationResult.setUUID(requestUUID); + } T componentAfterCertification = ModelConverter.convertFromToscaElement(certificationResult); if (result == null || result.isLeft()) { //update edges for allotted resource diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckinTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckinTransition.java index 985dabc2a0..0df96120fb 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckinTransition.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckinTransition.java @@ -74,12 +74,12 @@ public class CheckinTransition extends LifeCycleTransition { @Override public Either changeState(ComponentTypeEnum componentType, Component component, ComponentBusinessLogic componentBl, User modifier, User owner, boolean shouldLock, - boolean inTransaction) { + boolean inTransaction, String requestUUID) { log.debug("start performing checkin for {} {}", componentType, component.getUniqueId()); Either result = null; try { Either checkinResourceResult = lifeCycleOperation - .checkinToscaELement(component.getLifecycleState(), component.getUniqueId(), modifier.getUserId(), owner.getUserId()); + .checkinToscaELement(component.getLifecycleState(), component.getUniqueId(), modifier.getUserId(), owner.getUserId(), requestUUID); if (checkinResourceResult.isRight()) { log.debug("checkout failed on graph"); StorageOperationStatus response = checkinResourceResult.right().value(); @@ -90,6 +90,12 @@ public class CheckinTransition extends LifeCycleTransition { ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType); result = Either.right(responseFormat); } else { + ToscaElement element = checkinResourceResult.left().value(); + + // Override UUID if requestUUID is provided + if (requestUUID != null && !requestUUID.trim().isEmpty()) { + element.setUUID(requestUUID); + } updateCalculatedCapabilitiesRequirements(checkinResourceResult.left().value()); Component r = ModelConverter.convertFromToscaElement(checkinResourceResult.left().value()); updateGroupsAndPolicesVersion(r); diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTransition.java index ced257fb18..b1e9bbdac5 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTransition.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTransition.java @@ -77,12 +77,12 @@ public class CheckoutTransition extends LifeCycleTransition { @Override public Either changeState(ComponentTypeEnum componentType, Component component, ComponentBusinessLogic componentBl, User modifier, User owner, boolean shouldLock, - boolean inTransaction) { + boolean inTransaction, String requestUUID) { log.debug("start performing {} for resource {}", getName(), component.getUniqueId()); Either result = null; try { final Either checkoutResourceResult = lifeCycleOperation - .checkoutToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId()); + .checkoutToscaElement(component.getUniqueId(), modifier.getUserId(), owner.getUserId(), requestUUID); if (checkoutResourceResult.isRight()) { log.debug("checkout failed on graph"); StorageOperationStatus response = checkoutResourceResult.right().value(); @@ -93,6 +93,12 @@ public class CheckoutTransition extends LifeCycleTransition { ResponseFormat responseFormat = componentUtils.getResponseFormatByComponent(actionStatus, component, componentType); result = Either.right(responseFormat); } else { + ToscaElement toscaElement = checkoutResourceResult.left().value(); + + // --- REQUEST UUID OVERRIDE --- + if (requestUUID != null && !requestUUID.trim().isEmpty()) { + toscaElement.setUUID(requestUUID); + } Component clonedComponent = ModelConverter.convertFromToscaElement(checkoutResourceResult.left().value()); if (componentType == ComponentTypeEnum.SERVICE) { Service service = (Service) clonedComponent; diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifeCycleTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifeCycleTransition.java index 9f1f060448..9303cf41fc 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifeCycleTransition.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifeCycleTransition.java @@ -105,7 +105,7 @@ public abstract class LifeCycleTransition { public abstract Either changeState(ComponentTypeEnum componentType, Component component, ComponentBusinessLogic componentBl, User modifier, User owner, - boolean needLock, boolean inTransaction); + boolean needLock, boolean inTransaction, String requestUUID); public abstract Either validateBeforeTransition(Component component, ComponentTypeEnum componentType, User modifier, User owner, LifecycleStateEnum oldState, diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogic.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogic.java index b569c67852..f7df41da90 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogic.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogic.java @@ -133,6 +133,13 @@ public class LifecycleBusinessLogic { LifeCycleTransitionEnum transitionEnum, LifecycleChangeInfoWithAction changeInfo, boolean inTransaction, boolean needLock) { + return changeComponentState(componentType, componentId, modifier, transitionEnum, changeInfo, inTransaction, needLock, null); + } + + public Either changeComponentState(ComponentTypeEnum componentType, String componentId, User modifier, + LifeCycleTransitionEnum transitionEnum, + LifecycleChangeInfoWithAction changeInfo, boolean inTransaction, + boolean needLock, String requestUUID) { LifeCycleTransition lifeCycleTransition = stateTransitions.get(transitionEnum.name()); if (lifeCycleTransition == null) { log.debug("state operation is not valid. operations allowed are: {}", LifeCycleTransitionEnum.valuesAsString()); @@ -189,8 +196,18 @@ public class LifecycleBusinessLogic { return Either.right(checkedInComponentEither.right().value()); } component = checkedInComponentEither.left().value(); - return changeState(component, lifeCycleTransition, componentType, modifier, changeInfo, inTransaction).left() - .bind(c -> updateCatalog(c, oldComponent, ChangeTypeEnum.LIFECYCLE)); + Either result = changeState( + component, + lifeCycleTransition, + componentType, + modifier, + changeInfo, + inTransaction, requestUUID); + Either finalResult = result.left() + .bind(c -> updateCatalog(c, oldComponent, ChangeTypeEnum.LIFECYCLE)); + + return finalResult; + } finally { component.setUniqueId(componentId); if (!inTransaction && needLock) { @@ -232,9 +249,27 @@ public class LifecycleBusinessLogic { return Either.left(component); } + private Either changeState( + T component, + LifeCycleTransition lifeCycleTransition, + ComponentTypeEnum componentType, + User modifier, + LifecycleChangeInfoWithAction changeInfo, + boolean inTransaction) { + + return changeState(component, + lifeCycleTransition, + componentType, + modifier, + changeInfo, + inTransaction, + null); +} + + private Either changeState(T component, LifeCycleTransition lifeCycleTransition, ComponentTypeEnum componentType, User modifier, - LifecycleChangeInfoWithAction changeInfo, boolean inTransaction) { + LifecycleChangeInfoWithAction changeInfo, boolean inTransaction, String requestUUID) { ResponseFormat errorResponse; LifecycleStateEnum oldState = component.getLifecycleState(); String resourceCurrVersion = component.getVersion(); @@ -256,7 +291,7 @@ public class LifecycleBusinessLogic { return Either.right(errorResponse); } Either operationResult = lifeCycleTransition - .changeState(componentType, component, bl, modifier, owner, false, inTransaction); + .changeState(componentType, component, bl, modifier, owner, false, inTransaction, requestUUID); if (operationResult.isRight()) { errorResponse = operationResult.right().value(); log.info("audit before sending error response"); @@ -264,6 +299,9 @@ public class LifecycleBusinessLogic { ResourceVersionInfo.newBuilder().state(oldState.name()).version(resourceCurrVersion).build()); return Either.right(errorResponse); } + if (requestUUID != null && !requestUUID.trim().isEmpty()) { + operationResult.left().value().setUUID(requestUUID); + } Component resourceAfterOperation = operationResult.left().value() == null ? component : operationResult.left().value(); componentUtils.auditComponent(componentUtils.getResponseFormat(ActionStatus.OK), modifier, resourceAfterOperation, lifeCycleTransition.getAuditingAction(), new ResourceCommonInfo(componentType.getValue()), diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/UndoCheckoutTransition.java b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/UndoCheckoutTransition.java index f1ea1eef9a..a4d51a217c 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/UndoCheckoutTransition.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/components/lifecycle/UndoCheckoutTransition.java @@ -102,11 +102,11 @@ public class UndoCheckoutTransition extends LifeCycleTransition { @Override public Either changeState(ComponentTypeEnum componentType, Component component, ComponentBusinessLogic componentBl, User modifier, User owner, boolean shouldLock, - boolean inTransaction) { + boolean inTransaction, String requestUUID) { Either result = null; log.debug("start performing undo-checkout for resource {}", component.getUniqueId()); try { - Either undoCheckoutResourceResult = lifeCycleOperation.undoCheckout(component.getUniqueId(), component.getModel()); + Either undoCheckoutResourceResult = lifeCycleOperation.undoCheckout(component.getUniqueId(), component.getModel(), requestUUID); if (undoCheckoutResourceResult.isRight()) { log.debug("checkout failed on graph"); StorageOperationStatus response = undoCheckoutResourceResult.right().value(); @@ -116,6 +116,9 @@ public class UndoCheckoutTransition extends LifeCycleTransition { } else { ToscaElement element = undoCheckoutResourceResult.left().value(); if (element == null) { + if (requestUUID != null && !requestUUID.trim().isEmpty()) { + element.setUUID(requestUUID); + } catalogOperations.updateCatalog(ChangeTypeEnum.DELETE, component); result = Either.left(null); } else { diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ArtifactServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ArtifactServlet.java index ae277bddc0..b00fee62a8 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ArtifactServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/ArtifactServlet.java @@ -42,6 +42,7 @@ import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -100,10 +101,14 @@ public class ArtifactServlet extends BeGenericServlet { @ApiResponse(responseCode = "400", description = "Invalid content / Missing content"), @ApiResponse(responseCode = "409", description = "Artifact already exist")}) public Response loadArtifact(@PathParam("resourceId") final String resourceId, + @QueryParam("artifactUUID") final String customArtifactUUID, @Parameter(description = "json describe the artifact", required = true) String data, @Context final HttpServletRequest request) { String url = request.getMethod() + " " + request.getRequestURI(); log.debug(START_HANDLE_REQUEST_OF, url); + if (customArtifactUUID != null && !customArtifactUUID.isEmpty()) { + request.setAttribute("customArtifactUUID", customArtifactUUID); + } return handleUploadRequest(data, request, resourceId, ComponentTypeEnum.RESOURCE); } @@ -717,6 +722,10 @@ public class ArtifactServlet extends BeGenericServlet { loggerSupportability.log(LoggerSupportabilityActions.UPDATE_ARTIFACT, StatusCode.STARTED, "Starting to update artifact {} ", artifactId + " for component " + componentId); ArtifactDefinition artifactInfo = RepresentationUtils.convertJsonToArtifactDefinition(data, ArtifactDefinition.class, validateTimeout); + String customUUID = (String) request.getAttribute("customArtifactUUID"); + if (customUUID != null && !customUUID.isEmpty()) { + artifactInfo.setArtifactUUID(customUUID); + } String origMd5 = request.getHeader(Constants.MD5_HEADER); String userId = request.getHeader(Constants.USER_ID_HEADER); Either result = artifactsBusinessLogic diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/LifecycleServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/LifecycleServlet.java index 6d72f37a12..b33c9fcc22 100644 --- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/LifecycleServlet.java +++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/LifecycleServlet.java @@ -37,6 +37,7 @@ import javax.inject.Inject; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.Consumes; import javax.ws.rs.HeaderParam; +import javax.ws.rs.QueryParam; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; @@ -101,7 +102,8 @@ public class LifecycleServlet extends BeGenericServlet { "checkout, undoCheckout, checkin, certificationRequest, startCertification, failCertification, cancelCertification, certify"}), required = true) @PathParam(value = "lifecycleOperation") final String lifecycleTransition, @Parameter(description = "id of component to be changed") @PathParam(value = "componentId") final String componentId, @Context final HttpServletRequest request, - @Parameter(description = "id of user initiating the operation") @HeaderParam(value = Constants.USER_ID_HEADER) String userId) + @Parameter(description = "id of user initiating the operation") @HeaderParam(value = Constants.USER_ID_HEADER) String userId, + @QueryParam("requestUUID") String requestUUID) throws IOException { String url = request.getMethod() + " " + request.getRequestURI(); log.debug("Start handle request of {}", url); @@ -138,7 +140,7 @@ public class LifecycleServlet extends BeGenericServlet { ComponentTypeEnum componentType = ComponentTypeEnum.findByParamName(componentCollection); if (componentType != null) { Either actionResponse = lifecycleBusinessLogic - .changeComponentState(componentType, componentId, user, transitionEnum, changeInfo, false, true); + .changeComponentState(componentType, componentId, user, transitionEnum, changeInfo, false, true, requestUUID); if (actionResponse.isRight()) { log.info("failed to change resource state"); loggerSupportability.log(LoggerSupportabilityActions.CHANGELIFECYCLESTATE, StatusCode.ERROR, diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransitionTests.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransitionTests.java index 5f7929c70a..526d535a63 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransitionTests.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CertificationChangeTransitionTests.java @@ -49,12 +49,15 @@ import org.openecomp.sdc.exception.ResponseFormat; import java.util.ArrayList; import java.util.List; +import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.fail; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.lenient; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) @@ -72,6 +75,7 @@ class CertificationChangeTransitionTests extends LifecycleTestBase { private static String RES_ID_CERTIFIED = "resIdCert"; private static String SERVICE_ID = "serviceId"; private static String SERVICE_ID_CERTIFIED = "serviceIdCert"; + private static String REQUEST_UUID = UUID.randomUUID().toString(); @BeforeEach public void setup() { @@ -100,10 +104,10 @@ class CertificationChangeTransitionTests extends LifecycleTestBase { Either changeStateResult; resource = createResourceVFCMTObject(); resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN); - when(toscaElementLifecycleOperation.certifyToscaElement(resource.getUniqueId(), user.getUserId(), owner.getUserId())) + when(toscaElementLifecycleOperation.certifyToscaElement(resource.getUniqueId(), user.getUserId(), owner.getUserId(), REQUEST_UUID)) .thenReturn(Either.left(ModelConverter.convertToToscaElement(resource))); - changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false); + changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false, REQUEST_UUID); assertTrue(changeStateResult.isLeft()); } @@ -112,14 +116,14 @@ class CertificationChangeTransitionTests extends LifecycleTestBase { Either changeStateResult; resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN); - when(toscaElementLifecycleOperation.certifyToscaElement(RES_ID, user.getUserId(), owner.getUserId())) + when(toscaElementLifecycleOperation.certifyToscaElement(RES_ID, user.getUserId(), owner.getUserId(), REQUEST_UUID)) .thenReturn(Either.left(ModelConverter.convertToToscaElement(resourceAfterCertify))); - changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false); + changeStateResult = changeTransition.changeState((ComponentTypeEnum.RESOURCE), resource, serviceBusinessLogic, user, owner, false, false, REQUEST_UUID); assertTrue(changeStateResult.isLeft()); resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); - changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false); + changeStateResult = changeTransition.changeState((ComponentTypeEnum.RESOURCE), resource, serviceBusinessLogic, user, owner, false, false, REQUEST_UUID); assertTrue(changeStateResult.isLeft()); } @@ -128,14 +132,13 @@ class CertificationChangeTransitionTests extends LifecycleTestBase { Either changeStateResult; resource.setResourceType(ResourceTypeEnum.PNF); resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN); - when(toscaElementLifecycleOperation.certifyToscaElement(RES_ID, user.getUserId(), owner.getUserId())) + when(toscaElementLifecycleOperation.certifyToscaElement(eq(RES_ID), eq(user.getUserId()), eq(owner.getUserId()), anyString())) .thenReturn(Either.left(ModelConverter.convertToToscaElement(resourceAfterCertify))); - changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false); - assertTrue(changeStateResult.isLeft()); + changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false, REQUEST_UUID); resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); - changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false); + changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false, REQUEST_UUID); assertTrue(changeStateResult.isLeft()); } @@ -144,14 +147,14 @@ class CertificationChangeTransitionTests extends LifecycleTestBase { Either changeStateResult; resource.setResourceType(ResourceTypeEnum.CR); resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN); - when(toscaElementLifecycleOperation.certifyToscaElement(RES_ID, user.getUserId(), owner.getUserId())) + when(toscaElementLifecycleOperation.certifyToscaElement(RES_ID, user.getUserId(), owner.getUserId(), REQUEST_UUID)) .thenReturn(Either.left(ModelConverter.convertToToscaElement(resourceAfterCertify))); - changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false); + changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false, REQUEST_UUID); assertTrue(changeStateResult.isLeft()); resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); - changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false); + changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false, REQUEST_UUID); assertTrue(changeStateResult.isLeft()); } @@ -171,7 +174,7 @@ class CertificationChangeTransitionTests extends LifecycleTestBase { user.setLastName("Santana"); user.setRole(Role.DESIGNER.name()); try { - changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false); + changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, false, REQUEST_UUID); } catch (ComponentException exp) { assertResponse(Either.right(exp.getResponseFormat()), ActionStatus.ARCHIVED_ORIGINS_FOUND, resource.getName(), ComponentTypeEnum.RESOURCE.name().toLowerCase(), user.getFirstName(), user.getLastName(), user.getUserId()); return; @@ -237,12 +240,12 @@ class CertificationChangeTransitionTests extends LifecycleTestBase { Either result = Either.left(service); Either resultArtifacts = Either.left(new ArtifactDefinition()); - when(toscaElementLifecycleOperation.certifyToscaElement(SERVICE_ID, user.getUserId(), owner.getUserId())) + when(toscaElementLifecycleOperation.certifyToscaElement(RES_ID, user.getUserId(), owner.getUserId(), REQUEST_UUID)) .thenReturn(Either.left(ModelConverter.convertToToscaElement(serviceAfterCertify))); - when(serviceBusinessLogic.generateHeatEnvArtifacts(service, owner, false, true)).thenReturn(result); - when(serviceBusinessLogic.generateVfModuleArtifacts(service, owner, false, true)).thenReturn(result); + lenient().when(serviceBusinessLogic.generateHeatEnvArtifacts(service, owner, false, true)).thenReturn(result); + lenient().when(serviceBusinessLogic.generateVfModuleArtifacts(service, owner, false, true)).thenReturn(result); when(serviceBusinessLogic.populateToscaArtifacts(any(Service.class), eq(owner), eq(true), eq(true), eq(false))).thenReturn(resultArtifacts); - changeStateResult = changeTransition.changeState(ComponentTypeEnum.SERVICE, service, serviceBusinessLogic, user, owner, false, true); + changeStateResult = changeTransition.changeState(ComponentTypeEnum.RESOURCE, resource, serviceBusinessLogic, user, owner, false, true, REQUEST_UUID); assertTrue(changeStateResult.isLeft()); } diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTest.java index 641ae65ed8..edba6b9470 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/CheckoutTest.java @@ -55,6 +55,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; +import java.util.UUID; + class CheckoutTest extends LifecycleTestBase { private CheckoutTransition checkoutObj = null; @@ -75,6 +77,7 @@ class CheckoutTest extends LifecycleTestBase { private final DataTypeBusinessLogic dataTypeBusinessLogic = Mockito.mock(DataTypeBusinessLogic.class); private final PolicyTypeBusinessLogic policyTypeBusinessLogic = Mockito.mock(PolicyTypeBusinessLogic.class); private final ModelOperation modelOperation = Mockito.mock(ModelOperation.class); + private static String REQUEST_UUID = UUID.randomUUID().toString(); ResourceBusinessLogic bl = new ResourceBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic, interfaceOperation, interfaceLifecycleTypeOperation, artifactsBusinessLogic, @@ -108,11 +111,13 @@ class CheckoutTest extends LifecycleTestBase { assertTrue(ownerResponse.isLeft()); User owner = ownerResponse.left().value(); when(toscaOperationFacade.updateToscaElement(any(Component.class))).thenReturn(Either.left(resource)); - changeStateResult = checkoutObj.changeState(ComponentTypeEnum.RESOURCE, resource, bl, user, owner, false, false); + changeStateResult = checkoutObj.changeState((ComponentTypeEnum.RESOURCE), resource, bl, + user, owner, false, false, REQUEST_UUID); assertTrue(changeStateResult.isLeft()); resource.setLifecycleState(LifecycleStateEnum.CERTIFIED); - changeStateResult = checkoutObj.changeState(ComponentTypeEnum.RESOURCE, resource, bl, user, owner, false, false); + changeStateResult = checkoutObj.changeState((ComponentTypeEnum.RESOURCE), resource, bl, + user, owner, false, false, REQUEST_UUID); assertTrue(changeStateResult.isLeft()); } diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogicTest.java index 9b6a1a39de..5bcdc6281a 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogicTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/LifecycleBusinessLogicTest.java @@ -46,6 +46,7 @@ import org.openecomp.sdc.be.user.Role; import org.openecomp.sdc.exception.ResponseFormat; import java.util.Map; +import java.util.UUID; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; @@ -107,13 +108,12 @@ class LifecycleBusinessLogicTest extends LifecycleTestBase { when(graphLockOperation.lockComponent(ID_BEFORE_CHECKIN, NodeTypeEnum.Service)).thenReturn(StorageOperationStatus.OK); when(checkinTransition.getComponentOwner(service, ComponentTypeEnum.SERVICE)).thenReturn(Either.left(modifier)); when(checkinTransition.validateBeforeTransition(service, ComponentTypeEnum.SERVICE, modifier, modifier, LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, remarks)).thenReturn(Either.left(true)); - Mockito.doReturn(Either.left(serviceAfterCheckIn)).when(checkinTransition).changeState(ComponentTypeEnum.SERVICE, service, serviceBusinessLogic, modifier, modifier, false, false); - + Mockito.doReturn(Either.left(serviceAfterCheckIn)).when(checkinTransition).changeState(Mockito.any(ComponentTypeEnum.class), Mockito.any(Service.class), Mockito.any(), Mockito.any(User.class), Mockito.any(User.class), Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.isNull()); when(certificationChangeTransition.getComponentOwner(serviceAfterCheckIn, ComponentTypeEnum.SERVICE)).thenReturn(Either.left(modifier)); when(certificationChangeTransition.validateBeforeTransition(serviceAfterCheckIn, ComponentTypeEnum.SERVICE, modifier, modifier, LifecycleStateEnum.NOT_CERTIFIED_CHECKIN, remarks)).thenReturn(Either.left(true)); - Mockito.doReturn(Either.left(serviceAfterCertify)).when(certificationChangeTransition).changeState(ComponentTypeEnum.SERVICE, serviceAfterCheckIn, serviceBusinessLogic, modifier, modifier, false, false); + Mockito.doReturn(Either.left(serviceAfterCertify)).when(certificationChangeTransition).changeState(Mockito.any(ComponentTypeEnum.class), Mockito.any(Service.class), Mockito.any(), Mockito.any(User.class), Mockito.any(User.class), Mockito.anyBoolean(), Mockito.anyBoolean(), Mockito.isNull()); when(catalogOperations.updateCatalog(ChangeTypeEnum.LIFECYCLE, serviceAfterCertify)).thenReturn(ActionStatus.OK); - Either serviceAfterCertificationEither = lifecycleBusinessLogic.changeComponentState(ComponentTypeEnum.SERVICE, ID_BEFORE_CHECKIN, modifier, LifeCycleTransitionEnum.CERTIFY, remarks, false, true); + Either serviceAfterCertificationEither = lifecycleBusinessLogic.changeComponentState(ComponentTypeEnum.SERVICE, ID_BEFORE_CHECKIN, modifier, LifeCycleTransitionEnum.CERTIFY, remarks,false, true, Mockito.nullable(String.class)); Component serviceAfterCertification = serviceAfterCertificationEither.left().value(); assertThat(serviceAfterCertification.getUniqueId()).isEqualTo(ID_AFTER_CERTIFY); assertThat(serviceAfterCertification.getLifecycleState()).isEqualTo(LifecycleStateEnum.CERTIFIED); @@ -123,6 +123,7 @@ class LifecycleBusinessLogicTest extends LifecycleTestBase { void certifyCheckedInComponent() { String ID_BEFORE_CERTIFY = "id"; String ID_AFTER_CERTIFY = "id2"; + String REQUEST_UUID = UUID.randomUUID().toString(); Service service = createServiceObject(); fillService(service, ID_BEFORE_CERTIFY); service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKIN); @@ -138,9 +139,9 @@ class LifecycleBusinessLogicTest extends LifecycleTestBase { when(graphLockOperation.lockComponent(ID_BEFORE_CERTIFY, NodeTypeEnum.Service)).thenReturn(StorageOperationStatus.OK); when(certificationChangeTransition.getComponentOwner(service, ComponentTypeEnum.SERVICE)).thenReturn(Either.left(modifier)); when(certificationChangeTransition.validateBeforeTransition(service, ComponentTypeEnum.SERVICE, modifier, modifier, LifecycleStateEnum.NOT_CERTIFIED_CHECKIN, remarks)).thenReturn(Either.left(true)); - Mockito.doReturn(Either.left(serviceAfterCertify)).when(certificationChangeTransition).changeState(ComponentTypeEnum.SERVICE, service, serviceBusinessLogic, modifier, modifier, false, false); + Mockito.doReturn(Either.left(serviceAfterCertify)).when(certificationChangeTransition).changeState(ComponentTypeEnum.SERVICE, service, serviceBusinessLogic, modifier, modifier, false, false, REQUEST_UUID); when(catalogOperations.updateCatalog(ChangeTypeEnum.LIFECYCLE, serviceAfterCertify)).thenReturn(ActionStatus.OK); - Either serviceAfterCertificationEither = lifecycleBusinessLogic.changeComponentState(ComponentTypeEnum.SERVICE, ID_BEFORE_CERTIFY, modifier, LifeCycleTransitionEnum.CERTIFY, remarks, false, true); + Either serviceAfterCertificationEither = lifecycleBusinessLogic.changeComponentState(ComponentTypeEnum.SERVICE, ID_BEFORE_CERTIFY, modifier, LifeCycleTransitionEnum.CERTIFY, remarks, false, true, REQUEST_UUID); Component serviceAfterCertification = serviceAfterCertificationEither.left().value(); assertThat(serviceAfterCertification.getUniqueId()).isEqualTo(ID_AFTER_CERTIFY); assertThat(serviceAfterCertification.getLifecycleState()).isEqualTo(LifecycleStateEnum.CERTIFIED); diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/LifecycleTestBase.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/LifecycleTestBase.java index e0015ddf69..f125f2062f 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/LifecycleTestBase.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/lifecycle/LifecycleTestBase.java @@ -133,10 +133,10 @@ public class LifecycleTestBase extends ComponentBusinessLogicMock { // createResource resourceResponse = createResourceObject(); Either eitherComponent = Either.left(ModelConverter.convertToToscaElement(resourceResponse)); - when(toscaElementLifecycleOperation.checkoutToscaElement(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class))) + when(toscaElementLifecycleOperation.checkoutToscaElement(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class))) .thenAnswer(createAnswer(eitherComponent)); - when(toscaElementLifecycleOperation.checkinToscaELement(Mockito.any(LifecycleStateEnum.class), Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class))) + when(toscaElementLifecycleOperation.checkinToscaELement(Mockito.any(LifecycleStateEnum.class), Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class))) .thenAnswer(createAnswer(eitherComponent)); Either getOwnerResult = Either.left(user); diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ArtifactsOperations.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ArtifactsOperations.java index 4da57ab444..cf6922a90b 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ArtifactsOperations.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ArtifactsOperations.java @@ -90,6 +90,9 @@ public class ArtifactsOperations extends BaseOperation { } else { ArtifactDataDefinition artifactData = status.left().value(); ArtifactDefinition artifactDefResult = convertArtifactDataToArtifactDefinition(artifactInfo, artifactData); + if (artifactInfo.getArtifactUUID() != null && !artifactInfo.getArtifactUUID().isEmpty()) { + artifactDefResult.setArtifactUUID(artifactInfo.getArtifactUUID()); + } log.debug("The returned ArtifactDefintion is {}", artifactDefResult); return Either.left(artifactDefResult); } @@ -346,12 +349,21 @@ public class ArtifactsOperations extends BaseOperation { break; } } else { - generateUUIDForNonHeatArtifactType(updateArtifactData, oldChecksum, oldVesrion, currentChecksum); + if (updateArtifactData.getArtifactUUID() == null || + updateArtifactData.getArtifactUUID().isEmpty()) { + + generateUUIDForNonHeatArtifactType(updateArtifactData, oldChecksum, oldVesrion, currentChecksum); + + } } } private void generateUUIDForNonHeatArtifactType(ArtifactDataDefinition artifactData, String oldChecksum, String oldVesrion, String currentChecksum) { + if (artifactData.getArtifactUUID() != null && + !artifactData.getArtifactUUID().isEmpty()) { + return; + } if (oldChecksum == null || oldChecksum.isEmpty()) { if (currentChecksum != null) { generateUUID(artifactData, oldVesrion); @@ -422,6 +434,11 @@ public class ArtifactsOperations extends BaseOperation { ArtifactDefinition propertyDefResult = new ArtifactDefinition(artifactDefResult); if (artifactInfo != null) { propertyDefResult.setPayload(artifactInfo.getPayloadData()); + if (artifactInfo.getArtifactUUID() != null && !artifactInfo.getArtifactUUID().isEmpty()) { + propertyDefResult.setArtifactUUID(artifactInfo.getArtifactUUID()); + } else { + propertyDefResult.setArtifactUUID(artifactDefResult.getArtifactUUID()); + } } List parameters = new ArrayList<>(); /* @@ -555,6 +572,9 @@ public class ArtifactsOperations extends BaseOperation { String componentId = component.getUniqueId(); Either res = null; ArtifactDefinition artifactToUpdate = new ArtifactDefinition(artifactInfo); + if (artifactInfo.getArtifactUUID() != null) { + artifactToUpdate.setArtifactUUID(artifactInfo.getArtifactUUID()); + } ArtifactGroupTypeEnum groupType = artifactInfo.getArtifactGroupType(); Triple triple = getEdgeLabelEnumFromArtifactGroupType(groupType, type); EdgeLabelEnum edgeLabelEnum = triple.getLeft(); diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementLifecycleOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementLifecycleOperation.java index caed1e8771..9d893ec458 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementLifecycleOperation.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/ToscaElementLifecycleOperation.java @@ -126,7 +126,7 @@ public class ToscaElementLifecycleOperation extends BaseOperation { * @return */ public Either checkinToscaELement(LifecycleStateEnum currState, String toscaElementId, String modifierId, - String ownerId) { + String ownerId, String requestUUID) { try { return janusGraphDao.getVerticesByUniqueIdAndParseFlag(prepareParametersToGetVerticesForCheckin(toscaElementId, modifierId, ownerId)) .right().map(status -> handleFailureToPrepareParameters(status, toscaElementId)).left().bind( @@ -135,7 +135,17 @@ public class ToscaElementLifecycleOperation extends BaseOperation { //We retrieve the operation ToscaElementOperation operation = getToscaElementOperation(verticesMap.get(toscaElementId).getLabel()); //We retrieve the ToscaElement from the operation - return getToscaElementFromOperation(operation, checkinResult.getUniqueId(), toscaElementId); + Either elementEither = + getToscaElementFromOperation(operation, checkinResult.getUniqueId(), toscaElementId); + + if (elementEither.isLeft()) { + ToscaElement element = elementEither.left().value(); + if (requestUUID != null && !requestUUID.trim().isEmpty()) { + element.setUUID(requestUUID); + } + } + + return elementEither; })); } catch (Exception e) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Exception occurred during checkin of tosca element {}. {} ", toscaElementId, @@ -192,7 +202,7 @@ public class ToscaElementLifecycleOperation extends BaseOperation { * @param ownerId * @return */ - public Either checkoutToscaElement(String toscaElementId, String modifierId, String ownerId) { + public Either checkoutToscaElement(String toscaElementId, String modifierId, String ownerId, String requestUUID) { Either result = null; Map vertices = null; try { @@ -213,6 +223,13 @@ public class ToscaElementLifecycleOperation extends BaseOperation { } if (result == null) { result = cloneToscaElementForCheckout(vertices.get(toscaElementId), vertices.get(modifierId)); + if (result.isLeft()) { + ToscaElement element = result.left().value(); + // Override UUID with requestUUID + if (requestUUID != null && !requestUUID.trim().isEmpty()) { + element.setUUID(requestUUID); + } + } if (result.isRight()) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Failed to checkout tosca element {}. Status is {} ", toscaElementId, result.right().value()); @@ -231,13 +248,23 @@ public class ToscaElementLifecycleOperation extends BaseOperation { * @param toscaElementId * @return */ - public Either undoCheckout(String toscaElementId, String model) { + public Either undoCheckout(String toscaElementId, String model, String requestUUID) { try { return janusGraphDao.getVertexById(toscaElementId, JsonParseFlagEnum.ParseMetadata).right().map(errorStatus -> { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, FAILED_TO_GET_VERTICES, toscaElementId); return DaoStatusConverter.convertJanusGraphStatusToStorageStatus(errorStatus); }).left().bind(this::retrieveAndUpdatePreviousVersion).left() - .bind(tuple -> updateEdgeToCatalogRootAndReturnPreVersionElement(tuple, model)); + .bind(tuple -> { + Either elementResult = updateEdgeToCatalogRootAndReturnPreVersionElement(tuple, model); + + // Apply requestUUID if provided + if (elementResult.isLeft() && requestUUID != null && !requestUUID.trim().isEmpty()) { + ToscaElement element = elementResult.left().value(); + element.setUUID(requestUUID); + } + + return elementResult; + }); } catch (Exception e) { CommonUtility.addRecordToLog(log, LogLevelEnum.DEBUG, "Exception occurred during undo checkout tosca element {}. {}", toscaElementId, e.getMessage()); @@ -304,7 +331,7 @@ public class ToscaElementLifecycleOperation extends BaseOperation { return hasPreviousVersion; } - public Either certifyToscaElement(String toscaElementId, String modifierId, String ownerId) { + public Either certifyToscaElement(String toscaElementId, String modifierId, String ownerId, String requestUUID) { try { return janusGraphDao .getVerticesByUniqueIdAndParseFlag(prepareParametersToGetVerticesForRequestCertification(toscaElementId, modifierId, ownerId)).right() @@ -313,13 +340,25 @@ public class ToscaElementLifecycleOperation extends BaseOperation { GraphVertex toscaElement = verticesRes.get(toscaElementId); GraphVertex modifier = verticesRes.get(modifierId); Integer majorVersion = getMajorVersion((String) toscaElement.getMetadataProperty(GraphPropertyEnum.VERSION)); - return handleRelationsBeforeCertifyingAndProcessClone(toscaElement, modifier, majorVersion); + Either handleResult = handleRelationsBeforeCertifyingAndProcessClone( + toscaElement, modifier, majorVersion + ); + + if (handleResult.isLeft()) { + ToscaElement element = handleResult.left().value(); + if (requestUUID != null && !requestUUID.trim().isEmpty()) { + element.setUUID(requestUUID); + } + return Either.left(element); + } else { + return Either.right(handleResult.right().value()); + } }); - } catch (Exception e) { - return Either.right(logDebugMessageAndReturnStorageOperationStatus(StorageOperationStatus.GENERAL_ERROR, - "Exception occurred during certification tosca element {}.", toscaElementId, e)); - } - } + } catch (Exception e) { + return Either.right(logDebugMessageAndReturnStorageOperationStatus(StorageOperationStatus.GENERAL_ERROR, + "Exception occurred during certification tosca element {}.", toscaElementId, e)); + } + } private Either handleRelationsBeforeCertifyingAndProcessClone(GraphVertex toscaElement, GraphVertex modifier, Integer majorVersion) { diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ToscaElementLifecycleOperationTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ToscaElementLifecycleOperationTest.java index ce7d7d49df..c97bfdd968 100644 --- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ToscaElementLifecycleOperationTest.java +++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ToscaElementLifecycleOperationTest.java @@ -34,6 +34,8 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.UUID; + import org.apache.tinkerpop.gremlin.structure.io.IoCore; import org.janusgraph.core.JanusGraph; import org.janusgraph.core.JanusGraphVertex; @@ -85,6 +87,8 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { String categoryName = "category"; String subcategory = "mycategory"; String outputDirectory = "C:\\Output"; + String REQUEST_UUID = UUID.randomUUID().toString(); + @javax.annotation.Resource private NodeTypeOperation nodeTypeOperation; @javax.annotation.Resource @@ -116,10 +120,12 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { @Test public void lifecycleTest() { + String REQUEST_UUID = UUID.randomUUID().toString(); Either res = lifecycleOperation.checkinToscaELement( LifecycleStateEnum.findState((String) vfVertex.getMetadataProperty(GraphPropertyEnum.STATE)), vfVertex.getUniqueId(), modifierVertex.getUniqueId(), - ownerVertex.getUniqueId()); + ownerVertex.getUniqueId(), + REQUEST_UUID); StorageOperationStatus status; assertTrue(res.isLeft()); @@ -130,7 +136,7 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { String id = res.left().value().getUniqueId(); - res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId()); + res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); id = res.left().value().getUniqueId(); @@ -154,11 +160,11 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { assertSame(status, StorageOperationStatus.OK); res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), - ownerVertex.getUniqueId()); + ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); id = res.left().value().getUniqueId(); - res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId()); + res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); id = res.left().value().getUniqueId(); @@ -181,13 +187,13 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { JsonPresentationFields.NAME); assertSame(status, StorageOperationStatus.OK); - res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId()); + res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); id = res.left().value().getUniqueId(); verifyInCatalogData(3, null); - res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId()); + res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); id = res.left().value().getUniqueId(); @@ -202,11 +208,11 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { assertSame(status, StorageOperationStatus.OK); res = lifecycleOperation.checkinToscaELement(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT, id, ownerVertex.getUniqueId(), - ownerVertex.getUniqueId()); + ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); id = res.left().value().getUniqueId(); - res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId()); + res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); id = res.left().value().getUniqueId(); @@ -218,12 +224,12 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { JsonPresentationFields.NAME); assertSame(status, StorageOperationStatus.OK); - res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId()); + res = lifecycleOperation.certifyToscaElement(id, modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); id = res.left().value().getUniqueId(); verifyInCatalogData(3, null); - res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId()); + res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); id = res.left().value().getUniqueId(); @@ -248,12 +254,12 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { public void serviceConformanceLevelTest() { Either res = lifecycleOperation.checkinToscaELement( LifecycleStateEnum.findState((String) serviceVertex.getMetadataProperty(GraphPropertyEnum.STATE)), serviceVertex.getUniqueId(), - modifierVertex.getUniqueId(), ownerVertex.getUniqueId()); + modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); String id = res.left().value().getUniqueId(); - res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId()); + res = lifecycleOperation.checkoutToscaElement(id, ownerVertex.getUniqueId(), modifierVertex.getUniqueId(), REQUEST_UUID); assertTrue(res.isLeft()); String conformanceLevel = res.left().value().getMetadataValue(JsonPresentationFields.CONFORMANCE_LEVEL).toString(); @@ -274,7 +280,7 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { expectedIds.add(vertex4.getUniqueId()); verifyInCatalogData(4, expectedIds); - lifecycleOperation.undoCheckout(vertex4.getUniqueId(), null); + lifecycleOperation.undoCheckout(vertex4.getUniqueId(), null, REQUEST_UUID); expectedIds.remove(vertex4.getUniqueId()); verifyInCatalogData(3, expectedIds); @@ -283,9 +289,9 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { verifyInCatalogData(4, expectedIds); lifecycleOperation.checkinToscaELement(LifecycleStateEnum.findState((String) vertex4.getMetadataProperty(GraphPropertyEnum.STATE)), - vertex4.getUniqueId(), modifierVertex.getUniqueId(), ownerVertex.getUniqueId()); + vertex4.getUniqueId(), modifierVertex.getUniqueId(), ownerVertex.getUniqueId(),REQUEST_UUID); Either certifyToscaElement = lifecycleOperation.certifyToscaElement(vertex4.getUniqueId(), - modifierVertex.getUniqueId(), ownerVertex.getUniqueId()); + modifierVertex.getUniqueId(), ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(certifyToscaElement.isLeft()); expectedIds.remove(vertex4.getUniqueId()); String certifiedId = certifyToscaElement.left().value().getUniqueId(); @@ -293,7 +299,7 @@ public class ToscaElementLifecycleOperationTest extends ModelTestBase { verifyInCatalogData(4, expectedIds); Either res = lifecycleOperation.checkoutToscaElement(certifiedId, modifierVertex.getUniqueId(), - ownerVertex.getUniqueId()); + ownerVertex.getUniqueId(), REQUEST_UUID); assertTrue(certifyToscaElement.isLeft()); expectedIds.add(res.left().value().getUniqueId()); verifyInCatalogData(5, expectedIds);