commit
33ef1b6e5b
|
@ -53,7 +53,6 @@ dependencies {
|
|||
testImplementation("com.fasterxml.jackson.module:jackson-module-parameter-names")
|
||||
testImplementation("com.h2database:h2")
|
||||
testImplementation("com.unboundid:unboundid-ldapsdk")
|
||||
testImplementation("de.flapdoodle.embed:de.flapdoodle.embed.mongo")
|
||||
testImplementation("io.lettuce:lettuce-core")
|
||||
testImplementation("io.projectreactor:reactor-core")
|
||||
testImplementation("io.projectreactor:reactor-test")
|
||||
|
@ -76,6 +75,7 @@ dependencies {
|
|||
testImplementation("org.springframework.hateoas:spring-hateoas")
|
||||
testImplementation("org.springframework.plugin:spring-plugin-core")
|
||||
testImplementation("org.testcontainers:junit-jupiter")
|
||||
testImplementation("org.testcontainers:mongodb")
|
||||
testImplementation("org.testcontainers:neo4j")
|
||||
testImplementation("org.testcontainers:testcontainers")
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -16,12 +16,19 @@
|
|||
|
||||
package org.springframework.boot.test.autoconfigure.data.mongo;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.test.context.DynamicPropertyRegistry;
|
||||
import org.springframework.test.context.DynamicPropertySource;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||
|
@ -32,8 +39,13 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
|||
* @author Michael Simons
|
||||
*/
|
||||
@DataMongoTest
|
||||
@Testcontainers(disabledWithoutDocker = true)
|
||||
class DataMongoTestIntegrationTests {
|
||||
|
||||
@Container
|
||||
static final MongoDBContainer mongoDB = new MongoDBContainer("mongo:4.0.10").withStartupAttempts(5)
|
||||
.withStartupTimeout(Duration.ofMinutes(5));
|
||||
|
||||
@Autowired
|
||||
private MongoTemplate mongoTemplate;
|
||||
|
||||
|
@ -58,4 +70,9 @@ class DataMongoTestIntegrationTests {
|
|||
.isThrownBy(() -> this.applicationContext.getBean(ExampleService.class));
|
||||
}
|
||||
|
||||
@DynamicPropertySource
|
||||
static void mongoProperties(DynamicPropertyRegistry registry) {
|
||||
registry.add("spring.data.mongodb.uri", mongoDB::getReplicaSetUrl);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -19,9 +19,16 @@ package org.springframework.boot.test.autoconfigure.data.mongo;
|
|||
import java.time.Duration;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.util.TestPropertyValues;
|
||||
import org.springframework.context.ApplicationContextInitializer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
|
@ -31,8 +38,14 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
* @author Stephane Nicoll
|
||||
*/
|
||||
@DataMongoTest
|
||||
@Testcontainers(disabledWithoutDocker = true)
|
||||
@ContextConfiguration(initializers = DataMongoTestReactiveIntegrationTests.Initializer.class)
|
||||
class DataMongoTestReactiveIntegrationTests {
|
||||
|
||||
@Container
|
||||
static final MongoDBContainer mongoDB = new MongoDBContainer("mongo:4.0.10").withStartupAttempts(5)
|
||||
.withStartupTimeout(Duration.ofMinutes(5));
|
||||
|
||||
@Autowired
|
||||
private ReactiveMongoTemplate mongoTemplate;
|
||||
|
||||
|
@ -48,4 +61,14 @@ class DataMongoTestReactiveIntegrationTests {
|
|||
assertThat(this.mongoTemplate.collectionExists("exampleDocuments").block(Duration.ofSeconds(30))).isTrue();
|
||||
}
|
||||
|
||||
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||
|
||||
@Override
|
||||
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
|
||||
TestPropertyValues.of("spring.data.mongodb.uri=" + mongoDB.getReplicaSetUrl())
|
||||
.applyTo(configurableApplicationContext.getEnvironment());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright 2012-2019 the original author or authors.
|
||||
* Copyright 2012-2020 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
@ -16,11 +16,20 @@
|
|||
|
||||
package org.springframework.boot.test.autoconfigure.data.mongo;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.test.util.TestPropertyValues;
|
||||
import org.springframework.context.ApplicationContextInitializer;
|
||||
import org.springframework.context.ConfigurableApplicationContext;
|
||||
import org.springframework.context.annotation.ComponentScan.Filter;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.test.context.ContextConfiguration;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
|
@ -30,8 +39,14 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
* @author Michael Simons
|
||||
*/
|
||||
@DataMongoTest(includeFilters = @Filter(Service.class))
|
||||
@Testcontainers(disabledWithoutDocker = true)
|
||||
@ContextConfiguration(initializers = DataMongoTestWithIncludeFilterIntegrationTests.Initializer.class)
|
||||
class DataMongoTestWithIncludeFilterIntegrationTests {
|
||||
|
||||
@Container
|
||||
static final MongoDBContainer mongoDB = new MongoDBContainer("mongo:4.0.10").withStartupAttempts(5)
|
||||
.withStartupTimeout(Duration.ofMinutes(5));
|
||||
|
||||
@Autowired
|
||||
private ExampleService service;
|
||||
|
||||
|
@ -40,4 +55,14 @@ class DataMongoTestWithIncludeFilterIntegrationTests {
|
|||
assertThat(this.service.hasCollection("foobar")).isFalse();
|
||||
}
|
||||
|
||||
static class Initializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
|
||||
|
||||
@Override
|
||||
public void initialize(ConfigurableApplicationContext configurableApplicationContext) {
|
||||
TestPropertyValues.of("spring.data.mongodb.uri=" + mongoDB.getReplicaSetUrl())
|
||||
.applyTo(configurableApplicationContext.getEnvironment());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -16,34 +16,22 @@
|
|||
|
||||
package org.springframework.boot.test.autoconfigure.data.mongo;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.time.Duration;
|
||||
import java.util.List;
|
||||
|
||||
import com.mongodb.BasicDBList;
|
||||
import com.mongodb.ServerAddress;
|
||||
import com.mongodb.client.ClientSession;
|
||||
import com.mongodb.client.MongoClient;
|
||||
import com.mongodb.client.MongoDatabase;
|
||||
import com.mongodb.connection.ServerDescription;
|
||||
import de.flapdoodle.embed.mongo.config.IMongoCmdOptions;
|
||||
import de.flapdoodle.embed.mongo.config.IMongodConfig;
|
||||
import de.flapdoodle.embed.mongo.config.MongoCmdOptionsBuilder;
|
||||
import de.flapdoodle.embed.mongo.config.MongodConfigBuilder;
|
||||
import de.flapdoodle.embed.mongo.config.Storage;
|
||||
import de.flapdoodle.embed.mongo.distribution.Version;
|
||||
import org.awaitility.Awaitility;
|
||||
import org.bson.Document;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongoProperties;
|
||||
import org.springframework.boot.test.context.TestConfiguration;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.data.mongodb.MongoDatabaseFactory;
|
||||
import org.springframework.data.mongodb.MongoTransactionManager;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.test.context.DynamicPropertyRegistry;
|
||||
import org.springframework.test.context.DynamicPropertySource;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
@ -55,8 +43,13 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
*/
|
||||
@DataMongoTest
|
||||
@Transactional
|
||||
@Testcontainers(disabledWithoutDocker = true)
|
||||
class TransactionalDataMongoTestIntegrationTests {
|
||||
|
||||
@Container
|
||||
static final MongoDBContainer mongoDB = new MongoDBContainer("mongo:4.0.10").withStartupAttempts(5)
|
||||
.withStartupTimeout(Duration.ofMinutes(5));
|
||||
|
||||
@Autowired
|
||||
private ExampleRepository exampleRepository;
|
||||
|
||||
|
@ -68,6 +61,11 @@ class TransactionalDataMongoTestIntegrationTests {
|
|||
assertThat(exampleDocument.getId()).isNotNull();
|
||||
}
|
||||
|
||||
@DynamicPropertySource
|
||||
static void mongoProperties(DynamicPropertyRegistry registry) {
|
||||
registry.add("spring.data.mongodb.uri", mongoDB::getReplicaSetUrl);
|
||||
}
|
||||
|
||||
@TestConfiguration(proxyBeanMethods = false)
|
||||
static class TransactionManagerConfiguration {
|
||||
|
||||
|
@ -79,53 +77,23 @@ class TransactionalDataMongoTestIntegrationTests {
|
|||
}
|
||||
|
||||
@TestConfiguration(proxyBeanMethods = false)
|
||||
static class MongoCustomizationConfiguration {
|
||||
|
||||
private static final String REPLICA_SET_NAME = "rs1";
|
||||
static class MongoInitializationConfiguration {
|
||||
|
||||
@Bean
|
||||
IMongodConfig embeddedMongoConfiguration(EmbeddedMongoProperties embeddedProperties) throws IOException {
|
||||
IMongoCmdOptions cmdOptions = new MongoCmdOptionsBuilder().useNoJournal(false).build();
|
||||
return new MongodConfigBuilder().version(Version.Main.PRODUCTION)
|
||||
.replication(new Storage(null, REPLICA_SET_NAME, 0)).cmdOptions(cmdOptions)
|
||||
.stopTimeoutInMillis(60000).build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
MongoInitializer mongoInitializer(MongoClient client, MongoTemplate template) {
|
||||
return new MongoInitializer(client, template);
|
||||
MongoInitializer mongoInitializer(MongoTemplate template) {
|
||||
return new MongoInitializer(template);
|
||||
}
|
||||
|
||||
static class MongoInitializer implements InitializingBean {
|
||||
|
||||
private final MongoClient client;
|
||||
|
||||
private final MongoTemplate template;
|
||||
|
||||
MongoInitializer(MongoClient client, MongoTemplate template) {
|
||||
this.client = client;
|
||||
MongoInitializer(MongoTemplate template) {
|
||||
this.template = template;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
List<ServerDescription> servers = this.client.getClusterDescription().getServerDescriptions();
|
||||
assertThat(servers).hasSize(1);
|
||||
ServerAddress address = servers.get(0).getAddress();
|
||||
BasicDBList members = new BasicDBList();
|
||||
members.add(new Document("_id", 0).append("host", address.getHost() + ":" + address.getPort()));
|
||||
Document config = new Document("_id", REPLICA_SET_NAME);
|
||||
config.put("members", members);
|
||||
MongoDatabase admin = this.client.getDatabase("admin");
|
||||
admin.runCommand(new Document("replSetInitiate", config));
|
||||
Awaitility.await().atMost(Duration.ofMinutes(1)).until(() -> {
|
||||
try (ClientSession session = this.client.startSession()) {
|
||||
return true;
|
||||
}
|
||||
catch (Exception ex) {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
this.template.createCollection("exampleDocuments");
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue