From e5b55c2e47b44afb48eb657d8033adf7fec0414c Mon Sep 17 00:00:00 2001
From: Julia Lee <5765049+sxhinzvc@users.noreply.github.com>
Date: Thu, 13 Jul 2023 11:50:33 -0400
Subject: [PATCH 1/3] Prepare issue branch.
---
pom.xml | 2 +-
spring-data-mongodb-benchmarks/pom.xml | 2 +-
spring-data-mongodb-distribution/pom.xml | 2 +-
spring-data-mongodb/pom.xml | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
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
From 6968f4b34e28f81a6a637bf151b83af800d0b227 Mon Sep 17 00:00:00 2001
From: Julia Lee <5765049+sxhinzvc@users.noreply.github.com>
Date: Thu, 13 Jul 2023 11:52:12 -0400
Subject: [PATCH 2/3] Fix test setup so that temporal conversions use symmetric
timezone setting.
Closes: #4446
---
.../mongodb/core/convert/MappingMongoConverterUnitTests.java | 4 ++--
.../mongodb/core/encryption/AbstractEncryptionTestBase.java | 3 ++-
.../mongodb/core/encryption/BypassAutoEncryptionTest.java | 3 ++-
.../data/mongodb/core/encryption/EncryptionTests.java | 3 ++-
4 files changed, 8 insertions(+), 5 deletions(-)
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..c9fb53f8fc 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
@@ -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..280542130c 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
@@ -450,7 +450,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..9b9097eab0 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
@@ -78,7 +78,8 @@ protected void configureClientSettings(Builder builder) {
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/EncryptionTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/EncryptionTests.java
index 78a930c731..5e2a1926bc 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
@@ -74,7 +74,8 @@ public MongoClient mongoClient() {
protected void configureConverters(MongoConverterConfigurationAdapter converterConfigurationAdapter) {
converterConfigurationAdapter
- .registerPropertyValueConverterFactory(PropertyValueConverterFactory.beanFactoryAware(applicationContext));
+ .registerPropertyValueConverterFactory(PropertyValueConverterFactory.beanFactoryAware(applicationContext))
+ .useNativeDriverJavaTimeCodecs();
}
@Bean
From 0e61a9032dea5fae936e5a3002cc7631be7d0104 Mon Sep 17 00:00:00 2001
From: Julia Lee <5765049+sxhinzvc@users.noreply.github.com>
Date: Fri, 14 Jul 2023 13:05:16 -0400
Subject: [PATCH 3/3] Polishing - Remove duplicate test configuration
---
.../MappingMongoConverterUnitTests.java | 2 +-
.../AbstractEncryptionTestBase.java | 1 +
.../encryption/BypassAutoEncryptionTest.java | 42 +-------
.../core/encryption/EncryptionTests.java | 99 +------------------
4 files changed, 7 insertions(+), 137 deletions(-)
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 c9fb53f8fc..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 {
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 280542130c..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 {
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 9b9097eab0..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,31 +61,6 @@ protected void configureClientSettings(Builder builder) {
.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 5e2a1926bc..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,109 +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();
- }
- }
-}
+}
\ No newline at end of file