Skip to content

Commit 82f4a9f

Browse files
authored
Test against GraalVM native image technology (mongodb#1338)
JAVA-3580
1 parent 4127a22 commit 82f4a9f

24 files changed

+1168
-38
lines changed

.evergreen/.evg.yml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -887,6 +887,15 @@ functions:
887887
params:
888888
file: src/results.json
889889

890+
"run graalvm native image app":
891+
- command: shell.exec
892+
type: test
893+
params:
894+
working_dir: "src"
895+
script: |
896+
${PREPARE_SHELL}
897+
MONGODB_URI="${MONGODB_URI}" JAVA_VERSION="${JAVA_VERSION}" .evergreen/run-graalvm-native-image-app.sh
898+
890899
# Anchors
891900

892901
pre:
@@ -1646,6 +1655,10 @@ tasks:
16461655
VERSION: latest
16471656
TOPOLOGY: replica_set
16481657
- func: run socks5 tests
1658+
- name: "graalvm-native-image-app"
1659+
commands:
1660+
- func: "bootstrap mongo-orchestration"
1661+
- func: "run graalvm native image app"
16491662
axes:
16501663
- id: version
16511664
display_name: MongoDB Version
@@ -2291,3 +2304,10 @@ buildvariants:
22912304
tasks:
22922305
- name: testazurekms_task_group
22932306
batchtime: 20160 # Use a batchtime of 14 days as suggested by the CSFLE test README
2307+
2308+
- matrix_name: "graalvm-native-image-app"
2309+
matrix_spec: { version: [ "7.0" ], topology: [ "replicaset" ], auth: [ "noauth" ], ssl: [ "nossl" ],
2310+
jdk: [ "jdk21" ], os: [ "linux" ] }
2311+
display_name: "GraalVM native image app: ${version} ${topology} ${auth} ${ssl} ${jdk} ${os}"
2312+
tasks:
2313+
- name: "graalvm-native-image-app"

.evergreen/javaConfig.bash

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,9 @@ export JDK8="/opt/java/jdk8"
44
export JDK11="/opt/java/jdk11"
55
export JDK17="/opt/java/jdk17"
66
export JDK21="/opt/java/jdk21"
7+
# note that `JDK21_GRAALVM` is used in `run-graalvm-native-image-app.sh`
8+
# by dynamically constructing the variable name
9+
export JDK21_GRAALVM="/opt/java/jdk21-graalce"
710

811
if [ -d "$JDK17" ]; then
912
export JAVA_HOME=$JDK17
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
#!/bin/bash
2+
3+
# Supported/used environment variables:
4+
# MONGODB_URI The connection string to use, including credentials and topology info.
5+
# JAVA_VERSION The Java SE version for Gradle toolchain.
6+
7+
set -o errexit
8+
9+
readonly RELATIVE_DIR_PATH="$(dirname "${BASH_SOURCE[0]:-$0}")"
10+
source "${RELATIVE_DIR_PATH}/javaConfig.bash"
11+
12+
echo "MONGODB_URI: ${MONGODB_URI}"
13+
echo "JAVA_HOME: ${JAVA_HOME}"
14+
readonly JDK_GRAALVM_VAR_NAME="JDK${JAVA_VERSION}_GRAALVM"
15+
readonly JDK_GRAALVM="${!JDK_GRAALVM_VAR_NAME}"
16+
echo "The JDK distribution for running Gradle is"
17+
echo "$("${JAVA_HOME}"/bin/java --version)"
18+
echo "The Java SE version for the Gradle toolchain is ${JAVA_VERSION}"
19+
echo "The GraalVM JDK distribution expected to be found at \`${JDK_GRAALVM}\` by the Gradle toolchain functionality is"
20+
echo "$("${JDK_GRAALVM}"/bin/java --version)"
21+
echo "The Gradle version is"
22+
./gradlew --version
23+
24+
echo "Building and running the GraalVM native image app"
25+
./gradlew -PjavaVersion=${JAVA_VERSION} -Dorg.mongodb.test.uri=${MONGODB_URI} :graalvm-native-image-app:nativeRun

driver-reactive-streams/src/examples/reactivestreams/tour/ClientSideEncryptionAutoEncryptionSettingsTour.java

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,14 @@ public static void main(final String[] args) {
6464
}});
6565
}};
6666

