DATAMONGO-2461 - Efficient resource usage and ci related improvments.

- Give the server a little time to think on ci system.
- Reuse and Close MongoClients in tests.
- Use WriteConcern majority in setup.
- Use longer transaction timeout on server
- Use junit-pioneer to repeatable tests known to fail due to network errors.

Original pull request: #831.
This commit is contained in:
Christoph Strobl
2020-01-28 15:58:33 +01:00
committed by Mark Paluch
parent dd15bbc5c1
commit 993018feb1
64 changed files with 840 additions and 504 deletions

20
Jenkinsfile vendored
View File

@@ -99,11 +99,11 @@ pipeline {
steps {
sh 'rm -rf ?'
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
sh 'mongod --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'sleep 10'
sh 'mongo --eval "rs.initiate({_id: \'rs0\', members:[{_id: 0, host: \'127.0.0.1:27017\'}]});"'
sh 'sleep 15'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw clean dependency:list test -Dsort -U -B'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw clean dependency:list test -Duser.name=jenkins -Dsort -U -B'
}
}
@@ -127,11 +127,11 @@ pipeline {
steps {
sh 'rm -rf ?'
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
sh 'mongod --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'sleep 10'
sh 'mongo --eval "rs.initiate({_id: \'rs0\', members:[{_id: 0, host: \'127.0.0.1:27017\'}]});"'
sh 'sleep 15'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw clean dependency:list test -Dsort -U -B'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw clean dependency:list test -Duser.name=jenkins -Dsort -U -B'
}
}
@@ -147,11 +147,11 @@ pipeline {
steps {
sh 'rm -rf ?'
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
sh 'mongod --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'sleep 10'
sh 'mongo --eval "rs.initiate({_id: \'rs0\', members:[{_id: 0, host: \'127.0.0.1:27017\'}]});"'
sh 'sleep 15'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw clean dependency:list test -Dsort -U -B'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw clean dependency:list test -Duser.name=jenkins -Dsort -U -B'
}
}
@@ -167,11 +167,11 @@ pipeline {
steps {
sh 'rm -rf ?'
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
sh 'mongod --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'sleep 10'
sh 'mongo --eval "rs.initiate({_id: \'rs0\', members:[{_id: 0, host: \'127.0.0.1:27017\'}]});"'
sh 'sleep 15'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -Pjava11 clean dependency:list test -Dsort -U -B'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -Pjava11 clean dependency:list test -Duser.name=jenkins -Dsort -U -B'
}
}
@@ -187,11 +187,11 @@ pipeline {
steps {
sh 'rm -rf ?'
sh 'mkdir -p /tmp/mongodb/db /tmp/mongodb/log'
sh 'mongod --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'mongod --setParameter transactionLifetimeLimitSeconds=90 --setParameter maxTransactionLockRequestTimeoutMillis=10000 --dbpath /tmp/mongodb/db --replSet rs0 --fork --logpath /tmp/mongodb/log/mongod.log &'
sh 'sleep 10'
sh 'mongo --eval "rs.initiate({_id: \'rs0\', members:[{_id: 0, host: \'127.0.0.1:27017\'}]});"'
sh 'sleep 15'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -Pjava11 clean dependency:list test -Dsort -U -B'
sh 'MAVEN_OPTS="-Duser.name=jenkins -Duser.home=/tmp/jenkins-home" ./mvnw -Pjava11 clean dependency:list test -Duser.name=jenkins -Dsort -U -B'
}
}
}

View File

@@ -250,6 +250,13 @@
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit-pioneer</groupId>
<artifactId>junit-pioneer</artifactId>
<version>0.5.3</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>javax.transaction</groupId>
<artifactId>jta</artifactId>

View File

@@ -129,6 +129,7 @@ public class MongoExceptionTranslator implements PersistenceExceptionTranslator
} else if (MongoDbErrorCodes.isTransactionFailureCode(code)) {
return new MongoTransactionException(ex.getMessage(), ex);
}
return new UncategorizedMongoDbException(ex.getMessage(), ex);
}

View File

