flapdoodle-oss / de.flapdoodle.embed.mongo

...will provide a platform neutral way for running mongodb in unittests.
Apache License 2.0
907 stars 161 forks source link

Integration Testing is failing #457

Closed alabbas-ali closed 1 year ago

alabbas-ali commented 1 year ago

I am trying to have some a Service Integration test and Controller Integration test:

Java Version 17 Spring Boot version: 3.0.5 de.flapdoodle.embed : de.flapdoodle.embed.mongo.spring30x: version is 4.6.2 I set up the testing profile with de.flapdoodle.mongodb.embedded.version=5.0.5

My application will run with mongo version 6.0.5

I have the following testing for the Service Repository :


@ExtendWith(SpringExtension.class)
@DataMongoTest
public class TransactionRepositoryTest {

    @Autowired
    private TransactionRepository transactionRepository;

    private JacksonTester<List<Transaction>> jsonTester;

    List<Transaction> transactions;

    @BeforeEach
    public void setUp() throws IOException {
        ObjectMapper objectMapper = new ObjectMapper();
        JacksonTester.initFields(this, objectMapper);

        this.transactions = jsonTester.read(new ClassPathResource("transactions.json")).getObject();

        transactionRepository.saveAll(transactions);
    }

    @AfterEach
    public void tearDown() {
        transactionRepository.deleteAll();
    }

    @Test
    public void findById_ReturnsTransaction_WhenTransactionExists() {
        Transaction transaction = transactionRepository.findById("6433efb4349d6c957631cc3f").orElse(null);
        assertThat(transaction).isNotNull();
        assertThat(transaction.getId()).isEqualTo(this.transactions.get(0).getId());
        assertThat(transaction.getPriceInfo().getGrossTotal()).isEqualByComparingTo(new BigDecimal("100.00"));
    }

    @Test
    public void findById_ReturnsNull_WhenTransactionDoesNotExist() {
        Transaction transaction = transactionRepository.findById("tx-003").orElse(null);
        assertThat(transaction).isNull();
    }

    @Test
    public void findAll_ReturnsAllTransactionsInPageableOrder() {
        Page<Transaction> page = transactionRepository
                .findAll(PageRequest.of(0, 10, Sort.by(Sort.Direction.ASC, "id.internal")));
        List<Transaction> transactions = page.getContent();
        assertThat(transactions).hasSize(2);
        assertThat(transactions.get(0).getId()).isEqualTo(this.transactions.get(0).getId());
        assertThat(transactions.get(1).getId()).isEqualTo(this.transactions.get(1).getId());
    }
}

then the test for the Service layer goes like this:

@SpringBootTest
public class TransactionServiceImpTest {

    @Autowired
    private TransactionService transactionService;

    @Autowired
    private TransactionRepository transactionRepository;

    List<Transaction> transactions;

    @BeforeEach
    void setUp() throws IOException {
        transactionRepository.deleteAll();
        String jsonString = StreamUtils.copyToString(
                new ClassPathResource("transactions.json").getInputStream(),
                Charset.defaultCharset());

        ObjectMapper mapper = new ObjectMapper();
        this.transactions = mapper.readValue(jsonString, new TypeReference<List<Transaction>>() {
        });
    }

    @Test
    public void testSaveTransaction() {
        // Act
        Transaction savedTransaction = transactionService.saveTransaction(this.transactions.get(0));

        // Assert
        Assertions.assertNotNull(savedTransaction.getId());
    }

    @Test
    public void testGetTransactionById() {
        // Arrange
        Transaction savedTransaction = transactionService.saveTransaction(this.transactions.get(0));

        // Act
        Transaction retrievedTransaction = transactionService
                .getTransactionById(savedTransaction.getId());

        // Assert
        Assertions.assertEquals(savedTransaction.getId().toString(), retrievedTransaction.getId().toString());
    }

    @Test
    public void testGetTransactionsByFilters() {
        // Arrange
        transactionService.saveTransaction(this.transactions.get(0));
        List<Filter> filters = Collections.singletonList(new Filter("priceInfo.grossTotal", "100"));
        Pageable pageable = PageRequest.of(0, 10);

        // Act
        Page<Transaction> page = transactionService.getTransactionsByFilters(filters, pageable);

        // Assert
        Assertions.assertEquals(1, page.getTotalElements());
        Assertions.assertEquals(this.transactions.get(0).getId().toString(),
                page.getContent().get(0).getId().toString());
    }

    @Test
    public void testGetTransactionsByFiltersWithMultipleFilters() {
        // Arrange
        transactionRepository.insert(transactions);

        List<Filter> filters = Arrays.asList(
                new Filter("creationType", "MANUAL"),
                new Filter("priceInfo.currency", "USD"));
        Pageable pageable = PageRequest.of(0, 10, Sort.by("created"));

        // Act
        Page<Transaction> result = transactionService.getTransactionsByFilters(filters, pageable);

        // Assert
        Assertions.assertEquals(2, result.getTotalElements());
        Assertions.assertEquals(2, result.getContent().size());
        Assertions.assertEquals("6433efb4349d6c957631cc3f", result.getContent().get(0).getId());
        Assertions.assertEquals("6433efc4fa745e3e4e67edfe", result.getContent().get(1).getId());
    }

    @Test
    public void testGetTransactionsByFiltersWithNoResults() {
        // Arrange
        transactionRepository.insert(transactions);
        List<Filter> filters = Arrays.asList(
                new Filter("creationType", "webgit"));
        Pageable pageable = PageRequest.of(0, 10, Sort.by("created"));

        // Act
        Page<Transaction> result = transactionService.getTransactionsByFilters(filters, pageable);

        // Assert
        Assertions.assertEquals(0, result.getTotalElements());
        Assertions.assertEquals(0, result.getContent().size());
    }

    @Test
    public void testGetTransactionsByFiltersWithPagination() {
        // Arrange
        transactionRepository.insert(transactions);
        List<Filter> filters = Arrays.asList(
                new Filter("creationType", "MANUAL"));
        Pageable pageable = PageRequest.of(1, 1, Sort.by("created"));

        // Act
        Page<Transaction> result = transactionService.getTransactionsByFilters(filters, pageable);

        // Assert
        Assertions.assertEquals(2, result.getTotalElements());
        Assertions.assertEquals(1, result.getContent().size());
        Assertions.assertEquals("6433efc4fa745e3e4e67edfe", result.getContent().get(0).getId());
    }

    @Test
    public void testGetTransactionsByFiltersWithSorting() {
        // Arrange
        transactionRepository.insert(transactions);
        List<Filter> filters = Arrays.asList(
                new Filter("creationType", "MANUAL"));
        Pageable pageable = PageRequest.of(0, 10, Sort.by("priceInfo.netTotal"));

        // Act
        Page<Transaction> result = transactionService.getTransactionsByFilters(filters, pageable);

        // Assert
        Assertions.assertEquals(2, result.getTotalElements());
        Assertions.assertEquals(2, result.getContent().size());
        Assertions.assertEquals("6433efc4fa745e3e4e67edfe", result.getContent().get(0).getId());
        Assertions.assertEquals("6433efb4349d6c957631cc3f", result.getContent().get(1).getId());
    }

    @Test
    public void testGetTransactionsByFiltersWithNoFiltersNoPaginationNoSorting() {
        // given
        transactionRepository.insert(transactions);

        // then
        Assertions.assertThrows(IllegalArgumentException.class, () -> {
            // when
            transactionService.getTransactionsByFilters(null, null);
        });
    }

    @Test
    public void testGetTransactionsByFiltersWithNoFiltersAndSortingByCreated() {
        // given
        transactionRepository.insert(transactions);

        // when
        Pageable pageable = PageRequest.of(0, 10, Sort.by("created"));
        Page<Transaction> result = transactionService.getTransactionsByFilters(null, pageable);

        // then
        Assertions.assertEquals(2, result.getTotalElements());
        Assertions.assertEquals(2, result.getNumberOfElements());
        Assertions.assertEquals(1, result.getTotalPages());
        Assertions.assertEquals(transactions.get(0).getId(),
                result.getContent().get(0).getId());
        Assertions.assertEquals(transactions.get(1).getId(),
                result.getContent().get(1).getId());
    }

