diff --git a/persistence-service-v1/persistence-service-server-v1/build.gradle.kts b/persistence-service-v1/persistence-service-server-v1/build.gradle.kts index 8d867fef9..56535f7ff 100644 --- a/persistence-service-v1/persistence-service-server-v1/build.gradle.kts +++ b/persistence-service-v1/persistence-service-server-v1/build.gradle.kts @@ -17,10 +17,7 @@ configurations { } } -val springBootStarterVersion = "3.1.5" - dependencies { - api("org.springframework.boot:spring-boot-starter-data-mongodb:${springBootStarterVersion}") api(project(":persistence-service-processor-v1")) api(project(":persistence-service-external-api-impl-v1")) api(project(":persistence-service-external-api-impl-v2")) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java index f50606f28..a90522e03 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/Application.java @@ -38,8 +38,6 @@ import com.iqser.red.service.dictionarymerge.commons.DictionaryMergeService; import com.iqser.red.service.persistence.management.v1.processor.PersistenceServiceProcessorConfiguration; import com.iqser.red.service.persistence.management.v1.processor.cache.PersistenceServiceExternalApiCacheConfiguration; import com.iqser.red.service.persistence.management.v1.processor.configuration.MessagingConfiguration; -import com.iqser.red.service.persistence.management.v1.processor.service.mongo.repository.EntityLogDocumentRepository; -import com.iqser.red.service.persistence.management.v1.processor.service.mongo.repository.EntityLogEntryDocumentRepository; import com.iqser.red.service.persistence.management.v1.processor.settings.FileManagementServiceSettings; import com.iqser.red.service.persistence.v1.internal.api.PersistenceServiceInternalApiConfiguration; import com.iqser.red.storage.commons.StorageAutoConfiguration; @@ -67,7 +65,7 @@ import lombok.extern.slf4j.Slf4j; @EnableCaching @EnableConfigurationProperties({FileManagementServiceSettings.class}) @EnableMongoRepositories(basePackages = "com.iqser.red.service.persistence") -@ImportAutoConfiguration({StorageAutoConfiguration.class, JobsAutoConfiguration.class, DatabaseTenantCommonsAutoConfiguration.class, MultiTenancyAutoConfiguration.class, SpringDocAutoConfiguration.class, DefaultKeyCloakCommonsAutoConfiguration.class}) +@ImportAutoConfiguration({StorageAutoConfiguration.class, JobsAutoConfiguration.class, DatabaseTenantCommonsAutoConfiguration.class, MultiTenancyAutoConfiguration.class, SpringDocAutoConfiguration.class, DefaultKeyCloakCommonsAutoConfiguration.class, MongoDatabaseCommonsAutoConfiguration.class}) @SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class, CassandraAutoConfiguration.class, DataSourceAutoConfiguration.class, LiquibaseAutoConfiguration.class}) @Import({PersistenceServiceExternalApiConfigurationV2.class, PersistenceServiceExternalApiConfiguration.class, PersistenceServiceInternalApiConfiguration.class, PersistenceServiceExternalApiCacheConfiguration.class, MultiTenancyWebConfiguration.class, PersistenceServiceProcessorConfiguration.class, MessagingConfiguration.class, MultiTenancyMessagingConfiguration.class}) public class Application implements ApplicationContextAware { 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 90e1ec9f7..a9413bd12 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 @@ -1,5 +1,53 @@ package com.iqser.red.service.peristence.v1.server.integration.utils; +import static org.mockito.Mockito.when; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Set; +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.core.AmqpAdmin; +import org.springframework.amqp.rabbit.core.RabbitTemplate; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.test.util.TestPropertyValues; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.ApplicationContextInitializer; +import org.springframework.context.ConfigurableApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Import; +import org.springframework.context.annotation.Primary; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.jdbc.core.StatementCallback; +import org.springframework.jdbc.datasource.SingleConnectionDataSource; +import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; +import org.springframework.security.core.userdetails.User; +import org.springframework.security.core.userdetails.UserDetails; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; +import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.provisioning.InMemoryUserDetailsManager; +import org.springframework.security.web.SecurityFilterChain; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit.jupiter.SpringExtension; + import com.iqser.red.commons.jackson.ObjectMapperFactory; import com.iqser.red.service.peristence.v1.server.Application; import com.iqser.red.service.peristence.v1.server.integration.client.ApplicationConfigClient; @@ -15,8 +63,35 @@ import com.iqser.red.service.persistence.management.v1.processor.service.Applica import com.iqser.red.service.persistence.management.v1.processor.service.EntityLogService; import com.iqser.red.service.persistence.management.v1.processor.service.FileManagementStorageService; import com.iqser.red.service.persistence.management.v1.processor.service.mongo.EntityLogMongoService; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.*; -import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.*; +import com.iqser.red.service.persistence.management.v1.processor.service.mongo.repository.EntityLogDocumentRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.mongo.repository.EntityLogEntryDocumentRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ApplicationConfigRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.AuditRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DigitalSignatureRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeConfigRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierAttributeRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierStatusRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DossierTemplateRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.DownloadStatusRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributeConfigRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesGeneralConfigurationRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileAttributesRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.FileRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.IndexInformationRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.LegalBasisMappingRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationPreferencesRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.NotificationRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ReportTemplateRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.RuleSetRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.TypeRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.ViewedPagesRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.WatermarkRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.ForceRedactionRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.LegalBasisChangeRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.ManualRedactionRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.RecategorizationRepository; +import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.annotationentity.RemoveRedactionRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.EntryRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalsePositiveEntryRepository; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.repository.dictionaryentry.FalseRecommendationEntryRepository; @@ -25,71 +100,27 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.configuration.ApplicationConfig; import com.iqser.red.service.redaction.v1.model.DroolsValidation; import com.iqser.red.storage.commons.service.StorageService; -import com.iqser.red.storage.commons.service.StorageServiceImpl; 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.utils.MagicConverter; -import com.knecon.fforesight.mongo.database.commons.config.MongoDbConfiguration; -import com.knecon.fforesight.mongo.database.commons.config.MultiTenantMongoDBFactory; -import com.knecon.fforesight.mongo.database.commons.service.MongoClientCache; -import com.knecon.fforesight.mongo.database.commons.service.MongoConnectionProviderImpl; -import com.knecon.fforesight.mongo.database.commons.service.MongoDataSources; import com.knecon.fforesight.tenantcommons.EncryptionDecryptionService; import com.knecon.fforesight.tenantcommons.TenantContext; import com.knecon.fforesight.tenantcommons.TenantsClient; -import com.knecon.fforesight.tenantcommons.model.*; +import com.knecon.fforesight.tenantcommons.model.AuthDetails; +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.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.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.core.AmqpAdmin; -import org.springframework.amqp.rabbit.core.RabbitTemplate; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.ImportAutoConfiguration; -import org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration; -import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration; -import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration; -import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.mock.mockito.MockBean; -import org.springframework.boot.test.util.TestPropertyValues; -import org.springframework.cloud.openfeign.EnableFeignClients; -import org.springframework.context.ApplicationContextInitializer; -import org.springframework.context.ConfigurableApplicationContext; -import org.springframework.context.annotation.*; -import org.springframework.data.mongodb.core.MongoTemplate; -import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; -import org.springframework.jdbc.core.JdbcTemplate; -import org.springframework.jdbc.core.StatementCallback; -import org.springframework.jdbc.datasource.SingleConnectionDataSource; -import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.core.userdetails.User; -import org.springframework.security.core.userdetails.UserDetails; -import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; -import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.security.provisioning.InMemoryUserDetailsManager; -import org.springframework.security.web.SecurityFilterChain; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; - -import static org.mockito.Mockito.when; - @Slf4j @ExtendWith(SpringExtension.class) @EnableFeignClients(basePackageClasses = FileClient.class) @@ -115,6 +146,10 @@ public abstract class AbstractPersistenceServerServiceTest { @Autowired protected EntityLogMongoService entityLogMongoService; @Autowired + protected EntityLogDocumentRepository entityLogDocumentRepository; + @Autowired + protected EntityLogEntryDocumentRepository entityLogEntryDocumentRepository; + @Autowired protected FileManagementStorageService fileManagementStorageService; @Autowired protected DossierTemplateRepository dossierTemplateRepository; @@ -326,7 +361,7 @@ public abstract class AbstractPersistenceServerServiceTest { .host(mongoDbContainer.getHost()) .port(String.valueOf(mongoDbContainer.getFirstMappedPort())) .username(MongoDBTestContainer.MONGO_USERNAME) - .password(MongoDBTestContainer.MONGO_PASSWORD) + .password(encryptionDecryptionService.encrypt(MongoDBTestContainer.MONGO_PASSWORD)) .database(MongoDBTestContainer.MONGO_DATABASE) .build()); @@ -358,6 +393,8 @@ public abstract class AbstractPersistenceServerServiceTest { } + + @AfterEach public void cleanupStorage() { @@ -411,8 +448,8 @@ public abstract class AbstractPersistenceServerServiceTest { indexInformationRepository.deleteAll(); applicationConfigRepository.deleteAll(); - //entityLogEntryDocumentRepository.deleteAll(); - //entityLogDocumentRepository.deleteAll(); + entityLogEntryDocumentRepository.deleteAll(); + entityLogDocumentRepository.deleteAll(); }); } @@ -432,6 +469,7 @@ public abstract class AbstractPersistenceServerServiceTest { var mongoInstance = MongoDBTestContainer.getInstance(); mongoInstance.start(); + createMongoDBDatabase(mongoInstance); log.info("Hosts are - Redis: {}, Postgres: {}", redisContainer.getHost(), postgreSQLContainerMaster.getHost()); @@ -448,11 +486,40 @@ public abstract class AbstractPersistenceServerServiceTest { } + + private static void createMongoDBDatabase(MongoDBTestContainer mongoDBTestContainer) { + + try (MongoClient mongoClient = MongoClients.create(String.format("mongodb://%s:%s@%s:%s/", + MongoDBTestContainer.MONGO_USERNAME, + MongoDBTestContainer.MONGO_PASSWORD, + mongoDBTestContainer.getHost(), + mongoDBTestContainer.getFirstMappedPort()))) { + MongoDatabase database = mongoClient.getDatabase(MongoDBTestContainer.MONGO_DATABASE); + BsonDocument createUserCommand = new BsonDocument(); + createUserCommand.append("createUser", new BsonString(MongoDBTestContainer.MONGO_USERNAME)); + createUserCommand.append("pwd", new BsonString(MongoDBTestContainer.MONGO_PASSWORD)); + BsonArray roles = new BsonArray(); + roles.add(new BsonString("readWrite")); + createUserCommand.append("roles", roles); + + try { + database.runCommand(createUserCommand); + } catch (MongoCommandException mongoCommandException) { + // ignore user already exists + if(mongoCommandException.getErrorCode() != 51003) { + throw mongoCommandException; + } + + } + + } + } + @Configuration @EnableWebSecurity @EnableMethodSecurity @EnableAutoConfiguration(exclude = {RabbitAutoConfiguration.class}) - @ComponentScan("com.iqser.red.service.persistence") + @ComponentScan(basePackages = {"com.iqser.red.service.persistence" }) public static class TestConfiguration { @Bean diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MongoDBTestContainer.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MongoDBTestContainer.java index 61abcab1a..6db3c46ec 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MongoDBTestContainer.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/MongoDBTestContainer.java @@ -7,9 +7,9 @@ public final class MongoDBTestContainer extends GenericContainer