diff --git a/pom.xml b/pom.xml index 366786fc6d..a872f8d0ac 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 4.2.0-SNAPSHOT + 4.2.x-GH-4446-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index 2de4b6b635..d052213c58 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 - 4.2.0-SNAPSHOT + 4.2.x-GH-4446-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index 060a6d0dd9..b818a36590 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -15,7 +15,7 @@ org.springframework.data spring-data-mongodb-parent - 4.2.0-SNAPSHOT + 4.2.x-GH-4446-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index dc07f13ccc..7632cf8266 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -13,7 +13,7 @@ org.springframework.data spring-data-mongodb-parent - 4.2.0-SNAPSHOT + 4.2.x-GH-4446-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java index ea081dd8f7..8a3fac7797 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java @@ -25,7 +25,6 @@ import java.net.URL; import java.time.LocalDate; import java.time.LocalDateTime; -import java.time.ZoneOffset; import java.time.temporal.ChronoUnit; import java.util.*; @@ -106,6 +105,7 @@ * @author Mark Paluch * @author Roman Puchkovskiy * @author Heesu Jung + * @author Julia Lee */ @ExtendWith(MockitoExtension.class) class MappingMongoConverterUnitTests { @@ -2619,7 +2619,7 @@ void readsMapThatDoesNotComeAsDocument() { void projectShouldReadSimpleInterfaceProjection() { org.bson.Document source = new org.bson.Document("birthDate", - Date.from(LocalDate.of(1999, 12, 1).atStartOfDay().toInstant(ZoneOffset.UTC))).append("foo", "Walter"); + Date.from(LocalDate.of(1999, 12, 1).atStartOfDay(systemDefault()).toInstant())).append("foo", "Walter"); EntityProjectionIntrospector discoverer = EntityProjectionIntrospector.create(converter.getProjectionFactory(), EntityProjectionIntrospector.ProjectionPredicate.typeHierarchy() @@ -2637,7 +2637,7 @@ void projectShouldReadSimpleInterfaceProjection() { void projectShouldReadSimpleDtoProjection() { org.bson.Document source = new org.bson.Document("birthDate", - Date.from(LocalDate.of(1999, 12, 1).atStartOfDay().toInstant(ZoneOffset.UTC))).append("foo", "Walter"); + Date.from(LocalDate.of(1999, 12, 1).atStartOfDay(systemDefault()).toInstant())).append("foo", "Walter"); EntityProjectionIntrospector introspector = EntityProjectionIntrospector.create(converter.getProjectionFactory(), EntityProjectionIntrospector.ProjectionPredicate.typeHierarchy() diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/AbstractEncryptionTestBase.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/AbstractEncryptionTestBase.java index 473fad3d3f..393a0d12f2 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/AbstractEncryptionTestBase.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/AbstractEncryptionTestBase.java @@ -70,6 +70,7 @@ /** * @author Christoph Strobl + * @author Julia Lee */ public abstract class AbstractEncryptionTestBase { @@ -450,7 +451,8 @@ public MongoClient mongoClient() { protected void configureConverters(MongoConverterConfigurationAdapter converterConfigurationAdapter) { converterConfigurationAdapter - .registerPropertyValueConverterFactory(PropertyValueConverterFactory.beanFactoryAware(applicationContext)); + .registerPropertyValueConverterFactory(PropertyValueConverterFactory.beanFactoryAware(applicationContext)) + .useNativeDriverJavaTimeCodecs(); } @Bean diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/BypassAutoEncryptionTest.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/BypassAutoEncryptionTest.java index 90e6a9ba36..6f44503495 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/BypassAutoEncryptionTest.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/BypassAutoEncryptionTest.java @@ -16,20 +16,10 @@ package org.springframework.data.mongodb.core.encryption; -import java.util.Collections; - -import org.bson.BsonBinary; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.extension.ExtendWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.data.convert.PropertyValueConverterFactory; -import org.springframework.data.mongodb.core.convert.MongoCustomConversions.MongoConverterConfigurationAdapter; -import org.springframework.data.mongodb.core.convert.encryption.MongoEncryptionConverter; -import org.springframework.data.mongodb.core.encryption.BypassAutoEncryptionTest.Config; -import org.springframework.data.util.Lazy; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; @@ -38,16 +28,15 @@ import com.mongodb.MongoClientSettings.Builder; import com.mongodb.client.MongoClient; import com.mongodb.client.MongoClients; -import com.mongodb.client.model.vault.DataKeyOptions; -import com.mongodb.client.vault.ClientEncryptions; /** * Encryption tests for client having {@link AutoEncryptionSettings#isBypassAutoEncryption()}. * * @author Christoph Strobl + * @author Julia Lee */ @ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = Config.class) +@ContextConfiguration public class BypassAutoEncryptionTest extends AbstractEncryptionTestBase { @Disabled @@ -59,8 +48,6 @@ void altKeyDetection(@Autowired CachingMongoClientEncryption mongoClientEncrypti @Configuration static class Config extends EncryptionConfig { - @Autowired ApplicationContext applicationContext; - @Override protected void configureClientSettings(Builder builder) { @@ -74,30 +61,6 @@ protected void configureClientSettings(Builder builder) { .bypassAutoEncryption(true).build()); } - @Override - protected void configureConverters(MongoConverterConfigurationAdapter converterConfigurationAdapter) { - - converterConfigurationAdapter - .registerPropertyValueConverterFactory(PropertyValueConverterFactory.beanFactoryAware(applicationContext)); - } - - @Bean - @Override - MongoEncryptionConverter encryptingConverter(MongoClientEncryption mongoClientEncryption) { - - Lazy dataKey = Lazy.of(() -> mongoClientEncryption.getClientEncryption().createDataKey("local", - new DataKeyOptions().keyAltNames(Collections.singletonList("mySuperSecretKey")))); - - return new MongoEncryptionConverter(mongoClientEncryption, - EncryptionKeyResolver.annotated((ctx) -> EncryptionKey.keyId(dataKey.get()))); - } - - @Bean - @Override - CachingMongoClientEncryption clientEncryption(ClientEncryptionSettings encryptionSettings) { - return new CachingMongoClientEncryption(() -> ClientEncryptions.create(encryptionSettings)); - } - } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/EncryptionTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/EncryptionTests.java index 78a930c731..a36828cbce 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/EncryptionTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/EncryptionTests.java @@ -15,108 +15,16 @@ */ package org.springframework.data.mongodb.core.encryption; -import java.security.SecureRandom; -import java.util.Collections; -import java.util.Map; - -import org.bson.BsonBinary; -import org.bson.Document; import org.junit.jupiter.api.extension.ExtendWith; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationContext; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.convert.PropertyValueConverterFactory; -import org.springframework.data.mongodb.config.AbstractMongoClientConfiguration; -import org.springframework.data.mongodb.core.convert.MongoCustomConversions.MongoConverterConfigurationAdapter; -import org.springframework.data.mongodb.core.convert.encryption.MongoEncryptionConverter; -import org.springframework.data.mongodb.core.encryption.EncryptionTests.Config; -import org.springframework.data.util.Lazy; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit.jupiter.SpringExtension; -import com.mongodb.ClientEncryptionSettings; -import com.mongodb.ConnectionString; -import com.mongodb.MongoClientSettings; -import com.mongodb.MongoNamespace; -import com.mongodb.client.MongoClient; -import com.mongodb.client.MongoCollection; -import com.mongodb.client.model.Filters; -import com.mongodb.client.model.IndexOptions; -import com.mongodb.client.model.Indexes; -import com.mongodb.client.model.vault.DataKeyOptions; -import com.mongodb.client.vault.ClientEncryptions; - /** * @author Christoph Strobl + * @author Julia Lee */ @ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = Config.class) +@ContextConfiguration(classes = AbstractEncryptionTestBase.EncryptionConfig.class) public class EncryptionTests extends AbstractEncryptionTestBase { - @Configuration - static class Config extends AbstractMongoClientConfiguration { - - @Autowired ApplicationContext applicationContext; - - @Override - protected String getDatabaseName() { - return "fle-test"; - } - - @Bean - @Override - public MongoClient mongoClient() { - return super.mongoClient(); - } - - @Override - protected void configureConverters(MongoConverterConfigurationAdapter converterConfigurationAdapter) { - - converterConfigurationAdapter - .registerPropertyValueConverterFactory(PropertyValueConverterFactory.beanFactoryAware(applicationContext)); - } - - @Bean - MongoEncryptionConverter encryptingConverter(MongoClientEncryption mongoClientEncryption) { - - Lazy dataKey = Lazy.of(() -> mongoClientEncryption.getClientEncryption().createDataKey("local", - new DataKeyOptions().keyAltNames(Collections.singletonList("mySuperSecretKey")))); - - return new MongoEncryptionConverter(mongoClientEncryption, - EncryptionKeyResolver.annotated((ctx) -> EncryptionKey.keyId(dataKey.get()))); - } - - @Bean - CachingMongoClientEncryption clientEncryption(ClientEncryptionSettings encryptionSettings) { - return new CachingMongoClientEncryption(() -> ClientEncryptions.create(encryptionSettings)); - } - - @Bean - ClientEncryptionSettings encryptionSettings(MongoClient mongoClient) { - - MongoNamespace keyVaultNamespace = new MongoNamespace("encryption.testKeyVault"); - MongoCollection keyVaultCollection = mongoClient.getDatabase(keyVaultNamespace.getDatabaseName()) - .getCollection(keyVaultNamespace.getCollectionName()); - keyVaultCollection.drop(); - // Ensure that two data keys cannot share the same keyAltName. - keyVaultCollection.createIndex(Indexes.ascending("keyAltNames"), - new IndexOptions().unique(true).partialFilterExpression(Filters.exists("keyAltNames"))); - - MongoCollection collection = mongoClient.getDatabase(getDatabaseName()).getCollection("test"); - collection.drop(); // Clear old data - - byte[] localMasterKey = new byte[96]; - new SecureRandom().nextBytes(localMasterKey); - Map> kmsProviders = Map.of("local", Map.of("key", localMasterKey)); - - // Create the ClientEncryption instance - return ClientEncryptionSettings.builder() - .keyVaultMongoClientSettings( - MongoClientSettings.builder().applyConnectionString(new ConnectionString("mongodb://localhost")).build()) // - .keyVaultNamespace(keyVaultNamespace.getFullName()) // - .kmsProviders(kmsProviders) // - .build(); - } - } -} +} \ No newline at end of file