Browse Source

Reinstantiate MongoCompatibilityAdapter for trimFactor

issue/4185-light
Christoph Strobl 8 months ago
parent
commit
4807eb00c5
No known key found for this signature in database
GPG Key ID: E6054036D0C37A4B
  1. 4
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/encryption/MongoClientEncryption.java
  2. 31
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/MongoCompatibilityAdapter.java
  3. 10
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/RangeEncryptionTests.java

4
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/encryption/MongoClientEncryption.java

@ -15,6 +15,8 @@ @@ -15,6 +15,8 @@
*/
package org.springframework.data.mongodb.core.encryption;
import static org.springframework.data.mongodb.util.MongoCompatibilityAdapter.rangeOptionsAdapter;
import java.util.Map;
import java.util.function.Supplier;
@ -122,7 +124,7 @@ public class MongoClientEncryption implements Encryption<BsonValue, BsonBinary> @@ -122,7 +124,7 @@ public class MongoClientEncryption implements Encryption<BsonValue, BsonBinary>
Assert.isInstanceOf(Integer.class, trimFactor, () -> String
.format("Expected to find a %s but it turned out to be %s.", Integer.class, trimFactor.getClass()));
encryptionRangeOptions.trimFactor((Integer) trimFactor);
rangeOptionsAdapter(encryptionRangeOptions).trimFactor((Integer) trimFactor);
}
if (attributes.containsKey("sparsity")) {

31
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/util/MongoCompatibilityAdapter.java

@ -57,8 +57,18 @@ public class MongoCompatibilityAdapter { @@ -57,8 +57,18 @@ public class MongoCompatibilityAdapter {
private static final @Nullable Method setBucketSize = ReflectionUtils.findMethod(IndexOptions.class, "bucketSize",
Double.class);
private static final @Nullable Method setTrimFactor = ReflectionUtils.findMethod(RangeOptions.class, "setTrimFactor",
Integer.class);
private static final @Nullable Method setTrimFactor;
static {
// method name changed in between
Method trimFactor = ReflectionUtils.findMethod(RangeOptions.class, "setTrimFactor", Integer.class);
if (trimFactor != null) {
setTrimFactor = trimFactor;
} else {
setTrimFactor = ReflectionUtils.findMethod(RangeOptions.class, "trimFactor", Integer.class);
}
}
/**
* Return a compatibility adapter for {@link MongoClientSettings.Builder}.
@ -128,6 +138,23 @@ public class MongoCompatibilityAdapter { @@ -128,6 +138,23 @@ public class MongoCompatibilityAdapter {
};
}
/**
* Return a compatibility adapter for {@link RangeOptions}.
*
* @param options
* @return
*/
public static RangeOptionsAdapter rangeOptionsAdapter(RangeOptions options) {
return trimFactor -> {
if (!MongoClientVersion.isVersion5orNewer() || setTrimFactor == null) {
throw new UnsupportedOperationException(NOT_SUPPORTED_ON_4.formatted("RangeOptions.trimFactor"));
}
ReflectionUtils.invokeMethod(setTrimFactor, options, trimFactor);
};
}
/**
* Return a compatibility adapter for {@code MapReducePublisher}.
*

10
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/encryption/RangeEncryptionTests.java

@ -26,12 +26,16 @@ import java.util.Objects; @@ -26,12 +26,16 @@ import java.util.Objects;
import java.util.concurrent.atomic.AtomicReference;
import java.util.function.Supplier;
import org.assertj.core.api.Assumptions;
import org.bson.BsonBinary;
import org.bson.BsonDocument;
import org.bson.BsonInt32;
import org.bson.BsonString;
import org.bson.Document;
import org.junit.Before;
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;
@ -58,6 +62,7 @@ import org.springframework.data.mongodb.core.schema.MongoJsonSchema; @@ -58,6 +62,7 @@ import org.springframework.data.mongodb.core.schema.MongoJsonSchema;
import org.springframework.data.mongodb.test.util.EnableIfMongoServerVersion;
import org.springframework.data.mongodb.test.util.EnableIfReplicaSetAvailable;
import org.springframework.data.mongodb.test.util.MongoClientExtension;
import org.springframework.data.mongodb.util.MongoClientVersion;
import org.springframework.data.util.Lazy;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@ -97,6 +102,11 @@ class RangeEncryptionTests { @@ -97,6 +102,11 @@ class RangeEncryptionTests {
@Autowired MongoClientEncryption clientEncryption;
@Autowired EncryptionKeyHolder keyHolder;
@BeforeEach
void clientVersionCheck() {
Assumptions.assumeThat(MongoClientVersion.isVersion5orNewer()).isTrue();
}
@AfterEach
void tearDown() {
template.getDb().getCollection("test").deleteMany(new BsonDocument());

Loading…
Cancel
Save