Поправил существующий серис, тест для laucnher.
This commit is contained in:
psemenkov 2023-04-20 13:54:15 +03:00
parent 6b2acb66e7
commit 45ca3d9b56
2 changed files with 109 additions and 1 deletions

View file

@ -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<Launcher> launcherMap;
private final Producer<String, Object> kafkaProducer;
private final UserRoleVerification userRoleVerification;
@Autowired
public LauncherService(Consumer<String, Object> kafkaQueue, Producer<String, Object> 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<LauncherCommandRequest> 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) {

View file

@ -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> 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)}<br>
* Тест проверяет создание сущности {@link Planner} в Hazelcast при передаче из Apache Kafka.<br>
* Входной запрос {@link LauncherCommandRequest}:<br>
*/
@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<Object> 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<Object> baseRequestResult = (BaseRequest<Object>) 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);
}
}