    @Test
    public void testGetTransactionsByFiltersWithNoFiltersAndPaging() {
        // given
        transactionRepository.insert(transactions);

        // when
        Pageable pageable = PageRequest.of(0, 1);
        Page<Transaction> result = transactionService.getTransactionsByFilters(null, pageable);

        // then
        Assertions.assertEquals(2, result.getTotalElements());
        Assertions.assertEquals(1, result.getNumberOfElements());
        Assertions.assertEquals(2, result.getTotalPages());
        Assertions.assertEquals(transactions.get(1).getId(), result.getContent().get(0).getId());

        // when
        pageable = PageRequest.of(1, 1);
        Page<Transaction> result2 = transactionService.getTransactionsByFilters(null, pageable);

        // then
        Assertions.assertEquals(2, result2.getTotalElements());
        Assertions.assertEquals(1, result2.getNumberOfElements());
        Assertions.assertEquals(2, result2.getTotalPages());
        Assertions.assertEquals(transactions.get(0).getId(), result2.getContent().get(0).getId());
    }
}

Also, some MVC controller test has been set up:


@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@AutoConfigureMockMvc
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@TestInstance(Lifecycle.PER_CLASS)
public class TransactionControllerTest {
      ......
}

I can see that when I run the test locally on my Windows machine the test seems to pass fine. sometimes an error is thrown that indicates a problem connecting to MongoDB.

com.mongodb.MongoNodeIsRecoveringException: Command failed with error 11600 (InterruptedAtShutdown): 'interrupted at shutdown' on server activate.navicat.com:27017. The full response is {"ok": 0.0, "errmsg": "interrupted at shutdown", "code": 11600, "codeName": "InterruptedAtShutdown"}

But when I run the tests inside the container with Linux (maven:3.8.5-openjdk-17). Very interesting errors start appearing. like :

Error creating bean with name 'syncClientServerWrapper' defined in class path resource [de/flapdoodle/embed/mongo/spring/autoconfigure/EmbeddedMongoAutoConfiguration$SyncClientServerWrapperConfig.class]: error on the transition to State(de.flapdoodle.embed.mongo.transitions.RunningMongodProcess), rollback

I am just wondering if that is an issue in my test config. or there is a bug in the embedded MongoDB. I think this is related to the fact that Spring Boot is running each test in a new context. and each time the context starts a new embedded MongoDb is starting. or at least a new connection is trying to be opened.

I will appreciate help in this manner

michaelmosmann commented 1 year ago

@alabbas-ali hmmm.. can you provide some more logging information in the second case (running the linux container?)

I set up the testing profile with de.flapdoodle.mongodb.embedded.version=5.0.5 My application will run with mongo version 6.0.5

is this a typo or is 'de.flapdoodle.mongodb.embedded.version' set to 6.0.5?

alabbas-ali commented 1 year ago

I need my application to connect to mongo version 6.0.5 in a production or dev environment. but testing needs to be done with embedded MongoDB so de.flapdoodle.mongodb.embedded.version=5.0.5 is this correct or it need to be set to some other value?

the docker file looks like this:

FROM maven:3.8.5-openjdk-17 AS builder
WORKDIR /build/
COPY pom.xml ./
COPY src ./src/
RUN ["mvn", "package"]

FROM maven:3.8.5-openjdk-17
WORKDIR /app
COPY --from=builder /build/target/tm-0.0.1-SNAPSHOT.jar ./
EXPOSE 80
EXPOSE 5701
ENTRYPOINT java -jar -Dspring.main.allow-bean-definition-overriding=true tm-0.0.1-SNAPSHOT.jar

and the error logs look like this:

download https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel80-5.0.5.tgz  ....

....

....

ERROR o.s.boot.SpringApplication - Application run failed
#0 44.56 org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'transactionController' defined in file [/build/target/classes/com/one_cp/tm/controllers/TransactionController.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'transactionServiceImp' defined in file [/build/target/classes/com/one_cp/tm/services/TransactionServiceImp.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'transactionRepository' defined in com.one_cp.tm.repositories.TransactionRepository defined in @EnableMongoRepositories declared on MongoRepositoriesRegistrar.EnableMongoRepositoriesConfiguration: Cannot resolve reference to bean 'mongoTemplate' while setting bean property 'mongoOperations'
#0 44.56        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798)
#0 44.56        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:245)
#0 44.56        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1352)
#0 44.56        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1189)
#0 44.56        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
#0 44.56        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
#0 44.56        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
#0 44.56        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
#0 44.56        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
#0 44.56        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
#0 44.56        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973)
#0 44.56        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917)
#0 44.56        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584)
#0 44.56        at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146)
#0 44.56        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
#0 44.56        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
#0 44.56        at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
#0 44.56        at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)
#0 44.56        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
#0 44.56        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
#0 44.56        at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388)
#0 44.56        at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545)
#0 44.56        at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)
#0 44.56        at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)
#0 44.56        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184)
#0 44.56        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118)
#0 44.56        at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127)
#0 44.56        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:141)
#0 44.56        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97)
#0 44.56        at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241)
#0 44.56        at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377)
#0 44.56        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
#0 44.56        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
#0 44.56        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
#0 44.56        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
#0 44.56        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
#0 44.56        at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
#0 44.56        at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
#0 44.56        at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289)
#0 44.56        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278)
#0 44.56        at java.base/java.util.Optional.orElseGet(Optional.java:364)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277)
#0 44.56        at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$before$2(ClassBasedTestDescriptor.java:203)
#0 44.56        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:202)
#0 44.56        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.before(ClassBasedTestDescriptor.java:84)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:148)
#0 44.56        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
#0 44.56        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
#0 44.56        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
#0 44.56        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
#0 44.56        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
#0 44.56        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
#0 44.56        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
#0 44.56        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
#0 44.56        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
#0 44.56        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
#0 44.56        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
#0 44.56        at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
#0 44.56        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:220)
#0 44.56        at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:188)
#0 44.56        at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202)
#0 44.56        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:181)
#0 44.56        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
#0 44.56        at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:150)
#0 44.56        at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124)
#0 44.56        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
#0 44.56        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
#0 44.56        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
#0 44.56        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
#0 44.56 Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'transactionServiceImp' defined in file [/build/target/classes/com/one_cp/tm/services/TransactionServiceImp.class]: Unsatisfied dependency expressed through constructor parameter 0: Error creating bean with name 'transactionRepository' defined in com.one_cp.tm.repositories.TransactionRepository defined in @EnableMongoRepositories declared on MongoRepositoriesRegistrar.EnableMongoRepositoriesConfiguration: Cannot resolve reference to bean 'mongoTemplate' while setting bean property 'mongoOperations'
#0 44.56        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798)
#0 44.56        at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:245)
#0 44.56        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1352)
#0 44.56        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1189)
#0 44.56        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:560)
#0 44.56        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
#0 44.56        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
#0 44.56        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
#0 44.56        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
#0 44.56        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
#0 44.56        at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:254)
#0 44.56        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1417)
#0 44.56        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1337)
#0 44.56        at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:885)
#0 44.56        at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789)
#0 44.56        ... 85 common frames omitted

......................

......................