67+
MongoClientSettings commonClientSettings = (
68+
args.length == 0
69+
? MongoClientSettings.builder()
70+
: MongoClientSettings.builder().applyConnectionString(new ConnectionString(args[0])))
71+
.build();
6772
String keyVaultNamespace = "admin.datakeys";
6873
ClientEncryptionSettings clientEncryptionSettings = ClientEncryptionSettings.builder()
69-
.keyVaultMongoClientSettings(MongoClientSettings.builder()
70-
.applyConnectionString(new ConnectionString("mongodb://localhost"))
71-
.build())
74+
.keyVaultMongoClientSettings(commonClientSettings)
7275
.keyVaultNamespace(keyVaultNamespace)
7376
.kmsProviders(kmsProviders)
7477
.build();
@@ -107,7 +110,7 @@ public static void main(final String[] args) {
107110
+ "}"));
108111
}}).build();
109112

110-
MongoClientSettings clientSettings = MongoClientSettings.builder()
113+
MongoClientSettings clientSettings = MongoClientSettings.builder(commonClientSettings)
111114
.autoEncryptionSettings(autoEncryptionSettings)
112115
.build();
113116

driver-reactive-streams/src/examples/reactivestreams/tour/ClientSideEncryptionExplicitEncryptionAndDecryptionTour.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,12 @@ public static void main(final String[] args) {
6969
}};
7070

7171
MongoNamespace keyVaultNamespace = new MongoNamespace("encryption.testKeyVault");
72-
73-
MongoClientSettings clientSettings = MongoClientSettings.builder().build();
74-
MongoClient mongoClient = MongoClients.create(clientSettings);
72+
MongoClientSettings commonClientSettings = (
73+
args.length == 0
74+
? MongoClientSettings.builder()
75+
: MongoClientSettings.builder().applyConnectionString(new ConnectionString(args[0])))
76+
.build();
77+
MongoClient mongoClient = MongoClients.create(commonClientSettings);
7578

7679
// Set up the key vault for this example
7780
MongoCollection<Document> keyVaultCollection = mongoClient.getDatabase(keyVaultNamespace.getDatabaseName())
@@ -96,9 +99,7 @@ public static void main(final String[] args) {
9699

97100
// Create the ClientEncryption instance
98101
ClientEncryptionSettings clientEncryptionSettings = ClientEncryptionSettings.builder()
99-
.keyVaultMongoClientSettings(MongoClientSettings.builder()
100-
.applyConnectionString(new ConnectionString("mongodb://localhost"))
101-
.build())
102+
.keyVaultMongoClientSettings(commonClientSettings)
102103
.keyVaultNamespace(keyVaultNamespace.getFullName())
103104
.kmsProviders(kmsProviders)
104105
.build();

driver-reactive-streams/src/examples/reactivestreams/tour/ClientSideEncryptionExplicitEncryptionOnlyTour.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,12 @@ public static void main(final String[] args) {
6969
}};
7070

7171
MongoNamespace keyVaultNamespace = new MongoNamespace("encryption.testKeyVault");
72-
73-
MongoClientSettings clientSettings = MongoClientSettings.builder()
72+
MongoClientSettings commonClientSettings = (
73+
args.length == 0
74+
? MongoClientSettings.builder()
75+
: MongoClientSettings.builder().applyConnectionString(new ConnectionString(args[0])))
76+
.build();
77+
MongoClientSettings clientSettings = MongoClientSettings.builder(commonClientSettings)
7478
.autoEncryptionSettings(AutoEncryptionSettings.builder()
7579
.keyVaultNamespace(keyVaultNamespace.getFullName())
7680
.kmsProviders(kmsProviders)
@@ -102,9 +106,7 @@ public static void main(final String[] args) {
102106

103107
// Create the ClientEncryption instance
104108
ClientEncryptionSettings clientEncryptionSettings = ClientEncryptionSettings.builder()
105-
.keyVaultMongoClientSettings(MongoClientSettings.builder()
106-
.applyConnectionString(new ConnectionString("mongodb://localhost"))
107-
.build())
109+
.keyVaultMongoClientSettings(commonClientSettings)
108110
.keyVaultNamespace(keyVaultNamespace.getFullName())
109111
.kmsProviders(kmsProviders)
110112
.build();

driver-reactive-streams/src/examples/reactivestreams/tour/ClientSideEncryptionSimpleTour.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
package reactivestreams.tour;
1919

2020
import com.mongodb.AutoEncryptionSettings;
21+
import com.mongodb.ConnectionString;
2122
import com.mongodb.MongoClientSettings;
2223
import com.mongodb.client.result.InsertOneResult;
2324
import com.mongodb.reactivestreams.client.MongoClient;
@@ -64,7 +65,10 @@ public static void main(final String[] args) {
6465
.kmsProviders(kmsProviders)
6566
.build();
6667

67-
MongoClientSettings clientSettings = MongoClientSettings.builder()
68+
MongoClientSettings clientSettings = (
69+
args.length == 0
70+
? MongoClientSettings.builder()
71+
: MongoClientSettings.builder().applyConnectionString(new ConnectionString(args[0])))
6872
.autoEncryptionSettings(autoEncryptionSettings)
6973
.build();
7074

driver-sync/src/examples/documentation/CausalConsistencyExamples.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package documentation;
1818

1919
import com.mongodb.ClientSessionOptions;
20+
import com.mongodb.ConnectionString;
21+
import com.mongodb.MongoClientSettings;
2022
import com.mongodb.ReadConcern;
2123
import com.mongodb.ReadPreference;
2224
import com.mongodb.WriteConcern;
@@ -42,8 +44,13 @@ public final class CausalConsistencyExamples {
4244
* @param args takes an optional single argument for the connection string
4345
*/
4446
public static void main(final String[] args) {
45-
setupDatabase();
46-
MongoClient client = MongoClients.create();
47+
MongoClientSettings clientSettings = (
48+
args.length == 0
49+
? MongoClientSettings.builder()
50+
: MongoClientSettings.builder().applyConnectionString(new ConnectionString(args[0])))
51+
.build();
52+
setupDatabase(clientSettings);
53+
MongoClient client = MongoClients.create(clientSettings);
4754

4855
// Start Causal Consistency Example 1
4956
// Example 1: Use a causally consistent session to ensure that the update occurs before the insert.
@@ -81,8 +88,8 @@ public static void main(final String[] args) {
8188
// End Causal Consistency Example 2
8289
}
8390

84-
private static void setupDatabase() {
85-
MongoClient client = MongoClients.create();
91+
private static void setupDatabase(final MongoClientSettings clientSettings) {
92+
MongoClient client = MongoClients.create(clientSettings);
8693
client.getDatabase("test").drop();
8794

8895
MongoDatabase database = client.getDatabase("test");

driver-sync/src/examples/tour/ClientSideEncryptionAutoEncryptionSettingsTour.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,14 @@ public static void main(final String[] args) {
5858
put("key", localMasterKey);
5959
}});
6060
}};
61-
61+
MongoClientSettings commonClientSettings = (
62+
args.length == 0
63+
? MongoClientSettings.builder()
64+
: MongoClientSettings.builder().applyConnectionString(new ConnectionString(args[0])))
65+
.build();
6266
String keyVaultNamespace = "encryption.__keyVault";
6367
ClientEncryptionSettings clientEncryptionSettings = ClientEncryptionSettings.builder()
64-
.keyVaultMongoClientSettings(MongoClientSettings.builder()
65-
.applyConnectionString(new ConnectionString("mongodb://localhost"))
66-
.build())
68+
.keyVaultMongoClientSettings(commonClientSettings)
6769
.keyVaultNamespace(keyVaultNamespace)
6870
.kmsProviders(kmsProviders)
6971
.build();
@@ -99,7 +101,7 @@ public static void main(final String[] args) {
99101
+ "}"));
100102
}}).build();
101103