@@ -18,6 +18,7 @@ package org.springframework.data.mongodb;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.RequiredArgsConstructor;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import reactor.test.StepVerifier;
@@ -25,13 +26,12 @@ import reactor.test.StepVerifier;
import java.time.Duration;
import org.bson.types.ObjectId;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.condition.DisabledIfSystemProperty;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -40,11 +40,11 @@ import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguratio
import org.springframework.data.mongodb.core.ReactiveMongoOperations;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoServerCondition;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.reactive.TransactionalOperator;
import org.springframework.transaction.support.DefaultTransactionDefinition;
@@ -57,39 +57,43 @@ import com.mongodb.reactivestreams.client.MongoClient;
* @author Mark Paluch
* @author Christoph Strobl
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoServerCondition.class, MongoClientExtension.class })
@EnableIfMongoServerVersion(isGreaterThanEqual = "4.0")
@EnableIfReplicaSetAvailable
@DisabledIfSystemProperty(named = "user.name", matches = "jenkins")
public class ReactiveTransactionIntegrationTests {
public static @ClassRule RuleChain TEST_RULES = RuleChain.outerRule(MongoVersionRule.atLeast(Version.parse("4.0.0")))
.around(ReplicaSet.required());
private static final String DATABASE = "rxtx-test";
PersonService personService;
ReactiveMongoOperations operations;
static @Client MongoClient mongoClient;
static GenericApplicationContext context;
@BeforeClass
PersonService personService;
ReactiveMongoOperations operations;
@BeforeAll
public static void init() {
context = new AnnotationConfigApplicationContext(TestMongoConfig.class, PersonService.class);
}
@AfterClass
@AfterAll
public static void after() {
context.close();
}
@Before
@BeforeEach
public void setUp() {
personService = context.getBean(PersonService.class);
operations = context.getBean(ReactiveMongoOperations.class);
MongoClient client = MongoTestUtils.reactiveClient();
try (MongoClient client = MongoTestUtils.reactiveClient()) {
Flux.merge( //
MongoTestUtils.createOrReplaceCollection(DATABASE, operations.getCollectionName(Person.class), client),
MongoTestUtils.createOrReplaceCollection(DATABASE, operations.getCollectionName(EventLog.class), client) //
).then().as(StepVerifier::create).verifyComplete();
Flux.merge( //
MongoTestUtils.createOrReplaceCollection(DATABASE, operations.getCollectionName(Person.class), client),
MongoTestUtils.createOrReplaceCollection(DATABASE, operations.getCollectionName(EventLog.class), client) //
).then().as(StepVerifier::create).verifyComplete();
}
}
@Test // DATAMONGO-2265
@@ -222,7 +226,7 @@ public class ReactiveTransactionIntegrationTests {
@Override
public MongoClient reactiveMongoClient() {
return MongoTestUtils.reactiveClient();
return mongoClient;
}
@Override

View File

@@ -19,6 +19,7 @@ import static org.assertj.core.api.AssertionsForInterfaceTypes.*;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Configuration;
@@ -57,7 +58,7 @@ public class AbstractReactiveMongoConfigurationIntegrationTests {
@Override
public MongoClient reactiveMongoClient() {
return MongoTestUtils.reactiveClient();
return Mockito.mock(MongoClient.class);
}
@Override

View File

@@ -26,6 +26,7 @@ import java.util.Collections;
import java.util.Set;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.NoSuchBeanDefinitionException;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
@@ -182,7 +183,7 @@ public class AbstractReactiveMongoConfigurationUnitTests {
@Override
public MongoClient reactiveMongoClient() {
return MongoTestUtils.reactiveClient();
return Mockito.mock(MongoClient.class);
}
@Override

View File

@@ -22,10 +22,9 @@ import java.util.Collections;
import java.util.Optional;
import java.util.function.Function;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.annotation.Bean;
@@ -38,10 +37,12 @@ import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.stereotype.Repository;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.client.MongoClient;
@@ -52,10 +53,12 @@ import com.mongodb.client.MongoClient;
* @author Oliver Gierke
* @author Mark Paluch
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@ContextConfiguration
public class AuditingViaJavaConfigRepositoriesTests {
static @Client MongoClient mongoClient;
@Autowired AuditablePersonRepository auditablePersonRepository;
@Autowired AuditorAware<AuditablePerson> auditorAware;
@Autowired MongoMappingContext context;
@@ -75,7 +78,7 @@ public class AuditingViaJavaConfigRepositoriesTests {
@Override
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
@Bean
@@ -85,7 +88,7 @@ public class AuditingViaJavaConfigRepositoriesTests {
}
}
@Before
@BeforeEach
public void setup() {
auditablePersonRepository.deleteAll();
this.auditor = auditablePersonRepository.save(new AuditablePerson("auditor"));

View File

@@ -17,6 +17,7 @@ package org.springframework.data.mongodb.config;
import static org.assertj.core.api.Assertions.*;
import com.mongodb.client.MongoClient;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.config.BeanDefinition;
@@ -58,12 +59,14 @@ public class MongoDbFactoryParserIntegrationTests {
@Test // DATAMONGO-2199
public void testWriteConcern() throws Exception {
SimpleMongoClientDatabaseFactory dbFactory = new SimpleMongoClientDatabaseFactory(MongoTestUtils.client(),
"database");
dbFactory.setWriteConcern(WriteConcern.ACKNOWLEDGED);
dbFactory.getMongoDatabase();
try(MongoClient client = MongoTestUtils.client()) {
SimpleMongoClientDatabaseFactory dbFactory = new SimpleMongoClientDatabaseFactory(client,
"database");
dbFactory.setWriteConcern(WriteConcern.ACKNOWLEDGED);
dbFactory.getMongoDatabase();
assertThat(ReflectionTestUtils.getField(dbFactory, "writeConcern")).isEqualTo(WriteConcern.ACKNOWLEDGED);
assertThat(ReflectionTestUtils.getField(dbFactory, "writeConcern")).isEqualTo(WriteConcern.ACKNOWLEDGED);
}
}
@Test // DATAMONGO-2199

View File

@@ -25,8 +25,8 @@ import java.util.Collections;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Function;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -38,22 +38,24 @@ import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity;
import org.springframework.data.mongodb.repository.ReactiveMongoRepository;
import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients;
/**
* Integration test for the auditing support via {@link org.springframework.data.mongodb.core.ReactiveMongoTemplate}.
*
* @author Mark Paluch
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@ContextConfiguration
public class ReactiveAuditingTests {
static @Client MongoClient mongoClient;
@Autowired ReactiveAuditablePersonRepository auditablePersonRepository;
@Autowired AuditorAware<AuditablePerson> auditorAware;
@Autowired MongoMappingContext context;
@@ -71,7 +73,7 @@ public class ReactiveAuditingTests {
@Override
public MongoClient reactiveMongoClient() {
return MongoTestUtils.reactiveClient();
return mongoClient;
}
@Bean

View File

@@ -23,56 +23,50 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersion;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.ReplSetClient;
import org.springframework.test.util.ReflectionTestUtils;
import com.mongodb.ClientSessionOptions;
import com.mongodb.client.MongoClient;
import com.mongodb.client.ClientSession;
import com.mongodb.client.MongoClient;
/**
* @author Christoph Strobl
* @author Mark Paluch
*/
@ExtendWith({ MongoClientExtension.class })
@EnableIfReplicaSetAvailable
public class ClientSessionTests {
public static @ClassRule TestRule replSet = ReplicaSet.required();
public @Rule MongoVersionRule REQUIRES_AT_LEAST_3_6_0 = MongoVersionRule.atLeast(Version.parse("3.6.0"));
private static final String DB_NAME = "client-session-tests";
private static final String COLLECTION_NAME = "test";
MongoTemplate template;
MongoClient client;
static @ReplSetClient MongoClient mongoClient;
@Before
MongoTemplate template;
@BeforeEach
public void setUp() {
client = MongoTestUtils.replSetClient();
MongoTestUtils.createOrReplaceCollection(DB_NAME, COLLECTION_NAME, mongoClient);
MongoTestUtils.createOrReplaceCollection(DB_NAME, COLLECTION_NAME, client);
template = new MongoTemplate(client, DB_NAME);
template = new MongoTemplate(mongoClient, DB_NAME);
template.getDb().getCollection(COLLECTION_NAME).insertOne(new Document("_id", "id-1").append("value", "spring"));
}
@Test // DATAMONGO-1880
public void shouldApplyClientSession() {
ClientSession session = client.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
ClientSession session = mongoClient.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
assertThat(session.getOperationTime()).isNull();
@@ -89,7 +83,7 @@ public class ClientSessionTests {
@Test // DATAMONGO-2241
public void shouldReuseConfiguredInfrastructure() {
ClientSession session = client.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
ClientSession session = mongoClient.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
MappingMongoConverter source = MappingMongoConverter.class.cast(template.getConverter());
MappingMongoConverter sessionTemplateConverter = MappingMongoConverter.class
@@ -103,10 +97,9 @@ public class ClientSessionTests {
}
@Test // DATAMONGO-1920
@MongoVersion(asOf = "3.7.3")
public void withCommittedTransaction() {
ClientSession session = client.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
ClientSession session = mongoClient.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
assertThat(session.getOperationTime()).isNull();
@@ -129,10 +122,9 @@ public class ClientSessionTests {
}
@Test // DATAMONGO-1920
@MongoVersion(asOf = "3.7.3")
public void withAbortedTransaction() {
ClientSession session = client.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
ClientSession session = mongoClient.startSession(ClientSessionOptions.builder().causallyConsistent(true).build());
assertThat(session.getOperationTime()).isNull();

View File

@@ -20,11 +20,9 @@ import static org.springframework.data.mongodb.core.query.Criteria.*;
import static org.springframework.data.mongodb.core.query.Query.*;
import org.bson.Document;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -32,13 +30,13 @@ import org.springframework.dao.UncategorizedDataAccessException;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.script.ExecutableMongoScript;
import org.springframework.data.mongodb.core.script.NamedMongoScript;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import com.mongodb.client.MongoClient;
import org.springframework.test.context.junit.jupiter.SpringExtension;
/**
* Integration tests for {@link DefaultScriptOperations}.
@@ -47,11 +45,12 @@ import com.mongodb.client.MongoClient;
* @author Oliver Gierke
* @since 1.7
*/
@RunWith(SpringRunner.class)
@ExtendWith({MongoClientExtension.class, SpringExtension.class})
@EnableIfMongoServerVersion(isLessThan = "4.1.0")
@ContextConfiguration
public class DefaultScriptOperationsTests {
public static @ClassRule MongoVersionRule REQUIRES_AT_MOST_4_0 = MongoVersionRule.atMost(Version.parse("4.0.999"));
static @Client MongoClient mongoClient;
@Configuration
static class Config {
@@ -60,7 +59,7 @@ public class DefaultScriptOperationsTests {
@Bean
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
@Bean
@@ -78,7 +77,7 @@ public class DefaultScriptOperationsTests {
@Autowired MongoTemplate template;
DefaultScriptOperations scriptOps;
@Before
@BeforeEach
public void setUp() {
template.getCollection(JAVASCRIPT_COLLECTION_NAME).deleteMany(new Document());

View File

@@ -29,8 +29,9 @@ import java.util.stream.Stream;
import org.bson.BsonString;
import org.bson.BsonValue;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.dao.InvalidDataAccessApiUsageException;
@@ -43,7 +44,10 @@ import org.springframework.data.mongodb.core.index.GeospatialIndex;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.NearQuery;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
/**
* Integration tests for {@link ExecutableFindOperationSupport}.
@@ -51,10 +55,12 @@ import org.springframework.data.mongodb.test.util.MongoTestUtils;
* @author Christoph Strobl
* @author Mark Paluch
*/
@ExtendWith(MongoClientExtension.class)
public class ExecutableFindOperationSupportTests {
private static final String STAR_WARS = "star-wars";
private static final String STAR_WARS_PLANETS = "star-wars-universe";
static @Client MongoClient mongoClient;
MongoTemplate template;
Person han;
@@ -63,11 +69,11 @@ public class ExecutableFindOperationSupportTests {
Planet alderan;
Planet dantooine;
@Before
@BeforeEach
public void setUp() {
template = new MongoTemplate(
new SimpleMongoClientDatabaseFactory(MongoTestUtils.client(), "ExecutableFindOperationSupportTests"));
new SimpleMongoClientDatabaseFactory(mongoClient, "ExecutableFindOperationSupportTests"));
template.dropCollection(STAR_WARS);
template.dropCollection(STAR_WARS_PLANETS);

View File

@@ -23,12 +23,15 @@ import lombok.Data;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
import com.mongodb.client.result.DeleteResult;
/**
@@ -37,19 +40,22 @@ import com.mongodb.client.result.DeleteResult;
* @author Christoph Strobl
* @author Mark Paluch
*/
@ExtendWith(MongoClientExtension.class)
public class ExecutableRemoveOperationSupportTests {
private static final String STAR_WARS = "star-wars";
static @Client MongoClient mongoClient;
MongoTemplate template;
Person han;
Person luke;
@Before
@BeforeEach
public void setUp() {
template = new MongoTemplate(
new SimpleMongoClientDatabaseFactory(MongoTestUtils.client(), "ExecutableRemoveOperationSupportTests"));
new SimpleMongoClientDatabaseFactory(mongoClient, "ExecutableRemoveOperationSupportTests"));
template.dropCollection(STAR_WARS);
han = new Person();

View File

@@ -24,14 +24,17 @@ import lombok.Data;
import java.util.Optional;
import org.bson.BsonString;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
import com.mongodb.client.result.UpdateResult;
/**
@@ -40,19 +43,21 @@ import com.mongodb.client.result.UpdateResult;
* @author Christoph Strobl
* @author Mark Paluch
*/
@ExtendWith(MongoClientExtension.class)
public class ExecutableUpdateOperationSupportTests {
private static final String STAR_WARS = "star-wars";
static @Client MongoClient mongoClient;
MongoTemplate template;
Person han;
Person luke;
@Before
@BeforeEach
public void setUp() {
template = new MongoTemplate(
new SimpleMongoClientDatabaseFactory(MongoTestUtils.client(), "ExecutableUpdateOperationSupportTests"));
new SimpleMongoClientDatabaseFactory(mongoClient, "ExecutableUpdateOperationSupportTests"));
template.dropCollection(STAR_WARS);
han = new Person();

View File

@@ -24,43 +24,33 @@ import lombok.Data;
import reactor.test.StepVerifier;
import org.bson.Document;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.schema.MongoJsonSchema;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
/**
* @author Christoph Strobl
* @author Mark Paluch
*/
@ExtendWith(MongoClientExtension.class)
public class JsonSchemaQueryTests {
public static final String DATABASE_NAME = "json-schema-query-tests";
public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_6_0 = MongoVersionRule.atLeast(Version.parse("3.6.0"));
static @Client MongoClient client;
static @Client com.mongodb.reactivestreams.client.MongoClient reactiveClient;
static MongoClient client = MongoTestUtils.client();
MongoTemplate template;
Person jellyBelly, roseSpringHeart, kazmardBoombub;
@BeforeClass
public static void beforeClass() {
client = MongoTestUtils.client();
}
@Before
@BeforeEach
public void setUp() {
template = new MongoTemplate(client, DATABASE_NAME);
@@ -108,10 +98,9 @@ public class JsonSchemaQueryTests {
MongoJsonSchema schema = MongoJsonSchema.builder().required("address").build();
com.mongodb.reactivestreams.client.MongoClient mongoClient = MongoTestUtils.reactiveClient();
new ReactiveMongoTemplate(mongoClient, DATABASE_NAME).find(query(matchingDocumentStructure(schema)), Person.class)
.as(StepVerifier::create).expectNextCount(2).verifyComplete();
new ReactiveMongoTemplate(reactiveClient, DATABASE_NAME)
.find(query(matchingDocumentStructure(schema)), Person.class).as(StepVerifier::create).expectNextCount(2)
.verifyComplete();
}
@Test // DATAMONGO-1835
@@ -198,8 +187,8 @@ public class JsonSchemaQueryTests {
MongoJsonSchema schema = MongoJsonSchema.builder().required("address").build();
assertThat(template.find(query(matchingDocumentStructure(schema)), Document.class, template.getCollectionName(Person.class)))
.hasSize(2);
assertThat(template.find(query(matchingDocumentStructure(schema)), Document.class,
template.getCollectionName(Person.class))).hasSize(2);
}
@Data

View File

@@ -21,20 +21,18 @@ import java.util.List;
import java.util.Locale;
import org.bson.Document;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.core.query.Collation;
import org.springframework.data.mongodb.core.query.Collation.Alternate;
import org.springframework.data.mongodb.core.query.Collation.ComparisonLevel;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.util.Version;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.client.MongoClient;
@@ -42,18 +40,18 @@ import com.mongodb.client.MongoClient;
* @author Christoph Strobl
* @author Mark Paluch
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
public class MongoTemplateCollationTests {
public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_4_0 = MongoVersionRule.atLeast(Version.parse("3.4.0"));
public static final String COLLECTION_NAME = "collation-1";
static @Client MongoClient mongoClient;
@Configuration
static class Config extends AbstractMongoClientConfiguration {
@Override
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
@Override
@@ -69,7 +67,7 @@ public class MongoTemplateCollationTests {
@Autowired MongoTemplate template;
@Before
@BeforeEach
public void setUp() {
template.dropCollection(COLLECTION_NAME);
}

View File

@@ -26,16 +26,19 @@ import java.util.Arrays;
import java.util.List;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.convert.LazyLoadingProxy;
import org.springframework.data.mongodb.core.convert.LazyLoadingTestUtils;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.MongoId;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
import com.mongodb.client.model.Filters;
/**
@@ -44,15 +47,18 @@ import com.mongodb.client.model.Filters;
*
* @author Christoph Strobl
*/
@ExtendWith(MongoClientExtension.class)
public class MongoTemplateDbRefTests {
static @Client MongoClient mongoClient;
MongoTemplate template;
MongoTemplate otherDbTemplate;
@Before
@BeforeEach
public void setUp() {
template = new MongoTemplate(MongoTestUtils.client(), "mongo-template-dbref-tests");
template = new MongoTemplate(mongoClient, "mongo-template-dbref-tests");
template.dropCollection(RefCycleLoadingIntoDifferentTypeRoot.class);
template.dropCollection(RefCycleLoadingIntoDifferentTypeIntermediate.class);
@@ -64,7 +70,7 @@ public class MongoTemplateDbRefTests {
template.dropCollection(WithListRefToAnotherDb.class);
template.dropCollection(WithLazyListRefToAnotherDb.class);
otherDbTemplate = new MongoTemplate(MongoTestUtils.client(), "mongo-template-dbref-tests-other-db");
otherDbTemplate = new MongoTemplate(mongoClient, "mongo-template-dbref-tests-other-db");
otherDbTemplate.dropCollection(JustSomeType.class);
}

View File

@@ -232,6 +232,7 @@ public class MongoTemplateTests {
template.dropCollection(ImmutableAudited.class);
template.dropCollection(RawStringId.class);
template.dropCollection(Outer.class);
template.dropCollection(Message.class);
}
@Test

View File

@@ -27,11 +27,9 @@ import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;
import org.bson.Document;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -41,13 +39,12 @@ import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.MongoTransactionManager;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.test.util.AfterTransactionAssertion;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.ReplSetClient;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.transaction.AfterTransaction;
import org.springframework.test.context.transaction.BeforeTransaction;
import org.springframework.transaction.annotation.Transactional;
@@ -61,23 +58,23 @@ import com.mongodb.client.model.Filters;
* @author Christoph Strobl
* @currentRead Shadow's Edge - Brent Weeks
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@EnableIfReplicaSetAvailable
@ContextConfiguration
@Transactional(transactionManager = "txManager")
public class MongoTemplateTransactionTests {
public static @ClassRule RuleChain TEST_RULES = RuleChain.outerRule(MongoVersionRule.atLeast(Version.parse("3.7.3")))
.around(ReplicaSet.required());
static final String DB_NAME = "template-tx-tests";
static final String COLLECTION_NAME = "assassins";
static @ReplSetClient MongoClient mongoClient;
@Configuration
static class Config extends AbstractMongoClientConfiguration {
@Bean
public MongoClient mongoClient() {
return MongoTestUtils.replSetClient();
return mongoClient;
}
@Override
@@ -101,7 +98,7 @@ public class MongoTemplateTransactionTests {
List<AfterTransactionAssertion<? extends Persistable<?>>> assertionList;
@Before
@BeforeEach
public void setUp() {
template.setReadPreference(ReadPreference.primary());

View File

@@ -17,14 +17,14 @@ package org.springframework.data.mongodb.core;
import static org.assertj.core.api.Assertions.*;
import lombok.EqualsAndHashCode;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import lombok.EqualsAndHashCode;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
@@ -38,7 +38,9 @@ import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoServerCondition;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
@@ -48,18 +50,18 @@ import com.mongodb.client.MongoCollection;
/**
* @author Christoph Strobl
*/
@ExtendWith(MongoServerCondition.class)
@ExtendWith({ MongoClientExtension.class, MongoServerCondition.class })
class MongoTemplateUpdateTests {
static final String DB_NAME = "update-test";
MongoClient client;
static @Client MongoClient client;
MongoTemplate template;
@BeforeEach
void setUp() {
client = MongoTestUtils.client();
template = new MongoTemplate(new SimpleMongoClientDatabaseFactory(client, DB_NAME));
MongoTestUtils.createOrReplaceCollection(DB_NAME, template.getCollectionName(Score.class), client);

View File

@@ -25,10 +25,9 @@ import lombok.Data;
import java.util.List;
import org.bson.Document;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.dao.DataIntegrityViolationException;
@@ -36,11 +35,10 @@ import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.core.CollectionOptions.ValidationOptions;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.lang.Nullable;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.client.MongoClient;
import com.mongodb.client.model.ValidationAction;
@@ -54,19 +52,18 @@ import com.mongodb.client.model.ValidationLevel;
* @author Andreas Zink
* @author Christoph Strobl
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
public class MongoTemplateValidationTests {
public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_2_0 = MongoVersionRule.atLeast(Version.parse("3.2.0"));
static final String COLLECTION_NAME = "validation-1";
static @Client MongoClient mongoClient;
@Configuration
static class Config extends AbstractMongoClientConfiguration {
@Override
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
@Override
@@ -82,7 +79,7 @@ public class MongoTemplateValidationTests {
@Autowired MongoTemplate template;
@Before
@BeforeEach
public void setUp() {
template.dropCollection(COLLECTION_NAME);
}

View File

@@ -22,17 +22,18 @@ import static org.springframework.data.mongodb.core.query.Query.*;
import java.util.Map;
import java.util.Optional;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.client.MongoClient;
@@ -42,10 +43,12 @@ import com.mongodb.client.MongoClient;
* @author Christoph Strobl
* @author Mark Paluch
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@ContextConfiguration
public class NoExplicitIdTests {
static @Client MongoClient mongoClient;
@Configuration
@EnableMongoRepositories(considerNestedRepositories = true)
static class Config extends AbstractMongoClientConfiguration {
@@ -57,7 +60,7 @@ public class NoExplicitIdTests {
@Override
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
@Override
@@ -69,7 +72,7 @@ public class NoExplicitIdTests {
@Autowired MongoOperations mongoOps;
@Autowired TypeWithoutExplicitIdPropertyRepository repo;
@Before
@BeforeEach
public void setUp() {
mongoOps.dropCollection(TypeWithoutIdProperty.class);
}

View File

@@ -22,8 +22,9 @@ import lombok.ToString;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.domain.Example;
import org.springframework.data.domain.ExampleMatcher;
@@ -32,7 +33,10 @@ import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.UntypedExampleMatcher;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
/**
* Integration tests for Query-by-example.
@@ -41,15 +45,18 @@ import org.springframework.data.mongodb.test.util.MongoTestUtils;
* @author Mark Paluch
* @author Oliver Gierke
*/
@ExtendWith(MongoClientExtension.class)
public class QueryByExampleTests {
static @Client MongoClient mongoClient;
MongoOperations operations;
Person p1, p2, p3;
@Before
@BeforeEach
public void setUp() {
operations = new MongoTemplate(MongoTestUtils.client(), "query-by-example");
operations = new MongoTemplate(mongoClient, "query-by-example");
operations.remove(new Query(), Person.class);
p1 = new Person();

View File

@@ -19,6 +19,7 @@ import static org.assertj.core.api.Assertions.*;
import static org.springframework.data.mongodb.core.query.Criteria.*;
import lombok.SneakyThrows;
import org.springframework.data.mongodb.test.util.ReplSetClient;
import reactor.core.Disposable;
import reactor.core.publisher.Flux;
import reactor.test.StepVerifier;
@@ -29,13 +30,14 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.stream.Collectors;
import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.ReplicaSet;
import com.mongodb.reactivestreams.client.MongoClient;
@@ -45,26 +47,26 @@ import com.mongodb.reactivestreams.client.MongoClient;
* @author Christoph Strobl
* @currentRead Dawn Cook - The Decoy Princess
*/
@ExtendWith(MongoClientExtension.class)
@EnableIfReplicaSetAvailable
public class ReactiveChangeStreamOperationSupportTests {
public static @ClassRule ReplicaSet REPL_SET_REQUIRED = ReplicaSet.required();
static final String DATABASE_NAME = "rx-change-stream";
static @ReplSetClient MongoClient mongoClient;
MongoClient client;
ReactiveMongoTemplate template;
@Before
@BeforeEach
public void setUp() {
client = MongoTestUtils.reactiveReplSetClient();
template = new ReactiveMongoTemplate(client, DATABASE_NAME);
template = new ReactiveMongoTemplate(mongoClient, DATABASE_NAME);
MongoTestUtils.createOrReplaceCollectionNow(DATABASE_NAME, "person", client);
MongoTestUtils.createOrReplaceCollectionNow(DATABASE_NAME, "person", mongoClient);
}
@After
@AfterEach
public void tearDown() {
MongoTestUtils.dropCollectionNow(DATABASE_NAME, "person", client);
MongoTestUtils.dropCollectionNow(DATABASE_NAME, "person", mongoClient);
}
@SneakyThrows
@@ -125,8 +127,8 @@ public class ReactiveChangeStreamOperationSupportTests {
Thread.sleep(500); // just give it some time to link receive all events
try {
assertThat(documents.stream().map(ChangeStreamEvent::getBody).collect(Collectors.toList()))
.containsOnly(person1, person2, person3);
assertThat(documents.stream().map(ChangeStreamEvent::getBody).collect(Collectors.toList())).containsOnly(person1,
person2, person3);
} finally {
disposable.dispose();
}

View File

@@ -26,15 +26,14 @@ import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Supplier;
import org.bson.Document;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version;
import com.mongodb.ClientSessionOptions;
import com.mongodb.reactivestreams.client.ClientSession;
@@ -45,22 +44,20 @@ import com.mongodb.reactivestreams.client.MongoClient;
* @author Mark Paluch
* @currentRead Beyond the Shadows - Brent Weeks
*/
@ExtendWith(MongoClientExtension.class)
@EnableIfReplicaSetAvailable
public class ReactiveClientSessionTests {
public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_6_0 = MongoVersionRule.atLeast(Version.parse("3.6.0"));
public static @ClassRule TestRule replSet = ReplicaSet.required();
static final String DATABASE_NAME = "reflective-client-session-tests";
static final String COLLECTION_NAME = "test";
MongoClient client;
static @Client MongoClient client;
ReactiveMongoTemplate template;
@Before
@BeforeEach
public void setUp() {
client = MongoTestUtils.reactiveReplSetClient();
template = new ReactiveMongoTemplate(client, DATABASE_NAME);
MongoTestUtils.createOrReplaceCollection(DATABASE_NAME, COLLECTION_NAME, client) //

View File

@@ -35,8 +35,9 @@ import java.util.function.Consumer;
import org.bson.BsonString;
import org.bson.BsonValue;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.dao.IncorrectResultSizeDataAccessException;
import org.springframework.dao.InvalidDataAccessApiUsageException;
@@ -48,7 +49,10 @@ import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.BasicQuery;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.NearQuery;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
/**
* Integration tests for {@link ReactiveFindOperationSupport}.
@@ -56,25 +60,28 @@ import org.springframework.data.mongodb.test.util.MongoTestUtils;
* @author Mark Paluch
* @author Christoph Strobl
*/
@ExtendWith(MongoClientExtension.class)
public class ReactiveFindOperationSupportTests {
private static final String STAR_WARS = "star-wars";
MongoTemplate blocking;
ReactiveMongoTemplate template;
static @Client MongoClient client;
static @Client com.mongodb.reactivestreams.client.MongoClient reactiveClient;
Person han;
Person luke;
@Before
@BeforeEach
public void setUp() {
blocking = new MongoTemplate(
new SimpleMongoClientDatabaseFactory(MongoTestUtils.client(), "ExecutableFindOperationSupportTests"));
blocking = new MongoTemplate(new SimpleMongoClientDatabaseFactory(client, "ExecutableFindOperationSupportTests"));
recreateCollection(STAR_WARS, false);
insertObjects();
template = new ReactiveMongoTemplate(MongoTestUtils.reactiveClient(), "ExecutableFindOperationSupportTests");
template = new ReactiveMongoTemplate(reactiveClient, "ExecutableFindOperationSupportTests");
}
void insertObjects() {

View File

@@ -24,20 +24,17 @@ import reactor.test.StepVerifier;
import java.util.List;
import org.bson.Document;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration;
import org.springframework.data.mongodb.core.query.Collation;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.reactivestreams.client.MongoClient;
@@ -45,19 +42,19 @@ import com.mongodb.reactivestreams.client.MongoClient;
* @author Mark Paluch
* @author Christoph Strobl
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@ContextConfiguration
public class ReactiveMongoTemplateCollationTests {
public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_4_0 = MongoVersionRule.atLeast(Version.parse("3.4.0"));
public static final String COLLECTION_NAME = "collation-1";
static @Client MongoClient mongoClient;
@Configuration
static class Config extends AbstractReactiveMongoConfiguration {
@Override
public MongoClient reactiveMongoClient() {
return MongoTestUtils.reactiveClient();
return mongoClient;
}
@Override
@@ -68,7 +65,7 @@ public class ReactiveMongoTemplateCollationTests {
@Autowired ReactiveMongoTemplate template;
@Before
@BeforeEach
public void setUp() {
template.dropCollection(COLLECTION_NAME).as(StepVerifier::create).verifyComplete();
}

View File

@@ -28,11 +28,11 @@ import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.TimeUnit;
import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junitpioneer.jupiter.RepeatFailedTest;
import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.annotation.Id;
import org.springframework.data.domain.Sort.Direction;
@@ -40,9 +40,9 @@ import org.springframework.data.mongodb.core.index.Index;
import org.springframework.data.mongodb.core.index.IndexField;
import org.springframework.data.mongodb.core.index.IndexInfo;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import com.mongodb.client.model.IndexOptions;
import com.mongodb.reactivestreams.client.ListIndexesPublisher;
@@ -54,26 +54,30 @@ import com.mongodb.reactivestreams.client.MongoClient;
* @author Mark Paluch
* @author Christoph Strobl
*/
@RunWith(SpringRunner.class)
@ContextConfiguration("classpath:reactive-infrastructure.xml")
@ExtendWith(MongoClientExtension.class)
public class ReactiveMongoTemplateIndexTests {
@Autowired SimpleReactiveMongoDatabaseFactory factory;
@Autowired ReactiveMongoTemplate template;
@Autowired MongoClient client;
static @Client MongoClient client;
@Before
SimpleReactiveMongoDatabaseFactory factory;
ReactiveMongoTemplate template;
@BeforeEach
public void setUp() {
factory = new SimpleReactiveMongoDatabaseFactory(client, "reactive-template-index-tests");
template = new ReactiveMongoTemplate(factory);
MongoTestUtils.dropCollectionNow(template.getMongoDatabase().getName(), "person", client);
MongoTestUtils.dropCollectionNow(template.getMongoDatabase().getName(), "indexfail", client);
MongoTestUtils.dropCollectionNow(template.getMongoDatabase().getName(), "indexedSample", client);
}
@After
@AfterEach
public void cleanUp() {}
@Test // DATAMONGO-1444
@RepeatFailedTest(3)
public void testEnsureIndexShouldCreateIndex() {
Person p1 = new Person("Oliver");
@@ -109,6 +113,7 @@ public class ReactiveMongoTemplateIndexTests {
}
@Test // DATAMONGO-1444
@RepeatFailedTest(3)
public void getIndexInfoShouldReturnCorrectIndex() {
Person p1 = new Person("Oliver");
@@ -139,6 +144,7 @@ public class ReactiveMongoTemplateIndexTests {
}
@Test // DATAMONGO-1444, DATAMONGO-2264
@RepeatFailedTest(3)
public void testReadIndexInfoForIndicesCreatedViaMongoShellCommands() {
template.indexOps(Person.class).dropAllIndexes() //
@@ -190,6 +196,7 @@ public class ReactiveMongoTemplateIndexTests {
}
@Test // DATAMONGO-1928
@RepeatFailedTest(3)
public void shouldCreateIndexOnAccess() {
StepVerifier.create(template.getCollection("indexedSample").listIndexes(Document.class)).expectNextCount(0)
@@ -205,6 +212,7 @@ public class ReactiveMongoTemplateIndexTests {
}
@Test // DATAMONGO-1928, DATAMONGO-2264
@RepeatFailedTest(3)
public void indexCreationShouldFail() throws InterruptedException {
Flux.from(factory.getMongoDatabase().getCollection("indexfail") //

View File

@@ -26,17 +26,16 @@ import java.util.Arrays;
import java.util.stream.Collectors;
import org.bson.Document;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.reactivestreams.Publisher;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version;
import com.mongodb.ClientSessionOptions;
import com.mongodb.reactivestreams.client.ClientSession;
@@ -49,11 +48,10 @@ import com.mongodb.reactivestreams.client.MongoClient;
* @author Mark Paluch
* @currentRead The Core - Peter V. Brett
*/
@ExtendWith(MongoClientExtension.class)
@EnableIfReplicaSetAvailable
public class ReactiveMongoTemplateTransactionTests {
public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_7_5 = MongoVersionRule.atLeast(Version.parse("3.7.5"));
public static @ClassRule TestRule replSet = ReplicaSet.required();
static final String DATABASE_NAME = "reactive-template-tx-tests";
static final String COLLECTION_NAME = "test";
static final Document DOCUMENT = new Document("_id", "id-1").append("value", "spring");
@@ -64,14 +62,12 @@ public class ReactiveMongoTemplateTransactionTests {
static final Person LEESHA = new Person("leesha", 22);
static final Person RENNA = new Person("renna", 22);
MongoClient client;
static @Client MongoClient client;
ReactiveMongoTemplate template;
@Before
@BeforeEach
public void setUp() {
client = MongoTestUtils.reactiveReplSetClient();
template = new ReactiveMongoTemplate(client, DATABASE_NAME);
MongoTestUtils.createOrReplaceCollection(DATABASE_NAME, COLLECTION_NAME, client).as(StepVerifier::create) //

View File

@@ -27,7 +27,6 @@ import java.util.Collection;
import java.util.List;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
@@ -40,8 +39,9 @@ import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion;
import org.springframework.data.mongodb.test.util.MongoServerCondition;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import com.mongodb.reactivestreams.client.MongoClient;
@@ -50,19 +50,18 @@ import com.mongodb.reactivestreams.client.MongoCollection;
/**
* @author Christoph Strobl
*/
@ExtendWith(MongoServerCondition.class)
@ExtendWith(MongoClientExtension.class)
@EnableIfMongoServerVersion(isGreaterThanEqual = "4.2")
public class ReactiveMongoTemplateUpdateTests {
static final String DB_NAME = "reactive-update-test";
MongoClient client;
static @Client MongoClient client;
ReactiveMongoTemplate template;
@BeforeEach
void beforeEach() {
client = MongoTestUtils.reactiveClient();
template = new ReactiveMongoTemplate(new SimpleReactiveMongoDatabaseFactory(client, DB_NAME));
MongoTestUtils.createOrReplaceCollection(DB_NAME, template.getCollectionName(Score.class), client).then()

View File

@@ -22,31 +22,38 @@ import static org.springframework.data.mongodb.core.query.Query.*;
import lombok.Data;
import reactor.test.StepVerifier;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
/**
* Integration tests for {@link ReactiveRemoveOperationSupport}.
*
* @author Mark Paluch
*/
@ExtendWith(MongoClientExtension.class)
public class ReactiveRemoveOperationSupportTests {
private static final String STAR_WARS = "star-wars";
static @Client MongoClient client;
static @Client com.mongodb.reactivestreams.client.MongoClient reactiveClient;
MongoTemplate blocking;
ReactiveMongoTemplate template;
Person han;
Person luke;
@Before
@BeforeEach
public void setUp() {
blocking = new MongoTemplate(
new SimpleMongoClientDatabaseFactory(MongoTestUtils.client(), "ExecutableRemoveOperationSupportTests"));
blocking = new MongoTemplate(new SimpleMongoClientDatabaseFactory(client, "ExecutableRemoveOperationSupportTests"));
blocking.dropCollection(STAR_WARS);
han = new Person();
@@ -60,7 +67,7 @@ public class ReactiveRemoveOperationSupportTests {
blocking.save(han);
blocking.save(luke);
template = new ReactiveMongoTemplate(MongoTestUtils.reactiveClient(), "ExecutableRemoveOperationSupportTests");
template = new ReactiveMongoTemplate(reactiveClient, "ExecutableRemoveOperationSupportTests");
}
@Test // DATAMONGO-1719

View File

@@ -23,33 +23,40 @@ import lombok.Data;
import reactor.test.StepVerifier;
import org.bson.BsonString;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
/**
* Integration tests for {@link ReactiveUpdateOperationSupport}.
*
* @author Mark Paluch
*/
@ExtendWith(MongoClientExtension.class)
public class ReactiveUpdateOperationSupportTests {
private static final String STAR_WARS = "star-wars";
static @Client MongoClient client;
static @Client com.mongodb.reactivestreams.client.MongoClient reactiveClient;
MongoTemplate blocking;
ReactiveMongoTemplate template;
Person han;
Person luke;
@Before
@BeforeEach
public void setUp() {
blocking = new MongoTemplate(
new SimpleMongoClientDatabaseFactory(MongoTestUtils.client(), "ExecutableUpdateOperationSupportTests"));
blocking = new MongoTemplate(new SimpleMongoClientDatabaseFactory(client, "ExecutableUpdateOperationSupportTests"));
blocking.dropCollection(STAR_WARS);
han = new Person();
@@ -63,7 +70,7 @@ public class ReactiveUpdateOperationSupportTests {
blocking.save(han);
blocking.save(luke);
template = new ReactiveMongoTemplate(MongoTestUtils.reactiveClient(), "ExecutableUpdateOperationSupportTests");
template = new ReactiveMongoTemplate(reactiveClient, "ExecutableUpdateOperationSupportTests");
}
@Test // DATAMONGO-1719

View File

@@ -36,12 +36,10 @@ import java.util.stream.IntStream;
import org.aopalliance.aop.Advice;
import org.bson.Document;
import org.junit.After;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.Mockito;
import org.springframework.aop.Advisor;
import org.springframework.aop.framework.Advised;
@@ -63,11 +61,10 @@ import org.springframework.data.mongodb.core.index.GeospatialIndex;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoVersion;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.ReplSetClient;
import org.springframework.test.util.ReflectionTestUtils;
import com.mongodb.ClientSessionOptions;
@@ -81,24 +78,21 @@ import com.mongodb.client.MongoDatabase;
*
* @author Christoph Strobl
*/
@ExtendWith(MongoClientExtension.class)
@EnableIfReplicaSetAvailable
public class SessionBoundMongoTemplateTests {
public static @ClassRule TestRule replSet = ReplicaSet.required();
static @ReplSetClient MongoClient client;
public @Rule MongoVersionRule REQUIRES_AT_LEAST_3_6_0 = MongoVersionRule.atLeast(Version.parse("3.6.0"));
MongoClient client;
MongoTemplate template;
SessionBoundMongoTemplate sessionBoundTemplate;
ClientSession session;
volatile List<MongoCollection<Document>> spiedCollections = new ArrayList<>();
volatile List<MongoDatabase> spiedDatabases = new ArrayList<>();
@Before
@BeforeEach
public void setUp() {
client = MongoTestUtils.replSetClient();
MongoDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(client, "session-bound-mongo-template-tests") {
@Override
@@ -147,7 +141,7 @@ public class SessionBoundMongoTemplateTests {
};
}
@After
@AfterEach
public void tearDown() {
session.close();

View File

@@ -21,8 +21,8 @@ import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.util.concurrent.TimeUnit;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.annotation.Id;
@@ -34,24 +34,27 @@ import org.springframework.data.mongodb.core.KAuditableVersionedEntity;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.client.MongoClient;
/**
* @author Christoph Strobl
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
public class MongoTemplateAuditingTests {
static @Client MongoClient mongoClient;
@Configuration
@EnableMongoAuditing
static class Conf extends AbstractMongoClientConfiguration {
@Override
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
@Override

View File

@@ -24,9 +24,9 @@ import java.time.Duration;
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -40,20 +40,23 @@ import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients;
/**
* @author Christoph Strobl
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
public class ReactiveMongoTemplateAuditingTests {
static final String DB_NAME = "mongo-template-audit-tests";
static @Client MongoClient mongoClient;
@Configuration
@EnableMongoAuditing
static class Conf extends AbstractReactiveMongoConfiguration {
@@ -61,7 +64,7 @@ public class ReactiveMongoTemplateAuditingTests {
@Bean
@Override
public MongoClient reactiveMongoClient() {
return MongoTestUtils.reactiveClient();
return mongoClient;
}
@Override
@@ -73,7 +76,7 @@ public class ReactiveMongoTemplateAuditingTests {
@Autowired ReactiveMongoTemplate template;
@Autowired MongoClient client;
@Before
@BeforeEach
public void setUp() {
MongoTestUtils.flushCollection(DB_NAME, template.getCollectionName(ImmutableAuditableEntityWithVersion.class),

View File

@@ -28,14 +28,16 @@ import java.util.Arrays;
import java.util.List;
import org.bson.Document;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
@@ -44,18 +46,18 @@ import com.mongodb.client.MongoClient;
*
* @author Christoph Strobl
*/
@ExtendWith(MongoClientExtension.class)
public class MappingMongoConverterTests {
MongoClient client;
static @Client MongoClient client;
MappingMongoConverter converter;
MongoMappingContext mappingContext;
DbRefResolver dbRefResolver;
@Before
@BeforeEach
public void setUp() {
client = MongoTestUtils.client();
client.getDatabase("mapping-converter-tests").drop();
MongoDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(client, "mapping-converter-tests");

View File

@@ -27,7 +27,10 @@ import java.util.List;
import org.assertj.core.data.Percentage;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
@@ -47,8 +50,11 @@ import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.query.NearQuery;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.test.util.BasicDbListBuilder;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.junit4.SpringRunner;
import com.mongodb.MongoException;
@@ -60,10 +66,12 @@ import com.mongodb.client.MongoCollection;
* @author Christoph Strobl
* @author Mark Paluch
*/
@RunWith(SpringRunner.class)
@ExtendWith({MongoClientExtension.class, SpringExtension.class})
@ContextConfiguration
public class GeoJsonTests {
static @Client MongoClient mongoClient;
@Configuration
static class TestConfig extends AbstractMongoClientConfiguration {
@@ -74,13 +82,13 @@ public class GeoJsonTests {
@Override
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
}
@Autowired MongoTemplate template;
@Before
@BeforeEach
public void setUp() {
template.setWriteConcern(WriteConcern.JOURNALED);
@@ -89,7 +97,7 @@ public class GeoJsonTests {
addVenues();
}
@After
@AfterEach
public void tearDown() {
dropIndex();

View File

@@ -28,9 +28,9 @@ import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.junit.After;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
@@ -45,10 +45,11 @@ import org.springframework.data.mongodb.core.convert.NoOpDbRefResolver;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.mapping.MongoMappingContext;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.client.MongoClient;
@@ -60,10 +61,12 @@ import com.mongodb.client.MongoClient;
* @author Jordi Llach
* @author Mark Paluch
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@ContextConfiguration
public class IndexingIntegrationTests {
static @Client MongoClient mongoClient;
@Autowired MongoOperations operations;
@Autowired MongoDatabaseFactory mongoDbFactory;
@Autowired ConfigurableApplicationContext context;
@@ -73,7 +76,7 @@ public class IndexingIntegrationTests {
@Override
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
@Override
@@ -87,7 +90,7 @@ public class IndexingIntegrationTests {
}
}
@After
@AfterEach
public void tearDown() {
operations.dropCollection(IndexedPerson.class);
}

View File

@@ -20,6 +20,7 @@ import static org.assertj.core.api.Assertions.*;
import java.util.Arrays;
import java.util.List;
import com.mongodb.client.MongoClient;
import org.hamcrest.core.IsInstanceOf;
import org.junit.ClassRule;
import org.junit.Rule;
@@ -98,16 +99,18 @@ public class MongoPersistentEntityIndexCreatorIntegrationTests {
expectedException.expectMessage("lastname");
expectedException.expectCause(IsInstanceOf.<Throwable> instanceOf(MongoCommandException.class));
MongoTemplate mongoTemplate = new MongoTemplate(MongoTestUtils.client(), "issue");
try(MongoClient client = MongoTestUtils.client()) {
MongoTemplate mongoTemplate = new MongoTemplate(client, "issue");
MongoPersistentEntityIndexCreator indexCreator = new MongoPersistentEntityIndexCreator(new MongoMappingContext(),
mongoTemplate);
MongoPersistentEntityIndexCreator indexCreator = new MongoPersistentEntityIndexCreator(new MongoMappingContext(),
mongoTemplate);
indexCreator.createIndex(new IndexDefinitionHolder("dalinar.kohlin",
new Index().named("stormlight").on("lastname", Direction.ASC).unique(), "datamongo-1125"));
indexCreator.createIndex(new IndexDefinitionHolder("dalinar.kohlin",
new Index().named("stormlight").on("lastname", Direction.ASC).unique(), "datamongo-1125"));
indexCreator.createIndex(new IndexDefinitionHolder("dalinar.kohlin",
new Index().named("stormlight").on("lastname", Direction.ASC).sparse(), "datamongo-1125"));
indexCreator.createIndex(new IndexDefinitionHolder("dalinar.kohlin",
new Index().named("stormlight").on("lastname", Direction.ASC).sparse(), "datamongo-1125"));
}
}
@Document(RECURSIVE_TYPE_COLLECTION_NAME)

View File

@@ -42,8 +42,6 @@ import com.mongodb.WriteConcern;
*/
public class TextIndexTests extends AbstractIntegrationTests {
public static @ClassRule MongoVersionRule version = MongoVersionRule.atLeast(new Version(2, 6));
private @Autowired MongoTemplate template;
private IndexOperations indexOps;

View File

@@ -66,11 +66,13 @@ public class GeoIndexedTests {
private void cleanDb() {
MongoClient mongo = MongoTestUtils.client();
MongoDatabase db = mongo.getDatabase(GeoIndexedAppConfig.GEO_DB);
try(MongoClient mongo = MongoTestUtils.client()) {
for (String coll : collectionsToDrop) {
db.getCollection(coll).drop();
MongoDatabase db = mongo.getDatabase(GeoIndexedAppConfig.GEO_DB);
for (String coll : collectionsToDrop) {
db.getCollection(coll).drop();
}
}
}

View File

@@ -20,7 +20,6 @@ import static org.springframework.data.mongodb.core.DocumentTestUtils.*;
import static org.springframework.data.mongodb.core.query.Criteria.*;
import static org.springframework.data.mongodb.core.query.Query.*;
import com.mongodb.client.MongoClients;
import lombok.AllArgsConstructor;
import lombok.Data;
@@ -29,11 +28,10 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.data.annotation.Id;
@@ -46,7 +44,8 @@ import org.springframework.data.mongodb.repository.QPerson;
import org.springframework.data.mongodb.repository.query.MongoEntityInformation;
import org.springframework.data.mongodb.repository.support.MongoRepositoryFactory;
import org.springframework.data.mongodb.repository.support.QuerydslMongoPredicateExecutor;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.WriteConcern;
import com.mongodb.client.MongoClient;
@@ -60,6 +59,7 @@ import com.mongodb.client.MongoDatabase;
* @author Jordi Llach
* @author Mark Paluch
*/
@ExtendWith({ MongoClientExtension.class })
public class ApplicationContextEventTests {
private static final String COLLECTION_NAME = "personPojoStringId";
@@ -69,17 +69,13 @@ public class ApplicationContextEventTests {
private final String[] collectionsToDrop = new String[] { COLLECTION_NAME, ROOT_COLLECTION_NAME,
RELATED_COLLECTION_NAME };
private static MongoClient mongo;
static @Client MongoClient mongoClient;
private ApplicationContext applicationContext;
private MongoTemplate template;
private SimpleMappingEventListener listener;
@BeforeClass
public static void beforeClass() {
mongo = MongoTestUtils.client();
}
@Before
@BeforeEach
public void setUp() {
cleanDb();
@@ -90,14 +86,14 @@ public class ApplicationContextEventTests {
listener = applicationContext.getBean(SimpleMappingEventListener.class);
}
@After
@AfterEach
public void cleanUp() {
cleanDb();
}
private void cleanDb() {
MongoDatabase db = mongo.getDatabase("database");
MongoDatabase db = mongoClient.getDatabase("database");
for (String coll : collectionsToDrop) {
db.getCollection(coll).drop();
}

View File

@@ -34,14 +34,12 @@ import java.util.stream.Collectors;
import org.bson.BsonDocument;
import org.bson.Document;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.ClassRule;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestRule;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.mapping.Field;
@@ -50,12 +48,12 @@ import org.springframework.data.mongodb.core.messaging.Message.MessageProperties
import org.springframework.data.mongodb.core.messaging.SubscriptionUtils.*;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoVersion;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.ReplSetClient;
import com.mongodb.client.MongoClient;
import com.mongodb.client.model.changestream.ChangeStreamDocument;
import com.mongodb.client.model.changestream.FullDocument;
@@ -66,10 +64,11 @@ import com.mongodb.client.model.changestream.FullDocument;
* @author Christoph Strobl
* @author Mark Paluch
*/
@ExtendWith({ MongoClientExtension.class })
@EnableIfReplicaSetAvailable
public class ChangeStreamTests {
public static @ClassRule TestRule replSet = ReplicaSet.required();
@Rule public MongoVersionRule mongoVersion = MongoVersionRule.atLeast(Version.parse("3.6"));
static @ReplSetClient MongoClient mongoClient;
static ThreadPoolExecutor executor;
MongoTemplate template;
@@ -79,15 +78,15 @@ public class ChangeStreamTests {
User huffyFluffy;
User sugarSplashy;
@BeforeClass
@BeforeAll
public static void beforeClass() {
executor = new ThreadPoolExecutor(2, 2, 1, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
}
@Before
@BeforeEach
public void setUp() {
template = new MongoTemplate(MongoTestUtils.replSetClient(), "change-stream-tests");
template = new MongoTemplate(mongoClient, "change-stream-tests");
template.dropCollection(User.class);
container = new DefaultMessageListenerContainer(template, executor);
@@ -109,12 +108,12 @@ public class ChangeStreamTests {
sugarSplashy.age = 5;
}
@After
@AfterEach
public void tearDown() {
container.stop();
}
@AfterClass
@AfterAll
public static void afterClass() {
executor.shutdown();
}

View File

@@ -46,7 +46,7 @@ import com.mongodb.client.MongoDatabase;
*
* @author Christoph Strobl
*/
@RunWith(MockitoJUnitRunner.class)
@RunWith(MockitoJUnitRunner.Silent.class)
public class CursorReadingTaskUnitTests {
@Mock MongoDatabase db;

View File

@@ -27,6 +27,10 @@ import java.util.concurrent.atomic.AtomicBoolean;
import java.util.stream.Collectors;
import org.bson.Document;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
@@ -37,11 +41,14 @@ import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import org.springframework.data.mongodb.core.messaging.SubscriptionRequest.RequestOptions;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoServerCondition;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.util.ErrorHandler;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.model.CreateCollectionOptions;
import com.mongodb.client.model.changestream.ChangeStreamDocument;
@@ -51,7 +58,7 @@ import com.mongodb.client.model.changestream.ChangeStreamDocument;
*
* @author Christoph Strobl
*/
@ExtendWith(MongoServerCondition.class)
@ExtendWith({MongoClientExtension.class, MongoServerCondition.class})
public class DefaultMessageListenerContainerTests {
public static final String DATABASE_NAME = "change-stream-events";
@@ -60,6 +67,8 @@ public class DefaultMessageListenerContainerTests {
public static final Duration TIMEOUT = Duration.ofSeconds(2);
static @Client MongoClient client;
MongoDatabaseFactory dbFactory;
MongoCollection<Document> collection;
MongoCollection<Document> collection2;
@@ -70,7 +79,7 @@ public class DefaultMessageListenerContainerTests {
@BeforeEach
void beforeEach() {
dbFactory = new SimpleMongoClientDatabaseFactory(MongoTestUtils.client(), DATABASE_NAME);
dbFactory = new SimpleMongoClientDatabaseFactory(client, DATABASE_NAME);
template = new MongoTemplate(dbFactory);
template.dropCollection(COLLECTION_NAME);

View File

@@ -27,18 +27,22 @@ import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import org.bson.Document;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.CollectionOptions;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.messaging.Message.MessageProperties;
import org.springframework.data.mongodb.core.messaging.TailableCursorRequest.TailableCursorRequestOptions;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import com.mongodb.client.MongoClient;
/**
* Integration test for subscribing to a capped {@link com.mongodb.client.MongoCollection} inside the
@@ -47,10 +51,12 @@ import org.springframework.data.mongodb.test.util.MongoTestUtils;
* @author Christoph Strobl
* @author Mark Paluch
*/
@ExtendWith({ MongoClientExtension.class })
public class TailableCursorTests {
static final String COLLECTION_NAME = "user";
static @Client MongoClient mongoClient;
static ThreadPoolExecutor executor;
MongoTemplate template;
MessageListenerContainer container;
@@ -59,15 +65,15 @@ public class TailableCursorTests {
User huffyFluffy;
User sugarSplashy;
@BeforeClass
@BeforeAll
public static void beforeClass() {
executor = new ThreadPoolExecutor(2, 2, 1, TimeUnit.SECONDS, new LinkedBlockingDeque<>());
}
@Before
@BeforeEach
public void setUp() {
template = new MongoTemplate(MongoTestUtils.client(), "tailable-cursor-tests");
template = new MongoTemplate(mongoClient, "tailable-cursor-tests");
template.dropCollection(User.class);
template.createCollection(User.class, CollectionOptions.empty().capped().maxDocuments(10000).size(10000));
@@ -91,12 +97,12 @@ public class TailableCursorTests {
sugarSplashy.age = 5;
}
@After
@AfterEach
public void tearDown() {
container.stop();
}
@AfterClass
@AfterAll
public static void afterClass() {
executor.shutdown();
}

View File

@@ -27,7 +27,9 @@ import lombok.EqualsAndHashCode;
import java.util.Arrays;
import org.bson.types.Binary;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.MongoOperations;
@@ -45,8 +47,8 @@ import com.mongodb.client.MongoClient;
*/
public class CriteriaTests {
static MongoClient client;
MongoOperations ops;
MongoClient client;
static final DocumentWithBitmask FIFTY_FOUR/*00110110*/ = new DocumentWithBitmask("1", Integer.valueOf(54),
Integer.toBinaryString(54));
@@ -57,10 +59,19 @@ public class CriteriaTests {
static final DocumentWithBitmask ONE_HUNDRED_TWO/*01100110*/ = new DocumentWithBitmask("4",
new Binary(Base64Utils.decodeFromString("Zg==")), "01100110");
@BeforeClass
public static void beforeClass() {
client = MongoTestUtils.client();
}
@AfterClass
public static void afterClass() {
client.close();
}
@Before
public void setUp() {
client = MongoTestUtils.client();
ops = new MongoTemplate(client, "criteria-tests");
ops.dropCollection(DocumentWithBitmask.class);

View File

@@ -47,8 +47,6 @@ import org.springframework.data.util.Version;
*/
public class TextQueryTests extends AbstractIntegrationTests {
public static @ClassRule MongoVersionRule version = MongoVersionRule.atLeast(new Version(2, 6));
private static final FullTextDoc BAKE = new FullTextDocBuilder().headline("bake").build();
private static final FullTextDoc COFFEE = new FullTextDocBuilder().subHeadline("coffee").build();
private static final FullTextDoc CAKE = new FullTextDocBuilder().body("cake").build();

View File

@@ -23,10 +23,9 @@ import java.util.Collections;
import java.util.List;
import org.bson.Document;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
@@ -35,11 +34,10 @@ import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoJsonSchemaMapper;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.validation.Validator;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
@@ -53,18 +51,18 @@ import com.mongodb.client.model.ValidationOptions;
*
* @author Christoph Strobl
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@ContextConfiguration
public class MongoJsonSchemaTests {
public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_6_0 = MongoVersionRule.atLeast(Version.parse("3.6.0"));
static @Client MongoClient mongoClient;
@Configuration
static class Config extends AbstractMongoClientConfiguration {
@Override
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
@Override
@@ -75,7 +73,7 @@ public class MongoJsonSchemaTests {
@Autowired MongoTemplate template;
@Before
@BeforeEach
public void setUp() {
template.dropCollection(Person.class);

View File

@@ -24,10 +24,9 @@ import java.time.Duration;
import java.util.List;
import org.bson.Document;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.dao.DataRetrievalFailureException;
@@ -36,32 +35,30 @@ import org.springframework.data.mongodb.core.CollectionOptions;
import org.springframework.data.mongodb.core.ReactiveMongoTemplate;
import org.springframework.data.mongodb.core.convert.MongoJsonSchemaMapper;
import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.reactivestreams.client.MongoClients;
/**
* Integration tests for {@link MongoJsonSchema} using reactive infrastructure.
*
* @author Mark Paluch
*/
@RunWith(SpringRunner.class)
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@ContextConfiguration
public class ReactiveMongoJsonSchemaTests {
public static @ClassRule MongoVersionRule REQUIRES_AT_LEAST_3_6_0 = MongoVersionRule.atLeast(Version.parse("3.6.0"));
static @Client MongoClient mongoClient;
@Configuration
static class Config extends AbstractReactiveMongoConfiguration {
@Override
public MongoClient reactiveMongoClient() {
return MongoTestUtils.reactiveClient();
return mongoClient;
}
@Override
@@ -72,7 +69,7 @@ public class ReactiveMongoJsonSchemaTests {
@Autowired ReactiveMongoTemplate template;
@Before
@BeforeEach
public void setUp() {
template.dropCollection(Person.class).as(StepVerifier::create).verifyComplete();
}

View File

@@ -22,20 +22,17 @@ import java.util.Collections;
import java.util.List;
import java.util.Optional;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersion;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.client.MongoClient;
@@ -44,11 +41,10 @@ import com.mongodb.client.MongoClient;
* @author Oliver Gierke
* @author Mark Paluch
*/
@RunWith(SpringRunner.class)
@ContextConfiguration
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
public class ComplexIdRepositoryIntegrationTests {
public @Rule MongoVersionRule mongoVersionRule = MongoVersionRule.any();
static @Client MongoClient mongoClient;
@Configuration
@EnableMongoRepositories
@@ -61,7 +57,7 @@ public class ComplexIdRepositoryIntegrationTests {
@Override
public MongoClient mongoClient() {
return MongoTestUtils.client();
return mongoClient;
}
}
@@ -72,7 +68,7 @@ public class ComplexIdRepositoryIntegrationTests {
MyId id;
UserWithComplexId userWithId;
@Before
@BeforeEach
public void setUp() {
repo.deleteAll();

View File

@@ -24,11 +24,9 @@ import java.util.concurrent.CopyOnWriteArrayList;
import org.bson.Document;
import org.bson.types.ObjectId;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.rules.RuleChain;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@@ -39,14 +37,12 @@ import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import org.springframework.data.mongodb.test.util.AfterTransactionAssertion;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.mongodb.test.util.MongoVersionRule;
import org.springframework.data.mongodb.test.util.ReplicaSet;
import org.springframework.data.util.Version;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.ReplSetClient;
import org.springframework.lang.Nullable;
import org.springframework.test.annotation.Rollback;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.transaction.AfterTransaction;
import org.springframework.test.context.transaction.BeforeTransaction;
import org.springframework.transaction.annotation.Transactional;
@@ -61,15 +57,13 @@ import com.mongodb.client.model.Filters;
* @author Christoph Strobl
* @currentRead Shadow's Edge - Brent Weeks
*/
@RunWith(SpringRunner.class)
@ContextConfiguration
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
@EnableIfReplicaSetAvailable
@Transactional(transactionManager = "txManager")
public class PersonRepositoryTransactionalTests {
public static @ClassRule RuleChain TEST_RULES = RuleChain.outerRule(MongoVersionRule.atLeast(Version.parse("3.7.3")))
.around(ReplicaSet.required());
static final String DB_NAME = "repository-tx-tests";
static @ReplSetClient MongoClient mongoClient;
@Configuration
@EnableMongoRepositories
@@ -77,7 +71,7 @@ public class PersonRepositoryTransactionalTests {
@Bean
public MongoClient mongoClient() {
return MongoTestUtils.replSetClient();
return mongoClient;
}
@Override
@@ -101,7 +95,7 @@ public class PersonRepositoryTransactionalTests {
List<AfterTransactionAssertion<? extends Persistable<?>>> assertionList;
@Before
@BeforeEach
public void setUp() {
assertionList = new CopyOnWriteArrayList<>();
}

View File

@@ -34,10 +34,10 @@ import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.TimeUnit;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.reactivestreams.Publisher;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -61,12 +61,13 @@ import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.repository.Person.Sex;
import org.springframework.data.mongodb.repository.support.ReactiveMongoRepositoryFactory;
import org.springframework.data.mongodb.repository.support.SimpleReactiveMongoRepository;
import org.springframework.data.mongodb.test.util.Client;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.test.util.MongoTestUtils;
import org.springframework.data.querydsl.ReactiveQuerydslPredicateExecutor;
import org.springframework.data.repository.Repository;
import org.springframework.data.repository.query.QueryMethodEvaluationContextProvider;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import com.mongodb.reactivestreams.client.MongoClient;
@@ -76,10 +77,11 @@ import com.mongodb.reactivestreams.client.MongoClient;
* @author Mark Paluch
* @author Christoph Strobl
*/
@RunWith(SpringRunner.class)
@ContextConfiguration
@ExtendWith({ MongoClientExtension.class, SpringExtension.class })
public class ReactiveMongoRepositoryTests {
static @Client MongoClient mongoClient;
@Autowired ReactiveMongoTemplate template;
@Autowired ReactivePersonRepository repository;
@@ -95,7 +97,7 @@ public class ReactiveMongoRepositoryTests {
@Bean
@Override
public MongoClient reactiveMongoClient() {
return MongoTestUtils.reactiveClient();
return mongoClient;
}
@Override
@@ -131,16 +133,14 @@ public class ReactiveMongoRepositoryTests {
}
}
@BeforeClass
@BeforeAll
public static void cleanDb() {
MongoClient client = MongoTestUtils.reactiveClient();
MongoTestUtils.createOrReplaceCollectionNow("reactive", "person", client);
MongoTestUtils.createOrReplaceCollectionNow("reactive", "capped", client);
MongoTestUtils.createOrReplaceCollectionNow("reactive", "person", mongoClient);
MongoTestUtils.createOrReplaceCollectionNow("reactive", "capped", mongoClient);
}
@Before
@BeforeEach
public void setUp() throws Exception {
repository.deleteAll().as(StepVerifier::create).verifyComplete();

View File

@@ -0,0 +1,32 @@
/*
* Copyright 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.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.mongodb.test.util;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author Christoph Strobl
*/
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Client {
}

View File

@@ -22,6 +22,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.extension.ExtendWith;
/**
* @author Christoph Strobl
@@ -31,6 +32,7 @@ import org.junit.jupiter.api.Tag;
@Target({ ElementType.TYPE, ElementType.METHOD })
@Documented
@Tag("version-specific")
@ExtendWith(MongoServerCondition.class)
public @interface EnableIfMongoServerVersion {
/**

View File

@@ -22,6 +22,7 @@ import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.junit.jupiter.api.Tag;
import org.junit.jupiter.api.extension.ExtendWith;
/**
* {@link EnableIfReplicaSetAvailable} marks a specific test class or method to be only executed against a server running in
@@ -34,6 +35,7 @@ import org.junit.jupiter.api.Tag;
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Tag("replSet")
@ExtendWith(MongoServerCondition.class)
public @interface EnableIfReplicaSetAvailable {
}

View File

@@ -0,0 +1,176 @@
/*
* Copyright 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.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.mongodb.test.util;
import static org.junit.platform.commons.util.AnnotationUtils.*;
import static org.junit.platform.commons.util.ReflectionUtils.*;
import java.io.Closeable;
import java.io.IOException;
import java.lang.reflect.Field;
import java.util.function.Predicate;
import org.junit.jupiter.api.extension.AfterAllCallback;
import org.junit.jupiter.api.extension.BeforeAllCallback;
import org.junit.jupiter.api.extension.Extension;
import org.junit.jupiter.api.extension.ExtensionConfigurationException;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.api.extension.ExtensionContext.Namespace;
import org.junit.jupiter.api.extension.ExtensionContext.Store;
import org.junit.jupiter.api.extension.ParameterContext;
import org.junit.jupiter.api.extension.ParameterResolutionException;
import org.junit.jupiter.api.extension.ParameterResolver;
import org.junit.platform.commons.util.ExceptionUtils;
import org.junit.platform.commons.util.ReflectionUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ClassUtils;
/**
* @author Christoph Strobl
*/
public class MongoClientExtension implements Extension, BeforeAllCallback, AfterAllCallback, ParameterResolver {
private static final Logger LOGGER = LoggerFactory.getLogger(MongoClientExtension.class);
private static final Namespace NAMESPACE = Namespace.create(MongoClientExtension.class);
private static final String SYNC_KEY = "mongo.client.sync";
private static final String REACTIVE_KEY = "mongo.client.reactive";
private static final String SYNC_REPLSET_KEY = "mongo.client.replset.sync";
private static final String REACTIVE_REPLSET_KEY = "mongo.client.replset.reactive";
@Override
public void afterAll(ExtensionContext extensionContext) throws Exception {
closeClients(extensionContext);
}
@Override
public void beforeAll(ExtensionContext context) throws Exception {
injectFields(context, null, ReflectionUtils::isStatic);
}
private void injectFields(ExtensionContext context, Object testInstance, Predicate<Field> predicate) {
findAnnotatedFields(context.getRequiredTestClass(), Client.class, predicate).forEach(field -> {
assertValidFieldCandidate(field);
try {
makeAccessible(field).set(testInstance, getMongoClient(field.getType(), context, false));
} catch (Throwable t) {
ExceptionUtils.throwAsUncheckedException(t);
}
});
findAnnotatedFields(context.getRequiredTestClass(), ReplSetClient.class, predicate).forEach(field -> {
assertValidFieldCandidate(field);
try {
makeAccessible(field).set(testInstance, getMongoClient(field.getType(), context, true));
} catch (Throwable t) {
ExceptionUtils.throwAsUncheckedException(t);
}
});
}
private Object getMongoClient(Class<?> type, ExtensionContext extensionContext, boolean replSet) {
Store store = extensionContext.getStore(NAMESPACE);
if (ClassUtils.isAssignable(com.mongodb.client.MongoClient.class, type)) {
LOGGER.debug("Obtaining sync client from store.");
return store.getOrComputeIfAbsent(replSet ? SYNC_REPLSET_KEY : SYNC_KEY, it -> syncClient(replSet),
com.mongodb.client.MongoClient.class);
}
if (ClassUtils.isAssignable(com.mongodb.reactivestreams.client.MongoClient.class, type)) {
LOGGER.debug("Obtaining reactive client from store.");
return store.getOrComputeIfAbsent(replSet ? REACTIVE_REPLSET_KEY : REACTIVE_KEY, key -> reactiveClient(replSet),
com.mongodb.reactivestreams.client.MongoClient.class);
}
throw new IllegalStateException("Damn - something went wrong.");
}
private com.mongodb.reactivestreams.client.MongoClient reactiveClient(boolean replSet) {
LOGGER.debug("Creating new reactive {}client.", replSet ? "replica set " : "");
return replSet ? MongoTestUtils.reactiveReplSetClient() : MongoTestUtils.reactiveClient();
}
private com.mongodb.client.MongoClient syncClient(boolean replSet) {
LOGGER.debug("Creating new sync {}client.", replSet ? "replica set " : "");
return replSet ? MongoTestUtils.replSetClient() : MongoTestUtils.client();
}
private void assertValidFieldCandidate(Field field) {
assertSupportedType("field", field.getType());
if (isPrivate(field)) {
throw new ExtensionConfigurationException("@MongoClient field [" + field + "] must not be private.");
}
}
private void assertSupportedType(String target, Class<?> type) {
if (type != com.mongodb.client.MongoClient.class && type != com.mongodb.reactivestreams.client.MongoClient.class) {
throw new ExtensionConfigurationException("Can only resolve @MongoClient " + target + " of type "
+ com.mongodb.client.MongoClient.class.getName() + " or "
+ com.mongodb.reactivestreams.client.MongoClient.class.getName() + " but was: " + type.getName());
}
}
private void closeClients(ExtensionContext extensionContext) {
Store store = extensionContext.getStore(NAMESPACE);
closeClient(store, SYNC_KEY);
closeClient(store, SYNC_REPLSET_KEY);
closeClient(store, REACTIVE_KEY);
closeClient(store, REACTIVE_REPLSET_KEY);
}
private void closeClient(Store store, String key) {
Closeable client = store.remove(key, Closeable.class);
if (client != null) {
LOGGER.debug("Closing {} {}client.", key.contains("reactive") ? "reactive" : "sync",
key.contains("replset") ? "replset " : "");
try {
client.close();
} catch (IOException e) {
// so what?
}
}
}
@Override
public boolean supportsParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
throws ParameterResolutionException {
return parameterContext.isAnnotated(Client.class) || parameterContext.isAnnotated(ReplSetClient.class);
}
@Override
public Object resolveParameter(ParameterContext parameterContext, ExtensionContext extensionContext)
throws ParameterResolutionException {
Class<?> parameterType = parameterContext.getParameter().getType();
boolean replSet = parameterContext.getParameter().getAnnotation(ReplSetClient.class) != null;
return getMongoClient(parameterType, extensionContext, replSet);
}
}

View File

@@ -22,8 +22,11 @@ import java.time.Duration;
import java.util.List;
import org.bson.Document;
import org.springframework.core.env.Environment;
import org.springframework.core.env.StandardEnvironment;
import org.springframework.data.mongodb.SpringDataMongoDB;
import org.springframework.data.util.Version;
import org.springframework.util.ObjectUtils;
import com.mongodb.ConnectionString;
import com.mongodb.ReadPreference;
@@ -41,7 +44,10 @@ import com.mongodb.reactivestreams.client.MongoClients;
*/
public class MongoTestUtils {
public static final String CONNECTION_STRING = "mongodb://localhost:27017/?replicaSet=rs0&w=majority";
private static final Environment ENV = new StandardEnvironment();
private static final Duration DEFAULT_TIMEOUT = Duration.ofMillis(10);
public static final String CONNECTION_STRING = "mongodb://127.0.0.1:27017/?replicaSet=rs0&w=majority";
private static final String CONNECTION_STRING_PATTERN = "mongodb://%s:%s/?w=majority";
@@ -53,7 +59,7 @@ public class MongoTestUtils {
* @return new instance of {@link com.mongodb.client.MongoClient}.
*/
public static MongoClient client() {
return client("localhost", 27017);
return client("127.0.0.1", 27017);
}
public static MongoClient client(String host, int port) {
@@ -68,7 +74,7 @@ public class MongoTestUtils {
* @return new instance of {@link com.mongodb.reactivestreams.client.MongoClient}.
*/
public static com.mongodb.reactivestreams.client.MongoClient reactiveClient() {
return reactiveClient("localhost", 27017);
return reactiveClient("127.0.0.1", 27017);
}
public static com.mongodb.reactivestreams.client.MongoClient reactiveClient(String host, int port) {
@@ -93,16 +99,13 @@ public class MongoTestUtils {
boolean collectionExists = database.listCollections().filter(new Document("name", collectionName)).first() != null;
if (collectionExists) {
database.getCollection(collectionName).drop();
giveTheServerALittleTimeToThink();
}
database.createCollection(collectionName);
try {
Thread.sleep(10); // server replication time
} catch (InterruptedException e) {
e.printStackTrace();
}
giveTheServerALittleTimeToThink();
return database.getCollection(collectionName);
}
@@ -121,9 +124,9 @@ public class MongoTestUtils {
.withWriteConcern(WriteConcern.MAJORITY).withReadPreference(ReadPreference.primary());
return Mono.from(database.getCollection(collectionName).drop()) //
.delayElement(Duration.ofMillis(10)) // server replication time
.delayElement(getTimeout()) // server replication time
.then(Mono.from(database.createCollection(collectionName))) //
.delayElement(Duration.ofMillis(10)); // server replication time
.delayElement(getTimeout()); // server replication time
}
/**
@@ -157,7 +160,7 @@ public class MongoTestUtils {
.withWriteConcern(WriteConcern.MAJORITY).withReadPreference(ReadPreference.primary());
Mono.from(database.getCollection(collectionName).drop()) //
.retryBackoff(3, Duration.ofMillis(250)) //
.delayElement(getTimeout()).retryBackoff(3, Duration.ofMillis(250)) //
.as(StepVerifier::create) //
.verifyComplete();
}
@@ -177,7 +180,7 @@ public class MongoTestUtils {
.withWriteConcern(WriteConcern.MAJORITY).withReadPreference(ReadPreference.primary());
Mono.from(database.getCollection(collectionName).deleteMany(new Document())) //
.then() //
.delayElement(getTimeout()).then() //
.as(StepVerifier::create) //
.verifyComplete();
}
@@ -231,4 +234,19 @@ public class MongoTestUtils {
return false;
}
}
public static Duration getTimeout() {
return ObjectUtils.nullSafeEquals("jenkins", ENV.getProperty("user.name")) ? Duration.ofMillis(100)
: DEFAULT_TIMEOUT;
}
private static void giveTheServerALittleTimeToThink() {
try {
Thread.sleep(getTimeout().toMillis()); // server replication time
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

View File

@@ -54,7 +54,7 @@ public class MongoVersionRule implements TestRule {
private final Version minVersion;
private final Version maxVersion;
private String host = "localhost";
private String host = "127.0.0.1";
private int port = 27017;
public MongoVersionRule(Version min, Version max) {

View File

@@ -0,0 +1,32 @@
/*
* Copyright 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.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.data.mongodb.test.util;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @author Christoph Strobl
*/
@Target({ ElementType.FIELD, ElementType.PARAMETER })
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ReplSetClient {
}

View File

@@ -5,7 +5,7 @@
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/data/mongo https://www.springframework.org/schema/data/mongo/spring-mongo.xsd">
<mongo:mongo-client host="localhost" port="27017"/>
<mongo:mongo-client host="127.0.0.1" port="27017"/>
<bean id="mongoDbFactory" class="org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory">
<constructor-arg name="mongo" ref="mongo"/>
@@ -17,6 +17,7 @@
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
<constructor-arg name="mongoConverter" ref="mappingConverter"/>
<property name="writeConcern" value="majority" />
</bean>
<bean class="org.springframework.data.mongodb.core.mapping.event.SimpleMappingEventListener"/>

View File

@@ -15,6 +15,7 @@
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/>
<property name="writeConcern" value="majority" />
</bean>
</beans>

View File

@@ -12,6 +12,7 @@
-->
<logger name="org.springframework.data.mongodb.core" level="error"/>
<logger name="org.springframework.data.mongodb.test.util" level="debug"/>
<root level="error">
<appender-ref ref="console" />

View File

@@ -15,6 +15,7 @@
<bean id="reactiveMongoTemplate" class="org.springframework.data.mongodb.core.ReactiveMongoTemplate">
<constructor-arg ref="reactiveMongoDbFactory"/>
<property name="writeConcern" value="majority" />
</bean>
</beans>