ERROR o.s.test.context.TestContextManager - Caught exception while allowing TestExecutionListener [org.springframework.test.context.support.DependencyInjectionTestExecutionListener] to prepare test instance [com.one_cp.tm.repositories.TransactionRepositoryTest@1d45c4b7]
#0 44.76 java.lang.IllegalStateException: Failed to load ApplicationContext for [MergedContextConfiguration@62f73b0c testClass = com.one_cp.tm.repositories.TransactionRepositoryTest, locations = [], classes = [com.one_cp.tm.TmServiceApplication], contextInitializerClasses = [], activeProfiles = [], propertySourceLocations = [], propertySourceProperties = ["org.springframework.boot.test.autoconfigure.data.mongo.DataMongoTestContextBootstrapper=true"], contextCustomizers = [[ImportsContextCustomizer@7dd2a5f7 key = [org.springframework.boot.autoconfigure.cache.CacheAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration, org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration, org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, org.springframework.boot.autoconfigure.mongo.MongoReactiveAutoConfiguration, org.springframework.boot.autoconfigure.transaction.TransactionAutoConfiguration, de.flapdoodle.embed.mongo.spring.autoconfigure.EmbeddedMongoAutoConfiguration]], org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@1e0b4072, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@e350b40, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.autoconfigure.OverrideAutoConfigurationContextCustomizerFactory$DisableAutoConfigurationContextCustomizer@17d45cfb, org.springframework.boot.test.autoconfigure.actuate.observability.ObservabilityContextCustomizerFactory$DisableObservabilityContextCustomizer@9da1, org.springframework.boot.test.autoconfigure.filter.TypeExcludeFiltersContextCustomizer@351584c0, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@af8ffa64, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@27406a17, org.springframework.boot.test.context.SpringBootTestAnnotation@d236fd39], contextLoader = org.springframework.boot.test.context.SpringBootContextLoader, parent = null]
#0 44.76        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:142)
#0 44.76        at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127)
#0 44.76        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:141)
#0 44.76        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97)
#0 44.76        at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241)
#0 44.76        at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138)
#0 44.76        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377)
#0 44.76        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382)
#0 44.76        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377)
#0 44.76        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
#0 44.76        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
#0 44.76        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
#0 44.76        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
#0 44.76        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
#0 44.76        at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
#0 44.76        at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
#0 44.76        at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
#0 44.76        at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
#0 44.76        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376)
#0 44.76        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289)
#0 44.76        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.76        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288)
#0 44.76        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278)
#0 44.76        at java.base/java.util.Optional.orElseGet(Optional.java:364)
#0 44.76        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277)
#0 44.76        at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
#0 44.76        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105)
#0 44.76        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.76        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104)
#0 44.76        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123)
#0 44.76        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90)
#0 44.76        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
#0 44.76        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
#0 44.76        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
#0 44.76        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
#0 44.76        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
#0 44.76        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
#0 44.76        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
#0 44.76        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
#0 44.76        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
#0 44.76        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
#0 44.76        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
#0 44.76        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
#0 44.76        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
#0 44.76        at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
#0 44.76        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:220)
#0 44.76        at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:188)
#0 44.76        at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202)
#0 44.76        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:181)
#0 44.76        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
#0 44.76        at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:150)
#0 44.76        at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124)
#0 44.76        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
#0 44.76        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
#0 44.76        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
#0 44.76        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
#0 44.76 Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'syncClientServerWrapper' defined in class path resource [de/flapdoodle/embed/mongo/spring/autoconfigure/EmbeddedMongoAutoConfiguration$SyncClientServerWrapperConfig.class]: error on transition to State(de.flapdoodle.embed.mongo.transitions.RunningMongodProcess), rollback
#0 44.76        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770)
#0 44.76        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598)
#0 44.76        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
#0 44.76        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
#0 44.76        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
#0 44.76        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
#0 44.76        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
#0 44.76        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973)
#0 44.76        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917)
#0 44.76        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584)
#0 44.76        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
#0 44.76        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
#0 44.76        at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
#0 44.76        at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)
#0 44.76        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
#0 44.76        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
#0 44.76        at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388)
#0 44.76        at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545)
#0 44.76        at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)
#0 44.76        at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)
#0 44.76        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184)
#0 44.76        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118)
#0 44.76        ... 67 common frames omitted
#0 44.76 Caused by: java.lang.RuntimeException: error on transition to State(de.flapdoodle.embed.mongo.transitions.RunningMongodProcess), rollback
#0 44.76        at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:174)
#0 44.76        at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:69)
#0 44.76        at de.flapdoodle.embed.mongo.spring.autoconfigure.MongodWrapper.start(MongodWrapper.java:45)
#0 44.76        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
#0 44.76        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
#0 44.76        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
#0 44.76        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
#0 44.76        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1869)
#0 44.76        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1826)
#0 44.76        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766)
#0 44.76        ... 88 common frames omitted
#0 44.76 Caused by: java.lang.RuntimeException: Could not start process: Address already in use
#0 44.76        at de.flapdoodle.embed.mongo.transitions.RunningMongoProcess.lambda$null$1(RunningMongoProcess.java:179)
#0 44.76        at de.flapdoodle.types.ThrowingSupplier.lambda$andFinally$1(ThrowingSupplier.java:47)
#0 44.76        at de.flapdoodle.types.ThrowingSupplier.lambda$andFinally$1(ThrowingSupplier.java:47)
#0 44.76        at de.flapdoodle.embed.mongo.transitions.RunningMongoProcess.lambda$factory$3(RunningMongoProcess.java:185)
#0 44.76        at de.flapdoodle.embed.process.types.RunningProcess.start(RunningProcess.java:78)
#0 44.76        at de.flapdoodle.embed.mongo.transitions.MongoServerStarter.result(MongoServerStarter.java:119)
#0 44.76        at de.flapdoodle.reverse.TransitionWalker.resolve(TransitionWalker.java:62)
#0 44.76        at de.flapdoodle.reverse.TransitionWalker.resolve(TransitionWalker.java:50)
#0 44.76        at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:165)
#0 44.76        ... 97 common frames omitted
ERROR o.s.boot.SpringApplication - Application run failed
#0 44.95 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'syncClientServerWrapper' defined in class path resource [de/flapdoodle/embed/mongo/spring/autoconfigure/EmbeddedMongoAutoConfiguration$SyncClientServerWrapperConfig.class]: error on transition to State(de.flapdoodle.embed.mongo.transitions.RunningMongodProcess), rollback
#0 44.95        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770)
#0 44.95        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598)
#0 44.95        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
#0 44.95        at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
#0 44.95        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
#0 44.95        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
#0 44.95        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
#0 44.95        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973)
#0 44.95        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:917)
#0 44.95        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584)
#0 44.95        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:732)
#0 44.95        at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:434)
#0 44.95        at org.springframework.boot.SpringApplication.run(SpringApplication.java:310)
#0 44.95        at org.springframework.boot.test.context.SpringBootContextLoader.lambda$loadContext$3(SpringBootContextLoader.java:137)
#0 44.95        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:58)
#0 44.95        at org.springframework.util.function.ThrowingSupplier.get(ThrowingSupplier.java:46)
#0 44.95        at org.springframework.boot.SpringApplication.withHook(SpringApplication.java:1388)
#0 44.95        at org.springframework.boot.test.context.SpringBootContextLoader$ContextLoaderHook.run(SpringBootContextLoader.java:545)
#0 44.95        at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:137)
#0 44.95        at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:108)
#0 44.95        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:184)
#0 44.95        at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:118)
#0 44.95        at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:127)
#0 44.95        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:141)
#0 44.95        at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:97)
#0 44.95        at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:241)
#0 44.95        at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138)
#0 44.95        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$10(ClassBasedTestDescriptor.java:377)
#0 44.95        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:382)
#0 44.95        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$11(ClassBasedTestDescriptor.java:377)
#0 44.95        at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
#0 44.95        at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:179)
#0 44.95        at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
#0 44.95        at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
#0 44.95        at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
#0 44.95        at java.base/java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:310)
#0 44.95        at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:735)
#0 44.95        at java.base/java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:734)
#0 44.95        at java.base/java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:762)
#0 44.95        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:376)
#0 44.95        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$6(ClassBasedTestDescriptor.java:289)
#0 44.95        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.95        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:288)
#0 44.95        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278)
#0 44.95        at java.base/java.util.Optional.orElseGet(Optional.java:364)
#0 44.95        at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277)
#0 44.95        at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
#0 44.95        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105)
#0 44.95        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.95        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104)
#0 44.95        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123)
#0 44.95        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90)
#0 44.95        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
#0 44.95        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
#0 44.95        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
#0 44.95        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
#0 44.95        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
#0 44.95        at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
#0 44.95        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
#0 44.95        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
#0 44.95        at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
#0 44.95        at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
#0 44.95        at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
#0 44.95        at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
#0 44.95        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
#0 44.95        at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
#0 44.95        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:220)
#0 44.95        at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$6(DefaultLauncher.java:188)
#0 44.95        at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:202)
#0 44.95        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:181)
#0 44.95        at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:128)
#0 44.95        at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:150)
#0 44.95        at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124)
#0 44.95        at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
#0 44.95        at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
#0 44.95        at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
#0 44.95        at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
#0 44.95 Caused by: java.lang.RuntimeException: error on transition to State(de.flapdoodle.embed.mongo.transitions.RunningMongodProcess), rollback
#0 44.95        at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:174)
#0 44.95        at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:69)
#0 44.95        at de.flapdoodle.embed.mongo.spring.autoconfigure.MongodWrapper.start(MongodWrapper.java:45)
#0 44.95        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
#0 44.95        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
#0 44.95        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
#0 44.95        at java.base/java.lang.reflect.Method.invoke(Method.java:568)
#0 44.95        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1869)
#0 44.95        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1826)
#0 44.95        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766)
#0 44.95        ... 88 common frames omitted
#0 44.95 Caused by: java.lang.RuntimeException: Could not start process: Address already in use
#0 44.95        at de.flapdoodle.embed.mongo.transitions.RunningMongoProcess.lambda$null$1(RunningMongoProcess.java:179)
#0 44.95        at de.flapdoodle.types.ThrowingSupplier.lambda$andFinally$1(ThrowingSupplier.java:47)
#0 44.95        at de.flapdoodle.types.ThrowingSupplier.lambda$andFinally$1(ThrowingSupplier.java:47)
#0 44.95        at de.flapdoodle.embed.mongo.transitions.RunningMongoProcess.lambda$factory$3(RunningMongoProcess.java:185)
#0 44.95        at de.flapdoodle.embed.process.types.RunningProcess.start(RunningProcess.java:78)
#0 44.95        at de.flapdoodle.embed.mongo.transitions.MongoServerStarter.result(MongoServerStarter.java:119)
#0 44.95        at de.flapdoodle.reverse.TransitionWalker.resolve(TransitionWalker.java:62)
#0 44.95        at de.flapdoodle.reverse.TransitionWalker.resolve(TransitionWalker.java:50)
#0 44.95        at de.flapdoodle.reverse.TransitionWalker.initState(TransitionWalker.java:165)
#0 44.95        ... 97 common frames omitted
michaelmosmann commented 1 year ago

