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:
committed by
Mark Paluch
parent
dd15bbc5c1
commit
993018feb1
20
Jenkinsfile
vendored
20
Jenkinsfile
vendored
@@ -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'
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"));
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -232,6 +232,7 @@ public class MongoTemplateTests {
|
||||
template.dropCollection(ImmutableAudited.class);
|
||||
template.dropCollection(RawStringId.class);
|
||||
template.dropCollection(Outer.class);
|
||||
template.dropCollection(Message.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
@@ -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());
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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) //
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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") //
|
||||
|
||||
@@ -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) //
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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");
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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<>();
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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"/>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user