102-
MongoClientSettings clientSettings = MongoClientSettings.builder()
104+
MongoClientSettings clientSettings = MongoClientSettings.builder(commonClientSettings)
103105
.autoEncryptionSettings(autoEncryptionSettings)
104106
.build();
105107

driver-sync/src/examples/tour/ClientSideEncryptionExplicitEncryptionAndDecryptionTour.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -60,9 +60,12 @@ public static void main(final String[] args) {
6060
put("key", localMasterKey);
6161
}});
6262
}};
63-
64-
MongoClientSettings clientSettings = MongoClientSettings.builder().build();
65-
MongoClient mongoClient = MongoClients.create(clientSettings);
63+
MongoClientSettings commonClientSettings = (
64+
args.length == 0
65+
? MongoClientSettings.builder()
66+
: MongoClientSettings.builder().applyConnectionString(new ConnectionString(args[0])))
67+
.build();
68+
MongoClient mongoClient = MongoClients.create(commonClientSettings);
6669

6770
// Set up the key vault for this example
6871
MongoNamespace keyVaultNamespace = new MongoNamespace("encryption.testKeyVault");
@@ -81,9 +84,7 @@ public static void main(final String[] args) {
8184

8285
// Create the ClientEncryption instance
8386
ClientEncryptionSettings clientEncryptionSettings = ClientEncryptionSettings.builder()
84-
.keyVaultMongoClientSettings(MongoClientSettings.builder()
85-
.applyConnectionString(new ConnectionString("mongodb://localhost"))
86-
.build())
87+
.keyVaultMongoClientSettings(commonClientSettings)
8788
.keyVaultNamespace(keyVaultNamespace.getFullName())
8889
.kmsProviders(kmsProviders)
8990
.build();

driver-sync/src/examples/tour/ClientSideEncryptionExplicitEncryptionOnlyTour.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,12 @@ public static void main(final String[] args) {
6262
}};
6363

6464
MongoNamespace keyVaultNamespace = new MongoNamespace("encryption.testKeyVault");
65-
66-
MongoClientSettings clientSettings = MongoClientSettings.builder()
65+
MongoClientSettings commonClientSettings = (
66+
args.length == 0
67+
? MongoClientSettings.builder()
68+
: MongoClientSettings.builder().applyConnectionString(new ConnectionString(args[0])))
69+
.build();
70+
MongoClientSettings clientSettings = MongoClientSettings.builder(commonClientSettings)
6771
.autoEncryptionSettings(AutoEncryptionSettings.builder()
6872
.keyVaultNamespace(keyVaultNamespace.getFullName())
6973
.kmsProviders(kmsProviders)
@@ -87,9 +91,7 @@ public static void main(final String[] args) {
8791

8892
// Create the ClientEncryption instance
8993
ClientEncryptionSettings clientEncryptionSettings = ClientEncryptionSettings.builder()
90-
.keyVaultMongoClientSettings(MongoClientSettings.builder()
91-
.applyConnectionString(new ConnectionString("mongodb://localhost"))
92-
.build())
94+
.keyVaultMongoClientSettings(commonClientSettings)
9395
.keyVaultNamespace(keyVaultNamespace.getFullName())
9496
.kmsProviders(kmsProviders)
9597
.build();

driver-sync/src/examples/tour/ClientSideEncryptionSimpleTour.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package tour;
1818

1919
import com.mongodb.AutoEncryptionSettings;
20+
import com.mongodb.ConnectionString;
2021
import com.mongodb.MongoClientSettings;
2122
import com.mongodb.client.MongoClient;
2223
import com.mongodb.client.MongoClients;
@@ -59,7 +60,10 @@ public static void main(final String[] args) {
5960
.kmsProviders(kmsProviders)
6061
.build();
6162

62-
MongoClientSettings clientSettings = MongoClientSettings.builder()
63+
MongoClientSettings clientSettings = (
64+
args.length == 0
65+
? MongoClientSettings.builder()
66+
: MongoClientSettings.builder().applyConnectionString(new ConnectionString(args[0])))
6367
.autoEncryptionSettings(autoEncryptionSettings)
6468
.build();
6569

0 commit comments

Comments
 (0)