From 8d33f194530ad9eabf6c5edc91e20e7d53fbf869 Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Wed, 25 Sep 2024 15:14:55 +0300 Subject: [PATCH 1/3] RED-10106 - adjusted code to work with latest common deps --- .../build.gradle.kts | 4 +- .../QueueProviderConfiguration.java | 198 +++++++++++++ .../TenantMessagingConfigurationImpl.java | 10 - .../migration/SaasMigrationService.java | 2 +- .../TenantExchangeMessageReceiverImpl.java | 188 ------------- .../AbstractPersistenceServerServiceTest.java | 266 +++++++++--------- .../src/test/resources/application.yml | 2 + .../build.gradle.kts | 5 +- 8 files changed, 345 insertions(+), 330 deletions(-) create mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/QueueProviderConfiguration.java delete mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfigurationImpl.java delete mode 100644 persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/TenantExchangeMessageReceiverImpl.java diff --git a/persistence-service-v1/persistence-service-processor-v1/build.gradle.kts b/persistence-service-v1/persistence-service-processor-v1/build.gradle.kts index be723feaa..689db69dc 100644 --- a/persistence-service-v1/persistence-service-processor-v1/build.gradle.kts +++ b/persistence-service-v1/persistence-service-processor-v1/build.gradle.kts @@ -44,8 +44,8 @@ dependencies { } implementation("com.knecon.fforesight:llm-service-api:1.17.0") api("com.knecon.fforesight:jobs-commons:0.10.0") - api("com.knecon.fforesight:tenant-commons:0.30.0") - api("com.knecon.fforesight:database-tenant-commons:0.24.0") { + api("com.knecon.fforesight:tenant-commons:0.31.0") + api("com.knecon.fforesight:database-tenant-commons:0.28.0") { exclude(group = "com.knecon.fforesight", module = "tenant-commons") } api("com.knecon.fforesight:keycloak-commons:0.30.0") { diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/QueueProviderConfiguration.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/QueueProviderConfiguration.java new file mode 100644 index 000000000..6365318b6 --- /dev/null +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/QueueProviderConfiguration.java @@ -0,0 +1,198 @@ +package com.iqser.red.service.persistence.management.v1.processor.configuration; + +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.ANALYSIS_FLAG_CALCULATION_REQUEST_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.ANALYSIS_FLAG_CALCULATION_REQUEST_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.AZURE_ENTITY_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.AZURE_ENTITY_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.AZURE_ENTITY_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.CHUNKING_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.CHUNKING_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.CHUNKING_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.CV_ANALYSIS_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.CV_ANALYSIS_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.CV_ANALYSIS_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.DOWNLOAD_COMPRESSION_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.DOWNLOAD_COMPRESSION_REQUEST_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.DOWNLOAD_COMPRESSION_REQUEST_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.DOWNLOAD_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.DOWNLOAD_REQUEST_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.DOWNLOAD_REQUEST_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.ENTITY_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.ENTITY_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.ENTITY_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.EXPORT_DOWNLOAD_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.EXPORT_DOWNLOAD_REQUEST_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.EXPORT_DOWNLOAD_REQUEST_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.IMAGE_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.IMAGE_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.IMAGE_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.LLM_NER_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.LLM_NER_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.LLM_NER_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.OCR_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.OCR_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.OCR_STATUS_UPDATE_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.OCR_STATUS_UPDATE_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.PDFTRON_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.PDFTRON_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.PDFTRON_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.REDACTION_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.REDACTION_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.REDACTION_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.REPORT_RESPONSE_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.REPORT_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.REPORT_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.SEARCH_BULK_LOCAL_TERM_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.SEARCH_BULK_LOCAL_TERM_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.SEARCH_BULK_LOCAL_TERM_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.VISUAL_LAYOUT_PARSING_DLQ; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.VISUAL_LAYOUT_PARSING_RESPONSE_EXCHANGE; +import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.VISUAL_LAYOUT_PARSING_RESPONSE_QUEUE_PREFIX; +import static com.iqser.red.service.persistence.management.v1.processor.dataexchange.ExportDownloadMessageReceiver.EXPORT_DOWNLOAD_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadCompressionMessageReceiver.DOWNLOAD_COMPRESSION_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver.DOWNLOAD_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadReportMessageReceiver.REPORT_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.download.RedactionResultMessageReceiver.PDFTRON_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.AnalysisFlagsCalculationMessageReceiver.ANALYSIS_FLAG_CALCULATION_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.AzureNerMessageReceiver.AZURE_ENTITY_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.ChunkingMessageReceiver.CHUNKING_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.CvAnalysisMessageReceiver.CV_ANALYSIS_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.ImageMessageReceiver.IMAGE_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.LayoutParsingFinishedMessageReceiver.LAYOUT_PARSING_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.NerMessageReceiver.ENTITY_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.NerMessageReceiver.LLM_ENTITY_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.OCRProcessingMessageReceiver.OCR_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.OCRProcessingMessageReceiver.OCR_STATUS_UPDATE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.RedactionAnalysisResponseReceiver.REDACTION_RESPONSE_LISTENER_ID; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.SearchTermOccurrencesResponseReceiver.SEARCH_BULK_LOCAL_TERM_RESPONSE_LISTENER; +import static com.iqser.red.service.persistence.management.v1.processor.service.queue.VisualLayoutParsingMessageReceiver.VISUAL_LAYOUT_PARSING_RESPONSE_LISTENER_ID; + +import java.util.Map; +import java.util.Set; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingQueueNames; +import com.knecon.fforesight.tenantcommons.model.TenantQueueConfiguration; +import com.knecon.fforesight.tenantcommons.model.TenantQueueProvider; + +@Configuration +public class QueueProviderConfiguration { + + @Bean + public TenantQueueProvider tenantQueueProvider() { + + var queues = Set.of(TenantQueueConfiguration.builder() + .listenerId(DOWNLOAD_LISTENER_ID) + .exchangeName(DOWNLOAD_REQUEST_EXCHANGE) + .queuePrefix(DOWNLOAD_REQUEST_QUEUE_PREFIX) + .dlqName(DOWNLOAD_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(DOWNLOAD_COMPRESSION_LISTENER_ID) + .exchangeName(DOWNLOAD_COMPRESSION_REQUEST_EXCHANGE) + .queuePrefix(DOWNLOAD_COMPRESSION_REQUEST_QUEUE_PREFIX) + .dlqName(DOWNLOAD_COMPRESSION_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(EXPORT_DOWNLOAD_LISTENER_ID) + .exchangeName(EXPORT_DOWNLOAD_REQUEST_EXCHANGE) + .queuePrefix(EXPORT_DOWNLOAD_REQUEST_QUEUE_PREFIX) + .dlqName(EXPORT_DOWNLOAD_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(ANALYSIS_FLAG_CALCULATION_LISTENER_ID) + .exchangeName(ANALYSIS_FLAG_CALCULATION_REQUEST_EXCHANGE) + .queuePrefix(ANALYSIS_FLAG_CALCULATION_REQUEST_QUEUE_PREFIX) + .build(), + TenantQueueConfiguration.builder() + .listenerId(REDACTION_RESPONSE_LISTENER_ID) + .exchangeName(REDACTION_RESPONSE_EXCHANGE) + .queuePrefix(REDACTION_RESPONSE_QUEUE_PREFIX) + .dlqName(REDACTION_DLQ) + .arguments(Map.of("x-max-priority", 2)) + .build(), + TenantQueueConfiguration.builder() + .listenerId(SEARCH_BULK_LOCAL_TERM_RESPONSE_LISTENER) + .exchangeName(SEARCH_BULK_LOCAL_TERM_RESPONSE_EXCHANGE) + .queuePrefix(SEARCH_BULK_LOCAL_TERM_RESPONSE_QUEUE_PREFIX) + .dlqName(SEARCH_BULK_LOCAL_TERM_DLQ) + .arguments(Map.of("x-max-priority", 2)) + .build(), + TenantQueueConfiguration.builder() + .listenerId(PDFTRON_RESPONSE_LISTENER_ID) + .exchangeName(PDFTRON_RESPONSE_EXCHANGE) + .queuePrefix(PDFTRON_RESPONSE_QUEUE_PREFIX) + .dlqName(PDFTRON_DLQ) + .arguments(Map.of("x-max-priority", 2)) + .build(), + TenantQueueConfiguration.builder() + .listenerId(REPORT_RESPONSE_LISTENER_ID) + .exchangeName(REPORT_RESPONSE_EXCHANGE) + .queuePrefix(REPORT_RESPONSE_QUEUE_PREFIX) + .dlqName(REPORT_RESPONSE_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(OCR_RESPONSE_LISTENER_ID) + .exchangeName(OCR_RESPONSE_EXCHANGE) + .queuePrefix(OCR_RESPONSE_QUEUE_PREFIX) + .build(), + TenantQueueConfiguration.builder() + .listenerId(OCR_STATUS_UPDATE_LISTENER_ID) + .exchangeName(OCR_STATUS_UPDATE_RESPONSE_EXCHANGE) + .queuePrefix(OCR_STATUS_UPDATE_RESPONSE_QUEUE_PREFIX) + .dlqName(OCR_STATUS_UPDATE_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(IMAGE_RESPONSE_LISTENER_ID) + .exchangeName(IMAGE_RESPONSE_EXCHANGE) + .queuePrefix(IMAGE_RESPONSE_QUEUE_PREFIX) + .dlqName(IMAGE_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(ENTITY_RESPONSE_LISTENER_ID) + .exchangeName(ENTITY_RESPONSE_EXCHANGE) + .queuePrefix(ENTITY_RESPONSE_QUEUE_PREFIX) + .dlqName(ENTITY_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(AZURE_ENTITY_RESPONSE_LISTENER_ID) + .exchangeName(AZURE_ENTITY_RESPONSE_EXCHANGE) + .queuePrefix(AZURE_ENTITY_RESPONSE_QUEUE_PREFIX) + .dlqName(AZURE_ENTITY_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(CHUNKING_RESPONSE_LISTENER_ID) + .exchangeName(CHUNKING_RESPONSE_EXCHANGE) + .queuePrefix(CHUNKING_RESPONSE_QUEUE_PREFIX) + .dlqName(CHUNKING_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(LLM_ENTITY_RESPONSE_LISTENER_ID) + .exchangeName(LLM_NER_RESPONSE_EXCHANGE) + .queuePrefix(LLM_NER_RESPONSE_QUEUE_PREFIX) + .dlqName(LLM_NER_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(CV_ANALYSIS_RESPONSE_LISTENER_ID) + .exchangeName(CV_ANALYSIS_RESPONSE_EXCHANGE) + .queuePrefix(CV_ANALYSIS_RESPONSE_QUEUE_PREFIX) + .dlqName(CV_ANALYSIS_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(VISUAL_LAYOUT_PARSING_RESPONSE_LISTENER_ID) + .exchangeName(VISUAL_LAYOUT_PARSING_RESPONSE_EXCHANGE) + .queuePrefix(VISUAL_LAYOUT_PARSING_RESPONSE_QUEUE_PREFIX) + .dlqName(VISUAL_LAYOUT_PARSING_DLQ) + .build(), + TenantQueueConfiguration.builder() + .listenerId(LAYOUT_PARSING_RESPONSE_LISTENER_ID) + .exchangeName(LayoutParsingQueueNames.LAYOUT_PARSING_RESPONSE_EXCHANGE) + .queuePrefix(LayoutParsingQueueNames.LAYOUT_PARSING_RESPONSE_QUEUE_PREFIX) + .build()); + return new TenantQueueProvider(queues); + } + +} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfigurationImpl.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfigurationImpl.java deleted file mode 100644 index 4a4f41e24..000000000 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/configuration/TenantMessagingConfigurationImpl.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.iqser.red.service.persistence.management.v1.processor.configuration; - -import org.springframework.context.annotation.Configuration; - -import com.knecon.fforesight.tenantcommons.queue.TenantMessagingConfiguration; - -@Configuration -public class TenantMessagingConfigurationImpl extends TenantMessagingConfiguration { - -} diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java index 87530d203..5f8a65e67 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/migration/SaasMigrationService.java @@ -37,10 +37,10 @@ import com.iqser.red.storage.commons.exception.StorageException; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.service.StorageService; import com.knecon.fforesight.databasetenantcommons.providers.TenantSyncService; -import com.knecon.fforesight.databasetenantcommons.providers.events.TenantSyncEvent; import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingQueueNames; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantProvider; +import com.knecon.fforesight.tenantcommons.model.TenantSyncEvent; import com.knecon.fforesight.tenantcommons.model.UpdateDetailsRequest; import lombok.AccessLevel; diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/TenantExchangeMessageReceiverImpl.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/TenantExchangeMessageReceiverImpl.java deleted file mode 100644 index 9f42f5100..000000000 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/queue/TenantExchangeMessageReceiverImpl.java +++ /dev/null @@ -1,188 +0,0 @@ -package com.iqser.red.service.persistence.management.v1.processor.service.queue; - -import static com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration.*; -import static com.iqser.red.service.persistence.management.v1.processor.dataexchange.ExportDownloadMessageReceiver.EXPORT_DOWNLOAD_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadCompressionMessageReceiver.DOWNLOAD_COMPRESSION_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadMessageReceiver.DOWNLOAD_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.download.DownloadReportMessageReceiver.REPORT_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.download.RedactionResultMessageReceiver.PDFTRON_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.AnalysisFlagsCalculationMessageReceiver.ANALYSIS_FLAG_CALCULATION_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.AzureNerMessageReceiver.AZURE_ENTITY_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.ChunkingMessageReceiver.CHUNKING_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.CvAnalysisMessageReceiver.CV_ANALYSIS_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.ImageMessageReceiver.IMAGE_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.LayoutParsingFinishedMessageReceiver.LAYOUT_PARSING_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.NerMessageReceiver.ENTITY_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.NerMessageReceiver.LLM_ENTITY_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.OCRProcessingMessageReceiver.OCR_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.OCRProcessingMessageReceiver.OCR_STATUS_UPDATE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.RedactionAnalysisResponseReceiver.REDACTION_RESPONSE_LISTENER_ID; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.SearchTermOccurrencesResponseReceiver.SEARCH_BULK_LOCAL_TERM_RESPONSE_LISTENER; -import static com.iqser.red.service.persistence.management.v1.processor.service.queue.VisualLayoutParsingMessageReceiver.VISUAL_LAYOUT_PARSING_RESPONSE_LISTENER_ID; - -import java.util.Map; -import java.util.Set; - -import org.springframework.amqp.rabbit.annotation.RabbitHandler; -import org.springframework.amqp.rabbit.annotation.RabbitListener; -import org.springframework.boot.context.event.ApplicationReadyEvent; -import org.springframework.context.event.EventListener; -import org.springframework.stereotype.Service; - -import com.knecon.fforesight.service.layoutparser.internal.api.queue.LayoutParsingQueueNames; -import com.knecon.fforesight.tenantcommons.TenantProvider; -import com.knecon.fforesight.tenantcommons.model.TenantCreatedEvent; -import com.knecon.fforesight.tenantcommons.model.TenantQueueConfiguration; -import com.knecon.fforesight.tenantcommons.model.TenantResponse; -import com.knecon.fforesight.tenantcommons.queue.RabbitQueueFromExchangeService; -import com.knecon.fforesight.tenantcommons.queue.TenantExchangeMessageReceiver; - -@Service -public class TenantExchangeMessageReceiverImpl extends TenantExchangeMessageReceiver { - - public TenantExchangeMessageReceiverImpl(RabbitQueueFromExchangeService rabbitQueueService, TenantProvider tenantProvider) { - - super(rabbitQueueService, tenantProvider); - } - - - @Override - protected Set getTenantQueueConfigs() { - - return Set.of(TenantQueueConfiguration.builder() - .listenerId(DOWNLOAD_LISTENER_ID) - .exchangeName(DOWNLOAD_REQUEST_EXCHANGE) - .queuePrefix(DOWNLOAD_REQUEST_QUEUE_PREFIX) - .dlqName(DOWNLOAD_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(DOWNLOAD_COMPRESSION_LISTENER_ID) - .exchangeName(DOWNLOAD_COMPRESSION_REQUEST_EXCHANGE) - .queuePrefix(DOWNLOAD_COMPRESSION_REQUEST_QUEUE_PREFIX) - .dlqName(DOWNLOAD_COMPRESSION_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(EXPORT_DOWNLOAD_LISTENER_ID) - .exchangeName(EXPORT_DOWNLOAD_REQUEST_EXCHANGE) - .queuePrefix(EXPORT_DOWNLOAD_REQUEST_QUEUE_PREFIX) - .dlqName(EXPORT_DOWNLOAD_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(ANALYSIS_FLAG_CALCULATION_LISTENER_ID) - .exchangeName(ANALYSIS_FLAG_CALCULATION_REQUEST_EXCHANGE) - .queuePrefix(ANALYSIS_FLAG_CALCULATION_REQUEST_QUEUE_PREFIX) - .build(), - TenantQueueConfiguration.builder() - .listenerId(REDACTION_RESPONSE_LISTENER_ID) - .exchangeName(REDACTION_RESPONSE_EXCHANGE) - .queuePrefix(REDACTION_RESPONSE_QUEUE_PREFIX) - .dlqName(REDACTION_DLQ) - .arguments(Map.of("x-max-priority", 2)) - .build(), - TenantQueueConfiguration.builder() - .listenerId(SEARCH_BULK_LOCAL_TERM_RESPONSE_LISTENER) - .exchangeName(SEARCH_BULK_LOCAL_TERM_RESPONSE_EXCHANGE) - .queuePrefix(SEARCH_BULK_LOCAL_TERM_RESPONSE_QUEUE_PREFIX) - .dlqName(SEARCH_BULK_LOCAL_TERM_DLQ) - .arguments(Map.of("x-max-priority", 2)) - .build(), - TenantQueueConfiguration.builder() - .listenerId(PDFTRON_RESPONSE_LISTENER_ID) - .exchangeName(PDFTRON_RESPONSE_EXCHANGE) - .queuePrefix(PDFTRON_RESPONSE_QUEUE_PREFIX) - .dlqName(PDFTRON_DLQ) - .arguments(Map.of("x-max-priority", 2)) - .build(), - TenantQueueConfiguration.builder() - .listenerId(REPORT_RESPONSE_LISTENER_ID) - .exchangeName(REPORT_RESPONSE_EXCHANGE) - .queuePrefix(REPORT_RESPONSE_QUEUE_PREFIX) - .dlqName(REPORT_RESPONSE_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(OCR_RESPONSE_LISTENER_ID) - .exchangeName(OCR_RESPONSE_EXCHANGE) - .queuePrefix(OCR_RESPONSE_QUEUE_PREFIX) - .build(), - TenantQueueConfiguration.builder() - .listenerId(OCR_STATUS_UPDATE_LISTENER_ID) - .exchangeName(OCR_STATUS_UPDATE_RESPONSE_EXCHANGE) - .queuePrefix(OCR_STATUS_UPDATE_RESPONSE_QUEUE_PREFIX) - .dlqName(OCR_STATUS_UPDATE_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(IMAGE_RESPONSE_LISTENER_ID) - .exchangeName(IMAGE_RESPONSE_EXCHANGE) - .queuePrefix(IMAGE_RESPONSE_QUEUE_PREFIX) - .dlqName(IMAGE_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(ENTITY_RESPONSE_LISTENER_ID) - .exchangeName(ENTITY_RESPONSE_EXCHANGE) - .queuePrefix(ENTITY_RESPONSE_QUEUE_PREFIX) - .dlqName(ENTITY_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(AZURE_ENTITY_RESPONSE_LISTENER_ID) - .exchangeName(AZURE_ENTITY_RESPONSE_EXCHANGE) - .queuePrefix(AZURE_ENTITY_RESPONSE_QUEUE_PREFIX) - .dlqName(AZURE_ENTITY_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(CHUNKING_RESPONSE_LISTENER_ID) - .exchangeName(CHUNKING_RESPONSE_EXCHANGE) - .queuePrefix(CHUNKING_RESPONSE_QUEUE_PREFIX) - .dlqName(CHUNKING_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(LLM_ENTITY_RESPONSE_LISTENER_ID) - .exchangeName(LLM_NER_RESPONSE_EXCHANGE) - .queuePrefix(LLM_NER_RESPONSE_QUEUE_PREFIX) - .dlqName(LLM_NER_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(CV_ANALYSIS_RESPONSE_LISTENER_ID) - .exchangeName(CV_ANALYSIS_RESPONSE_EXCHANGE) - .queuePrefix(CV_ANALYSIS_RESPONSE_QUEUE_PREFIX) - .dlqName(CV_ANALYSIS_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(VISUAL_LAYOUT_PARSING_RESPONSE_LISTENER_ID) - .exchangeName(VISUAL_LAYOUT_PARSING_RESPONSE_EXCHANGE) - .queuePrefix(VISUAL_LAYOUT_PARSING_RESPONSE_QUEUE_PREFIX) - .dlqName(VISUAL_LAYOUT_PARSING_DLQ) - .build(), - TenantQueueConfiguration.builder() - .listenerId(LAYOUT_PARSING_RESPONSE_LISTENER_ID) - .exchangeName(LayoutParsingQueueNames.LAYOUT_PARSING_RESPONSE_EXCHANGE) - .queuePrefix(LayoutParsingQueueNames.LAYOUT_PARSING_RESPONSE_QUEUE_PREFIX) - .build()); - - } - - - @EventListener(ApplicationReadyEvent.class) - public void onApplicationReady() { - - System.out.println("application ready invoked"); - super.initializeQueues(); - } - - - @RabbitHandler - @RabbitListener(queues = "#{tenantMessagingConfigurationImpl.getTenantCreatedQueueName()}") - public void reactToTenantCreation(TenantCreatedEvent tenantCreatedEvent) { - - super.reactToTenantCreation(tenantCreatedEvent); - } - - - @RabbitHandler - @RabbitListener(queues = "#{tenantMessagingConfigurationImpl.getTenantDeletedQueueName()}") - public void reactToTenantDeletion(TenantResponse tenantResponse) { - - super.reactToTenantDeletion(tenantResponse); - - } - -} diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index 8003c6bd1..e5e6156b5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -3,6 +3,8 @@ package com.iqser.red.service.peristence.v1.server.integration.utils; import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_DATABASE; import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_PASSWORD; import static com.iqser.red.service.peristence.v1.server.integration.utils.MongoDBTestContainer.MONGO_USERNAME; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import java.util.ArrayList; @@ -13,17 +15,9 @@ import java.util.Set; import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; -import org.assertj.core.util.Lists; -import org.bson.BsonArray; -import org.bson.BsonDocument; -import org.bson.BsonString; -import org.junit.jupiter.api.AfterEach; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mockito; -import org.quartz.Scheduler; import org.springframework.amqp.rabbit.core.RabbitAdmin; import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.amqp.rabbit.listener.MessageListenerContainer; import org.springframework.amqp.rabbit.listener.RabbitListenerEndpointRegistry; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; @@ -106,8 +100,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist import com.iqser.red.service.persistence.management.v1.processor.service.users.UserService; import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntityLog; import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig; -import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogDocumentRepository; +import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.ComponentLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.repository.EntityLogEntryDocumentRepository; import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.ComponentLogMongoService; @@ -115,12 +109,10 @@ import com.iqser.red.service.persistence.service.v1.api.shared.mongo.service.Ent import com.iqser.red.service.redaction.v1.model.DroolsValidation; import com.iqser.red.storage.commons.service.StorageService; import com.iqser.red.storage.commons.utils.FileSystemBackedStorageService; -import com.knecon.fforesight.databasetenantcommons.providers.TenantCreatedListener; -import com.knecon.fforesight.databasetenantcommons.providers.events.TenantCreatedEvent; +import com.knecon.fforesight.databasetenantcommons.providers.TenantCreatedDatabaseEventHandler; import com.knecon.fforesight.databasetenantcommons.providers.utils.MagicConverter; import com.knecon.fforesight.keycloakcommons.security.TenantAuthenticationManagerResolver; -import com.knecon.fforesight.mongo.database.commons.liquibase.MongoTenantCreatedEvent; -import com.knecon.fforesight.mongo.database.commons.liquibase.MongoTenantCreatedListener; +import com.knecon.fforesight.mongo.database.commons.liquibase.TenantCreatedMongoEventHandler; import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantsClient; @@ -129,21 +121,31 @@ import com.knecon.fforesight.tenantcommons.model.DatabaseConnection; import com.knecon.fforesight.tenantcommons.model.MongoDBConnection; import com.knecon.fforesight.tenantcommons.model.S3StorageConnection; import com.knecon.fforesight.tenantcommons.model.SearchConnection; +import com.knecon.fforesight.tenantcommons.model.TenantCreatedEvent; import com.knecon.fforesight.tenantcommons.model.TenantResponse; import com.mongodb.MongoCommandException; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; import com.mongodb.client.MongoDatabase; - import io.micrometer.prometheus.PrometheusMeterRegistry; import lombok.extern.slf4j.Slf4j; +import org.assertj.core.util.Lists; +import org.bson.BsonArray; +import org.bson.BsonDocument; +import org.bson.BsonString; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mockito; +import org.quartz.Scheduler; @Slf4j @ExtendWith(SpringExtension.class) @EnableFeignClients(basePackageClasses = FileClient.class) @Import(AbstractPersistenceServerServiceTest.TestConfiguration.class) @ContextConfiguration(initializers = {AbstractPersistenceServerServiceTest.Initializer.class}) -@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, properties = "spring-hibernate-query-utils.n-plus-one-queries-detection.error-level=INFO") +@SpringBootTest(classes = Application.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT, + properties = "spring-hibernate-query-utils.n-plus-one-queries-detection.error-level=INFO") public abstract class AbstractPersistenceServerServiceTest { public static final String TENANT_1 = "redaction"; @@ -243,8 +245,6 @@ public abstract class AbstractPersistenceServerServiceTest { protected PrometheusMeterRegistry prometheusMeterRegistry; @MockBean private RabbitAdmin rabbitAdmin; - @MockBean - private RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry; @Autowired private DossierStatusRepository dossierStatusRepository; @Autowired @@ -260,9 +260,9 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired protected EncryptionDecryptionService encryptionDecryptionService; @Autowired - protected TenantCreatedListener tenantCreatedListener; + protected TenantCreatedDatabaseEventHandler tenantCreatedDatabaseEventHandler; @Autowired - protected MongoTenantCreatedListener mongoTenantCreatedListener; + protected TenantCreatedMongoEventHandler tenantCreatedMongoEventHandler; @Autowired protected MongoTestConfig mongoTestConfig; @MockBean @@ -322,51 +322,52 @@ public abstract class AbstractPersistenceServerServiceTest { var allUsers = new ArrayList(); allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() - .userId("manageradmin1@test.com") - .email("manageradmin1@test.com") - .isActive(true) - .roles(Set.of(getAllRoles())) - .build()); + .userId("manageradmin1@test.com") + .email("manageradmin1@test.com") + .isActive(true) + .roles(Set.of(getAllRoles())) + .build()); allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() - .userId("manageradmin2@test.com") - .email("manageradmin2@test.com") - .isActive(true) - .roles(Set.of(getAllRoles())) - .build()); + .userId("manageradmin2@test.com") + .email("manageradmin2@test.com") + .isActive(true) + .roles(Set.of(getAllRoles())) + .build()); allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() - .userId("manageradmin3@test.com") - .email("manageradmin3@test.com") - .isActive(true) - .roles(Set.of(getAllRoles())) - .build()); + .userId("manageradmin3@test.com") + .email("manageradmin3@test.com") + .isActive(true) + .roles(Set.of(getAllRoles())) + .build()); Set allRolesWithoutValid = Arrays.stream(getAllRoles()) .collect(Collectors.toSet()); allRolesWithoutValid.remove("RED_USER"); allRolesWithoutValid.remove("RED_MANAGER"); allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder() - .userId("manageradmin4@test.com") - .email("manageradmin4@test.com") - .isActive(true) - .roles(allRolesWithoutValid) - .build()); + .userId("manageradmin4@test.com") + .email("manageradmin4@test.com") + .isActive(true) + .roles(allRolesWithoutValid) + .build()); when(usersClient.getAllUsers(false)).thenReturn(allUsers); when(usersClient.getAllUsers(true)).thenReturn(allUsers); // doNothing().when(pdfTronRedactionClient).testDigitalCurrentSignature(Mockito.any()); - when(rabbitAdmin.getQueueInfo(Mockito.any())).thenReturn(null); - when(entityLogService.getEntityLog(Mockito.any(), Mockito.any())).thenReturn(new EntityLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0)); - when(entityLogService.getEntityLog(Mockito.any(), Mockito.any(), Mockito.any(), Mockito.anyBoolean())).thenReturn(new EntityLog(1, - 1, - Lists.newArrayList(), - null, - 0, - 0, - 0, - 0)); - when(redactionClient.testRules(Mockito.any())).thenReturn(DroolsValidation.builder() - .syntaxErrorMessages(Collections.emptyList()) - .deprecatedWarnings(Collections.emptyList()) - .build()); + when(rabbitAdmin.getQueueInfo(any())).thenReturn(null); + + when(entityLogService.getEntityLog(any(), any())).thenReturn(new EntityLog(1, 1, Lists.newArrayList(), null, 0, 0, 0, 0)); + when(entityLogService.getEntityLog(any(), any(), any(), Mockito.anyBoolean())).thenReturn(new EntityLog(1, + 1, + Lists.newArrayList(), + null, + 0, + 0, + 0, + 0)); + when(redactionClient.testRules(any())).thenReturn(DroolsValidation.builder() + .syntaxErrorMessages(Collections.emptyList()) + .deprecatedWarnings(Collections.emptyList()) + .build()); } @@ -385,41 +386,41 @@ public abstract class AbstractPersistenceServerServiceTest { redactionTenant.setDisplayName(TENANT_1); redactionTenant.setAuthDetails(new AuthDetails()); redactionTenant.setDatabaseConnection(DatabaseConnection.builder() - .driver("postgresql") - .host(postgreSQLContainerMaster.getHost()) - .port(port) - .database("integration-tests-db-master") - .schema("public") - .username("sa") - .password(encryptionDecryptionService.encrypt("sa")) - .build()); + .driver("postgresql") + .host(postgreSQLContainerMaster.getHost()) + .port(port) + .database("integration-tests-db-master") + .schema("public") + .username("sa") + .password(encryptionDecryptionService.encrypt("sa")) + .build()); redactionTenant.setSearchConnection(SearchConnection.builder() - .hosts(Set.of("elasticsearchHost")) - .port(9200) - .scheme("https") - .username("elastic") - .numberOfShards("1") - .numberOfReplicas("5") - .build()); + .hosts(Set.of("elasticsearchHost")) + .port(9200) + .scheme("https") + .username("elastic") + .numberOfShards("1") + .numberOfReplicas("5") + .build()); redactionTenant.setS3StorageConnection(S3StorageConnection.builder() - .key("key") - .secret("secret") - .signerType("signerType") - .bucketName("bucketName") - .region("eu") - .endpoint("endpoint") - .build()); + .key("key") + .secret("secret") + .signerType("signerType") + .bucketName("bucketName") + .region("eu") + .endpoint("endpoint") + .build()); redactionTenant.setMongoDBConnection(MongoDBConnection.builder() - .prefix("mongodb") - .username(MONGO_USERNAME) - .password(encryptionDecryptionService.encrypt(MONGO_PASSWORD)) - .address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort()) - .database(MONGO_DATABASE) - .options("") - .build()); + .prefix("mongodb") + .username(MONGO_USERNAME) + .password(encryptionDecryptionService.encrypt(MONGO_PASSWORD)) + .address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort()) + .database(MONGO_DATABASE) + .options("") + .build()); var redactionTenant2 = new TenantResponse(); redactionTenant2.setTenantId(TENANT_2); @@ -427,51 +428,51 @@ public abstract class AbstractPersistenceServerServiceTest { redactionTenant2.setDisplayName(TENANT_2); redactionTenant2.setAuthDetails(new AuthDetails()); redactionTenant2.setDatabaseConnection(DatabaseConnection.builder() - .driver("postgresql") - .host(postgreSQLContainerMaster.getHost()) - .port(port) - .database("integration-tests-db-master") - .schema("public") - .username("sa") - .password(encryptionDecryptionService.encrypt("sa")) - .build()); + .driver("postgresql") + .host(postgreSQLContainerMaster.getHost()) + .port(port) + .database("integration-tests-db-master") + .schema("public") + .username("sa") + .password(encryptionDecryptionService.encrypt("sa")) + .build()); redactionTenant2.setSearchConnection(SearchConnection.builder() - .hosts(Set.of("elasticsearchHost")) - .port(9200) - .scheme("https") - .username("elastic") - .numberOfShards("1") - .numberOfReplicas("5") - .build()); + .hosts(Set.of("elasticsearchHost")) + .port(9200) + .scheme("https") + .username("elastic") + .numberOfShards("1") + .numberOfReplicas("5") + .build()); redactionTenant2.setS3StorageConnection(S3StorageConnection.builder() - .key("key") - .secret("secret") - .signerType("signerType") - .bucketName("bucketName") - .region("eu") - .endpoint("endpoint") - .build()); + .key("key") + .secret("secret") + .signerType("signerType") + .bucketName("bucketName") + .region("eu") + .endpoint("endpoint") + .build()); redactionTenant2.setMongoDBConnection(MongoDBConnection.builder() - .prefix("mongodb") - .username(MONGO_USERNAME) - .password(encryptionDecryptionService.encrypt(MONGO_PASSWORD)) - .address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort()) - .database(TENANT_2) - .options("") - .build()); + .prefix("mongodb") + .username(MONGO_USERNAME) + .password(encryptionDecryptionService.encrypt(MONGO_PASSWORD)) + .address(mongoDbContainer.getHost() + ":" + mongoDbContainer.getFirstMappedPort()) + .database(TENANT_2) + .options("") + .build()); when(tenantsClient.getTenant(TENANT_1)).thenReturn(redactionTenant); when(tenantsClient.getTenant(TENANT_2)).thenReturn(redactionTenant2); when(tenantsClient.getTenants()).thenReturn(List.of(redactionTenant, redactionTenant2)); try { - tenantCreatedListener.createTenant(new TenantCreatedEvent(TENANT_1)); - tenantCreatedListener.createTenant(new TenantCreatedEvent(TENANT_2)); - mongoTenantCreatedListener.createTenant(new MongoTenantCreatedEvent(TENANT_1)); - mongoTenantCreatedListener.createTenant(new MongoTenantCreatedEvent(TENANT_2)); + tenantCreatedDatabaseEventHandler.handle(new TenantCreatedEvent(TENANT_1)); + tenantCreatedDatabaseEventHandler.handle(new TenantCreatedEvent(TENANT_2)); + tenantCreatedMongoEventHandler.handle(new TenantCreatedEvent(TENANT_1)); + tenantCreatedMongoEventHandler.handle(new TenantCreatedEvent(TENANT_2)); } catch (Exception e) { e.printStackTrace(); @@ -586,14 +587,14 @@ public abstract class AbstractPersistenceServerServiceTest { log.info("Hosts are - Redis: {}, Postgres: {}, MongoDB: {}", redisContainer.getHost(), postgreSQLContainerMaster.getHost(), mongoInstance.getHost()); TestPropertyValues.of("REDIS_PORT=" + redisContainer.getFirstMappedPort(), - "REDIS_HOST=" + redisContainer.getHost(), - "MONGODB_HOST=" + mongoInstance.getHost(), - "MONGODB_PORT=" + mongoInstance.getFirstMappedPort(), - "MONGODB_USER=" + MONGO_USERNAME, - "MONGODB_PASSWORD=" + MONGO_PASSWORD, - "fforesight.jobs.enabled=false", - "fforesight.keycloak.enabled=false", - "POD_NAME=persistence-service").applyTo(configurableApplicationContext.getEnvironment()); + "REDIS_HOST=" + redisContainer.getHost(), + "MONGODB_HOST=" + mongoInstance.getHost(), + "MONGODB_PORT=" + mongoInstance.getFirstMappedPort(), + "MONGODB_USER=" + MONGO_USERNAME, + "MONGODB_PASSWORD=" + MONGO_PASSWORD, + "fforesight.jobs.enabled=false", + "fforesight.keycloak.enabled=false", + "POD_NAME=persistence-service").applyTo(configurableApplicationContext.getEnvironment()); } @@ -601,10 +602,10 @@ public abstract class AbstractPersistenceServerServiceTest { private static void createMongoDBDatabase(MongoDBTestContainer mongoDBTestContainer, String databaseName) { try (MongoClient mongoClient = MongoClients.create(String.format("mongodb://%s:%s@%s:%s/", - MONGO_USERNAME, - MONGO_PASSWORD, - mongoDBTestContainer.getHost(), - mongoDBTestContainer.getFirstMappedPort()))) { + MONGO_USERNAME, + MONGO_PASSWORD, + mongoDBTestContainer.getHost(), + mongoDBTestContainer.getFirstMappedPort()))) { MongoDatabase database = mongoClient.getDatabase(databaseName); BsonDocument createUserCommand = new BsonDocument(); createUserCommand.append("createUser", new BsonString(MONGO_USERNAME)); @@ -635,6 +636,15 @@ public abstract class AbstractPersistenceServerServiceTest { @ComponentScan("com.iqser.red.service.persistence") public static class TestConfiguration { + @Bean + public RabbitListenerEndpointRegistry rabbitListenerEndpointRegistry() { + + var mock = mock(RabbitListenerEndpointRegistry.class); + when(mock.getListenerContainer(any())).thenReturn(mock(MessageListenerContainer.class)); + + return mock; + } + @Bean public InMemoryUserDetailsManager userDetailsService(PasswordEncoder passwordEncoder) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml b/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml index 43b0e0ce5..dc7e53456 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml +++ b/persistence-service-v1/persistence-service-server-v1/src/test/resources/application.yml @@ -131,3 +131,5 @@ fforesight: name: 'users-exchange' keycloak: enabled: false + +logging.level.liquibase: DEBUG diff --git a/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts b/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts index e43bad3e8..5d4a939c6 100644 --- a/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts +++ b/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts @@ -9,7 +9,10 @@ dependencies { api(project(":persistence-service-shared-api-v1")) api("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.2") api("com.google.guava:guava:31.1-jre") - api("com.knecon.fforesight:mongo-database-commons:0.13.0+RED9348.0") + api("com.knecon.fforesight:mongo-database-commons:0.15.0") { + exclude(group = "com.knecon.fforesight", module = "tenant-commons") + } + api("com.knecon.fforesight:tenant-commons:0.31.0") api("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootStarterVersion}") api("org.springframework.boot:spring-boot-starter-validation:3.1.3") testImplementation("com.iqser.red.commons:test-commons:2.1.0") From f7612ac89f490a81b2d0291ef97dc829006eb58f Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Wed, 25 Sep 2024 15:25:15 +0300 Subject: [PATCH 2/3] Renabled missing changelog --- .../main/resources/mongo/changelog/mongo.changelog-tenant.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/mongo/changelog/mongo.changelog-tenant.xml b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/mongo/changelog/mongo.changelog-tenant.xml index 8a00cca7f..f222c6905 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/resources/mongo/changelog/mongo.changelog-tenant.xml +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/resources/mongo/changelog/mongo.changelog-tenant.xml @@ -5,7 +5,7 @@ - + From adab452380f769ab99aeabf67a5b88fc365ce65e Mon Sep 17 00:00:00 2001 From: Timo Bejan Date: Wed, 25 Sep 2024 16:10:21 +0300 Subject: [PATCH 3/3] Removed allow bean override with latest deps this now works --- .../src/main/resources/application.yaml | 1 - .../persistence-service-shared-mongo-v1/build.gradle.kts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml index 81f955325..c71ceb3e9 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml +++ b/persistence-service-v1/persistence-service-server-v1/src/main/resources/application.yaml @@ -26,7 +26,6 @@ lifecycle: spring: main: - allow-bean-definition-overriding: true allow-circular-references: true jpa: open-in-view: true diff --git a/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts b/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts index 5d4a939c6..81f45bd43 100644 --- a/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts +++ b/persistence-service-v1/persistence-service-shared-mongo-v1/build.gradle.kts @@ -9,7 +9,7 @@ dependencies { api(project(":persistence-service-shared-api-v1")) api("com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.17.2") api("com.google.guava:guava:31.1-jre") - api("com.knecon.fforesight:mongo-database-commons:0.15.0") { + api("com.knecon.fforesight:mongo-database-commons:0.16.0") { exclude(group = "com.knecon.fforesight", module = "tenant-commons") } api("com.knecon.fforesight:tenant-commons:0.31.0")