@alabbas-ali the root cause is this: Caused by: java.lang.RuntimeException: Could not start process: Address already in use

.. if you use the same port for all tests and test are executed parallel then the port is already used.. or ..spring does not shutdown last test when starting a new one .. maybe you must add @DirtiesContext to your test

https://github.com/flapdoodle-oss/de.flapdoodle.embed.mongo.spring/blob/main/HowTo.md#test-isolation

alabbas-ali commented 1 year ago

@michaelmosmann Thank you for your response.

I don't get it. shouldn't using @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) be sufficient to have the application start on a different port for each test case? Also, I have this in the controller Integration testing already I have added it to the service Integration testing. Still, more issues and exceptions get thrown.

According to the documentation in the link you sent me, @DirtiesContext will allow me to achieve test isolation with the same configuration by enabling each test to have its own Mongodb.

if I get it correctly. the test by default will use the application.properties file set up in the test/resources folder of the project. I have the following properties in the file:

spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create-drop

spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=TmService
de.flapdoodle.mongodb.embedded.version=5.0.5

Why I will need a new MongoDB instance for each test? shouldn't I be able to create one instance of MongoDB for the tests and have a new connection if not use the same connection to run each test?

Even if I am wrong for whatever reason. Maybe my expectation is not realistic. In that case, I have tried the @DirtiesContext annotation with all the compensation values for the classMode and with the default as well. still, the exception is there.

