From 45ca3d9b56ea81599c8bc498970866c2bffe10d2 Mon Sep 17 00:00:00 2001 From: psemenkov Date: Thu, 20 Apr 2023 13:54:15 +0300 Subject: [PATCH] =?UTF-8?q?http://jira.mfd.msk:8088/browse/CLS-268=20?= =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20=D1=81=D1=83?= =?UTF-8?q?=D1=89=D0=B5=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B8=D0=B9=20?= =?UTF-8?q?=D1=81=D0=B5=D1=80=D0=B8=D1=81,=20=D1=82=D0=B5=D1=81=D1=82=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20laucnher.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scheduler/service/LauncherService.java | 18 +++- .../service/LauncherServiceTest.java | 92 +++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/LauncherServiceTest.java diff --git a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/LauncherService.java b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/LauncherService.java index aa869d0d4..65d2d190d 100644 --- a/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/LauncherService.java +++ b/clearing-parent/scheduler-service/src/main/java/ru/spcex/clearing/scheduler/service/LauncherService.java @@ -7,6 +7,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; import ru.clearing.classes.statics.data.scheduler.Launcher; import ru.spcex.clearing.imdg.IMDGDistributedNames; @@ -14,6 +15,9 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; import ru.spcex.clearing.platform.messaging.service.QueueConsumer; +import ru.spcex.clearing.platform.messaging.service.RequestInfoUpdate; +import ru.spcex.clearing.scheduler.error.ValidationError; +import ru.spcex.clearing.util.security.UserRoleVerification; import ru.spcex.platform.enumeration.Task; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; @@ -27,12 +31,16 @@ public class LauncherService extends QueueConsumer implements InitializingBean { private final Logger log = LoggerFactory.getLogger(getClass()); private final Imdg launcherMap; private final Producer kafkaProducer; + private final UserRoleVerification userRoleVerification; + @Autowired public LauncherService(Consumer kafkaQueue, Producer kafkaProducer, + @Qualifier("userRoleVerificationBean") UserRoleVerification userRoleVerification, ImdgProvider imdgProvider) { - super(kafkaQueue, kafkaProducer); + super(kafkaQueue, null); this.kafkaProducer = kafkaProducer; + this.userRoleVerification = userRoleVerification; this.launcherMap = imdgProvider.getImdg(IMDGDistributedNames.Map_Launcher, Launcher.class); } @@ -47,6 +55,14 @@ public class LauncherService extends QueueConsumer implements InitializingBean { private void newLauncher(BaseRequest userRequest) { LauncherCommandRequest req = userRequest.getRequestPayload(); log.debug("LauncherCommandRequest received"); + + RequestInfoUpdate requestInfoUpdate = userRoleVerification.validateRoleAndGetResult(userRequest); + if (requestInfoUpdate != null) throw new IllegalStateException(ValidationError.UserVerifyDenial.name()); + + if (req.getUserId() == null || !req.getUserId().equals(userRequest.getUserId())) { + throw new IllegalStateException(String.format("User id in request must match: baseRequest.userId = %s, launcherCommandRequest.userId = %s", userRequest.getUserId(), req.getUserId())); + } + Instant created = Instant.now(); Launcher launcher = new Launcher(); if (getEnumByKey(Task.class, req.getTaskName()) == null) { diff --git a/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/LauncherServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/LauncherServiceTest.java new file mode 100644 index 000000000..9a4a508a0 --- /dev/null +++ b/clearing-parent/scheduler-service/src/test/java/ru/specx/clearing/scheduler/service/LauncherServiceTest.java @@ -0,0 +1,92 @@ +package ru.specx.clearing.scheduler.service; + +import org.apache.kafka.clients.consumer.MockConsumer; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import ru.clearing.classes.statics.data.scheduler.Launcher; +import ru.clearing.classes.statics.data.scheduler.Planner; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.domain.Consts; +import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; +import ru.spcex.clearing.scheduler.service.LauncherService; +import ru.spcex.clearing.test.MatcherFactory; +import ru.specx.clearing.scheduler.AbstractServiceTest; + +import javax.annotation.PostConstruct; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.mockito.Mockito.timeout; +import static org.mockito.Mockito.verify; +import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; +import static ru.spcex.clearing.test.TestUtils.*; +import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; +import static ru.spcex.clearing.test.config.ImdgTestConfig.defaultAdminId; +import static ru.spcex.platform.enumeration.Task.accountBlock; + +class LauncherServiceTest extends AbstractServiceTest { + private final Logger log = LoggerFactory.getLogger(getClass()); + + protected static final MatcherFactory.Matcher LAUNCHER_MATCHER = usingIgnoringFieldsComparator("created", "updated"); + private static final int PARTITION = 0; + private static final String TOPIC_LAUNCHER_NEW = Consts.LAUNCHER_NEW; + private static final Long ID = currentID.getAndIncrement(); + + @Autowired + private LauncherService launcherService; + + @PostConstruct + public void init() { + super.init(); + } + + @BeforeEach + public void prepare() { + clearAllInImdg(plannerAllTodayImdg); + } + + /** + * {@link LauncherService#newLauncher(BaseRequest)}(BaseRequest)}
+ * Тест проверяет создание сущности {@link Planner} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link LauncherCommandRequest}:
+ */ + @Test + public void newPlanner() { + //ARRANGE + Launcher launcher = new Launcher(); + launcher.setSenderId(defaultAdminId); + launcher.setTask(accountBlock.getKey()); + + LauncherCommandRequest launcherCommandRequest = new LauncherCommandRequest(); + launcherCommandRequest.setTaskName(launcher.getTask()); + launcherCommandRequest.setUserId(launcher.getSenderId()); + launcherCommandRequest.setCompanyId(newCompanyId); + launcherCommandRequest.setSecurityId(testSecurityId); + + BaseRequest predictableBaseRequest = new BaseRequest<>(); + predictableBaseRequest.setRequestPayload(launcherCommandRequest); + predictableBaseRequest.setId(ID); + predictableBaseRequest.setUserId(launcher.getSenderId()); + predictableBaseRequest.setActionType(ActionType.NEW); + + //ACT + String jsonString = getJsonStringForNew(launcherCommandRequest, ID); + addRecordToKafka((MockConsumer) launcherService.getConsumer(), TOPIC_LAUNCHER_NEW, PARTITION, 0, jsonString); + + //ASSERT + verify(mockProducer, timeout(30_000L).times(1)) + .send(producerRecord.capture()); + + BaseRequest baseRequestResult = (BaseRequest) producerRecord.getValue().value(); + assertEquals("launcher-" + launcher.getTask(), producerRecord.getValue().topic()); + BASE_REQUEST_MATCHER.assertMatch(baseRequestResult, predictableBaseRequest); + + + Launcher launcherReq = launcherMap.getSingleObjectBySQL(String.format("senderId = %s", launcher.getSenderId())); + launcher.setId(launcherReq.getId()); + LAUNCHER_MATCHER.assertMatch(launcherReq, launcher); + } +} \ No newline at end of file