This is an automated email from the ASF dual-hosted git repository. lahirujayathilake pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/airavata-custos.git
commit 4bc34b0e5070e73fd80d64736bea1fe357f1bb2d Author: lahiruj <[email protected]> AuthorDate: Fri Mar 27 12:18:49 2026 -0400 add eventId to handler interface and audit logging to packet handlers --- .../handler/amie/DataAccountCreateHandler.java | 14 ++++++++++-- .../handler/amie/DataProjectCreateHandler.java | 14 ++++++++++-- .../amie/InformTransactionCompleteHandler.java | 14 +++++++++++- .../ci/service/handler/amie/NoOpHandler.java | 2 +- .../ci/service/handler/amie/PacketHandler.java | 3 ++- .../ci/service/handler/amie/PacketRouter.java | 7 ++++-- .../handler/amie/RequestAccountCreateHandler.java | 21 ++++++++++++++++-- .../amie/RequestAccountInactivateHandler.java | 15 +++++++++++-- .../amie/RequestAccountReactivateHandler.java | 15 +++++++++++-- .../handler/amie/RequestPersonMergeHandler.java | 14 ++++++++++-- .../handler/amie/RequestProjectCreateHandler.java | 25 ++++++++++++++++++++-- .../amie/RequestProjectInactivateHandler.java | 22 ++++++++++++++++--- .../amie/RequestProjectReactivateHandler.java | 22 ++++++++++++++++--- .../handler/amie/RequestUserModifyHandler.java | 17 +++++++++++++-- .../handler/amie/DataAccountCreateHandlerTest.java | 18 ++++++++++------ .../handler/amie/DataProjectCreateHandlerTest.java | 18 ++++++++++------ .../amie/InformTransactionCompleteHandlerTest.java | 15 ++++++++----- .../ci/service/handler/amie/NoOpHandlerTest.java | 6 +++--- .../ci/service/handler/amie/PacketRouterTest.java | 24 ++++++++++----------- .../amie/RequestAccountCreateHandlerTest.java | 14 +++++++----- .../amie/RequestAccountInactivateHandlerTest.java | 18 ++++++++++------ .../amie/RequestAccountReactivateHandlerTest.java | 16 ++++++++------ .../amie/RequestPersonMergeHandlerTest.java | 18 ++++++++++------ .../amie/RequestProjectCreateHandlerTest.java | 16 ++++++++------ .../amie/RequestProjectInactivateHandlerTest.java | 14 +++++++----- .../amie/RequestProjectReactivateHandlerTest.java | 14 +++++++----- .../handler/amie/RequestUserModifyHandlerTest.java | 18 ++++++++++------ 27 files changed, 305 insertions(+), 109 deletions(-) diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/DataAccountCreateHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/DataAccountCreateHandler.java index 943f26a45..d50d1e45b 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/DataAccountCreateHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/DataAccountCreateHandler.java @@ -20,7 +20,9 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -42,10 +44,12 @@ public class DataAccountCreateHandler implements PacketHandler { private final AmieClient amieClient; private final PersonService personService; + private final AuditService auditService; - public DataAccountCreateHandler(AmieClient amieClient, PersonService personService) { + public DataAccountCreateHandler(AmieClient amieClient, PersonService personService, AuditService auditService) { this.amieClient = amieClient; this.personService = personService; + this.auditService = auditService; } @Override @@ -54,7 +58,7 @@ public class DataAccountCreateHandler implements PacketHandler { } @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) { LOGGER.info("Starting 'data_account_create' handler for packet amie_id [{}].", packetEntity.getAmieId()); JsonNode body = packetJson.path("body"); @@ -69,10 +73,16 @@ public class DataAccountCreateHandler implements PacketHandler { if (dnList.isArray() && !dnList.isEmpty()) { LOGGER.info("Persisting DnList for person [{}] from data_account_create.", personId); personService.persistDnsForPerson(personId, dnList); + auditService.log(packetEntity.getId(), eventId, AuditAction.PERSIST_DNS, + "person", personId, + "Persisted " + dnList.size() + " DN(s) for person " + personId + " from data_account_create"); } // Send the 'inform_transaction_complete' reply to close the transaction. sendSuccessReply(packetEntity.getAmieId()); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent inform_transaction_complete reply for data_account_create"); } private void sendSuccessReply(long packetRecId) { diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/DataProjectCreateHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/DataProjectCreateHandler.java index 2a96d05dc..6ea5db41e 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/DataProjectCreateHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/DataProjectCreateHandler.java @@ -20,7 +20,9 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,10 +42,12 @@ public class DataProjectCreateHandler implements PacketHandler { private final AmieClient amieClient; private final PersonService personService; + private final AuditService auditService; - public DataProjectCreateHandler(AmieClient amieClient, PersonService personService) { + public DataProjectCreateHandler(AmieClient amieClient, PersonService personService, AuditService auditService) { this.amieClient = amieClient; this.personService = personService; + this.auditService = auditService; } @Override @@ -52,7 +56,7 @@ public class DataProjectCreateHandler implements PacketHandler { } @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) { LOGGER.info("Starting 'data_project_create' handler for packet amie_id [{}].", packetEntity.getAmieId()); JsonNode body = packetJson.path("body"); @@ -67,9 +71,15 @@ public class DataProjectCreateHandler implements PacketHandler { if (dnList.isArray() && !dnList.isEmpty()) { LOGGER.info("Persisting DnList for person [{}] from data_project_create.", personId); personService.persistDnsForPerson(personId, dnList); + auditService.log(packetEntity.getId(), eventId, AuditAction.PERSIST_DNS, + "person", personId, + "Persisted " + dnList.size() + " DN(s) for person " + personId + " from data_project_create"); } sendSuccessReply(packetEntity.getAmieId()); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent inform_transaction_complete reply for data_project_create"); } private void sendSuccessReply(long packetRecId) { diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/InformTransactionCompleteHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/InformTransactionCompleteHandler.java index e9b5b555c..8300c2be7 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/InformTransactionCompleteHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/InformTransactionCompleteHandler.java @@ -19,7 +19,9 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -34,13 +36,19 @@ public class InformTransactionCompleteHandler implements PacketHandler { private static final Logger LOGGER = LoggerFactory.getLogger(InformTransactionCompleteHandler.class); + private final AuditService auditService; + + public InformTransactionCompleteHandler(AuditService auditService) { + this.auditService = auditService; + } + @Override public String supportsType() { return "inform_transaction_complete"; } @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) { // This packet is purely informational and completes the transaction JsonNode body = packetJson.path("body"); String statusCode = body.path("StatusCode").asText("Unknown"); @@ -48,5 +56,9 @@ public class InformTransactionCompleteHandler implements PacketHandler { LOGGER.info("Received 'inform_transaction_complete' for packet amie_id [{}]. Status: [{}], Message: [{}]. Transaction is now closed.", packetEntity.getAmieId(), statusCode, message); + + auditService.log(packetEntity.getId(), eventId, AuditAction.TRANSACTION_COMPLETE, + "packet", packetEntity.getId(), + "Transaction complete received. Status: " + statusCode); } } diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/NoOpHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/NoOpHandler.java index d391c9fb8..bf0ce659f 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/NoOpHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/NoOpHandler.java @@ -33,7 +33,7 @@ public class NoOpHandler implements PacketHandler { private static final Logger LOGGER = LoggerFactory.getLogger(NoOpHandler.class); @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) { LOGGER.info("NoOpHandler executed for packet with amie_packet_rec_id [{}] and type [{}]. No action taken.", packetEntity.getAmieId(), packetEntity.getType()); // No operations } diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/PacketHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/PacketHandler.java index 16ef89cf9..a984204ab 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/PacketHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/PacketHandler.java @@ -28,9 +28,10 @@ public interface PacketHandler { * * @param packetJson The raw packet content * @param packetEntity The entity for the packet + * @param eventId The processing event ID for audit logging * @throws Exception if processing fails */ - void handle(JsonNode packetJson, PacketEntity packetEntity) throws Exception; + void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) throws Exception; /** * Define which packet type this handler is responsible for. diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/PacketRouter.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/PacketRouter.java index 8b7716d88..8b9255ea4 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/PacketRouter.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/PacketRouter.java @@ -20,6 +20,7 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.slf4j.MDC; import org.springframework.stereotype.Component; import java.util.List; @@ -43,11 +44,13 @@ public class PacketRouter { * * @param packetJson The raw packet content * @param packetEntity The Packet entity + * @param eventId The processing event ID for audit logging * @throws Exception if the handler logic fails */ - public void route(JsonNode packetJson, PacketEntity packetEntity) throws Exception { + public void route(JsonNode packetJson, PacketEntity packetEntity, String eventId) throws Exception { PacketHandler handler = findHandlerFor(packetEntity.getType()); - handler.handle(packetJson, packetEntity); + MDC.put("handler", handler.getClass().getSimpleName()); + handler.handle(packetJson, packetEntity, eventId); } private PacketHandler findHandlerFor(String packetType) { diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountCreateHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountCreateHandler.java index 3aa10ea3b..a43017720 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountCreateHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountCreateHandler.java @@ -22,7 +22,9 @@ import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.ClusterAccountEntity; import org.apache.custos.access.ci.service.model.PersonEntity; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.service.ProjectService; @@ -52,15 +54,17 @@ public class RequestAccountCreateHandler implements PacketHandler { private final UserAccountService userAccountService; private final ProjectService projectService; private final ProjectMembershipService membershipService; + private final AuditService auditService; public RequestAccountCreateHandler(AmieClient amieClient, PersonService personService, UserAccountService userAccountService, ProjectService projectService, - ProjectMembershipService membershipService) { + ProjectMembershipService membershipService, AuditService auditService) { this.amieClient = amieClient; this.personService = personService; this.userAccountService = userAccountService; this.projectService = projectService; this.membershipService = membershipService; + this.auditService = auditService; } @Override @@ -69,7 +73,7 @@ public class RequestAccountCreateHandler implements PacketHandler { } @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) throws Exception { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) throws Exception { LOGGER.info("Starting 'request_account_create' handler for packet amie_id [{}].", packetEntity.getAmieId()); JsonNode body = packetJson.path("body"); @@ -84,17 +88,30 @@ public class RequestAccountCreateHandler implements PacketHandler { PersonEntity person = personService.findOrCreatePersonFromPacket(body); LOGGER.info("Ensured person record exists with local ID [{}].", person.getId()); + auditService.log(packetEntity.getId(), eventId, AuditAction.CREATE_PERSON, + "person", person.getId(), + "Created person '" + person.getFirstName() + " " + person.getLastName() + "'"); ClusterAccountEntity clusterAccount = userAccountService.provisionClusterAccount(person); LOGGER.info("Provisioned new cluster account [{}] with username [{}].", clusterAccount.getId(), clusterAccount.getUsername()); + auditService.log(packetEntity.getId(), eventId, AuditAction.CREATE_ACCOUNT, + "account", clusterAccount.getId(), + "Created cluster account '" + clusterAccount.getUsername() + "' for person " + person.getId()); projectService.createOrFindProject(projectId, grantNumber); LOGGER.info("Ensured project [{}] exists.", projectId); membershipService.createMembership(projectId, clusterAccount.getId(), "USER"); LOGGER.info("Created 'USER' membership for cluster account [{}] on project [{}].", clusterAccount.getId(), projectId); + auditService.log(packetEntity.getId(), eventId, AuditAction.CREATE_MEMBERSHIP, + "membership", clusterAccount.getId(), + "Created USER membership for account " + clusterAccount.getId() + " on project " + projectId); sendSuccessReply(packetEntity.getAmieId(), body, person.getId(), clusterAccount.getUsername()); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent notify_account_create reply for project " + projectId); + LOGGER.info("Successfully completed 'request_account_create' handler and sent reply for packet amie_id [{}].", packetEntity.getAmieId()); } diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountInactivateHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountInactivateHandler.java index 03dffbf53..842036cd0 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountInactivateHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountInactivateHandler.java @@ -20,7 +20,9 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -45,10 +47,13 @@ public class RequestAccountInactivateHandler implements PacketHandler { private final AmieClient amieClient; private final ProjectMembershipService membershipService; + private final AuditService auditService; - public RequestAccountInactivateHandler(AmieClient amieClient, ProjectMembershipService membershipService) { + public RequestAccountInactivateHandler(AmieClient amieClient, ProjectMembershipService membershipService, + AuditService auditService) { this.amieClient = amieClient; this.membershipService = membershipService; + this.auditService = auditService; } @Override @@ -57,7 +62,7 @@ public class RequestAccountInactivateHandler implements PacketHandler { } @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) { LOGGER.info("Starting 'request_account_inactivate' handler for packet amie_id [{}].", packetEntity.getAmieId()); JsonNode body = packetJson.path("body"); @@ -69,8 +74,14 @@ public class RequestAccountInactivateHandler implements PacketHandler { LOGGER.info("Packet validated. Inactivating account for user [{}] on project [{}].", personId, projectId); membershipService.inactivateMembershipsByPersonAndProject(projectId, personId); + auditService.log(packetEntity.getId(), eventId, AuditAction.INACTIVATE_MEMBERSHIP, + "person", personId, + "Inactivated membership for person " + personId + " on project " + projectId); sendSuccessReply(packetEntity.getAmieId(), body); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent notify_account_inactivate reply for person " + personId + " on project " + projectId); LOGGER.info("Successfully completed 'request_account_inactivate' handler and sent reply for packet amie_id [{}].", packetEntity.getAmieId()); } diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountReactivateHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountReactivateHandler.java index 28103a5a2..ecd87b557 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountReactivateHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountReactivateHandler.java @@ -19,7 +19,9 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -44,10 +46,13 @@ public class RequestAccountReactivateHandler implements PacketHandler { private final AmieClient amieClient; private final ProjectMembershipService membershipService; + private final AuditService auditService; - public RequestAccountReactivateHandler(AmieClient amieClient, ProjectMembershipService membershipService) { + public RequestAccountReactivateHandler(AmieClient amieClient, ProjectMembershipService membershipService, + AuditService auditService) { this.amieClient = amieClient; this.membershipService = membershipService; + this.auditService = auditService; } @Override @@ -56,7 +61,7 @@ public class RequestAccountReactivateHandler implements PacketHandler { } @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) { LOGGER.info("Starting 'request_account_reactivate' handler for packet amie_id [{}].", packetEntity.getAmieId()); JsonNode body = packetJson.path("body"); @@ -68,8 +73,14 @@ public class RequestAccountReactivateHandler implements PacketHandler { LOGGER.info("Packet validated. Reactivating account for user [{}] on project [{}].", personId, projectId); membershipService.reactivateMembershipsByPersonAndProject(projectId, personId); + auditService.log(packetEntity.getId(), eventId, AuditAction.REACTIVATE_MEMBERSHIP, + "person", personId, + "Reactivated membership for person " + personId + " on project " + projectId); sendSuccessReply(packetEntity.getAmieId(), body); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent notify_account_reactivate reply for person " + personId + " on project " + projectId); LOGGER.info("Successfully completed 'request_account_reactivate' handler and sent reply for packet amie_id [{}].", packetEntity.getAmieId()); } diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestPersonMergeHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestPersonMergeHandler.java index 3f539e2c5..9e1240baa 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestPersonMergeHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestPersonMergeHandler.java @@ -20,7 +20,9 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,10 +49,12 @@ public class RequestPersonMergeHandler implements PacketHandler { private final AmieClient amieClient; private final PersonService personService; + private final AuditService auditService; - public RequestPersonMergeHandler(AmieClient amieClient, PersonService personService) { + public RequestPersonMergeHandler(AmieClient amieClient, PersonService personService, AuditService auditService) { this.amieClient = amieClient; this.personService = personService; + this.auditService = auditService; } @Override @@ -60,7 +64,7 @@ public class RequestPersonMergeHandler implements PacketHandler { @Override @Transactional - public void handle(JsonNode packetJson, PacketEntity packetEntity) { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) { LOGGER.info("Starting 'request_person_merge' handler for packet amie_id [{}].", packetEntity.getAmieId()); JsonNode body = packetJson.path("body"); @@ -75,8 +79,14 @@ public class RequestPersonMergeHandler implements PacketHandler { retiringPersonLocalId, retiringPersonGlobalId, survivingPersonLocalId, survivingPersonGlobalId); personService.mergePersons(survivingPersonLocalId, retiringPersonLocalId); + auditService.log(packetEntity.getId(), eventId, AuditAction.MERGE_PERSONS, + "person", survivingPersonLocalId, + "Merged person " + retiringPersonLocalId + " into " + survivingPersonLocalId); sendSuccessReply(packetEntity.getAmieId()); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent inform_transaction_complete reply for person merge"); } private void sendSuccessReply(long packetRecId) { diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectCreateHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectCreateHandler.java index a2fb6d8b9..d312db3f4 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectCreateHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectCreateHandler.java @@ -24,7 +24,9 @@ import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.ClusterAccountEntity; import org.apache.custos.access.ci.service.model.PersonEntity; import org.apache.custos.access.ci.service.model.ProjectEntity; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.service.ProjectService; @@ -50,14 +52,17 @@ public class RequestProjectCreateHandler implements PacketHandler { private final UserAccountService userAccountService; private final ProjectService projectService; private final ProjectMembershipService membershipService; + private final AuditService auditService; public RequestProjectCreateHandler(AmieClient amieClient, PersonService personService, UserAccountService userAccountService, - ProjectService projectService, ProjectMembershipService membershipService) { + ProjectService projectService, ProjectMembershipService membershipService, + AuditService auditService) { this.amieClient = amieClient; this.personService = personService; this.userAccountService = userAccountService; this.projectService = projectService; this.membershipService = membershipService; + this.auditService = auditService; } @Override @@ -66,7 +71,7 @@ public class RequestProjectCreateHandler implements PacketHandler { } @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) throws Exception { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) throws Exception { LOGGER.info("Starting 'request_project_create' handler for packet amie_id [{}].", packetEntity.getAmieId()); // TODO - refactor the sanity checks into Packet Router (if all the packets follow the same style) @@ -96,18 +101,34 @@ public class RequestProjectCreateHandler implements PacketHandler { ObjectNode piAsUserNode = createPiAsUserNode(body); PersonEntity piPerson = personService.findOrCreatePersonFromPacket(piAsUserNode); LOGGER.info("PI person record exists with local ID [{}].", piPerson.getId()); + auditService.log(packetEntity.getId(), eventId, AuditAction.CREATE_PERSON, + "person", piPerson.getId(), + "Created person '" + piPerson.getFirstName() + " " + piPerson.getLastName() + "'"); ClusterAccountEntity piClusterAccount = userAccountService.provisionClusterAccount(piPerson); LOGGER.info("Provisioned cluster account for PI [{}] with username [{}].", piPerson.getId(), piClusterAccount.getUsername()); + auditService.log(packetEntity.getId(), eventId, AuditAction.CREATE_ACCOUNT, + "account", piClusterAccount.getId(), + "Created cluster account '" + piClusterAccount.getUsername() + "' for person " + piPerson.getId()); String localProjectId = "PRJ-" + grantNumber; ProjectEntity project = projectService.createOrFindProject(localProjectId, grantNumber); LOGGER.info("Project [{}] exists.", project.getId()); + auditService.log(packetEntity.getId(), eventId, AuditAction.CREATE_PROJECT, + "project", project.getId(), + "Created project '" + project.getId() + "' for grant " + grantNumber); membershipService.createMembership(project.getId(), piClusterAccount.getId(), "PI"); LOGGER.info("Created 'PI' membership for cluster account [{}] on project [{}].", piClusterAccount.getId(), project.getId()); + auditService.log(packetEntity.getId(), eventId, AuditAction.CREATE_MEMBERSHIP, + "membership", piClusterAccount.getId(), + "Created PI membership for account " + piClusterAccount.getId() + " on project " + project.getId()); sendSuccessReply(packetEntity.getAmieId(), body, project.getId(), piPerson.getId(), piClusterAccount.getUsername()); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent notify_project_create reply for grant " + grantNumber); + LOGGER.info("Successfully completed 'request_project_create' handler and sent reply for packet amie_id [{}].", packetEntity.getAmieId()); } diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectInactivateHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectInactivateHandler.java index 542418f83..710170329 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectInactivateHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectInactivateHandler.java @@ -20,7 +20,9 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.service.ProjectService; import org.slf4j.Logger; @@ -42,11 +44,14 @@ public class RequestProjectInactivateHandler implements PacketHandler { private final AmieClient amieClient; private final ProjectService projectService; private final ProjectMembershipService membershipService; + private final AuditService auditService; - public RequestProjectInactivateHandler(AmieClient amieClient, ProjectService projectService, ProjectMembershipService membershipService) { + public RequestProjectInactivateHandler(AmieClient amieClient, ProjectService projectService, + ProjectMembershipService membershipService, AuditService auditService) { this.amieClient = amieClient; this.projectService = projectService; this.membershipService = membershipService; + this.auditService = auditService; } @Override @@ -55,7 +60,7 @@ public class RequestProjectInactivateHandler implements PacketHandler { } @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) { LOGGER.info("Starting 'request_project_inactivate' handler for packet amie_id [{}].", packetEntity.getAmieId()); JsonNode body = packetJson.path("body"); @@ -65,10 +70,21 @@ public class RequestProjectInactivateHandler implements PacketHandler { LOGGER.info("Packet validated. ProjectID to inactivate: [{}].", projectId); projectService.inactivateProject(projectId); + LOGGER.info("Inactivated project [{}].", projectId); + auditService.log(packetEntity.getId(), eventId, AuditAction.INACTIVATE_PROJECT, + "project", projectId, + "Inactivated project " + projectId); + membershipService.inactivateAllMembershipsForProject(projectId); - LOGGER.info("Inactivated project [{}] and all associated memberships.", projectId); + LOGGER.info("Inactivated all memberships for project [{}].", projectId); + auditService.log(packetEntity.getId(), eventId, AuditAction.INACTIVATE_MEMBERSHIP, + "project", projectId, + "Inactivated all memberships for project " + projectId); sendSuccessReply(packetEntity.getAmieId(), body); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent notify_project_inactivate reply for project " + projectId); LOGGER.info("Successfully completed 'request_project_inactivate' handler and sent reply for packet amie_id [{}].", packetEntity.getAmieId()); } diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectReactivateHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectReactivateHandler.java index e842418a8..c2ec02b68 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectReactivateHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectReactivateHandler.java @@ -20,7 +20,9 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.service.ProjectService; import org.slf4j.Logger; @@ -45,11 +47,14 @@ public class RequestProjectReactivateHandler implements PacketHandler { private final AmieClient amieClient; private final ProjectService projectService; private final ProjectMembershipService membershipService; + private final AuditService auditService; - public RequestProjectReactivateHandler(AmieClient amieClient, ProjectService projectService, ProjectMembershipService membershipService) { + public RequestProjectReactivateHandler(AmieClient amieClient, ProjectService projectService, + ProjectMembershipService membershipService, AuditService auditService) { this.amieClient = amieClient; this.projectService = projectService; this.membershipService = membershipService; + this.auditService = auditService; } @Override @@ -59,7 +64,7 @@ public class RequestProjectReactivateHandler implements PacketHandler { @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) { LOGGER.info("Starting 'request_project_reactivate' handler for packet amie_id [{}].", packetEntity.getAmieId()); JsonNode body = packetJson.path("body"); @@ -69,10 +74,21 @@ public class RequestProjectReactivateHandler implements PacketHandler { LOGGER.info("Packet validated. ProjectID to reactivate: [{}].", projectId); projectService.reactivateProject(projectId); + LOGGER.info("Reactivated project [{}].", projectId); + auditService.log(packetEntity.getId(), eventId, AuditAction.REACTIVATE_PROJECT, + "project", projectId, + "Reactivated project " + projectId); + membershipService.reactivatePiMembership(projectId); - LOGGER.info("Reactivated project [{}] and PI membership(s).", projectId); + LOGGER.info("Reactivated PI membership(s) for project [{}].", projectId); + auditService.log(packetEntity.getId(), eventId, AuditAction.REACTIVATE_MEMBERSHIP, + "project", projectId, + "Reactivated PI membership(s) for project " + projectId); sendSuccessReply(packetEntity.getAmieId(), body); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent notify_project_reactivate reply for project " + projectId); LOGGER.info("Successfully completed 'request_project_reactivate' handler and sent reply for packet amie_id [{}].", packetEntity.getAmieId()); } diff --git a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestUserModifyHandler.java b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestUserModifyHandler.java index 8c04270e4..397e248ad 100644 --- a/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestUserModifyHandler.java +++ b/allocations/access-ci-service/src/main/java/org/apache/custos/access/ci/service/handler/amie/RequestUserModifyHandler.java @@ -20,7 +20,9 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; +import org.apache.custos.access.ci.service.model.amie.AuditAction; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -40,10 +42,12 @@ public class RequestUserModifyHandler implements PacketHandler { private final AmieClient amieClient; private final PersonService personService; + private final AuditService auditService; - public RequestUserModifyHandler(AmieClient amieClient, PersonService personService) { + public RequestUserModifyHandler(AmieClient amieClient, PersonService personService, AuditService auditService) { this.amieClient = amieClient; this.personService = personService; + this.auditService = auditService; } @Override @@ -52,7 +56,7 @@ public class RequestUserModifyHandler implements PacketHandler { } @Override - public void handle(JsonNode packetJson, PacketEntity packetEntity) throws Exception { + public void handle(JsonNode packetJson, PacketEntity packetEntity, String eventId) throws Exception { LOGGER.info("Starting 'request_user_modify' handler for packet amie_id [{}].", packetEntity.getAmieId()); JsonNode body = packetJson.path("body"); @@ -62,15 +66,24 @@ public class RequestUserModifyHandler implements PacketHandler { switch (actionType.toLowerCase()) { case "replace": personService.replaceFromModifyPacket(body); + auditService.log(packetEntity.getId(), eventId, AuditAction.UPDATE_PERSON, + "person", body.path("UserGlobalID").asText(null), + "Updated person via request_user_modify (replace)"); break; case "delete": personService.deleteFromModifyPacket(body); + auditService.log(packetEntity.getId(), eventId, AuditAction.DELETE_PERSON, + "person", body.path("UserGlobalID").asText(null), + "Deleted person via request_user_modify (delete)"); break; default: throw new IllegalArgumentException("Unsupported ActionType: " + actionType); } sendSuccessReply(packetEntity.getAmieId()); + auditService.log(packetEntity.getId(), eventId, AuditAction.REPLY_SENT, + "packet", packetEntity.getId(), + "Sent inform_transaction_complete reply for request_user_modify (" + actionType + ")"); } private void sendSuccessReply(long packetRecId) { diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/DataAccountCreateHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/DataAccountCreateHandlerTest.java index ded76306d..190bbd7f2 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/DataAccountCreateHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/DataAccountCreateHandlerTest.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.apache.custos.access.ci.service.util.JsonTestUtils; import org.junit.jupiter.api.BeforeEach; @@ -52,12 +53,15 @@ class DataAccountCreateHandlerTest { @Mock private PersonService personService; + @Mock + private AuditService auditService; + private DataAccountCreateHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new DataAccountCreateHandler(amieClient, personService); + handler = new DataAccountCreateHandler(amieClient, personService, auditService); objectMapper = new ObjectMapper(); } @@ -75,7 +79,7 @@ class DataAccountCreateHandlerTest { packetEntity.setAmieId(233497918L); packetEntity.setType("data_account_create"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); @SuppressWarnings("unchecked") ArgumentCaptor<Map<String, Object>> replyCaptor = ArgumentCaptor.forClass(Map.class); @@ -104,7 +108,7 @@ class DataAccountCreateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("ProjectID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' must not be empty"); } @@ -114,7 +118,7 @@ class DataAccountCreateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("PersonID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'PersonID' must not be empty"); } @@ -124,7 +128,7 @@ class DataAccountCreateHandlerTest { JsonNode packetJson = createValidPacketJson(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); verify(personService, never()).persistDnsForPerson(any(), any()); //noinspection unchecked @@ -136,7 +140,7 @@ class DataAccountCreateHandlerTest { JsonNode packetJson = createPacketJsonWithDnList(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); // Verify personService.persistDnsForPerson was called with the correct personId ArgumentCaptor<String> personIdCaptor = ArgumentCaptor.forClass(String.class); @@ -159,7 +163,7 @@ class DataAccountCreateHandlerTest { packetEntity.setAmieId(233497918L); packetEntity.setType("data_account_create"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); ArgumentCaptor<JsonNode> dnListCaptor = ArgumentCaptor.forClass(JsonNode.class); verify(personService).persistDnsForPerson(eq("test-user-person-123"), dnListCaptor.capture()); diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/DataProjectCreateHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/DataProjectCreateHandlerTest.java index a1f911fdf..0bf7191c5 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/DataProjectCreateHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/DataProjectCreateHandlerTest.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.apache.custos.access.ci.service.util.JsonTestUtils; import org.junit.jupiter.api.BeforeEach; @@ -52,12 +53,15 @@ class DataProjectCreateHandlerTest { @Mock private PersonService personService; + @Mock + private AuditService auditService; + private DataProjectCreateHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new DataProjectCreateHandler(amieClient, personService); + handler = new DataProjectCreateHandler(amieClient, personService, auditService); objectMapper = new ObjectMapper(); } @@ -75,7 +79,7 @@ class DataProjectCreateHandlerTest { packetEntity.setAmieId(233497909L); packetEntity.setType("data_project_create"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); @SuppressWarnings("unchecked") ArgumentCaptor<Map<String, Object>> replyCaptor = ArgumentCaptor.forClass(Map.class); @@ -104,7 +108,7 @@ class DataProjectCreateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("ProjectID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' must not be empty"); } @@ -114,7 +118,7 @@ class DataProjectCreateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("PersonID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'PersonID' must not be empty"); } @@ -124,7 +128,7 @@ class DataProjectCreateHandlerTest { JsonNode packetJson = createValidPacketJson(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); verify(personService, never()).persistDnsForPerson(any(), any()); //noinspection unchecked @@ -136,7 +140,7 @@ class DataProjectCreateHandlerTest { JsonNode packetJson = createPacketJsonWithDnList(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); ArgumentCaptor<String> personIdCaptor = ArgumentCaptor.forClass(String.class); ArgumentCaptor<JsonNode> dnListCaptor = ArgumentCaptor.forClass(JsonNode.class); @@ -158,7 +162,7 @@ class DataProjectCreateHandlerTest { packetEntity.setAmieId(233497909L); packetEntity.setType("data_project_create"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); ArgumentCaptor<JsonNode> dnListCaptor = ArgumentCaptor.forClass(JsonNode.class); verify(personService).persistDnsForPerson(eq("test-person-456"), dnListCaptor.capture()); diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/InformTransactionCompleteHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/InformTransactionCompleteHandlerTest.java index 6abb349dc..e34622045 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/InformTransactionCompleteHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/InformTransactionCompleteHandlerTest.java @@ -21,11 +21,13 @@ package org.apache.custos.access.ci.service.handler.amie; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.util.JsonTestUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import static org.assertj.core.api.Assertions.assertThat; @@ -35,12 +37,15 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; @Tag("unit") class InformTransactionCompleteHandlerTest { + @Mock + private AuditService auditService; + private InformTransactionCompleteHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new InformTransactionCompleteHandler(); + handler = new InformTransactionCompleteHandler(auditService); objectMapper = new ObjectMapper(); } @@ -57,7 +62,7 @@ class InformTransactionCompleteHandlerTest { packetEntity.setAmieId(233497913L); packetEntity.setType("inform_transaction_complete"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); } @Test @@ -65,7 +70,7 @@ class InformTransactionCompleteHandlerTest { JsonNode packetJson = createMinimalPacketJson(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); } @Test @@ -73,7 +78,7 @@ class InformTransactionCompleteHandlerTest { PacketEntity packetEntity = createPacketEntity(); //noinspection DataFlowIssue - assertThatThrownBy(() -> handler.handle(null, packetEntity)).isInstanceOf(NullPointerException.class); + assertThatThrownBy(() -> handler.handle(null, packetEntity, null)).isInstanceOf(NullPointerException.class); } @Test @@ -81,7 +86,7 @@ class InformTransactionCompleteHandlerTest { JsonNode packetJson = createValidPacketJson(); //noinspection DataFlowIssue - assertThatThrownBy(() -> handler.handle(packetJson, null)).isInstanceOf(NullPointerException.class); + assertThatThrownBy(() -> handler.handle(packetJson, null, null)).isInstanceOf(NullPointerException.class); } private JsonNode createValidPacketJson() { diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/NoOpHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/NoOpHandlerTest.java index e91572e6d..ec8739346 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/NoOpHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/NoOpHandlerTest.java @@ -55,7 +55,7 @@ class NoOpHandlerTest { packetEntity.setAmieId(12345L); packetEntity.setType("unknown_type"); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); } @Test @@ -64,7 +64,7 @@ class NoOpHandlerTest { packetEntity.setAmieId(12345L); packetEntity.setType("unknown_type"); - handler.handle(null, packetEntity); + handler.handle(null, packetEntity, null); } @Test @@ -72,6 +72,6 @@ class NoOpHandlerTest { JsonNode packetJson = objectMapper.createObjectNode(); //noinspection DataFlowIssue - assertThatThrownBy(() -> handler.handle(packetJson, null)).isInstanceOf(NullPointerException.class); + assertThatThrownBy(() -> handler.handle(packetJson, null, null)).isInstanceOf(NullPointerException.class); } } diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/PacketRouterTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/PacketRouterTest.java index c1d788bee..b94800ebb 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/PacketRouterTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/PacketRouterTest.java @@ -63,10 +63,10 @@ class PacketRouterTest { PacketEntity packetEntity = new PacketEntity(); packetEntity.setType("request_project_create"); - router.route(packetJson, packetEntity); + router.route(packetJson, packetEntity, null); - verify(mockHandler1).handle(packetJson, packetEntity); - verify(mockHandler2, never()).handle(any(), any()); + verify(mockHandler1).handle(packetJson, packetEntity, null); + verify(mockHandler2, never()).handle(any(), any(), any()); } @Test @@ -75,10 +75,10 @@ class PacketRouterTest { PacketEntity packetEntity = new PacketEntity(); packetEntity.setType("request_account_create"); - router.route(packetJson, packetEntity); + router.route(packetJson, packetEntity, null); - verify(mockHandler2).handle(packetJson, packetEntity); - verify(mockHandler1, never()).handle(any(), any()); + verify(mockHandler2).handle(packetJson, packetEntity, null); + verify(mockHandler1, never()).handle(any(), any(), any()); } @Test @@ -87,10 +87,10 @@ class PacketRouterTest { PacketEntity packetEntity = new PacketEntity(); packetEntity.setType("unknown_packet_type"); - router.route(packetJson, packetEntity); + router.route(packetJson, packetEntity, null); - verify(mockHandler1, never()).handle(any(), any()); - verify(mockHandler2, never()).handle(any(), any()); + verify(mockHandler1, never()).handle(any(), any(), any()); + verify(mockHandler2, never()).handle(any(), any(), any()); } @Test @@ -100,9 +100,9 @@ class PacketRouterTest { PacketEntity packetEntity = new PacketEntity(); packetEntity.setType("REQUEST_PROJECT_CREATE"); - router.route(packetJson, packetEntity); + router.route(packetJson, packetEntity, null); - verify(mockHandler1).handle(packetJson, packetEntity); - verify(mockHandler2, never()).handle(any(), any()); + verify(mockHandler1).handle(packetJson, packetEntity, null); + verify(mockHandler2, never()).handle(any(), any(), any()); } } diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountCreateHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountCreateHandlerTest.java index 9e6da05f0..17340443e 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountCreateHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountCreateHandlerTest.java @@ -24,6 +24,7 @@ import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.ClusterAccountEntity; import org.apache.custos.access.ci.service.model.PersonEntity; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.service.ProjectService; @@ -65,12 +66,15 @@ class RequestAccountCreateHandlerTest { @Mock private ProjectMembershipService membershipService; + @Mock + private AuditService auditService; + private RequestAccountCreateHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new RequestAccountCreateHandler(amieClient, personService, userAccountService, projectService, membershipService); + handler = new RequestAccountCreateHandler(amieClient, personService, userAccountService, projectService, membershipService, auditService); objectMapper = new ObjectMapper(); } @@ -93,7 +97,7 @@ class RequestAccountCreateHandlerTest { when(personService.findOrCreatePersonFromPacket(any(JsonNode.class))).thenReturn(personEntity); when(userAccountService.provisionClusterAccount(personEntity)).thenReturn(createClusterAccount()); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); verify(personService).findOrCreatePersonFromPacket(any(JsonNode.class)); verify(userAccountService).provisionClusterAccount(personEntity); @@ -130,7 +134,7 @@ class RequestAccountCreateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("ProjectID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' (the local project ID) must not be empty"); } @@ -140,7 +144,7 @@ class RequestAccountCreateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("GrantNumber"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'GrantNumber' must not be empty"); } @@ -150,7 +154,7 @@ class RequestAccountCreateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("UserGlobalID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'UserGlobalID' must not be empty"); } diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountInactivateHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountInactivateHandlerTest.java index fe96a2aa6..b79d01b76 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountInactivateHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountInactivateHandlerTest.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.util.JsonTestUtils; import org.junit.jupiter.api.BeforeEach; @@ -51,12 +52,15 @@ class RequestAccountInactivateHandlerTest { @Mock private ProjectMembershipService membershipService; + @Mock + private AuditService auditService; + private RequestAccountInactivateHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new RequestAccountInactivateHandler(amieClient, membershipService); + handler = new RequestAccountInactivateHandler(amieClient, membershipService, auditService); objectMapper = new ObjectMapper(); } @@ -74,7 +78,7 @@ class RequestAccountInactivateHandlerTest { packetEntity.setAmieId(233497919L); packetEntity.setType("request_account_inactivate"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); verify(membershipService).inactivateMembershipsByPersonAndProject("test-project-456", "test-user-person-123"); @@ -104,7 +108,7 @@ class RequestAccountInactivateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("ProjectID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' must not be empty"); } @@ -114,7 +118,7 @@ class RequestAccountInactivateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("PersonID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'PersonID' must not be empty"); } @@ -124,7 +128,7 @@ class RequestAccountInactivateHandlerTest { JsonNode packetJson = createPacketJsonWithEmptyField("ProjectID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' must not be empty"); } @@ -134,7 +138,7 @@ class RequestAccountInactivateHandlerTest { JsonNode packetJson = createPacketJsonWithEmptyField("PersonID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'PersonID' must not be empty"); } @@ -144,7 +148,7 @@ class RequestAccountInactivateHandlerTest { JsonNode packetJson = createPacketJsonWithResourceList(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); verify(membershipService).inactivateMembershipsByPersonAndProject("PRJ-TEST123", "person-123"); //noinspection unchecked diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountReactivateHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountReactivateHandlerTest.java index 38be5ac0b..bc508bc23 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountReactivateHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestAccountReactivateHandlerTest.java @@ -22,6 +22,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.util.JsonTestUtils; import org.junit.jupiter.api.BeforeEach; @@ -50,12 +51,15 @@ class RequestAccountReactivateHandlerTest { @Mock private ProjectMembershipService membershipService; + @Mock + private AuditService auditService; + private RequestAccountReactivateHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new RequestAccountReactivateHandler(amieClient, membershipService); + handler = new RequestAccountReactivateHandler(amieClient, membershipService, auditService); objectMapper = new ObjectMapper(); } @@ -73,7 +77,7 @@ class RequestAccountReactivateHandlerTest { packetEntity.setAmieId(233497923L); packetEntity.setType("request_account_reactivate"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); verify(membershipService).reactivateMembershipsByPersonAndProject("test-project-456", "test-user-person-123"); @@ -103,7 +107,7 @@ class RequestAccountReactivateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("ProjectID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' must not be empty"); } @@ -113,7 +117,7 @@ class RequestAccountReactivateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("PersonID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'PersonID' must not be empty"); } @@ -123,7 +127,7 @@ class RequestAccountReactivateHandlerTest { JsonNode packetJson = createValidPacketJson(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); verify(membershipService).reactivateMembershipsByPersonAndProject("test-project-456", "test-user-person-123"); verify(amieClient).replyToPacket(eq(12345L), any(Map.class)); @@ -134,7 +138,7 @@ class RequestAccountReactivateHandlerTest { JsonNode packetJson = createPacketJsonWithResourceList(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); verify(membershipService).reactivateMembershipsByPersonAndProject("test-project-456", "test-user-person-123"); verify(amieClient).replyToPacket(eq(12345L), any(Map.class)); diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestPersonMergeHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestPersonMergeHandlerTest.java index 3bb6e9df6..532e3b690 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestPersonMergeHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestPersonMergeHandlerTest.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.apache.custos.access.ci.service.util.JsonTestUtils; import org.junit.jupiter.api.BeforeEach; @@ -51,12 +52,15 @@ class RequestPersonMergeHandlerTest { @Mock private PersonService personService; + @Mock + private AuditService auditService; + private RequestPersonMergeHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new RequestPersonMergeHandler(amieClient, personService); + handler = new RequestPersonMergeHandler(amieClient, personService, auditService); objectMapper = new ObjectMapper(); } @@ -74,7 +78,7 @@ class RequestPersonMergeHandlerTest { packetEntity.setAmieId(233497920L); packetEntity.setType("request_person_merge"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); verify(personService).mergePersons("test-person-primary-123", "test-person-secondary-456"); @@ -105,7 +109,7 @@ class RequestPersonMergeHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("KeepPersonID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'KeepPersonID' (the surviving user's local ID) must not be empty"); } @@ -115,7 +119,7 @@ class RequestPersonMergeHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("DeletePersonID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'DeletePersonID' (the retiring user's local ID) must not be empty"); } @@ -125,7 +129,7 @@ class RequestPersonMergeHandlerTest { JsonNode packetJson = createPacketJsonWithEmptyField("KeepPersonID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'KeepPersonID' (the surviving user's local ID) must not be empty"); } @@ -135,7 +139,7 @@ class RequestPersonMergeHandlerTest { JsonNode packetJson = createPacketJsonWithEmptyField("DeletePersonID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'DeletePersonID' (the retiring user's local ID) must not be empty"); } @@ -145,7 +149,7 @@ class RequestPersonMergeHandlerTest { JsonNode packetJson = createPacketJsonWithGlobalIds(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); verify(personService).mergePersons("person-surviving", "person-retiring"); //noinspection unchecked diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectCreateHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectCreateHandlerTest.java index 18d47cd3a..eb825e236 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectCreateHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectCreateHandlerTest.java @@ -26,6 +26,7 @@ import org.apache.custos.access.ci.service.model.ClusterAccountEntity; import org.apache.custos.access.ci.service.model.PersonEntity; import org.apache.custos.access.ci.service.model.ProjectEntity; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.service.ProjectService; @@ -68,12 +69,15 @@ class RequestProjectCreateHandlerTest { @Mock private ProjectMembershipService membershipService; + @Mock + private AuditService auditService; + private RequestProjectCreateHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new RequestProjectCreateHandler(amieClient, personService, userAccountService, projectService, membershipService); + handler = new RequestProjectCreateHandler(amieClient, personService, userAccountService, projectService, membershipService, auditService); objectMapper = new ObjectMapper(); } @@ -98,7 +102,7 @@ class RequestProjectCreateHandlerTest { when(userAccountService.provisionClusterAccount(personEntity)).thenReturn(createClusterAccount()); when(projectService.createOrFindProject(anyString(), anyString())).thenReturn(projectEntity); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); verify(personService).findOrCreatePersonFromPacket(any(JsonNode.class)); verify(userAccountService).provisionClusterAccount(personEntity); verify(projectService).createOrFindProject(anyString(), anyString()); @@ -134,7 +138,7 @@ class RequestProjectCreateHandlerTest { void handle_withNullPacketJson_shouldThrowException() { PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(null, packetEntity)) + assertThatThrownBy(() -> handler.handle(null, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("packetJson is null"); } @@ -144,7 +148,7 @@ class RequestProjectCreateHandlerTest { JsonNode packetJson = objectMapper.createObjectNode(); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessage("packetJson.body is missing"); } @@ -154,7 +158,7 @@ class RequestProjectCreateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("GrantNumber"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'GrantNumber' must not be empty"); } @@ -164,7 +168,7 @@ class RequestProjectCreateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("PiGlobalID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'PiGlobalID' must not be empty"); } diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectInactivateHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectInactivateHandlerTest.java index 4fd32379c..4d1d84303 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectInactivateHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectInactivateHandlerTest.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.service.ProjectService; import org.apache.custos.access.ci.service.util.JsonTestUtils; @@ -55,12 +56,15 @@ class RequestProjectInactivateHandlerTest { @Mock private ProjectMembershipService membershipService; + @Mock + private AuditService auditService; + private RequestProjectInactivateHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new RequestProjectInactivateHandler(amieClient, projectService, membershipService); + handler = new RequestProjectInactivateHandler(amieClient, projectService, membershipService, auditService); objectMapper = new ObjectMapper(); } @@ -78,7 +82,7 @@ class RequestProjectInactivateHandlerTest { packetEntity.setAmieId(233497911L); packetEntity.setType("request_project_inactivate"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); verify(projectService).inactivateProject("test-project-123"); verify(membershipService).inactivateAllMembershipsForProject("test-project-123"); @@ -109,7 +113,7 @@ class RequestProjectInactivateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingProjectIdField(); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' must not be empty"); } @@ -119,7 +123,7 @@ class RequestProjectInactivateHandlerTest { JsonNode packetJson = createPacketJsonWithEmptyField("ProjectID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' must not be empty"); } @@ -129,7 +133,7 @@ class RequestProjectInactivateHandlerTest { JsonNode packetJson = createPacketJsonWithOptionalFields(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); verify(projectService).inactivateProject("PRJ-TEST123"); verify(membershipService).inactivateAllMembershipsForProject("PRJ-TEST123"); diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectReactivateHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectReactivateHandlerTest.java index 2a5fddc02..48d9af5e8 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectReactivateHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestProjectReactivateHandlerTest.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.ProjectMembershipService; import org.apache.custos.access.ci.service.service.ProjectService; import org.apache.custos.access.ci.service.util.JsonTestUtils; @@ -55,12 +56,15 @@ class RequestProjectReactivateHandlerTest { @Mock private ProjectMembershipService membershipService; + @Mock + private AuditService auditService; + private RequestProjectReactivateHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new RequestProjectReactivateHandler(amieClient, projectService, membershipService); + handler = new RequestProjectReactivateHandler(amieClient, projectService, membershipService, auditService); objectMapper = new ObjectMapper(); } @@ -78,7 +82,7 @@ class RequestProjectReactivateHandlerTest { packetEntity.setAmieId(233497914L); packetEntity.setType("request_project_reactivate"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); verify(projectService).reactivateProject("test-project-123"); verify(membershipService).reactivatePiMembership("test-project-123"); @@ -109,7 +113,7 @@ class RequestProjectReactivateHandlerTest { JsonNode packetJson = createPacketJsonWithMissingProjectIdField(); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' must not be empty"); } @@ -119,7 +123,7 @@ class RequestProjectReactivateHandlerTest { JsonNode packetJson = createPacketJsonWithEmptyField("ProjectID"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ProjectID' must not be empty"); } @@ -129,7 +133,7 @@ class RequestProjectReactivateHandlerTest { JsonNode packetJson = createPacketJsonWithOptionalFields(); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); verify(projectService).reactivateProject("PRJ-TEST123"); verify(membershipService).reactivatePiMembership("PRJ-TEST123"); diff --git a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestUserModifyHandlerTest.java b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestUserModifyHandlerTest.java index a992b4543..e998b2b3e 100644 --- a/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestUserModifyHandlerTest.java +++ b/allocations/access-ci-service/src/test/java/org/apache/custos/access/ci/service/handler/amie/RequestUserModifyHandlerTest.java @@ -23,6 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import org.apache.custos.access.ci.service.client.amie.AmieClient; import org.apache.custos.access.ci.service.model.amie.PacketEntity; +import org.apache.custos.access.ci.service.service.AuditService; import org.apache.custos.access.ci.service.service.PersonService; import org.apache.custos.access.ci.service.util.JsonTestUtils; import org.junit.jupiter.api.BeforeEach; @@ -51,12 +52,15 @@ class RequestUserModifyHandlerTest { @Mock private PersonService personService; + @Mock + private AuditService auditService; + private RequestUserModifyHandler handler; private ObjectMapper objectMapper; @BeforeEach void setUp() { - handler = new RequestUserModifyHandler(amieClient, personService); + handler = new RequestUserModifyHandler(amieClient, personService, auditService); objectMapper = new ObjectMapper(); } @@ -74,7 +78,7 @@ class RequestUserModifyHandlerTest { packetEntity.setAmieId(233497921L); packetEntity.setType("request_user_modify"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); verify(personService).replaceFromModifyPacket(any(JsonNode.class)); @@ -109,7 +113,7 @@ class RequestUserModifyHandlerTest { packetEntity.setAmieId(233497922L); packetEntity.setType("request_user_modify"); - handler.handle(incomingPacket, packetEntity); + handler.handle(incomingPacket, packetEntity, null); verify(personService).deleteFromModifyPacket(any(JsonNode.class)); @@ -140,7 +144,7 @@ class RequestUserModifyHandlerTest { JsonNode packetJson = createValidPacketJson("REPLACE"); PacketEntity packetEntity = createPacketEntity(); - handler.handle(packetJson, packetEntity); + handler.handle(packetJson, packetEntity, null); verify(personService).replaceFromModifyPacket(any(JsonNode.class)); //noinspection unchecked @@ -152,7 +156,7 @@ class RequestUserModifyHandlerTest { JsonNode packetJson = createPacketJsonWithMissingField("ActionType"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ActionType' must not be empty (replace|delete)"); } @@ -162,7 +166,7 @@ class RequestUserModifyHandlerTest { JsonNode packetJson = createPacketJsonWithEmptyField("ActionType"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("'ActionType' must not be empty (replace|delete)"); } @@ -172,7 +176,7 @@ class RequestUserModifyHandlerTest { JsonNode packetJson = createValidPacketJson("unsupported"); PacketEntity packetEntity = createPacketEntity(); - assertThatThrownBy(() -> handler.handle(packetJson, packetEntity)) + assertThatThrownBy(() -> handler.handle(packetJson, packetEntity, null)) .isInstanceOf(IllegalArgumentException.class) .hasMessageContaining("Unsupported ActionType: unsupported"); }
