From a53232a773442f55ddf0c17627e319bcc7044226 Mon Sep 17 00:00:00 2001 From: psemenkov Date: Tue, 24 Jan 2023 17:59:03 +0300 Subject: [PATCH] Adding StatementServiceServiceTest. --- .../balance/config/KafkaTestConfig.java | 3 - .../balance/service/AbstractServiceTest.java | 7 +- .../balance/service/Sdf01ExecutorTest.java | 2 - .../balance/service/Sdf08ServiceTest.java | 60 +++++++----- .../balance/service/Sdf09ExecutorTest.java | 3 - .../balance/service/Sdf16ExecutorTest.java | 3 - .../service/StatementServiceServiceTest.java | 92 +++++++++++++++++++ .../clearing/balance/utils/ImapEvent.java | 2 +- 8 files changed, 136 insertions(+), 36 deletions(-) create mode 100644 clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/StatementServiceServiceTest.java diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/config/KafkaTestConfig.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/config/KafkaTestConfig.java index 32708e256..b56fef2b1 100644 --- a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/config/KafkaTestConfig.java +++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/config/KafkaTestConfig.java @@ -5,16 +5,13 @@ import org.apache.kafka.clients.consumer.OffsetResetStrategy; import org.apache.kafka.clients.producer.MockProducer; import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.common.serialization.StringSerializer; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Scope; import ru.spcex.clearing.platform.messaging.serialization.JsonSerializer; @Configuration public class KafkaTestConfig { - @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) @Bean public MockConsumer createTestConsumer() { return new MockConsumer<>(OffsetResetStrategy.EARLIEST); diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/AbstractServiceTest.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/AbstractServiceTest.java index c31c8adae..2c2414a86 100644 --- a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/AbstractServiceTest.java +++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/AbstractServiceTest.java @@ -18,6 +18,7 @@ import ru.clearing.classes.statics.data.statement.Statement; import ru.spcex.clearing.balance.config.*; import ru.spcex.clearing.balance.utils.MatcherFactory; import ru.spcex.clearing.imdg.IMDGDistributedNames; +import ru.spcex.clearing.platform.messaging.service.RequestInfo; import ru.spcex.platform.enumeration.*; import ru.spcex.platform.imdg.api.ImdgProvider; import ru.spcex.platform.imdg.iml.hazelcast.adapter.ImdgHazelcast; @@ -36,9 +37,11 @@ import static ru.spcex.clearing.balance.utils.MatcherFactory.usingIgnoringFields Sdf08Service.class, Sdf09Executor.class, Sdf16Executor.class, + StatementService.class, LoggingService.class, MessagesConfig.class, ValidationConfig.class, + SdfExecutorsConfig.class, BalanceImdgTestConfig.class, KafkaSenderConfig.class, KafkaTestConfig.class}) @@ -47,7 +50,7 @@ public abstract class AbstractServiceTest { protected static final MatcherFactory.Matcher RESULT_MATCHER = usingIgnoringFieldsComparator("account.created", "account.updated", "account.clearingDate", "generationId"); protected static final MatcherFactory.Matcher STATEMENT_MATCHER = usingIgnoringFieldsComparator("created", "comment", "outSDfId", "updated", "id"); - protected final static DateTimeFormatter datFormatter = DateTimeFormatter.ofPattern("dd.MM.yy"); + protected final static DateTimeFormatter datFormatter = DateTimeFormatter.ofPattern("dd.MM.yy hh:mm"); protected final Long accountIdNew = 10L; protected final Long addresseeIdNew = 2L; protected final String deal = "111111111"; @@ -60,6 +63,7 @@ public abstract class AbstractServiceTest { protected IMap companySymbolsMap; protected IMap accountMap; protected ImdgHazelcast statementImdg; + protected ImdgHazelcast requestInfoImdg; protected ImdgHazelcast sdf02Imdg; protected ImdgHazelcast sdf08Imdg; protected ImdgHazelcast sdf10Imdg; @@ -74,6 +78,7 @@ public abstract class AbstractServiceTest { ImdgHazelcast companyImdg = (ImdgHazelcast) hazelcast.getImdg(IMDGDistributedNames.Map_Company, Company.class); ImdgHazelcast companySymbolsImdg = (ImdgHazelcast) hazelcast.getImdg(IMDGDistributedNames.Map_CompanySymbols, CompanySymbols.class); ImdgHazelcast accountImdg = (ImdgHazelcast) hazelcast.getImdg(IMDGDistributedNames.Map_Account, Account.class); + requestInfoImdg = (ImdgHazelcast) hazelcast.getImdg(IMDGDistributedNames.Map_RequestInfo, RequestInfo.class); statementImdg = (ImdgHazelcast) hazelcast.getImdg(IMDGDistributedNames.Map_Statement, Statement.class); sdf02Imdg = (ImdgHazelcast) hazelcast.getImdg(IMDGDistributedNames.Map_SDf02, SDf02.class); sdf08Imdg = (ImdgHazelcast) hazelcast.getImdg(IMDGDistributedNames.Map_SDf08, SDf08.class); diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf01ExecutorTest.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf01ExecutorTest.java index c1692a862..231a81318 100644 --- a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf01ExecutorTest.java +++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf01ExecutorTest.java @@ -19,7 +19,6 @@ import ru.spcex.platform.utils.number.BigDecimalUtil; import javax.annotation.PostConstruct; import java.time.Instant; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.Collections; import java.util.Map; @@ -28,7 +27,6 @@ import static ru.spcex.clearing.balance.utils.MatcherFactory.usingIgnoringFields class Sdf01ExecutorTest extends AbstractServiceTest { private static final MatcherFactory.Matcher SDF_02_MATCHER = usingIgnoringFieldsComparator("created", "comment", "outSDfId", "generationTime", "generationId", "id"); - private final static DateTimeFormatter datFormatter = DateTimeFormatter.ofPattern("dd.MM.yy"); private final String acc = "123456789"; private final Long ID = 1L; @Autowired diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf08ServiceTest.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf08ServiceTest.java index de5476e5c..afb4fd05d 100644 --- a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf08ServiceTest.java +++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf08ServiceTest.java @@ -1,5 +1,7 @@ package ru.spcex.clearing.balance.service; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; import com.hazelcast.core.IMap; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; @@ -7,9 +9,11 @@ import org.apache.kafka.common.TopicPartition; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.sdf.SDf08; -import ru.clearing.classes.statics.data.statement.Statement; import ru.spcex.clearing.balance.utils.ImapEvent; -import ru.spcex.clearing.platform.messaging.domain.cud.balance.StatementRequest; +import ru.spcex.clearing.platform.messaging.domain.ActionType; +import ru.spcex.clearing.platform.messaging.domain.BaseRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfo; +import ru.spcex.clearing.platform.messaging.service.Status; import ru.spcex.platform.enumeration.Task; import javax.annotation.PostConstruct; @@ -17,17 +21,20 @@ import java.time.Instant; import java.util.Collection; import java.util.Collections; import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertTrue; class Sdf08ServiceTest extends AbstractServiceTest { -// private static final MatcherFactory.Matcher SDF_08_MATCHER = usingIgnoringFieldsComparator("created", "comment", "outSDfId", "generationTime", "generationId", "id"); + // private static final MatcherFactory.Matcher SDF_08_MATCHER = usingIgnoringFieldsComparator("created", "comment", "outSDfId", "generationTime", "generationId", "id"); private static final String TOPIC = Task.getAllBalance.topic(); private static final int PARTITION = 1; - - @Autowired - private MockConsumer mockConsumer; - + private static final Long limit = 300L; @Autowired Sdf08Service sdf08Service; + @Autowired + private MockConsumer mockConsumer; @PostConstruct void init() { @@ -36,26 +43,28 @@ class Sdf08ServiceTest extends AbstractServiceTest { /** * {@link Sdf08Service}
- * Тест проверяет генерацию сущностей {@link Result}, {@link Statement}, {@link SDf08}
+ * Тест проверяет генерацию сущностей {@link RequestInfo}
* Входные параметры:
- * accountId - {@link StatementRequest}: new StatementRequest()
- * addresseeId - {@link Collection}
- * addresseeId - {@link SDf08}
- * {@link SDf08#datetime} - текущее время
- * {@link SDf08#generationId} - id
- * {@link SDf08#generationTime} - текущее время
+ * {@link BaseRequest} - new BaseRequest<>()
*/ @Test void newSDf08() throws InterruptedException { - IMap sdf08Map = sdf08Imdg.getMap(); - SDf08 sDf08 = new SDf08(); - sDf08.setNumber(idGenerator.nextId().toString()); - Instant now = Instant.now(); - sDf08.setDatetime(String.valueOf(now.toEpochMilli())); - sDf08.setGenerationTime(now); - sDf08.setGenerationId(idGenerator.nextId()); - sdf08Imdg.insert(sDf08); + BaseRequest baseNewRequest = new BaseRequest<>(); + baseNewRequest.setId(currentId.getAndIncrement()); + baseNewRequest.setActionType(ActionType.NEW); + String jsonBaseNewRequest; + ObjectMapper objectMapper = new ObjectMapper(); + try { + jsonBaseNewRequest = objectMapper.writeValueAsString(baseNewRequest); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + IMap sdf08Map = sdf08Imdg.getMap(); + IMap resultsRequestMap = requestInfoImdg.getMap(); + ImapEvent imapEvent = new ImapEvent(resultsRequestMap); + int count = sdf08Map.size(); + long timeNow = Instant.now().toEpochMilli(); //KAFKA mockConsumer.schedulePollTask(() -> { mockConsumer.rebalance(Collections.singletonList(new TopicPartition(TOPIC, PARTITION))); @@ -68,8 +77,13 @@ class Sdf08ServiceTest extends AbstractServiceTest { mockConsumer.updateBeginningOffsets(startOffsets); //waiting for hazelcast map item updates - ImapEvent imapEvent = new ImapEvent(sdf08Map); imapEvent.waitWhenHappened(); + Collection resultsRequestInfo = requestInfoImdg.getCollectionObjectsByFieldValues(Map.of("status", Status.Processing)); + RequestInfo requestInfo = resultsRequestInfo.stream().max((entry1, entry2) -> entry1.getId() > entry2.getId() ? 1 : -1).get(); + Long diffRequestInfo = requestInfo.getCreated().toEpochMilli() - timeNow; + + assertEquals(1, sdf08Map.size() - count); + assertTrue(limit.compareTo(diffRequestInfo) > 0); } } \ No newline at end of file diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf09ExecutorTest.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf09ExecutorTest.java index f437702c6..db4a23ebd 100644 --- a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf09ExecutorTest.java +++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf09ExecutorTest.java @@ -20,7 +20,6 @@ import javax.annotation.PostConstruct; import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.Collections; import java.util.Map; @@ -29,8 +28,6 @@ import static ru.spcex.clearing.balance.utils.MatcherFactory.usingIgnoringFields class Sdf09ExecutorTest extends AbstractServiceTest { private static final MatcherFactory.Matcher SDF_10_MATCHER = usingIgnoringFieldsComparator("created", "comment", "outSDfId", "generationTime", "generationId", "id"); - - private final static DateTimeFormatter datFormatter = DateTimeFormatter.ofPattern("dd.MM.yy"); private final Long ID = 2L; private final String acc = "213456789"; @Autowired diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf16ExecutorTest.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf16ExecutorTest.java index 7276950be..c475d007d 100644 --- a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf16ExecutorTest.java +++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/Sdf16ExecutorTest.java @@ -20,7 +20,6 @@ import javax.annotation.PostConstruct; import java.math.BigDecimal; import java.time.Instant; import java.time.LocalDate; -import java.time.format.DateTimeFormatter; import java.util.Collection; import java.util.Collections; import java.util.Map; @@ -29,8 +28,6 @@ import static ru.spcex.clearing.balance.utils.MatcherFactory.usingIgnoringFields class Sdf16ExecutorTest extends AbstractServiceTest { private static final MatcherFactory.Matcher SDF_17_MATCHER = usingIgnoringFieldsComparator("created", "comment", "outSDfId", "generationTime", "generationId", "id"); - - private final static DateTimeFormatter datFormatter = DateTimeFormatter.ofPattern("dd.MM.yy"); private final Long ID = 3L; private final String acc = "323456789"; @Autowired diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/StatementServiceServiceTest.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/StatementServiceServiceTest.java new file mode 100644 index 000000000..a9924be94 --- /dev/null +++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/service/StatementServiceServiceTest.java @@ -0,0 +1,92 @@ +package ru.spcex.clearing.balance.service; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.hazelcast.core.IMap; +import org.apache.kafka.clients.consumer.ConsumerRecord; +import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.common.TopicPartition; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import ru.spcex.clearing.balance.utils.ImapEvent; +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.balance.StatementRequest; +import ru.spcex.clearing.platform.messaging.service.RequestInfo; +import ru.spcex.clearing.platform.messaging.service.Status; + +import javax.annotation.PostConstruct; +import java.time.Instant; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static ru.spcex.platform.enumeration.SdfTable.SDF_01; + +class StatementServiceServiceTest extends AbstractServiceTest { + // private static final MatcherFactory.Matcher SDF_08_MATCHER = usingIgnoringFieldsComparator("created", "comment", "outSDfId", "generationTime", "generationId", "id"); + private static final String TOPIC = Consts.STATEMENT_PROCESS; + private static final int PARTITION = 1; + private static final Long groupId = 111L; + private static final Long limit = 300L; + @Autowired + StatementService statementService; + @Autowired + private MockConsumer mockConsumer; + + @PostConstruct + void init() { + super.init(); + } + + /** + * {@link StatementService}
+ * Тест проверяет генерацию сущностей {@link RequestInfo}
+ * Входные параметры:
+ * {@link StatementRequest}: new StatementRequest()
+ * {@link StatementRequest#table} - SDF_01
+ */ + @Test + void process() throws InterruptedException { + StatementRequest statementRequest = new StatementRequest(); + statementRequest.setGroupId(groupId); + statementRequest.setTable(SDF_01); + BaseRequest baseRequest = new BaseRequest<>(); + baseRequest.setRequestPayload(statementRequest); + baseRequest.setId(currentId.getAndIncrement()); + baseRequest.setActionType(ActionType.NEW); + String jsonBaseNewRequest; + ObjectMapper objectMapper = new ObjectMapper(); + try { + jsonBaseNewRequest = objectMapper.writeValueAsString(baseRequest); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + IMap resultsRequestMap = requestInfoImdg.getMap(); + ImapEvent imapEvent = new ImapEvent(resultsRequestMap); + long timeNow = Instant.now().toEpochMilli(); + //KAFKA + mockConsumer.schedulePollTask(() -> { + mockConsumer.rebalance(Collections.singletonList(new TopicPartition(TOPIC, PARTITION))); + mockConsumer.addRecord(new ConsumerRecord<>(TOPIC, PARTITION, 0, "key", jsonBaseNewRequest)); + }); + + HashMap startOffsets = new HashMap<>(); + TopicPartition tp = new TopicPartition(TOPIC, PARTITION); + startOffsets.put(tp, 0L); + mockConsumer.updateBeginningOffsets(startOffsets); + + //waiting for hazelcast map item updates + imapEvent.waitWhenHappened(); + + Collection resultsRequestInfo = requestInfoImdg.getCollectionObjectsByFieldValues(Map.of("status", Status.Processing)); + RequestInfo requestInfo = resultsRequestInfo.stream().max((entry1, entry2) -> entry1.getId() > entry2.getId() ? 1 : -1).get(); + Long diffRequestInfo = requestInfo.getCreated().toEpochMilli() - timeNow; + + assertTrue(limit.compareTo(diffRequestInfo) > 0); + } +} \ No newline at end of file diff --git a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/utils/ImapEvent.java b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/utils/ImapEvent.java index a9e80da03..129e2178b 100644 --- a/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/utils/ImapEvent.java +++ b/clearing-parent/balance-service/src/test/java/ru/spcex/clearing/balance/utils/ImapEvent.java @@ -49,7 +49,7 @@ public class ImapEvent { checkEventHappened.set(secondRan);//если что-то пойдет не так не тормозить основной поток secondRan = true; } - }, 0, 60 * 1000); + }, 0, 20 * 1000); synchronized (checkEventHappened) { while (!checkEventHappened.get()) { checkEventHappened.wait(100);