From 4fc3b9b4f56fbc1abe5e8d0f74d6d92ecebbd88b Mon Sep 17 00:00:00 2001 From: psemenkov Date: Wed, 23 Nov 2022 10:38:15 +0300 Subject: [PATCH] Correction of the error in the service-account and the service-company has been completed. Both service are successfully launched in maven. --- .../account/service/AccountServiceTest.java | 12 +- .../service/BankAccountServiceTest.java | 6 +- .../clearing/account/utils/ImapEvent.java | 7 +- .../HazelcastServiceTestConfiguration.java | 3 + .../ClearingMemberCategoryServiceTest.java | 103 ++++++++++-------- .../service/CompanyInfoServiceTest.java | 37 ++----- .../company/service/CompanyServiceTest.java | 25 +---- .../service/CompanySymbolServiceTest.java | 25 +---- .../company/service/ContactServiceTest.java | 24 +--- .../clearing/company/utils/ImapEvent.java | 63 +++++++++++ 10 files changed, 164 insertions(+), 141 deletions(-) create mode 100644 clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/utils/ImapEvent.java diff --git a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/AccountServiceTest.java b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/AccountServiceTest.java index bfb3eb9f3..3cd2088b4 100644 --- a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/AccountServiceTest.java +++ b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/AccountServiceTest.java @@ -59,6 +59,16 @@ class AccountServiceTest { @Qualifier("mockConsumerTest") private MockConsumer mockConsumer; + /** + * {@link AccountService#accountNew(BaseRequest)}
+ * Тест проверяет создание сущности {@link BaseRequest} в Hazelcast при передаче из Apache Kafka.
+ * Входной запрос {@link AccountSdf01Request}:
+ * {@link AccountSdfRequestPart#setSdfId} - текущий Id
+ * {@link AccountSdfRequestPart#setAccount} - 123456789123
+ * {@link AccountSdfRequestPart#setCompanyId} - текущий Id
+ * {@link AccountSdf01Request#setGroupingSdf01Id} - текущий Id
+ * {@link AccountSdf01Request#setAccounts} - Collections.singletonList(AccountSdfRequestPart)
+ */ @Test void accountNew() throws InterruptedException { //arrange @@ -129,7 +139,7 @@ class AccountServiceTest { IMap requestInfoIMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_RequestInfo); ImapEvent imapEvent = new ImapEvent(requestInfoIMap); - imapEvent.waitHappened(); + imapEvent.waitWhenHappened(); //ASSERT Account accountResult = accountIMap.get(firstID); RequestInfo requestInfoResult = requestInfoIMap.get(secondID); diff --git a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/BankAccountServiceTest.java b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/BankAccountServiceTest.java index 59e2a1304..cccf8e390 100644 --- a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/BankAccountServiceTest.java +++ b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/service/BankAccountServiceTest.java @@ -139,7 +139,7 @@ public class BankAccountServiceTest { //waiting for hazelcast map item updates ImapEvent imapEvent = new ImapEvent(iMap); - imapEvent.waitHappened(); + imapEvent.waitWhenHappened(); //ASSERT BankAccount result = iMap.get(ID); @@ -235,7 +235,7 @@ public class BankAccountServiceTest { mockConsumer.updateBeginningOffsets(startOffsetsUpdating); //waiting for hazelcast map item updates - imapEvent.waitHappened(); + imapEvent.waitWhenHappened(); //ASSERT BankAccount resultUpdating = iMap.get(ID); @@ -301,7 +301,7 @@ public class BankAccountServiceTest { mockConsumer.updateBeginningOffsets(startOffsetsDeleting); //waiting for hazelcast map item updates - imapEvent.waitHappened(); + imapEvent.waitWhenHappened(); //ASSERT Assertions.assertEquals(0, iMap.size()); diff --git a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/utils/ImapEvent.java b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/utils/ImapEvent.java index 095e18a2b..84c4f798c 100644 --- a/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/utils/ImapEvent.java +++ b/clearing-parent/account-service/src/test/java/ru/spcex/clearing/account/utils/ImapEvent.java @@ -38,13 +38,16 @@ public class ImapEvent { }, false); } - public void waitHappened() throws InterruptedException { + public void waitWhenHappened() throws InterruptedException { //running timer task as daemon thread Timer timer = new Timer(true); timer.scheduleAtFixedRate(new TimerTask() { + boolean secondRan; + @Override public void run() { - checkEventHappened.set(true);//если что-то пойдет не так не тормозить основной поток + checkEventHappened.set(secondRan);//если что-то пойдет не так не тормозить основной поток + secondRan = true; } }, 0, 60 * 1000); synchronized (checkEventHappened) { diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/config/HazelcastServiceTestConfiguration.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/config/HazelcastServiceTestConfiguration.java index 0c7ca4069..f7c808768 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/config/HazelcastServiceTestConfiguration.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/config/HazelcastServiceTestConfiguration.java @@ -13,9 +13,12 @@ import ru.spcex.platform.imdg.iml.hazelcast.util.HazelcastHelper; import java.util.List; import java.util.Random; +import java.util.concurrent.atomic.AtomicLong; @Configuration public class HazelcastServiceTestConfiguration { + + public static final AtomicLong currentID = new AtomicLong(0L); private HazelcastInstance hazelcastInstance; private static ThreadPoolTaskExecutor createThreadPoolTaskExecutor(int maxPoolSz, boolean waitForCompletion) { diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClearingMemberCategoryServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClearingMemberCategoryServiceTest.java index 97ee984ff..6d73e05a5 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClearingMemberCategoryServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClearingMemberCategoryServiceTest.java @@ -3,8 +3,6 @@ package ru.spcex.clearing.company.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.hazelcast.core.IMap; -import com.hazelcast.map.listener.EntryRemovedListener; -import com.hazelcast.map.listener.EntryUpdatedListener; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.consumer.OffsetResetStrategy; @@ -19,20 +17,22 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; -import ru.clearing.classes.statics.data.profile.Contact; import ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration; +import ru.spcex.clearing.company.utils.ImapEvent; import ru.spcex.clearing.company.utils.MatcherFactory.Matcher; import ru.spcex.clearing.imdg.IMDGDistributedNames; 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.common.CommonDeleteRequest; +import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest; import ru.spcex.platform.imdg.iml.hazelcast.service.HazelcastService; import java.util.Collections; import java.util.HashMap; +import static ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration.currentID; import static ru.spcex.clearing.company.utils.MatcherFactory.usingIgnoringFieldsComparator; @ExtendWith(SpringExtension.class) @@ -42,9 +42,10 @@ class ClearingMemberCategoryServiceTest { public static final Matcher MEMBER_CATEGORY_MATCHER = usingIgnoringFieldsComparator(); private static final int PARTITION = 0; + private static final String TOPIC_MEMBER_CATEGORY_NEW = Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_NEW; private static final String TOPIC_MEMBER_CATEGORY_UPDATE = Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_UPDATE; private static final String TOPIC_MEMBER_CATEGORY_DELETE = Consts.DESTINATION_CLEARING_MEMBER_CATEGORY_DELETE; - private static final Long ID = 0L; + private static final Long ID = currentID.getAndIncrement(); @Autowired @Qualifier("hazelcastServiceTest") @@ -58,6 +59,56 @@ class ClearingMemberCategoryServiceTest { mockProducer = new MockProducer<>(); } + @Test + void clearingMemberCategoryNew() throws InterruptedException { + //ARRANGE + + ClearingMemberCategoryNewRequest memberCategoryNewRequest = new ClearingMemberCategoryNewRequest(); + memberCategoryNewRequest.setClearingMemberCategory("1234"); + BaseRequest baseUpdateRequest = new BaseRequest<>(); + baseUpdateRequest.setRequestPayload(memberCategoryNewRequest); + baseUpdateRequest.setId(ID); + baseUpdateRequest.setActionType(ActionType.NEW); + String jsonBaseForNewRequest; + ObjectMapper objectMapper = new ObjectMapper(); + try { + jsonBaseForNewRequest = objectMapper.writeValueAsString(baseUpdateRequest); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + ClearingMemberCategory predictableClearingMemberCategory = new ClearingMemberCategory(); + predictableClearingMemberCategory.setId(ID); + predictableClearingMemberCategory.setClearingMemberCategory("1234"); + + //ACT + //service set up + ClearingMemberCategoryService clearingMemberCategoryService = new ClearingMemberCategoryService(mockConsumer, mockProducer, hazelcastServiceTest); + + //callbacks set up + clearingMemberCategoryService.afterPropertiesSet(); + + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_ClearingMemberCategory); + ImapEvent imapEvent = new ImapEvent(iMap); + + //KAFKA + mockConsumer.schedulePollTask(() -> { + mockConsumer.rebalance(Collections.singletonList(new TopicPartition(TOPIC_MEMBER_CATEGORY_NEW, PARTITION))); + mockConsumer.addRecord(new ConsumerRecord<>(TOPIC_MEMBER_CATEGORY_NEW, PARTITION, 0, "key", jsonBaseForNewRequest)); + }); + HashMap startOffsetsUpdating = new HashMap<>(); + TopicPartition tpUpdating = new TopicPartition(TOPIC_MEMBER_CATEGORY_NEW, PARTITION); + startOffsetsUpdating.put(tpUpdating, 0L); + mockConsumer.updateBeginningOffsets(startOffsetsUpdating); + + //waiting for hazelcast map item updates + imapEvent.waitWhenHappened(); + + //ASSERT + ClearingMemberCategory resultUpdating = iMap.get(ID); + MEMBER_CATEGORY_MATCHER.assertMatch(resultUpdating, predictableClearingMemberCategory); + } + /** * {@link ClearingMemberCategoryService#clearingMemberCategoryUpdate(BaseRequest)}
* Тест проверяет обновление сущности {@link ClearingMemberCategory} в Hazelcast при передаче из Apache Kafka.
@@ -100,6 +151,7 @@ class ClearingMemberCategoryServiceTest { IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_ClearingMemberCategory); iMap.put(ID, existsСlearingMemberCategory); + ImapEvent imapEvent = new ImapEvent(iMap); //KAFKA mockConsumer.schedulePollTask(() -> { @@ -112,30 +164,11 @@ class ClearingMemberCategoryServiceTest { mockConsumer.updateBeginningOffsets(startOffsetsUpdating); //waiting for hazelcast map item updates - Object waiter = new Object(); - String listenerID = iMap.addEntryListener((EntryUpdatedListener) entryEvent -> { - System.out.println("Checking If removed.."); - - synchronized (waiter) { - try { - waiter.wait(100); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - waiter.notify(); - } - }, false); - - synchronized (waiter) { - waiter.wait(100); - } + imapEvent.waitWhenHappened(); //ASSERT ClearingMemberCategory resultUpdating = iMap.get(ID); MEMBER_CATEGORY_MATCHER.assertMatch(resultUpdating, predictableClearingMemberCategory); - - //preparing hazelcastImdgProvider for next test - iMap.removeEntryListener(listenerID); } /** @@ -175,6 +208,7 @@ class ClearingMemberCategoryServiceTest { IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_ClearingMemberCategory); iMap.put(ID, existsСlearingMemberCategory); + ImapEvent imapEvent = new ImapEvent(iMap); //KAFKA mockConsumer.schedulePollTask(() -> { @@ -187,28 +221,9 @@ class ClearingMemberCategoryServiceTest { mockConsumer.updateBeginningOffsets(startOffsetsUpdating); //waiting for hazelcast map item removes - Object waiter = new Object(); - String listenerID = iMap.addEntryListener((EntryRemovedListener) entryEvent -> { - System.out.println("Checking If removed.."); - - try { - waiter.wait(100); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - synchronized (waiter) { - waiter.notify(); - } - }, false); - - synchronized (waiter) { - waiter.wait(100); - } + imapEvent.waitWhenHappened(); //ASSERT Assertions.assertEquals(0, iMap.size()); - - //preparing hazelcastImdgProvider for next test - iMap.removeEntryListener(listenerID); } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyInfoServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyInfoServiceTest.java index c383a4ec7..cc380908b 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyInfoServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyInfoServiceTest.java @@ -3,7 +3,6 @@ package ru.spcex.clearing.company.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.hazelcast.core.IMap; -import com.hazelcast.map.listener.EntryUpdatedListener; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.consumer.OffsetResetStrategy; @@ -16,9 +15,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; +import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.profile.CompanyInfo; -import ru.clearing.classes.statics.data.profile.Contact; import ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration; +import ru.spcex.clearing.company.utils.ImapEvent; import ru.spcex.clearing.company.utils.MatcherFactory; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.ActionType; @@ -88,6 +88,9 @@ class CompanyInfoServiceTest { existsCompanyInfo.setFullNameEng("exists fullNameEng"); existsCompanyInfo.setShortName("exists shortName"); existsCompanyInfo.setFullName("exists fullName"); + Company existsCompany = new Company(); + existsCompany.setId(ID); + existsCompany.setProfile(existsCompanyInfo); CompanyInfoUpdateRequest companyInfoUpdateRequest = new CompanyInfoUpdateRequest(); companyInfoUpdateRequest.setId(ID); @@ -137,8 +140,9 @@ class CompanyInfoServiceTest { //callbacks set up clearingMemberCategoryService.afterPropertiesSet(); - IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_Company); - iMap.put(ID, existsCompanyInfo); + IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_Company); + iMap.put(ID, existsCompany); + ImapEvent imapEvent = new ImapEvent(iMap); //KAFKA mockConsumer.schedulePollTask(() -> { @@ -151,29 +155,10 @@ class CompanyInfoServiceTest { mockConsumer.updateBeginningOffsets(startOffsetsUpdating); //waiting for hazelcast map updates - Object waiter = new Object(); - String listenerID = iMap.addEntryListener((EntryUpdatedListener) entryEvent -> { - System.out.println("Checking If removed.."); - - try { - waiter.wait(100); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - synchronized (waiter) { - waiter.notify(); - } - }, false); - - synchronized (waiter) { - waiter.wait(100); - } + imapEvent.waitWhenHappened(); //ASSERT - CompanyInfo resultUpdating = iMap.get(ID); - COMPANY_INFO_MATCHER.assertMatch(resultUpdating, predictableCompanyInfo); - - //preparing hazelcastImdgProvider for next test - iMap.removeEntryListener(listenerID); + Company resultUpdating = iMap.get(ID); + COMPANY_INFO_MATCHER.assertMatch(resultUpdating.getProfile(), predictableCompanyInfo); } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java index 7df5c8164..2d68b438a 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanyServiceTest.java @@ -3,7 +3,6 @@ package ru.spcex.clearing.company.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.hazelcast.core.IMap; -import com.hazelcast.map.listener.EntryRemovedListener; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.consumer.OffsetResetStrategy; @@ -19,8 +18,8 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; import ru.clearing.classes.statics.data.generated.ClearingMemberCategory; -import ru.clearing.classes.statics.data.profile.Contact; import ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration; +import ru.spcex.clearing.company.utils.ImapEvent; import ru.spcex.clearing.company.utils.MatcherFactory; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.ActionType; @@ -92,6 +91,7 @@ class CompanyServiceTest { IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_Company); iMap.put(ID, existsCompany); + ImapEvent imapEvent = new ImapEvent(iMap); //KAFKA mockConsumer.schedulePollTask(() -> { @@ -104,28 +104,9 @@ class CompanyServiceTest { mockConsumer.updateBeginningOffsets(startOffsetsUpdating); //waiting for hazelcast map item removes - Object waiter = new Object(); - String listenerID = iMap.addEntryListener((EntryRemovedListener) entryEvent -> { - System.out.println("Checking If removed.."); - - try { - waiter.wait(100); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - synchronized (waiter) { - waiter.notify(); - } - }, false); - - synchronized (waiter) { - waiter.wait(100); - } + imapEvent.waitWhenHappened(); //ASSERT Assertions.assertEquals(0, iMap.size()); - - //preparing hazelcastImdgProvider for next test - iMap.removeEntryListener(listenerID); } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanySymbolServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanySymbolServiceTest.java index 13530012d..e381cacd3 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanySymbolServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/CompanySymbolServiceTest.java @@ -3,7 +3,6 @@ package ru.spcex.clearing.company.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.hazelcast.core.IMap; -import com.hazelcast.map.listener.EntryUpdatedListener; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.consumer.OffsetResetStrategy; @@ -17,8 +16,8 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.CompanySymbols; -import ru.clearing.classes.statics.data.profile.Contact; import ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration; +import ru.spcex.clearing.company.utils.ImapEvent; import ru.spcex.clearing.company.utils.MatcherFactory; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.ActionType; @@ -105,6 +104,7 @@ class CompanySymbolServiceTest { IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_CompanySymbols); iMap.put(ID, existsCompanySymbols); + ImapEvent imapEvent = new ImapEvent(iMap); //KAFKA mockConsumer.schedulePollTask(() -> { @@ -117,29 +117,10 @@ class CompanySymbolServiceTest { mockConsumer.updateBeginningOffsets(startOffsetsUpdating); //waiting for hazelcast map item updates - Object waiter = new Object(); - String listenerID = iMap.addEntryListener((EntryUpdatedListener) entryEvent -> { - System.out.println("Checking If removed.."); - - try { - waiter.wait(100); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - synchronized (waiter) { - waiter.notify(); - } - }, false); - - synchronized (waiter) { - waiter.wait(100); - } + imapEvent.waitWhenHappened(); //ASSERT CompanySymbols resultUpdating = iMap.get(ID); COMPANY_SYMBOL_MATCHER.assertMatch(resultUpdating, predictableCompanySymbols); - - //preparing hazelcastImdgProvider for next test - iMap.removeEntryListener(listenerID); } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ContactServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ContactServiceTest.java index b7974643c..368715f70 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ContactServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ContactServiceTest.java @@ -3,7 +3,6 @@ package ru.spcex.clearing.company.service; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.hazelcast.core.IMap; -import com.hazelcast.map.listener.EntryUpdatedListener; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; import org.apache.kafka.clients.consumer.OffsetResetStrategy; @@ -18,6 +17,7 @@ import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.profile.Contact; import ru.spcex.clearing.company.config.HazelcastServiceTestConfiguration; +import ru.spcex.clearing.company.utils.ImapEvent; import ru.spcex.clearing.company.utils.MatcherFactory; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.domain.ActionType; @@ -103,6 +103,7 @@ class ContactServiceTest { //callbacks set up IMap iMap = hazelcastServiceTest.getHazelcast().getMap(IMDGDistributedNames.Map_Contact); iMap.put(ID, existsContact); + ImapEvent imapEvent = new ImapEvent(iMap); //KAFKA mockConsumer.schedulePollTask(() -> { @@ -115,29 +116,10 @@ class ContactServiceTest { mockConsumer.updateBeginningOffsets(startOffsetsUpdating); //waiting for hazelcast map updates - Object waiter = new Object(); - String listenerID = iMap.addEntryListener((EntryUpdatedListener) entryEvent -> { - System.out.println("Checking If removed.."); - - try { - waiter.wait(100); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - synchronized (waiter) { - waiter.notify(); - } - }, false); - - synchronized (waiter) { - waiter.wait(100); - } + imapEvent.waitWhenHappened(); //ASSERT Contact resultUpdating = iMap.get(ID); CONTACT_MATCHER.assertMatch(resultUpdating, predictableContact); - - //preparing hazelcastImdgProvider for next test - iMap.removeEntryListener(listenerID); } } \ No newline at end of file diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/utils/ImapEvent.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/utils/ImapEvent.java new file mode 100644 index 000000000..44a613cd0 --- /dev/null +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/utils/ImapEvent.java @@ -0,0 +1,63 @@ +package ru.spcex.clearing.company.utils; + +import com.hazelcast.core.IMap; +import com.hazelcast.map.listener.EntryAddedListener; +import com.hazelcast.map.listener.EntryRemovedListener; +import com.hazelcast.map.listener.EntryUpdatedListener; + +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.atomic.AtomicBoolean; + +public class ImapEvent { + private final IMap iMap; + private final String listenerAdding; + private final String listenerUpdating; + private final String listenerRemoving; + private final AtomicBoolean checkEventHappened = new AtomicBoolean(false); + + public ImapEvent(IMap iMap) { + this.iMap = iMap; + listenerAdding = iMap.addEntryListener((EntryAddedListener) entryEvent -> { + synchronized (checkEventHappened) { + checkEventHappened.set(true); + checkEventHappened.notify(); + } + }, false); + listenerUpdating = iMap.addEntryListener((EntryUpdatedListener) entryEvent -> { + synchronized (checkEventHappened) { + checkEventHappened.set(true); + checkEventHappened.notify(); + } + }, false); + listenerRemoving = iMap.addEntryListener((EntryRemovedListener) entryEvent -> { + synchronized (checkEventHappened) { + checkEventHappened.set(true); + checkEventHappened.notify(); + } + }, false); + } + + public void waitWhenHappened() throws InterruptedException { + //running timer task as daemon thread + Timer timer = new Timer(true); + timer.scheduleAtFixedRate(new TimerTask() { + boolean secondRan; + + @Override + public void run() { + checkEventHappened.set(secondRan);//если что-то пойдет не так не тормозить основной поток + secondRan = true; + } + }, 0, 30 * 1000); + synchronized (checkEventHappened) { + while (!checkEventHappened.get()) { + checkEventHappened.wait(100); + } + } + //preparing hazelcastImdgProvider for next test + iMap.removeEntryListener(listenerAdding); + iMap.removeEntryListener(listenerUpdating); + iMap.removeEntryListener(listenerRemoving); + } +}