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 9e43b76fa..8490f7a5e 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 @@ -1,16 +1,12 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; @@ -26,7 +22,6 @@ import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteReques import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ClearingMemberCategoryUpdateRequest; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.ClearingCategory; @@ -36,8 +31,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import javax.annotation.PostConstruct; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; @@ -66,10 +59,9 @@ class ClearingMemberCategoryServiceTest { private ImdgProvider hazelcastServiceTest; private Imdg memberCategoryImdg; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; private long COMPANY_ID; private Company TEST_COMPANY; @@ -97,9 +89,6 @@ class ClearingMemberCategoryServiceTest { clearingCategoryDictionary = new ClearingCategoryDictionary(); clearingCategoryDictionary.setCode(CLEARING_CATEGORY_DICT_CODE); clearingCategoryDictionaryImdg.insert(clearingCategoryDictionary); - - TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } @Test @@ -120,7 +109,7 @@ class ClearingMemberCategoryServiceTest { addRecordToKafka((MockConsumer) clearingMemberCategoryService.getConsumer(), TOPIC_MEMBER_CATEGORY_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ClearingMemberCategory resultNew = memberCategoryImdg.getSingleObjectBySQL(String.format("clearingMemberCategory = %s", clearingMemberCategory)); predictableClearingMemberCategory.setId(resultNew.getId()); MEMBER_CATEGORY_MATCHER.assertMatch(resultNew, predictableClearingMemberCategory); @@ -156,7 +145,7 @@ class ClearingMemberCategoryServiceTest { addRecordToKafka((MockConsumer) clearingMemberCategoryService.getConsumer(), TOPIC_MEMBER_CATEGORY_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(id, mockProducer, producerRecord); + waitingSendAndCheckRecord(id, mockProducer); ClearingMemberCategory resultUpdating = memberCategoryImdg.getSingleObjectByID(id); MEMBER_CATEGORY_MATCHER.assertMatch(resultUpdating, predictableClearingMemberCategory); @@ -184,7 +173,7 @@ class ClearingMemberCategoryServiceTest { addRecordToKafka((MockConsumer) clearingMemberCategoryService.getConsumer(), TOPIC_MEMBER_CATEGORY_DELETE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(id, mockProducer, producerRecord); + waitingSendAndCheckRecord(id, mockProducer); ClearingMemberCategory resultDeleting = memberCategoryImdg.getSingleObjectBySQL(String.format("clearingMemberCategory = %s", clearingMemberCategory)); Assertions.assertNull(resultDeleting); diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClientCodeServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClientCodeServiceTest.java index d4246da92..59d5eff2d 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClientCodeServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ClientCodeServiceTest.java @@ -1,16 +1,12 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.account.Account; @@ -29,7 +25,6 @@ import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeNewRequ import ru.spcex.clearing.platform.messaging.domain.cud.account.ClientCodeUpdateRequest; import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteRequest; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.TradingClearingRegistryType; @@ -40,7 +35,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import javax.annotation.PostConstruct; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @@ -69,10 +63,9 @@ class ClientCodeServiceTest { @Autowired @Qualifier("hazelcastServiceTest") private ImdgProvider hazelcastServiceTest; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; private Imdg clientCodeImdg; @@ -132,9 +125,6 @@ class ClientCodeServiceTest { depoAccount.setStatus("ACTV"); depoAccount.setCompanyId(COMPANY_ID); // для валидации принадлежности счёта accounts.insert(depoAccount); - - TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } private void putToDictionary(String mapName, D object, String code) { @@ -192,7 +182,7 @@ class ClientCodeServiceTest { addRecordToKafka((MockConsumer) clientCodeService.getConsumer(), Consts.DESTINATION_CLIENT_CODE_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ClientCode resultNew = clientCodeImdg.getSingleObjectBySQL(String.format("code = '%s'", ccCode)); predictableClientCode.setId(resultNew.getId()); CLIENT_CODE_MATCHER.assertMatch(resultNew, predictableClientCode); @@ -230,7 +220,7 @@ class ClientCodeServiceTest { addRecordToKafka((MockConsumer) clientCodeService.getConsumer(), Consts.DESTINATION_CLIENT_CODE_NEW_UM_COMPANY, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ClientCode resultNew = clientCodeImdg.getSingleObjectBySQL(String.format("code = '%s'", ccCode)); predictableClientCode.setId(resultNew.getId()); CLIENT_CODE_MATCHER.assertMatch(resultNew, predictableClientCode); @@ -281,7 +271,7 @@ class ClientCodeServiceTest { addRecordToKafka((MockConsumer) clientCodeService.getConsumer(), Consts.DESTINATION_CLIENT_CODE_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ClientCode resultUpdating = clientCodeImdg.getSingleObjectByID(ID); CLIENT_CODE_MATCHER.assertMatch(resultUpdating, predictableClientCode); @@ -321,7 +311,7 @@ class ClientCodeServiceTest { //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ClientCode resultUpdate = clientCodeImdg.getSingleObjectByID(ID); Assertions.assertNull(resultUpdate); } 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 2735eff4c..bf5cdf895 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 @@ -1,15 +1,11 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; @@ -25,7 +21,6 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanyInfoUpdateRequest; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.WorkflowStatus; @@ -34,8 +29,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import javax.annotation.PostConstruct; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @@ -70,10 +63,9 @@ class CompanyInfoServiceTest { private ImdgProvider hazelcastServiceTest; private Imdg companyImdg; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; @PostConstruct private void init() { @@ -88,9 +80,6 @@ class CompanyInfoServiceTest { putToDictionary(IMDGDistributedNames.Map_AllowedDictionary, new AllowedDictionary(), "ALWD"); putToDictionary(IMDGDistributedNames.Map_LegalKindDictionary, new LegalKindDictionary(), "JURD"); putToDictionary(IMDGDistributedNames.Map_OrganizationTypeDictionary, new OrganizationTypeDictionary(), "NCRD"); - - TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } private void putToDictionary(String mapName, D object, String code) { @@ -172,7 +161,7 @@ class CompanyInfoServiceTest { addRecordToKafka((MockConsumer) companyInfoService.getConsumer(), TOPIC_COMPANY_INFO_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); Company resultUpdating = companyImdg.getSingleObjectByID(ID); COMPANY_INFO_MATCHER.assertMatch(resultUpdating.getProfile(), predictableCompanyInfo); 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 e6ec57333..f49a19e9d 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 @@ -1,16 +1,12 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.ClearingMemberCategory; @@ -30,7 +26,6 @@ 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.CompanyNewRequest; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.CompanySymbol; @@ -42,8 +37,6 @@ import javax.annotation.PostConstruct; import java.util.Arrays; import java.util.Map; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @@ -78,10 +71,9 @@ class CompanyServiceTest { private Imdg companySymbolsImdg; private Imdg workflowStatusDictionaryImdg; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; @PostConstruct private void init() { @@ -115,9 +107,6 @@ class CompanyServiceTest { cioSymbol.setName(CompanySymbol.CIO.getKey()); companySymbolDictionaryImdg.insert(cioSymbol); } - - TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } /** @@ -143,7 +132,7 @@ class CompanyServiceTest { addRecordToKafka((MockConsumer) companyService.getConsumer(), TOPIC_COMPANY_DELETE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); //Company resultDeleting = companyImdg.getSingleObjectByID(ID); Company resultDeleting = companyImdg.getSingleObjectBySQL("id=" + ID); @@ -186,7 +175,7 @@ class CompanyServiceTest { addRecordToKafka((MockConsumer) companyService.getConsumer(), DESTINATION_COMPANY_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); Company resultNew = companyImdg.getSingleObjectByFieldValues(Map.of("ShortName", "ClrIPO")); Assertions.assertNotNull(resultNew); @@ -221,7 +210,6 @@ class CompanyServiceTest { //ASSERT waitingWhenTryAddRecordAndCheckError(ID, mockProducer, - producerRecord, String.valueOf(CompanyErrors.CompanyWithCompanySymbolAlreadyExist.getId()), Arrays.asList("CIO", "test_value")); 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 f9dee4531..248824940 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 @@ -1,15 +1,11 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; @@ -25,7 +21,6 @@ import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.company.CompanySymbolUpdateRequest; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.CompanySymbol; @@ -34,8 +29,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import javax.annotation.PostConstruct; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @@ -69,10 +62,9 @@ class CompanySymbolServiceTest { private ImdgProvider hazelcastServiceTest; private Imdg companySymbolsImdg; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; @PostConstruct private void init() { @@ -102,10 +94,6 @@ class CompanySymbolServiceTest { company.setWorkflowStatus("ACTV"); companyImdg.insert(company); } - - - TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } /** @@ -145,7 +133,7 @@ class CompanySymbolServiceTest { addRecordToKafka((MockConsumer) companySymbolService.getConsumer(), TOPIC_COMPANY_SYMBOL_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); CompanySymbols resultUpdating = companySymbolsImdg.getSingleObjectBySQL(String.format("companySymbolValue = %s", companySymbolValue)); COMPANY_SYMBOL_MATCHER.assertMatch(resultUpdating, predictableCompanySymbols); 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 6597b9e68..631608641 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 @@ -1,15 +1,11 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; @@ -24,7 +20,6 @@ import ru.spcex.clearing.platform.messaging.domain.Consts; import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ContactUpdateRequest; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.ContactTypes; @@ -34,8 +29,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import javax.annotation.PostConstruct; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @@ -64,10 +57,9 @@ class ContactServiceTest { private ImdgProvider hazelcastServiceTest; private Imdg contactImdg; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; private Company TEST_COMPANY; private Long COMPANY_ID; @@ -89,9 +81,6 @@ class ContactServiceTest { IMDGDistributedNames.Map_ContactTypeDictionary, ContactTypeDictionary.class ); contactTypeDictionaryImdg.insert(contactTypeDictionary); - - TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } @Test void contactNew() throws InterruptedException { @@ -111,7 +100,7 @@ class ContactServiceTest { addRecordToKafka((MockConsumer) contactService.getConsumer(), TOPIC_CONTACT_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); Contact resultNew = contactImdg.getAllValues().iterator().next(); predictableContact.setId(resultNew.getId()); @@ -152,7 +141,7 @@ class ContactServiceTest { addRecordToKafka((MockConsumer) contactService.getConsumer(), TOPIC_CONTACT_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(existContactID, mockProducer, producerRecord); + waitingSendAndCheckRecord(existContactID, mockProducer); Contact resultUpdating = contactImdg.getSingleObjectByID(existContactID); CONTACT_MATCHER.assertMatch(resultUpdating, predictableContact); diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ProfileDocumentServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ProfileDocumentServiceTest.java index b37689ea8..db6a4ef06 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ProfileDocumentServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/ProfileDocumentServiceTest.java @@ -1,16 +1,12 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; @@ -26,7 +22,6 @@ import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteReques import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.ProfileDocumentUpdateRequest; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.DocumentTypes; @@ -38,8 +33,6 @@ import javax.annotation.PostConstruct; import java.time.LocalDate; import java.time.temporal.ChronoUnit; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; @@ -71,10 +64,9 @@ class ProfileDocumentServiceTest { private Imdg profileDocumentMap; private Imdg companyMap; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; private long COMPANY_ID; private Company TEST_COMPANY; @@ -111,9 +103,6 @@ class ProfileDocumentServiceTest { documentTypeDictionary1.setCode(NEW_TEST_DOCUMENT_TYPE.getKey()); documentTypeDictionary1.setName("new_test_name"); documentTypeDictionaryImdg.insert(documentTypeDictionary1); - - TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } /** @@ -159,7 +148,7 @@ class ProfileDocumentServiceTest { addRecordToKafka((MockConsumer) profileDocumentService.getConsumer(), TOPIC_DESTINATION_PROFILE_DOCUMENT_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ProfileDocument resultNew = profileDocumentMap.getSingleObjectBySQL(String.format("companyId = %d", COMPANY_ID)); predictableProfileDocument.setId(resultNew.getId()); PROFILE_DOCUMENT_MATCHER.assertMatch(resultNew, predictableProfileDocument); @@ -220,7 +209,7 @@ class ProfileDocumentServiceTest { addRecordToKafka((MockConsumer) profileDocumentService.getConsumer(), TOPIC_DESTINATION_PROFILE_DOCUMENT_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ProfileDocument resultUpdate = profileDocumentMap.getSingleObjectBySQL(String.format("companyId = %d", COMPANY_ID)); // predictableProfileDocument.setId(resultUpdate.getId()); PROFILE_DOCUMENT_MATCHER.assertMatch(resultUpdate, predictableProfileDocument); @@ -255,7 +244,7 @@ class ProfileDocumentServiceTest { addRecordToKafka((MockConsumer) profileDocumentService.getConsumer(), TOPIC_DESTINATION_PROFILE_DOCUMENT_DELETE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ProfileDocument resultUpdate = profileDocumentMap.getSingleObjectByID(PROFILE_DOCUMENT_ID); Assertions.assertNull(resultUpdate); } diff --git a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/RelationServiceTest.java b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/RelationServiceTest.java index 8bebb24f7..4384e9607 100644 --- a/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/RelationServiceTest.java +++ b/clearing-parent/company-service/src/test/java/ru/spcex/clearing/company/service/RelationServiceTest.java @@ -1,15 +1,11 @@ package ru.spcex.clearing.company.service; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; @@ -25,7 +21,6 @@ import ru.spcex.clearing.platform.messaging.domain.cud.common.CommonDeleteReques import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationNewRequest; import ru.spcex.clearing.platform.messaging.domain.cud.company.RelationUpdateRequest; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.ClearingCategory; @@ -35,9 +30,7 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import javax.annotation.PostConstruct; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; +import static org.junit.jupiter.api.Assertions.assertEquals; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.TestUtils.*; import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; @@ -66,10 +59,9 @@ class RelationServiceTest { private Imdg relationMap; private Imdg companyMap; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; private long COMPANY_ID; @@ -109,15 +101,13 @@ class RelationServiceTest { clearingCategoryDictionary.setCode(ClearingCategory.I.getKey()); clearingCategoryDictionary.setName("I"); clearingCategoryDictionaryImdg.insert(clearingCategoryDictionary); - - TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } @Test void newRelation() { //ARRANGE + clearAllInImdg(relationMap); RelationNewRequest relationNewRequest = new RelationNewRequest(); relationNewRequest.setCompanyId(COMPANY_ID); relationNewRequest.setServiceStatus("ACTV"); @@ -138,7 +128,7 @@ class RelationServiceTest { addRecordToKafka((MockConsumer) relationService.getConsumer(), Consts.DESTINATION_RELATION_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); Relation resultNew = relationMap.getSingleObjectBySQL("serviceStatus=ACTV"); // String.format("supplierId = %d", COMPANY_ID)); predictableRelation.setId(resultNew.getId()); RELATION_MATCHER.assertMatch(resultNew, predictableRelation); @@ -177,7 +167,7 @@ class RelationServiceTest { addRecordToKafka((MockConsumer) relationService.getConsumer(), Consts.DESTINATION_RELATION_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); Relation resultUpdate = relationMap.getSingleObjectBySQL(String.format("id = %d", RELATION_ID)); // predictableProfileDocument.setId(resultUpdate.getId()); RELATION_MATCHER.assertMatch(resultUpdate, predictableRelation); @@ -206,7 +196,7 @@ class RelationServiceTest { addRecordToKafka((MockConsumer) relationService.getConsumer(), Consts.DESTINATION_RELATION_DELETE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); Relation resultUpdate = relationMap.getSingleObjectByID(RELATION_ID); // Assertions.assertNull(resultUpdate); assertEquals(WorkflowStatus.Blocked.getKey(), resultUpdate.getServiceStatus()); diff --git a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/AbstractServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/AbstractServiceTest.java index b39d1fe16..a2d569b61 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/AbstractServiceTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/AbstractServiceTest.java @@ -1,13 +1,9 @@ package ru.spcex.clearing.scheduler; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; @@ -27,7 +23,6 @@ import ru.spcex.clearing.scheduler.config.validation.PlannerValidationConfig; import ru.spcex.clearing.scheduler.config.validation.ValidationConfig; import ru.spcex.clearing.scheduler.service.*; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.enumeration.*; @@ -37,8 +32,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import java.time.LocalDate; import java.time.LocalTime; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @@ -74,10 +67,10 @@ public abstract class AbstractServiceTest { protected long testSecurityId = currentID.getAndIncrement(); protected String sessionType = "IPOT"; - @Captor - protected ArgumentCaptor producerRecord; - @MockBean - protected MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; + @Autowired @Qualifier("hazelcastServiceTest") protected ImdgProvider imdgProvider; @@ -133,9 +126,6 @@ public abstract class AbstractServiceTest { securityImdg.insert(security); clearingCalendarImdg.insert(getClearingCalendar()); - - TestUtils.FutureRecordMetadata future = spy(new TestUtils.FutureRecordMetadata()); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } protected PlannerTemplate getPlannerTemplate(long companyId) { diff --git a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/ClearingCalendarServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/ClearingCalendarServiceTest.java index fbb7d953b..662e98d3c 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/ClearingCalendarServiceTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/ClearingCalendarServiceTest.java @@ -75,7 +75,7 @@ class ClearingCalendarServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) clearingCalendarService.getConsumer(), TOPIC_CLEARING_CALENDAR_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ClearingCalendar clearingCalendarRes = clearingCalendarImdg.getSingleObjectBySQL(String.format("companyId = %s", clearingCalendar.getCompanyId())); clearingCalendar.setId(clearingCalendarRes.getId()); @@ -113,7 +113,7 @@ class ClearingCalendarServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) clearingCalendarService.getConsumer(), TOPIC_CLEARING_CALENDAR_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); ClearingCalendar clearingCalendarRes = clearingCalendarImdg.getSingleObjectBySQL(String.format("companyId = %s", clearingCalendar.getCompanyId())); clearingCalendar.setId(clearingCalendarRes.getId()); @@ -148,7 +148,7 @@ class ClearingCalendarServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) clearingCalendarService.getConsumer(), TOPIC_CLEARING_CALENDAR_DELETE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(id, mockProducer, producerRecord); + waitingSendAndCheckRecord(id, mockProducer); ClearingCalendar plannerTemplateRes = clearingCalendarImdg.getSingleObjectBySQL(String.format("companyId = %s", clearingCalendar.getCompanyId())); assertNull(plannerTemplateRes); diff --git a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/LauncherServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/LauncherServiceTest.java index fc8f4f7a8..a93cfc534 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/LauncherServiceTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/LauncherServiceTest.java @@ -1,8 +1,10 @@ package ru.spcex.clearing.scheduler.service; import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -24,6 +26,7 @@ import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparato 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.clearing.test.config.KafkaTestConfig.getCaptor; import static ru.spcex.platform.enumeration.Task.accountBlock; class LauncherServiceTest extends AbstractServiceTest { @@ -76,11 +79,12 @@ class LauncherServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) launcherService.getConsumer(), TOPIC_LAUNCHER_NEW, PARTITION, 0, jsonString); //ASSERT + ArgumentCaptor captor = getCaptor(mockProducer); verify(mockProducer, timeout(30_000L).times(1)) - .send(producerRecord.capture()); + .send(captor.capture()); - BaseRequest baseRequestResult = (BaseRequest) producerRecord.getValue().value(); - assertEquals("launcher-" + launcher.getTask(), producerRecord.getValue().topic()); + BaseRequest baseRequestResult = (BaseRequest) captor.getValue().value(); + assertEquals("launcher-" + launcher.getTask(), captor.getValue().topic()); BASE_REQUEST_MATCHER.assertMatch(baseRequestResult, predictableBaseRequest); diff --git a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/PlannerServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/PlannerServiceTest.java index 946762907..68a05c8c5 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/PlannerServiceTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/PlannerServiceTest.java @@ -69,7 +69,7 @@ class PlannerServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) plannerService.getConsumer(), TOPIC_PLANNER_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); Planner plannerReq = plannerImdg.getSingleObjectBySQL(String.format("companyId = %s", planner.getCompanyId())); planner.setId(plannerReq.getId()); @@ -105,7 +105,7 @@ class PlannerServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) plannerService.getConsumer(), TOPIC_PLANNER_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(planner.getId(), mockProducer, producerRecord); + waitingSendAndCheckRecord(planner.getId(), mockProducer); Planner plannerReq = plannerImdg.getSingleObjectBySQL(String.format("companyId = %s", planner.getCompanyId())); planner.setId(plannerReq.getId()); @@ -137,7 +137,7 @@ class PlannerServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) plannerService.getConsumer(), TOPIC_PLANNER_DELETE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(plannerId, mockProducer, producerRecord); + waitingSendAndCheckRecord(plannerId, mockProducer); Planner plannerReq = plannerImdg.getSingleObjectBySQL(String.format("companyId = %s", planner.getCompanyId())); assertNull(plannerReq); diff --git a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/PlannerTemplateServiceTest.java b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/PlannerTemplateServiceTest.java index 2b60f10b7..109aa6f28 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/PlannerTemplateServiceTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/PlannerTemplateServiceTest.java @@ -61,7 +61,7 @@ class PlannerTemplateServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) plannerTemplateService.getConsumer(), TOPIC_PLANNER_TEMPLATE_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); PlannerTemplate plannerTemplateRes = plannerTemplateImdg.getSingleObjectBySQL(String.format("companyId = %s", plannerTemplate.getCompanyId())); plannerTemplate.setId(plannerTemplateRes.getId()); @@ -96,7 +96,7 @@ class PlannerTemplateServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) plannerTemplateService.getConsumer(), TOPIC_PLANNER_TEMPLATE_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); PlannerTemplate plannerTemplateRes = plannerTemplateImdg.getSingleObjectBySQL(String.format("companyId = %s", plannerTemplate.getCompanyId())); plannerTemplate.setId(plannerTemplateRes.getId()); @@ -127,7 +127,7 @@ class PlannerTemplateServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) plannerTemplateService.getConsumer(), TOPIC_PLANNER_TEMPLATE_DELETE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(id, mockProducer, producerRecord); + waitingSendAndCheckRecord(id, mockProducer); PlannerTemplate plannerTemplateRes = plannerTemplateImdg.getSingleObjectBySQL(String.format("companyId = %s", plannerTemplate.getCompanyId())); assertNull(plannerTemplateRes); diff --git a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/TaskManagerTest.java b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/TaskManagerTest.java index 18cbebc9a..80a9b8e5e 100644 --- a/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/TaskManagerTest.java +++ b/clearing-parent/scheduler-service/src/test/java/ru/spcex/clearing/scheduler/service/TaskManagerTest.java @@ -1,6 +1,8 @@ package ru.spcex.clearing.scheduler.service; +import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.scheduler.PlannerAllToday; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; @@ -18,6 +20,7 @@ import static ru.spcex.clearing.scheduler.config.PlannerQueueConfig.addToPlanner import static ru.spcex.clearing.scheduler.service.TaskManager.systemId; import static ru.spcex.clearing.test.TestUtils.BASE_REQUEST_MATCHER; import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; +import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor; import static ru.spcex.platform.utils.enumeration.IEnumKey.getEnumByKey; class TaskManagerTest extends AbstractServiceTest { @@ -25,6 +28,9 @@ class TaskManagerTest extends AbstractServiceTest { @Autowired LauncherSender launcherSender; + @Autowired + private LauncherService launcherService; + @PostConstruct public void init() { super.init(); @@ -95,8 +101,9 @@ class TaskManagerTest extends AbstractServiceTest { public void waitingWhenAddedLauncherCommandRequestAndCheckIt(Task toTaskQueue, Long userId) { BaseRequest predictableBaseRequest = launcherSender.makeCmdRequest(toTaskQueue, userId); + ArgumentCaptor producerRecord = getCaptor(mockProducer); //waiting for kafka producer send message (finale event) - verify(mockProducer, timeout(60_000L).times(1)) + verify(mockProducer, timeout(30_000L).times(1)) .send(producerRecord.capture()); BaseRequest baseRequestResult = (BaseRequest) producerRecord.getValue().value(); diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java index 58aba5911..7de280a46 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/AbstractServiceTest.java @@ -1,13 +1,9 @@ package ru.spcex.clearing.securities.service; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.company.Company; @@ -24,7 +20,6 @@ import ru.spcex.clearing.securities.config.ValidationConfig; import ru.spcex.clearing.securities.service.cud.*; import ru.spcex.clearing.securities.validation.ValidationProvider; import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.platform.imdg.api.Imdg; @@ -32,8 +27,6 @@ import ru.spcex.platform.imdg.api.ImdgProvider; import java.util.concurrent.atomic.AtomicLong; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @@ -75,10 +68,9 @@ public abstract class AbstractServiceTest { public static String termType = "TermType"; public static String currencyCode = "RUB"; - @Captor - protected ArgumentCaptor producerRecord; - @MockBean - protected MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; @Autowired @Qualifier("hazelcastServiceTest") protected ImdgProvider imdgProvider; @@ -127,7 +119,5 @@ public abstract class AbstractServiceTest { Company company = new Company(); company.setId(issuerId); companyImdg.insert(company); - TestUtils.FutureRecordMetadata future = spy(TestUtils.FutureRecordMetadata.class); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } } diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CouponPeriodServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CouponPeriodServiceTest.java index d64fa5c52..e39160e77 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CouponPeriodServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CouponPeriodServiceTest.java @@ -63,7 +63,7 @@ public class CouponPeriodServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) couponPeriodService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); CouponPeriod result = couponPeriodImdg.getSingleObjectBySQL(String.format("securityId = %s", currencyPrediction.getSecurityId())); currencyPrediction.setId(result.getId()); @@ -112,7 +112,7 @@ public class CouponPeriodServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) couponPeriodService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(id, mockProducer, producerRecord); + waitingSendAndCheckRecord(id, mockProducer); CouponPeriod result = couponPeriodImdg.getSingleObjectBySQL(String.format("securityId = %s", predictableCoupon.getSecurityId())); predictableCoupon.setId(result.getId()); diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CurrencyServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CurrencyServiceTest.java index 874646b35..63d6d3000 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CurrencyServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/CurrencyServiceTest.java @@ -54,7 +54,7 @@ public class CurrencyServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) currencyService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); Currency result = currencyImdg.getSingleObjectBySQL(String.format("countryCode = %s", currencyPrediction.getCountryCode())); currencyPrediction.setId(result.getId()); @@ -87,7 +87,7 @@ public class CurrencyServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) currencyService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); Currency result = currencyImdg.getSingleObjectBySQL(String.format("countryCode = %s", currencyPrediction.getCountryCode())); currencyPrediction.setId(result.getId()); diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java index de26ec454..9133689b0 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/EquitySecurityServiceTest.java @@ -54,7 +54,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) equitySecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); EquitySecurity equityResult = equitySecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", equityPrediction.getFullName())); equityPrediction.setId(equityResult.getId()); @@ -94,7 +94,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) equitySecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); EquitySecurity equityResult = equitySecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", equityPrediction.getFullName())); equityPrediction.setId(equityResult.getId()); @@ -136,7 +136,7 @@ public class EquitySecurityServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) equitySecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); EquitySecurity equityResult = equitySecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", equityPrediction.getFullName())); equityPrediction.setId(equityResult.getId()); diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeCashFlowServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeCashFlowServiceTest.java index 745fe392c..b7f275c35 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeCashFlowServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeCashFlowServiceTest.java @@ -1,15 +1,11 @@ package ru.spcex.clearing.securities.service; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; +import org.apache.kafka.clients.producer.Producer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.instrument.issue.FixedIncomeCashFlow; @@ -59,10 +55,9 @@ class FixedIncomeCashFlowServiceTest { private ImdgProvider hazelcastServiceTest; private Imdg fixedIncomeCashFlowImdg; - @Captor - private ArgumentCaptor producerRecord; - @SpyBean - private MockProducer mockProducer; + @Autowired + @Qualifier("mockProducer") + protected Producer mockProducer; private final String SECURITY_SYMBOL_STR = "777"; private final Long SECURITY_SYMBOL_LONG = 777L; @@ -83,8 +78,9 @@ class FixedIncomeCashFlowServiceTest { } @Test - void fixedIncomeCashFlowNewTest() throws InterruptedException { + void fixedIncomeCashFlowNewTest() { //ARRANGE + clearAllInImdg(fixedIncomeCashFlowImdg); FixedIncomeCashFlowNewRequest newRequest = new FixedIncomeCashFlowNewRequest(); newRequest.setSecuritySymbol(SECURITY_SYMBOL_STR); newRequest.setNominalValue(TEST_BIG_DECIMAL); @@ -105,14 +101,14 @@ class FixedIncomeCashFlowServiceTest { addRecordToKafka((MockConsumer) fixedIncomeCashFlowService.getConsumer(), TOPIC_FIXED_INCOME_CASH_FLOW_NEW, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); FixedIncomeCashFlow resultNew = fixedIncomeCashFlowImdg.getSingleObjectBySQL(String.format("securityId = %s", SECURITY_SYMBOL_STR)); predictableFixedIncomeCashFlow.setId(resultNew.getId()); FIXED_INCOME_CASH_FLOW_MATCHER.assertMatch(resultNew, predictableFixedIncomeCashFlow); } @Test - void fixedIncomeCashFlowUpdateTest() throws InterruptedException { + void fixedIncomeCashFlowUpdateTest() { //ARRANGE FixedIncomeCashFlow existFixedIncomeCashFlow = new FixedIncomeCashFlow(); existFixedIncomeCashFlow.setSecurityId(SECURITY_SYMBOL_LONG); @@ -143,7 +139,7 @@ class FixedIncomeCashFlowServiceTest { addRecordToKafka((MockConsumer) fixedIncomeCashFlowService.getConsumer(), TOPIC_FIXED_INCOME_CASH_FLOW_UPDATE, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(id, mockProducer, producerRecord); + waitingSendAndCheckRecord(id, mockProducer); FixedIncomeCashFlow resultUpdate = fixedIncomeCashFlowImdg.getSingleObjectBySQL(String.format("securityId = %s", SECURITY_SYMBOL_STR)); predictableFixedIncomeCashFlow.setId(id); FIXED_INCOME_CASH_FLOW_MATCHER.assertMatch(resultUpdate, predictableFixedIncomeCashFlow); diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java index 4223553d9..b9599ce8c 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/FixedIncomeSecurityServiceTest.java @@ -55,7 +55,7 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) fixedIncomeSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); FixedIncomeSecurity equityResult = fixedIncomeSecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", fixedIncomePrediction.getFullName())); fixedIncomePrediction.setId(equityResult.getId()); @@ -96,7 +96,7 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) fixedIncomeSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); FixedIncomeSecurity equityResult = fixedIncomeSecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", fixedIncomePrediction.getFullName())); fixedIncomePrediction.setId(equityResult.getId()); @@ -138,7 +138,7 @@ public class FixedIncomeSecurityServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) fixedIncomeSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); FixedIncomeSecurity equityResult = fixedIncomeSecurityImdg.getSingleObjectBySQL(String.format("fullName = %s", fixedIncomePrediction.getFullName())); fixedIncomePrediction.setId(equityResult.getId()); diff --git a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java index 073485b64..c9709e640 100644 --- a/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java +++ b/clearing-parent/securities-service/src/test/java/ru/spcex/clearing/securities/service/MoneyMarketSecurityServiceTest.java @@ -75,7 +75,7 @@ public class MoneyMarketSecurityServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) moneyMarketSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); MoneyMarketSecurity moneyMarketSecurityResult = moneyMarketSecurityMap.getSingleObjectBySQL(String.format("fullName = %s", moneyMarketSecurityFactory.getFullName())); moneyMarketSecurityPrediction.setId(moneyMarketSecurityResult.getId()); @@ -118,7 +118,7 @@ public class MoneyMarketSecurityServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) moneyMarketSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); MoneyMarketSecurity moneyMarketSecurityResult = moneyMarketSecurityMap.getSingleObjectBySQL(String.format("fullName = %s", moneyMarketSecurityFactory.getFullName())); moneyMarketSecurityPrediction.setId(moneyMarketSecurityResult.getId()); @@ -167,7 +167,7 @@ public class MoneyMarketSecurityServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) moneyMarketSecurityService.getConsumer(), TOPIC, PARTITION, 0, jsonString); //ASSERT - waitingWhenAddedRecordAndCheckIt(ID, mockProducer, producerRecord); + waitingSendAndCheckRecord(ID, mockProducer); MoneyMarketSecurity moneyMarketSecurityResult = moneyMarketSecurityMap.getSingleObjectBySQL(String.format("fullName = %s", moneyMarketSecurityFactory.getFullName())); moneyMarketSecurityPrediction.setId(moneyMarketSecurityResult.getId()); diff --git a/clearing-parent/test-clearing/pom.xml b/clearing-parent/test-clearing/pom.xml index 65746a7de..945611557 100644 --- a/clearing-parent/test-clearing/pom.xml +++ b/clearing-parent/test-clearing/pom.xml @@ -68,5 +68,9 @@ ru.spcex.platform platform-enum + + org.springframework.boot + spring-boot-test + diff --git a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java index 11b6871de..322141ff7 100644 --- a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java +++ b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/TestUtils.java @@ -4,11 +4,14 @@ import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; -import org.apache.kafka.clients.producer.MockProducer; +import org.apache.kafka.clients.producer.Producer; import org.apache.kafka.clients.producer.ProducerRecord; import org.apache.kafka.clients.producer.RecordMetadata; import org.apache.kafka.common.TopicPartition; import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.requestreply.ReplyingKafkaTemplate; import ru.spcex.clearing.platform.messaging.domain.ActionType; import ru.spcex.clearing.platform.messaging.domain.BaseRequest; import ru.spcex.clearing.platform.messaging.domain.Consts; @@ -17,6 +20,7 @@ import ru.spcex.clearing.platform.messaging.service.Status; import ru.spcex.platform.classes.base.SpcexObjectBase; import ru.spcex.platform.imdg.api.Imdg; +import java.lang.reflect.Field; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -27,17 +31,50 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.mockito.Mockito.timeout; -import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.*; import static ru.spcex.clearing.platform.messaging.service.Status.Success; import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.config.ImdgTestConfig.defaultAdminId; +import static ru.spcex.clearing.test.config.KafkaTestConfig.getCaptor; public class TestUtils { public static final MatcherFactory.Matcher> BASE_REQUEST_MATCHER = usingIgnoringFieldsComparator(); private static final ObjectMapper objectMapper = new ObjectMapper(); - public static void waitingWhenAddedRecordAndCheckIt(Long id, MockProducer mockProducer, ArgumentCaptor producerRecord) { + public static void waitingSendAndCheckRecord(Long id, Producer mockProducer, ArgumentCaptor producerRecord) { + //waiting for kafka send message (finale event) + verify(mockProducer, timeout(30_000L).times(1)) + .send(producerRecord.capture()); + checkRecord(id, producerRecord); + } + + public static void waitingSendAndCheckRecord(Long id, Producer mockProducer) { + ArgumentCaptor producerRecord = getCaptor(mockProducer); + //waiting for kafka send message (finale event) + verify(mockProducer, timeout(30_000L).times(1)) + .send(producerRecord.capture()); + checkRecord(id, producerRecord); + } + + public static void waitingSendAndCheckRecord(Long id, KafkaTemplate kafkaTemplate) { + ArgumentCaptor producerRecord = getCaptor(kafkaTemplate); + //waiting for kafka send message (finale event) + verify(kafkaTemplate, timeout(30_000L).times(1)) + .send(producerRecord.capture()); + checkRecord(id, producerRecord); + } + + public static void waitingSendAndReceiveAndCheckRecord(Long id, KafkaTemplate kafkaTemplate) { + ReplyingKafkaTemplate rplKafkaTemplate = (ReplyingKafkaTemplate) kafkaTemplate; + ArgumentCaptor producerRecord = getCaptor(kafkaTemplate); + + //waiting for kafka send message (finale event) + verify(rplKafkaTemplate, timeout(30_000L).times(1)) + .sendAndReceive(producerRecord.capture()); + checkRecord(id, producerRecord); + } + + public static void checkRecord(Long id, ArgumentCaptor producerRecord) { BaseRequest predictableBaseRequest = new BaseRequest<>(); predictableBaseRequest.setId(id); predictableBaseRequest.setActionType(ActionType.SYSTEM); @@ -46,20 +83,16 @@ public class TestUtils { requestInfoUpdate.setStatus(Success); predictableBaseRequest.setRequestPayload(requestInfoUpdate); - //waiting for kafka producer send message (finale event) - verify(mockProducer, timeout(30_000L).times(1)) - .send(producerRecord.capture()); - BaseRequest baseRequestResult = (BaseRequest) producerRecord.getValue().value(); assertEquals(Consts.REQUEST_INFO_UPDATE, producerRecord.getValue().topic()); BASE_REQUEST_MATCHER.assertMatch(baseRequestResult, predictableBaseRequest); } public static void waitingWhenTryAddRecordAndCheckError(Long id, - MockProducer mockProducer, - ArgumentCaptor producerRecord, + Producer mockProducer, String errorCode, List errorMessageArgs) { + ArgumentCaptor producerRecord = getCaptor(mockProducer); BaseRequest predictableBaseRequest = new BaseRequest<>(); predictableBaseRequest.setId(id); predictableBaseRequest.setActionType(ActionType.SYSTEM); @@ -122,6 +155,21 @@ public class TestUtils { values.forEach(imdg::delete); } + public static T getMockForFildObj(T from, V obj, String fildName) { + T mock = Mockito.mock((Class) from.getClass(), withSettings() + .serializable() + .spiedInstance(from) + .defaultAnswer(CALLS_REAL_METHODS)); + try { + Field dbServiceField = obj.getClass().getDeclaredField(fildName); + dbServiceField.setAccessible(true); + dbServiceField.set(obj, mock); + } catch (NoSuchFieldException | IllegalAccessException e) { + throw new RuntimeException(e); + } + return mock; + } + public static class FutureRecordMetadata implements Future { @Override public boolean cancel(boolean mayInterruptIfRunning) { diff --git a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/config/KafkaTestConfig.java b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/config/KafkaTestConfig.java index 69665a7f2..ecc76b56c 100644 --- a/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/config/KafkaTestConfig.java +++ b/clearing-parent/test-clearing/src/main/java/ru/spcex/clearing/test/config/KafkaTestConfig.java @@ -1,31 +1,135 @@ package ru.spcex.clearing.test.config; +import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.MockConsumer; 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.clients.producer.ProducerRecord; +import org.mockito.ArgumentCaptor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.boot.test.mock.mockito.MockReset; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; import org.springframework.context.annotation.Scope; +import org.springframework.kafka.core.KafkaTemplate; +import org.springframework.kafka.requestreply.ReplyingKafkaTemplate; +import org.springframework.kafka.requestreply.RequestReplyFuture; +import org.springframework.kafka.support.SendResult; +import org.springframework.util.concurrent.ListenableFuture; import ru.spcex.clearing.imdg.IMDGDistributedNames; import ru.spcex.clearing.platform.messaging.service.RequestInfo; import ru.spcex.clearing.platform.messaging.service.sender.KafkaSender; +import ru.spcex.clearing.test.TestUtils; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgId; import ru.spcex.platform.imdg.api.ImdgProvider; -@Configuration -public class KafkaTestConfig { +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.function.Supplier; + +import static org.mockito.Mockito.*; + +@Configuration +@Import(ImdgTestConfig.class) +public class KafkaTestConfig { + public final static Map, ArgumentCaptor> producerCaptors = new HashMap<>(); + public final static Map, ArgumentCaptor> templateCaptors = new HashMap<>(); + + //из-за очисткой перед каждым тестом(MockReset.withSettings(MockReset.AFTER) необходимо каждый раз обновлять doReturn + public static ArgumentCaptor getCaptor(Producer mockProducer){ + ArgumentCaptor captor = producerCaptors.get(mockProducer); + setFuture(captor, mockProducer); + return captor; + } + + public static ArgumentCaptor getCaptor(KafkaTemplate kafkaTemplate){ + ArgumentCaptor captor = templateCaptors.get(kafkaTemplate); + setFuture(captor, (ReplyingKafkaTemplate) kafkaTemplate); + return captor; + } + + public static void setFuture(ArgumentCaptor captor, Producer mockProducer){ + TestUtils.FutureRecordMetadata future = spy(new TestUtils.FutureRecordMetadata()); + doReturn(future).when(mockProducer).send(captor.capture()); + } + public static void setFuture(ArgumentCaptor recordArgumentCaptor, ReplyingKafkaTemplate kafkaTemplate){ + + //sendToQueueWaitForAnswer + RequestReplyFuture replyFuture = spy(RequestReplyFuture.class); + + doReturn(replyFuture).when(kafkaTemplate).sendAndReceive(recordArgumentCaptor.capture()); + + ConsumerRecord consumerRecord = mock(ConsumerRecord.class); + try { + doReturn(consumerRecord).when(replyFuture).get(10, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException | ClassCastException e) { + if (e instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } + } + doReturn(null).when(consumerRecord).value(); + + //sendRequestToQueue + ListenableFuture> send = mock(ListenableFuture.class); + doReturn(send).when(kafkaTemplate).send(recordArgumentCaptor.capture()); + try { + doReturn(null).when(send).get(); + } catch (InterruptedException | ExecutionException e) { + if (e instanceof InterruptedException) { + Thread.currentThread().interrupt(); + } + } + } + +// @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) + @Bean("mockProducer") + public Producer kafkaProducer() { + Producer mockProducer = mock(MockProducer.class, MockReset.withSettings(MockReset.AFTER)); + ArgumentCaptor recordArgumentCaptor = ArgumentCaptor.forClass(ProducerRecord.class); + setFuture(recordArgumentCaptor, mockProducer); + producerCaptors.put(mockProducer, recordArgumentCaptor); + return mockProducer; + } - @Autowired @Bean - public KafkaSender kafkaSender(Producer kafkaProducer, - ImdgProvider imdgProvider) { + public KafkaSender kafkaSender(ImdgProvider imdgProvider, Producer mockProducer) { ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator(); return KafkaSender .setup() - .producer(kafkaProducer) + .producer(mockProducer) + .idGenerator(imdgIdGenerator::nextId) + .imdgProvider(s -> { + Imdg imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RequestInfo, RequestInfo.class); + return imdg::insert; + }) + .build(); + } + + @Bean("kafkaTestTemplate") + public KafkaTemplate kafkaTemplate() { + ReplyingKafkaTemplate kafkaTemplate = mock(ReplyingKafkaTemplate.class, MockReset.withSettings(MockReset.AFTER)); + ArgumentCaptor recordArgumentCaptor = ArgumentCaptor.forClass(ProducerRecord.class); + setFuture(recordArgumentCaptor, kafkaTemplate); + templateCaptors.put(kafkaTemplate, recordArgumentCaptor); + return kafkaTemplate; + } + + @Autowired + @Bean + public Supplier kafkaSenderSupplier(KafkaTemplate kafkaTemplate, + @Qualifier("hazelcastServiceTest") ImdgProvider imdgProvider) { + ImdgId imdgIdGenerator = imdgProvider.getImdgIdGenerator(); + return () -> KafkaSender + .setup() + .setKafkaTemplate(kafkaTemplate) .idGenerator(imdgIdGenerator::nextId) .imdgProvider(s -> { Imdg imdg = imdgProvider.getImdg(IMDGDistributedNames.Map_RequestInfo, RequestInfo.class); diff --git a/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java b/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java index 7b89a2c00..42a708c67 100644 --- a/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java +++ b/clearing-parent/trade-importer/src/main/java/ru/spcex/clearing/trade/importer/services/TradeImporterService.java @@ -40,7 +40,7 @@ public class TradeImporterService { private final Supplier kafka; private final IMessageResolver messageResolver; - @Value("${trade-importer.database.schema}") + @Value("${trade-importer.database.schema:SPVB_TS}") private String schema; diff --git a/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/AbstractServiceTest.java b/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/AbstractServiceTest.java index 84949d3e3..18983dd63 100644 --- a/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/AbstractServiceTest.java +++ b/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/AbstractServiceTest.java @@ -1,20 +1,13 @@ package ru.spcex.clearing.trade.importer; -import org.apache.kafka.clients.producer.MockProducer; -import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.ArgumentCaptor; -import org.mockito.Captor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.kafka.core.KafkaTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import ru.clearing.classes.statics.data.misc.STrades; -import ru.clearing.classes.statics.data.scheduler.PlannerAllToday; import ru.spcex.clearing.imdg.IMDGDistributedNames; -import ru.spcex.clearing.test.MatcherFactory; -import ru.spcex.clearing.test.TestUtils; import ru.spcex.clearing.test.config.ImdgTestConfig; import ru.spcex.clearing.test.config.KafkaTestConfig; import ru.spcex.clearing.trade.importer.config.ErrorResolverConfig; @@ -25,9 +18,6 @@ import ru.spcex.clearing.trade.importer.services.TradeImporterService; import ru.spcex.platform.imdg.api.Imdg; import ru.spcex.platform.imdg.api.ImdgProvider; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.spy; -import static ru.spcex.clearing.test.MatcherFactory.usingIgnoringFieldsComparator; import static ru.spcex.clearing.test.config.ImdgTestConfig.currentID; import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProviderAndAddAdminWithDefaultId; @@ -41,14 +31,13 @@ import static ru.spcex.clearing.test.config.ImdgTestConfig.waitAvailableImdgProv ImdgTestConfig.class, KafkaTestConfig.class}) public abstract class AbstractServiceTest { - protected static final MatcherFactory.Matcher PLANNER_ALL_TODAY_MATCHER = usingIgnoringFieldsComparator("created", "updated"); protected static final long id = currentID.getAndIncrement(); protected Imdg sTradesImdg; - @Captor - protected ArgumentCaptor producerRecord; - @MockBean - protected MockProducer mockProducer; + @Autowired + @Qualifier("kafkaTestTemplate") + protected KafkaTemplate kafkaTemplate; + @Autowired @Qualifier("hazelcastServiceTest") protected ImdgProvider imdgProvider; @@ -56,8 +45,5 @@ public abstract class AbstractServiceTest { protected void init() { waitAvailableImdgProviderAndAddAdminWithDefaultId(); this.sTradesImdg = imdgProvider.getImdg(IMDGDistributedNames.Map_STrades, STrades.class); - - TestUtils.FutureRecordMetadata future = spy(new TestUtils.FutureRecordMetadata()); - doReturn(future).when(mockProducer).send(producerRecord.capture()); } } diff --git a/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/config/config/DbTestConnectionConfig.java b/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/config/config/DbTestConnectionConfig.java index c5a0b68cb..d295c5f19 100644 --- a/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/config/config/DbTestConnectionConfig.java +++ b/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/config/config/DbTestConnectionConfig.java @@ -20,7 +20,7 @@ public class DbTestConnectionConfig { public SingleConnectionDataSource dataSource() { String login = "sa"; String password = "Aa123456"; - String dbUrl = "jdbc:sqlserver://localhost:1433;database=SPVB_TS;schema=dbo"; + String dbUrl = "jdbc:sqlserver://10.200.200.144:1433;database=ni"; SingleConnectionDataSource cpds = new SingleConnectionDataSource(); diff --git a/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/services/TradeImporterServiceTest.java b/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/services/TradeImporterServiceTest.java index fdd014270..12f55e0c9 100644 --- a/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/services/TradeImporterServiceTest.java +++ b/clearing-parent/trade-importer/src/test/java/ru/spcex/clearing/trade/importer/services/TradeImporterServiceTest.java @@ -1,9 +1,11 @@ package ru.spcex.clearing.trade.importer.services; import org.apache.kafka.clients.consumer.MockConsumer; +import org.apache.kafka.clients.producer.ProducerRecord; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; +import org.mockito.ArgumentCaptor; import org.springframework.beans.factory.annotation.Autowired; import ru.clearing.classes.statics.data.misc.STrades; import ru.spcex.clearing.platform.messaging.domain.cud.schedule.LauncherCommandRequest; @@ -22,6 +24,7 @@ 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.KafkaTestConfig.getCaptor; class TradeImporterServiceTest extends AbstractServiceTest { public static final MatcherFactory.Matcher S_TRADES_MATCHER = usingIgnoringFieldsComparator(); @@ -63,8 +66,9 @@ class TradeImporterServiceTest extends AbstractServiceTest { addRecordToKafka((MockConsumer) launcherCommandReceiver.getConsumer(), Task.getOfTrades.topic(), 0, 1, getJsonStringForNew(new LauncherCommandRequest(),0)); //waiting for kafka producer send message - verify(mockProducer, timeout(30_000L).times(1)) - .send(producerRecord.capture()); + ArgumentCaptor captor = getCaptor(kafkaTemplate); + verify(kafkaTemplate, timeout(30_000L).times(1)) + .send(captor.capture()); STrades sTrades = tradeImporterService.getSTradesFromImdg(sTrade, sTradesImdg);