diff --git a/pom.xml b/pom.xml index 0e9257f0f0..ba60b84bfa 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 3.4.0-GH-3817-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index e2704a6753..b99c626323 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -7,7 +7,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 3.4.0-GH-3817-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index b75f8bf624..4325c16590 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 3.4.0-GH-3817-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index ca96626cc9..a5ad68ca7e 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 3.4.0-GH-3817-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/src/test/java/ConfigClassInDefaultPackage.java b/spring-data-mongodb/src/test/java/ConfigClassInDefaultPackage.java index 49ab1116c1..6bc3cfd02a 100644 --- a/spring-data-mongodb/src/test/java/ConfigClassInDefaultPackage.java +++ b/spring-data-mongodb/src/test/java/ConfigClassInDefaultPackage.java @@ -19,10 +19,10 @@ import java.util.Set; import org.springframework.context.annotation.Configuration; -import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; +import org.springframework.data.mongodb.test.util.MongoClientClosingTestConfiguration; /** * Sample configuration class in default package. @@ -30,7 +30,7 @@ * @author Oliver Gierke */ @Configuration -public class ConfigClassInDefaultPackage extends AbstractMongoClientConfiguration { +public class ConfigClassInDefaultPackage extends MongoClientClosingTestConfiguration { /* * (non-Javadoc) diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractIntegrationTests.java index 2d3ec19032..b0392e8c68 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractIntegrationTests.java @@ -29,6 +29,7 @@ import org.springframework.dao.DataAccessException; import org.springframework.data.mongodb.core.CollectionCallback; import org.springframework.data.mongodb.core.MongoOperations; +import org.springframework.data.mongodb.test.util.MongoClientClosingTestConfiguration; import org.springframework.data.mongodb.test.util.MongoTestUtils; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -45,7 +46,7 @@ public abstract class AbstractIntegrationTests { @Configuration - static class TestConfig extends AbstractMongoClientConfiguration { + static class TestConfig extends MongoClientClosingTestConfiguration { @Override protected String getDatabaseName() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java index d0250f3352..59d03600bb 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java @@ -27,6 +27,7 @@ import org.junit.jupiter.api.Test; +import org.mockito.Mockito; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; @@ -158,7 +159,7 @@ protected String getDatabaseName() { @Override public MongoClient mongoClient() { - return MongoClients.create(); + return Mockito.mock(MongoClient.class); } @Override @@ -186,7 +187,7 @@ protected String getDatabaseName() { @Override public MongoClient mongoClient() { - return MongoClients.create(); + return Mockito.mock(MongoClient.class); } @Override diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractReactiveMongoConfigurationUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractReactiveMongoConfigurationUnitTests.java index 33a2f61108..1b55113fbb 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractReactiveMongoConfigurationUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractReactiveMongoConfigurationUnitTests.java @@ -158,7 +158,7 @@ protected String getDatabaseName() { @Override public MongoClient reactiveMongoClient() { - return MongoTestUtils.reactiveClient(); + return Mockito.mock(MongoClient.class); } @Override diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AuditingViaJavaConfigRepositoriesTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AuditingViaJavaConfigRepositoriesTests.java index 981a050f8d..d34fbc3ccf 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AuditingViaJavaConfigRepositoriesTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AuditingViaJavaConfigRepositoriesTests.java @@ -49,6 +49,7 @@ 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.MongoClientClosingTestConfiguration; import org.springframework.data.mongodb.test.util.MongoTestUtils; import org.springframework.stereotype.Repository; import org.springframework.test.context.ContextConfiguration; @@ -233,7 +234,7 @@ static class SimpleConfigWithRepositories extends SimpleConfig {} @Configuration @EnableMongoAuditing - static class SimpleConfig extends AbstractMongoClientConfiguration { + static class SimpleConfig extends MongoClientClosingTestConfiguration { @Override public MongoClient mongoClient() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryParserIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryParserIntegrationTests.java index bff79ea00f..be12fa8397 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryParserIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryParserIntegrationTests.java @@ -19,7 +19,6 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; - import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.config.ConstructorArgumentValues; import org.springframework.beans.factory.config.ConstructorArgumentValues.ValueHolder; @@ -74,6 +73,7 @@ public void parsesWriteConcern() { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("namespace/db-factory-bean.xml"); assertWriteConcern(ctx, WriteConcern.ACKNOWLEDGED); + ctx.close(); } @Test // DATAMONGO-2199 @@ -82,6 +82,7 @@ public void parsesCustomWriteConcern() { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext( "namespace/db-factory-bean-custom-write-concern.xml"); assertWriteConcern(ctx, new WriteConcern("rack1")); + ctx.close(); } @Test // DATAMONGO-331 @@ -90,10 +91,10 @@ public void readsReplicasWriteConcernCorrectly() { AbstractApplicationContext ctx = new ClassPathXmlApplicationContext( "namespace/db-factory-bean-custom-write-concern.xml"); MongoDatabaseFactory factory = ctx.getBean("second", MongoDatabaseFactory.class); - MongoDatabase db = factory.getMongoDatabase(); + ctx.close(); + MongoDatabase db = factory.getMongoDatabase(); assertThat(db.getWriteConcern()).isEqualTo(WriteConcern.W2); - ctx.close(); } // This test will fail since equals in WriteConcern uses == for _w and not .equals @@ -127,6 +128,8 @@ public void setsUpMongoDbFactoryUsingAMongoUriWithoutCredentials() { MongoDatabaseFactory dbFactory = factory.getBean("mongoDbFactory", MongoDatabaseFactory.class); MongoDatabase db = dbFactory.getMongoDatabase(); assertThat(db.getName()).isEqualTo("database"); + + factory.destroyBean(dbFactory); } @Test // DATAMONGO-1218 @@ -171,6 +174,8 @@ public void usesConnectionStringToCreateClientClient() { ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("namespace/db-factory-bean.xml"); MongoDatabaseFactory dbFactory = ctx.getBean("with-connection-string", MongoDatabaseFactory.class); + ctx.close(); + assertThat(dbFactory).isInstanceOf(SimpleMongoClientDatabaseFactory.class); assertThat(ReflectionTestUtils.getField(dbFactory, "mongoClient")) .isInstanceOf(com.mongodb.client.MongoClient.class); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/ReactiveAuditingTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/ReactiveAuditingTests.java index e475d41acf..5f515d2281 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/ReactiveAuditingTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/ReactiveAuditingTests.java @@ -21,6 +21,7 @@ import org.springframework.data.mapping.callback.EntityCallback; import org.springframework.data.mongodb.core.mapping.event.AuditingEntityCallback; import org.springframework.data.mongodb.core.mapping.event.ReactiveAuditingEntityCallback; +import org.springframework.data.mongodb.test.util.ReactiveMongoClientClosingTestConfiguration; import org.springframework.test.util.ReflectionTestUtils; import reactor.core.publisher.Mono; import reactor.test.StepVerifier; @@ -75,7 +76,7 @@ class ReactiveAuditingTests { @EnableReactiveMongoAuditing @EnableReactiveMongoRepositories(basePackageClasses = ReactiveAuditingTests.class, considerNestedRepositories = true, includeFilters = @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = ReactiveAuditablePersonRepository.class)) - static class Config extends AbstractReactiveMongoConfiguration { + static class Config extends ReactiveMongoClientClosingTestConfiguration { @Override protected String getDatabaseName() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java index de79d7725f..ddb4ece683 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java @@ -64,6 +64,7 @@ import org.springframework.data.mapping.MappingException; import org.springframework.data.mongodb.InvalidMongoDbApiUsageException; import org.springframework.data.mongodb.MongoDatabaseFactory; +import org.springframework.data.mongodb.core.BulkOperations.BulkMode; import org.springframework.data.mongodb.core.convert.LazyLoadingProxy; import org.springframework.data.mongodb.core.geo.GeoJsonPoint; import org.springframework.data.mongodb.core.index.Index; @@ -3580,7 +3581,7 @@ public void removeShouldConsiderLimit() { .mapToObj(i -> new Sample("id-" + i, i % 2 == 0 ? "stark" : "lannister")) // .collect(Collectors.toList()); - template.insertAll(samples); + template.bulkOps(BulkMode.UNORDERED, Sample.class).insert(samples).execute(); DeleteResult wr = template.remove(query(where("field").is("lannister")).limit(25), Sample.class); @@ -3595,7 +3596,7 @@ public void removeShouldConsiderSkipAndSort() { .mapToObj(i -> new Sample("id-" + i, i % 2 == 0 ? "stark" : "lannister")) // .collect(Collectors.toList()); - template.insertAll(samples); + template.bulkOps(BulkMode.UNORDERED, Sample.class).insert(samples).execute(); DeleteResult wr = template.remove(new Query().skip(25).with(Sort.by("field")), Sample.class); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/AbstractGeoSpatialTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/AbstractGeoSpatialTests.java index 7fa2621aaf..5217371230 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/AbstractGeoSpatialTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/AbstractGeoSpatialTests.java @@ -37,13 +37,13 @@ import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; import org.springframework.data.geo.Polygon; -import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; import org.springframework.data.mongodb.core.BulkOperations.BulkMode; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.TestEntities; import org.springframework.data.mongodb.core.Venue; import org.springframework.data.mongodb.core.query.NearQuery; import org.springframework.data.mongodb.core.query.Query; +import org.springframework.data.mongodb.test.util.MongoClientClosingTestConfiguration; import org.springframework.data.mongodb.test.util.MongoTestUtils; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -60,7 +60,7 @@ public abstract class AbstractGeoSpatialTests { @Configuration - static class TestConfig extends AbstractMongoClientConfiguration { + static class TestConfig extends MongoClientClosingTestConfiguration { @Override protected String getDatabaseName() { @@ -111,10 +111,7 @@ protected void removeVenues() { } protected void addVenues() { - - template.bulkOps(BulkMode.UNORDERED, Venue.class).insert(TestEntities.geolocation().newYork()).execute(); -// template.insertAll(TestEntities.geolocation().newYork()); } @Test diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/GeoIndexedAppConfig.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/GeoIndexedAppConfig.java index 4eda0a8f52..d85ee95ee7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/GeoIndexedAppConfig.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/GeoIndexedAppConfig.java @@ -19,13 +19,13 @@ import java.util.Set; import org.springframework.context.annotation.Bean; -import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; import org.springframework.data.mongodb.core.mapping.event.LoggingEventListener; +import org.springframework.data.mongodb.test.util.MongoClientClosingTestConfiguration; import org.springframework.data.mongodb.test.util.MongoTestUtils; import com.mongodb.client.MongoClient; -public class GeoIndexedAppConfig extends AbstractMongoClientConfiguration { +public class GeoIndexedAppConfig extends MongoClientClosingTestConfiguration { public static String GEO_DB = "database"; public static String GEO_COLLECTION = "geolocation"; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ApplicationContextEventTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ApplicationContextEventTests.java index 761f8f1741..e6a47f218a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ApplicationContextEventTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ApplicationContextEventTests.java @@ -34,6 +34,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.context.ApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.MongoTemplate; @@ -72,7 +73,7 @@ public class ApplicationContextEventTests { static @Client MongoClient mongoClient; - private ApplicationContext applicationContext; + private ConfigurableApplicationContext applicationContext; private MongoTemplate template; private SimpleMappingEventListener listener; @@ -89,7 +90,9 @@ public void setUp() { @AfterEach public void cleanUp() { + cleanDb(); + applicationContext.close(); } private void cleanDb() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ApplicationContextEventTestsAppConfig.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ApplicationContextEventTestsAppConfig.java index ded2cccd60..70ff0ba3c7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ApplicationContextEventTestsAppConfig.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/ApplicationContextEventTestsAppConfig.java @@ -17,13 +17,13 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; +import org.springframework.data.mongodb.test.util.MongoClientClosingTestConfiguration; import org.springframework.data.mongodb.test.util.MongoTestUtils; import com.mongodb.client.MongoClient; @Configuration -public class ApplicationContextEventTestsAppConfig extends AbstractMongoClientConfiguration { +public class ApplicationContextEventTestsAppConfig extends MongoClientClosingTestConfiguration { @Override public String getDatabaseName() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/schema/ReactiveMongoJsonSchemaTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/schema/ReactiveMongoJsonSchemaTests.java index a4cef049c3..3986a8033d 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/schema/ReactiveMongoJsonSchemaTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/schema/ReactiveMongoJsonSchemaTests.java @@ -18,6 +18,7 @@ import static org.springframework.data.mongodb.test.util.Assertions.*; import lombok.Data; +import org.springframework.data.mongodb.test.util.ReactiveMongoClientClosingTestConfiguration; import reactor.test.StepVerifier; import java.time.Duration; @@ -32,7 +33,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.dao.DataRetrievalFailureException; -import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration; import org.springframework.data.mongodb.core.CollectionOptions; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; import org.springframework.data.mongodb.core.convert.MongoJsonSchemaMapper; @@ -56,7 +56,7 @@ public class ReactiveMongoJsonSchemaTests { static @Client MongoClient mongoClient; @Configuration - static class Config extends AbstractReactiveMongoConfiguration { + static class Config extends ReactiveMongoClientClosingTestConfiguration { @Override public MongoClient reactiveMongoClient() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/PerformanceTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/PerformanceTests.java index 9b740d4aea..a6c719fc25 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/PerformanceTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/PerformanceTests.java @@ -93,7 +93,10 @@ public void setUp() throws Exception { factory.afterPropertiesSet(); this.repository = factory.getObject(); + } + void afterEach() { + mongo.close(); } @Test diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java index 815607730d..b6994a27e0 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java @@ -28,9 +28,9 @@ import org.bson.Document; import org.bson.types.ObjectId; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; - import org.springframework.core.Constants; import org.springframework.data.annotation.PersistenceConstructor; import org.springframework.data.mongodb.core.ReactiveMongoOperations; @@ -41,7 +41,6 @@ import org.springframework.data.mongodb.core.convert.DbRefResolverCallback; import org.springframework.data.mongodb.core.convert.MappingMongoConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; -import org.springframework.data.mongodb.core.convert.ReferenceLoader; import org.springframework.data.mongodb.core.convert.ReferenceLookupDelegate; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; @@ -136,6 +135,11 @@ public List bulkFetch(List dbRefs) { repository = factory.getRepository(ReactivePersonRepository.class); } + @AfterEach + void afterEach() { + mongo.close(); + } + @Test // DATAMONGO-1444 public void writeWithWriteConcerns() { executeWithWriteConcerns((constantName, concern) -> { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java index c534346b1c..7f325ed2a7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/AbstractPersonRepositoryIntegrationTests.java @@ -59,6 +59,7 @@ import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; import org.springframework.data.geo.Polygon; +import org.springframework.data.mongodb.core.BulkOperations.BulkMode; import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.aggregation.AggregationResults; import org.springframework.data.mongodb.core.geo.GeoJsonPoint; @@ -929,7 +930,7 @@ void sliceShouldTraverseElementsWithoutSkippingOnes() { persons.add(new Person(String.format("%03d", i), "ln" + 1, 100)); } - repository.saveAll(persons); + operations.bulkOps(BulkMode.UNORDERED, Person.class).insert(persons).execute(); Slice slice = repository.findByAgeGreaterThan(50, PageRequest.of(0, 20, Direction.ASC, "firstname")); assertThat(slice).containsExactlyElementsOf(persons.subList(0, 20)); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java index 24eeb94c4a..3ff11afbb7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ReactiveMongoRepositoryTests.java @@ -55,7 +55,6 @@ import org.springframework.data.geo.GeoResult; import org.springframework.data.geo.Metrics; import org.springframework.data.geo.Point; -import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration; import org.springframework.data.mongodb.core.CollectionOptions; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; @@ -71,6 +70,7 @@ import org.springframework.data.querydsl.ReactiveQuerydslPredicateExecutor; import org.springframework.data.repository.Repository; import org.springframework.data.repository.query.ReactiveQueryMethodEvaluationContextProvider; +import org.springframework.data.mongodb.test.util.ReactiveMongoClientClosingTestConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; import com.mongodb.reactivestreams.client.MongoClient; @@ -98,7 +98,7 @@ class ReactiveMongoRepositoryTests { private QPerson person = QPerson.person; @Configuration - static class Config extends AbstractReactiveMongoConfiguration { + static class Config extends ReactiveMongoClientClosingTestConfiguration { @Bean @Override diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/config/ReactiveMongoRepositoriesRegistrarIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/config/ReactiveMongoRepositoriesRegistrarIntegrationTests.java index 32c74686fc..3c194dae64 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/config/ReactiveMongoRepositoriesRegistrarIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/config/ReactiveMongoRepositoriesRegistrarIntegrationTests.java @@ -18,7 +18,7 @@ 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.Bean; @@ -26,10 +26,11 @@ import org.springframework.data.mongodb.core.ReactiveMongoTemplate; import org.springframework.data.mongodb.core.SimpleReactiveMongoDatabaseFactory; import org.springframework.data.mongodb.repository.ReactivePersonRepository; -import org.springframework.data.mongodb.test.util.MongoTestUtils; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; +import com.mongodb.reactivestreams.client.MongoClient; + /** * Integration tests for {@link ReactiveMongoRepositoriesRegistrar}. * @@ -46,7 +47,7 @@ static class Config { @Bean public ReactiveMongoTemplate reactiveMongoTemplate() throws Exception { return new ReactiveMongoTemplate( - new SimpleReactiveMongoDatabaseFactory(MongoTestUtils.reactiveClient(), "database")); + new SimpleReactiveMongoDatabaseFactory(Mockito.mock(MongoClient.class), "database")); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java index 7ffa2c67bb..110f09005f 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/ReactiveQuerydslMongoPredicateExecutorTests.java @@ -31,7 +31,6 @@ import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.dao.IncorrectResultSizeDataAccessException; @@ -40,7 +39,6 @@ import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.mongodb.ReactiveMongoDatabaseFactory; -import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration; import org.springframework.data.mongodb.core.ReactiveMongoOperations; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; import org.springframework.data.mongodb.core.query.BasicQuery; @@ -53,6 +51,7 @@ import org.springframework.data.mongodb.repository.query.MongoEntityInformation; import org.springframework.data.mongodb.test.util.MongoTestUtils; import org.springframework.data.repository.query.FluentQuery; +import org.springframework.data.mongodb.test.util.ReactiveMongoClientClosingTestConfiguration; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -80,7 +79,7 @@ public class ReactiveQuerydslMongoPredicateExecutorTests { QPerson person; @Configuration - static class Config extends AbstractReactiveMongoConfiguration { + static class Config extends ReactiveMongoClientClosingTestConfiguration { @Override public MongoClient reactiveMongoClient() { @@ -101,10 +100,10 @@ protected Set> getInitialEntitySet() { @BeforeClass public static void cleanDb() { - MongoClient client = MongoTestUtils.reactiveClient(); - - MongoTestUtils.createOrReplaceCollectionNow("reactive", "person", client); - MongoTestUtils.createOrReplaceCollectionNow("reactive", "user", client); + try (MongoClient client = MongoTestUtils.reactiveClient()) { + MongoTestUtils.createOrReplaceCollectionNow("reactive", "person", client); + MongoTestUtils.createOrReplaceCollectionNow("reactive", "user", client); + } } @Before diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepositoryVersionedEntityTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepositoryVersionedEntityTests.java index a6698d8a3e..1b91c59ce7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepositoryVersionedEntityTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepositoryVersionedEntityTests.java @@ -32,12 +32,12 @@ import org.springframework.context.annotation.Configuration; import org.springframework.dao.OptimisticLockingFailureException; import org.springframework.data.mongodb.MongoTransactionManager; -import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; import org.springframework.data.mongodb.repository.VersionedPerson; import org.springframework.data.mongodb.repository.query.MongoEntityInformation; import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion; +import org.springframework.data.mongodb.test.util.MongoClientClosingTestConfiguration; import org.springframework.data.mongodb.test.util.MongoTestUtils; import org.springframework.data.mongodb.test.util.ReplicaSet; import org.springframework.test.context.ContextConfiguration; @@ -55,7 +55,7 @@ public class SimpleMongoRepositoryVersionedEntityTests { @Configuration - static class Config extends AbstractMongoClientConfiguration { + static class Config extends MongoClientClosingTestConfiguration { @Override public MongoClient mongoClient() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleReactiveMongoRepositoryVersionedEntityTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleReactiveMongoRepositoryVersionedEntityTests.java index 7b6ece0cf2..1e5917a729 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleReactiveMongoRepositoryVersionedEntityTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleReactiveMongoRepositoryVersionedEntityTests.java @@ -26,16 +26,15 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; - import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.dao.OptimisticLockingFailureException; -import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration; import org.springframework.data.mongodb.core.ReactiveMongoTemplate; import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity; import org.springframework.data.mongodb.repository.VersionedPerson; import org.springframework.data.mongodb.repository.query.MongoEntityInformation; import org.springframework.data.mongodb.test.util.MongoTestUtils; +import org.springframework.data.mongodb.test.util.ReactiveMongoClientClosingTestConfiguration; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; @@ -49,7 +48,7 @@ public class SimpleReactiveMongoRepositoryVersionedEntityTests { @Configuration - static class Config extends AbstractReactiveMongoConfiguration { + static class Config extends ReactiveMongoClientClosingTestConfiguration { @Override public MongoClient reactiveMongoClient() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/MongoClientClosingTestConfiguration.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/MongoClientClosingTestConfiguration.java new file mode 100644 index 0000000000..b6b78c2f65 --- /dev/null +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/MongoClientClosingTestConfiguration.java @@ -0,0 +1,42 @@ +/* + * Copyright 2021 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 javax.annotation.PreDestroy; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.MongoDatabaseFactory; +import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; +import org.springframework.test.util.ReflectionTestUtils; + +/** + * @author Christoph Strobl + */ +public abstract class MongoClientClosingTestConfiguration extends AbstractMongoClientConfiguration { + + @Autowired(required = false) MongoDatabaseFactory dbFactory; + + @PreDestroy + public void destroy() { + + if (dbFactory != null) { + Object mongo = ReflectionTestUtils.getField(dbFactory, "mongoClient"); + if (mongo != null) { + ReflectionTestUtils.invokeMethod(mongo, "close"); + } + } + } +} diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/MongoTestTemplateConfiguration.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/MongoTestTemplateConfiguration.java index d9489b8124..804b2c388d 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/MongoTestTemplateConfiguration.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/MongoTestTemplateConfiguration.java @@ -34,6 +34,7 @@ import org.springframework.data.mongodb.core.convert.MappingMongoConverter; import org.springframework.data.mongodb.core.convert.MongoConverter; import org.springframework.data.mongodb.core.convert.MongoCustomConversions; +import org.springframework.data.mongodb.core.convert.NoOpDbRefResolver; import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.core.mapping.event.AuditingEventListener; import org.springframework.data.mongodb.core.mapping.event.MongoMappingEvent; @@ -64,7 +65,11 @@ MongoConverter mongoConverter() { if (converter == null) { - converter = new MappingMongoConverter(new DefaultDbRefResolver(databaseFactory()), mappingContext()); + if(dbFactoryConfig.syncClient != null || syncClient != null) { + converter = new MappingMongoConverter(new DefaultDbRefResolver(databaseFactory()), mappingContext()); + } else { + converter = new MappingMongoConverter(NoOpDbRefResolver.INSTANCE, mappingContext()); + } if (mongoConverterConfigurer.customConversions != null) { converter.setCustomConversions(mongoConverterConfigurer.customConversions); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/ReactiveMongoClientClosingTestConfiguration.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/ReactiveMongoClientClosingTestConfiguration.java new file mode 100644 index 0000000000..b6240ed778 --- /dev/null +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/ReactiveMongoClientClosingTestConfiguration.java @@ -0,0 +1,44 @@ +/* + * Copyright 2021 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 javax.annotation.PreDestroy; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.mongodb.ReactiveMongoDatabaseFactory; +import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration; +import org.springframework.test.util.ReflectionTestUtils; + +import com.mongodb.reactivestreams.client.MongoClient; + +/** + * @author Christoph Strobl + */ +public abstract class ReactiveMongoClientClosingTestConfiguration extends AbstractReactiveMongoConfiguration { + + @Autowired(required = false) ReactiveMongoDatabaseFactory dbFactory; + + @PreDestroy + public void destroy() { + + if (dbFactory != null) { + Object mongo = ReflectionTestUtils.getField(dbFactory, "mongo"); + if (mongo != null) { + ((MongoClient) mongo).close(); + } + } + } +}