and still, the test is running fine if the Windows machine but not in the Linux container.

Please I have isolated the part of the code and I am sharing it in this public repo. would you be so kind and try and see the errors yourself: https://github.com/alabbas-ali/tm-service

michaelmosmann commented 1 year ago

@alabbas-ali short update: i could run all tests on my ubuntu machine inside intellij

michaelmosmann commented 1 year ago

I don't get it. shouldn't using @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) be sufficient to have the application start on a different port for each test case?

The mentioned port already used is the mongodb port definied with 'spring.data.mongodb.port=27017'

According to the documentation in the link you sent me, @DirtiesContext will allow me to achieve test isolation with the same configuration by enabling each test to have its own Mongodb.

Spring tries to reuse context .. which can lead to a lot of trouble .. as i don't use spring in my projects i have not a deep enough understanding why...

Why I will need a new MongoDB instance for each test? shouldn't I be able to create one instance of MongoDB for the tests and have a new connection if not use the same connection to run each test?

You can do this if you start the mongodb before all tests and stop it after that.. maybe this is possible with test suites even with junit5..

and still, the test is running fine if the Windows machine but not in the Linux container. It is running on my linux machine .. so i try to start this in a container.

michaelmosmann commented 1 year ago

@alabbas-ali .. funny.. running the tests with maven on my ubuntu machine gives the same errors.. ok. I will have a look now that the errors are visible.

michaelmosmann commented 1 year ago

@alabbas-ali ok.. i think i found an easy solution for that.. as spring configs are merged and this way you can not remove a property from the application.properties file you should change spring.data.mongodb.port=27017 in you test/application.properties file to spring.data.mongodb.port=0 so that a free port is used with each mongodb instance.

alabbas-ali commented 1 year ago

Thank you that works fine