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 95580d5145..7060de841b 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,8 +28,6 @@ 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()}. @@ -48,7 +36,7 @@ * @author Julia Lee */ @ExtendWith(SpringExtension.class) -@ContextConfiguration(classes = Config.class) +@ContextConfiguration(classes = BypassAutoEncryptionTest.Config.class) public class BypassAutoEncryptionTest extends AbstractEncryptionTestBase { @Disabled @@ -60,8 +48,6 @@ void altKeyDetection(@Autowired CachingMongoClientEncryption mongoClientEncrypti @Configuration static class Config extends EncryptionConfig { - @Autowired ApplicationContext applicationContext; - @Override protected void configureClientSettings(Builder builder) { @@ -74,32 +60,5 @@ protected void configureClientSettings(Builder builder) { .keyVaultNamespace(clientEncryptionSettings.getKeyVaultNamespace()) // .bypassAutoEncryption(true).build()); } - - @Override - protected void configureConverters(MongoConverterConfigurationAdapter converterConfigurationAdapter) { - - converterConfigurationAdapter - .registerPropertyValueConverterFactory(PropertyValueConverterFactory.beanFactoryAware(applicationContext)) - .useNativeDriverJavaTimeCodecs(); - } - - @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 779ce0dcaa..0f4dbd2a2f 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,110 +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)) - .useNativeDriverJavaTimeCodecs(); - } - - @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(); - } - } }