commit
33ef1b6e5b
|
@ -53,7 +53,6 @@ dependencies {
|
||||||
testImplementation("com.fasterxml.jackson.module:jackson-module-parameter-names")
|
testImplementation("com.fasterxml.jackson.module:jackson-module-parameter-names")
|
||||||
testImplementation("com.h2database:h2")
|
testImplementation("com.h2database:h2")
|
||||||
testImplementation("com.unboundid:unboundid-ldapsdk")
|
testImplementation("com.unboundid:unboundid-ldapsdk")
|
||||||
testImplementation("de.flapdoodle.embed:de.flapdoodle.embed.mongo")
|
|
||||||
testImplementation("io.lettuce:lettuce-core")
|
testImplementation("io.lettuce:lettuce-core")
|
||||||
testImplementation("io.projectreactor:reactor-core")
|
testImplementation("io.projectreactor:reactor-core")
|
||||||
testImplementation("io.projectreactor:reactor-test")
|
testImplementation("io.projectreactor:reactor-test")
|
||||||
|
@ -76,6 +75,7 @@ dependencies {
|
||||||
testImplementation("org.springframework.hateoas:spring-hateoas")
|
testImplementation("org.springframework.hateoas:spring-hateoas")
|
||||||
testImplementation("org.springframework.plugin:spring-plugin-core")
|
testImplementation("org.springframework.plugin:spring-plugin-core")
|
||||||
testImplementation("org.testcontainers:junit-jupiter")
|
testImplementation("org.testcontainers:junit-jupiter")
|
||||||
|
testImplementation("org.testcontainers:mongodb")
|
||||||
testImplementation("org.testcontainers:neo4j")
|
testImplementation("org.testcontainers:neo4j")
|
||||||
testImplementation("org.testcontainers:testcontainers")
|
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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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;
|
package org.springframework.boot.test.autoconfigure.data.mongo;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
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.NoSuchBeanDefinitionException;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.context.ApplicationContext;
|
import org.springframework.context.ApplicationContext;
|
||||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
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.assertThat;
|
||||||
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||||
|
@ -32,8 +39,13 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
|
||||||
* @author Michael Simons
|
* @author Michael Simons
|
||||||
*/
|
*/
|
||||||
@DataMongoTest
|
@DataMongoTest
|
||||||
|
@Testcontainers(disabledWithoutDocker = true)
|
||||||
class DataMongoTestIntegrationTests {
|
class DataMongoTestIntegrationTests {
|
||||||
|
|
||||||
|
@Container
|
||||||
|
static final MongoDBContainer mongoDB = new MongoDBContainer("mongo:4.0.10").withStartupAttempts(5)
|
||||||
|
.withStartupTimeout(Duration.ofMinutes(5));
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private MongoTemplate mongoTemplate;
|
private MongoTemplate mongoTemplate;
|
||||||
|
|
||||||
|
@ -58,4 +70,9 @@ class DataMongoTestIntegrationTests {
|
||||||
.isThrownBy(() -> this.applicationContext.getBean(ExampleService.class));
|
.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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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 java.time.Duration;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
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.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.data.mongodb.core.ReactiveMongoTemplate;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@ -31,8 +38,14 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
* @author Stephane Nicoll
|
* @author Stephane Nicoll
|
||||||
*/
|
*/
|
||||||
@DataMongoTest
|
@DataMongoTest
|
||||||
|
@Testcontainers(disabledWithoutDocker = true)
|
||||||
|
@ContextConfiguration(initializers = DataMongoTestReactiveIntegrationTests.Initializer.class)
|
||||||
class DataMongoTestReactiveIntegrationTests {
|
class DataMongoTestReactiveIntegrationTests {
|
||||||
|
|
||||||
|
@Container
|
||||||
|
static final MongoDBContainer mongoDB = new MongoDBContainer("mongo:4.0.10").withStartupAttempts(5)
|
||||||
|
.withStartupTimeout(Duration.ofMinutes(5));
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ReactiveMongoTemplate mongoTemplate;
|
private ReactiveMongoTemplate mongoTemplate;
|
||||||
|
|
||||||
|
@ -48,4 +61,14 @@ class DataMongoTestReactiveIntegrationTests {
|
||||||
assertThat(this.mongoTemplate.collectionExists("exampleDocuments").block(Duration.ofSeconds(30))).isTrue();
|
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");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with 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;
|
package org.springframework.boot.test.autoconfigure.data.mongo;
|
||||||
|
|
||||||
|
import java.time.Duration;
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
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.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.context.annotation.ComponentScan.Filter;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
import org.springframework.test.context.ContextConfiguration;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
|
||||||
|
@ -30,8 +39,14 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
* @author Michael Simons
|
* @author Michael Simons
|
||||||
*/
|
*/
|
||||||
@DataMongoTest(includeFilters = @Filter(Service.class))
|
@DataMongoTest(includeFilters = @Filter(Service.class))
|
||||||
|
@Testcontainers(disabledWithoutDocker = true)
|
||||||
|
@ContextConfiguration(initializers = DataMongoTestWithIncludeFilterIntegrationTests.Initializer.class)
|
||||||
class DataMongoTestWithIncludeFilterIntegrationTests {
|
class DataMongoTestWithIncludeFilterIntegrationTests {
|
||||||
|
|
||||||
|
@Container
|
||||||
|
static final MongoDBContainer mongoDB = new MongoDBContainer("mongo:4.0.10").withStartupAttempts(5)
|
||||||
|
.withStartupTimeout(Duration.ofMinutes(5));
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ExampleService service;
|
private ExampleService service;
|
||||||
|
|
||||||
|
@ -40,4 +55,14 @@ class DataMongoTestWithIncludeFilterIntegrationTests {
|
||||||
assertThat(this.service.hasCollection("foobar")).isFalse();
|
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;
|
package org.springframework.boot.test.autoconfigure.data.mongo;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.time.Duration;
|
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.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.InitializingBean;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
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.boot.test.context.TestConfiguration;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.data.mongodb.MongoDatabaseFactory;
|
import org.springframework.data.mongodb.MongoDatabaseFactory;
|
||||||
import org.springframework.data.mongodb.MongoTransactionManager;
|
import org.springframework.data.mongodb.MongoTransactionManager;
|
||||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
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 org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import static org.assertj.core.api.Assertions.assertThat;
|
import static org.assertj.core.api.Assertions.assertThat;
|
||||||
|
@ -55,8 +43,13 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||||
*/
|
*/
|
||||||
@DataMongoTest
|
@DataMongoTest
|
||||||
@Transactional
|
@Transactional
|
||||||
|
@Testcontainers(disabledWithoutDocker = true)
|
||||||
class TransactionalDataMongoTestIntegrationTests {
|
class TransactionalDataMongoTestIntegrationTests {
|
||||||
|
|
||||||
|
@Container
|
||||||
|
static final MongoDBContainer mongoDB = new MongoDBContainer("mongo:4.0.10").withStartupAttempts(5)
|
||||||
|
.withStartupTimeout(Duration.ofMinutes(5));
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private ExampleRepository exampleRepository;
|
private ExampleRepository exampleRepository;
|
||||||
|
|
||||||
|
@ -68,6 +61,11 @@ class TransactionalDataMongoTestIntegrationTests {
|
||||||
assertThat(exampleDocument.getId()).isNotNull();
|
assertThat(exampleDocument.getId()).isNotNull();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@DynamicPropertySource
|
||||||
|
static void mongoProperties(DynamicPropertyRegistry registry) {
|
||||||
|
registry.add("spring.data.mongodb.uri", mongoDB::getReplicaSetUrl);
|
||||||
|
}
|
||||||
|
|
||||||
@TestConfiguration(proxyBeanMethods = false)
|
@TestConfiguration(proxyBeanMethods = false)
|
||||||
static class TransactionManagerConfiguration {
|
static class TransactionManagerConfiguration {
|
||||||
|
|
||||||
|
@ -79,53 +77,23 @@ class TransactionalDataMongoTestIntegrationTests {
|
||||||
}
|
}
|
||||||
|
|
||||||
@TestConfiguration(proxyBeanMethods = false)
|
@TestConfiguration(proxyBeanMethods = false)
|
||||||
static class MongoCustomizationConfiguration {
|
static class MongoInitializationConfiguration {
|
||||||
|
|
||||||
private static final String REPLICA_SET_NAME = "rs1";
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
IMongodConfig embeddedMongoConfiguration(EmbeddedMongoProperties embeddedProperties) throws IOException {
|
MongoInitializer mongoInitializer(MongoTemplate template) {
|
||||||
IMongoCmdOptions cmdOptions = new MongoCmdOptionsBuilder().useNoJournal(false).build();
|
return new MongoInitializer(template);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static class MongoInitializer implements InitializingBean {
|
static class MongoInitializer implements InitializingBean {
|
||||||
|
|
||||||
private final MongoClient client;
|
|
||||||
|
|
||||||
private final MongoTemplate template;
|
private final MongoTemplate template;
|
||||||
|
|
||||||
MongoInitializer(MongoClient client, MongoTemplate template) {
|
MongoInitializer(MongoTemplate template) {
|
||||||
this.client = client;
|
|
||||||
this.template = template;
|
this.template = template;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() throws Exception {
|
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");
|
this.template.createCollection("exampleDocuments");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue