Skip to content

Commit 2f43461

Browse files
committed
JAVA-2848: Make it easier to run tests with a replica set
If no org.mongodb.test.uri system property is provided, try to figure out what it should be by interrogating the server at the default host and port. If a setName is found in the response to an isMaster command, make the uri "mongodb://localhost?/replicaSet=<setName>"
1 parent 2bf883e commit 2f43461

File tree

4 files changed

+46
-30
lines changed

4 files changed

+46
-30
lines changed

driver-async/src/test/functional/com/mongodb/async/client/Fixture.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,8 @@
3535
* Helper class for asynchronous tests.
3636
*/
3737
public final class Fixture {
38-
public static final String DEFAULT_URI = "mongodb://localhost:27017";
39-
public static final String MONGODB_URI_SYSTEM_PROPERTY_NAME = "org.mongodb.test.uri";
4038
private static final String DEFAULT_DATABASE_NAME = "JavaDriverTest";
4139

42-
private static ConnectionString connectionString;
4340
private static MongoClientImpl mongoClient;
4441

4542

@@ -69,13 +66,7 @@ public void apply(final SslSettings.Builder builder) {
6966
}
7067

7168
public static synchronized ConnectionString getConnectionString() {
72-
if (connectionString == null) {
73-
String mongoURIProperty = System.getProperty(MONGODB_URI_SYSTEM_PROPERTY_NAME);
74-
String mongoURIString = mongoURIProperty == null || mongoURIProperty.isEmpty()
75-
? DEFAULT_URI : mongoURIProperty;
76-
connectionString = new ConnectionString(mongoURIString);
77-
}
78-
return connectionString;
69+
return ClusterFixture.getConnectionString();
7970
}
8071

8172
public static String getDefaultDatabaseName() {

driver-core/src/test/functional/com/mongodb/ClusterFixture.java

Lines changed: 42 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.mongodb.operation.AsyncReadOperation;
5151
import com.mongodb.operation.AsyncWriteOperation;
5252
import com.mongodb.operation.BatchCursor;
53+
import com.mongodb.operation.CommandReadOperation;
5354
import com.mongodb.operation.CommandWriteOperation;
5455
import com.mongodb.operation.DropDatabaseOperation;
5556
import com.mongodb.operation.ReadOperation;
@@ -98,10 +99,6 @@ public final class ClusterFixture {
9899
private static Map<ReadPreference, AsyncReadWriteBinding> asyncBindingMap = new HashMap<ReadPreference, AsyncReadWriteBinding>();
99100

100101
static {
101-
String mongoURIProperty = System.getProperty(MONGODB_URI_SYSTEM_PROPERTY_NAME);
102-
String mongoURIString = mongoURIProperty == null || mongoURIProperty.isEmpty()
103-
? DEFAULT_URI : mongoURIProperty;
104-
connectionString = new ConnectionString(mongoURIString);
105102
Runtime.getRuntime().addShutdownHook(new ShutdownHook());
106103
}
107104

@@ -188,7 +185,37 @@ public void run() {
188185
}
189186

190187
public static synchronized ConnectionString getConnectionString() {
191-
return connectionString;
188+
if (connectionString != null) {
189+
return connectionString;
190+
}
191+
192+
String mongoURIProperty = System.getProperty(MONGODB_URI_SYSTEM_PROPERTY_NAME);
193+
if (mongoURIProperty != null && !mongoURIProperty.isEmpty()) {
194+
connectionString = new ConnectionString(mongoURIProperty);
195+
return connectionString;
196+
}
197+
198+
// Figure out what the connection string should be
199+
Cluster cluster = createCluster(new ConnectionString(DEFAULT_URI),
200+
new SocketStreamFactory(SocketSettings.builder().build(), SslSettings.builder().build()));
201+
try {
202+
BsonDocument isMasterResult = new CommandReadOperation<BsonDocument>("admin",
203+
new BsonDocument("ismaster", new BsonInt32(1)), new BsonDocumentCodec()).execute(new ClusterBinding(cluster,
204+
ReadPreference.nearest(), ReadConcern.DEFAULT));
205+
if (isMasterResult.containsKey("setName")) {
206+
connectionString = new ConnectionString(DEFAULT_URI + "/?replicaSet="
207+
+ isMasterResult.getString("setName").getValue());
208+
} else {
209+
connectionString = new ConnectionString(DEFAULT_URI);
210+
ClusterFixture.cluster = cluster;
211+
}
212+
213+
return connectionString;
214+
} finally {
215+
if (ClusterFixture.cluster == null) {
216+
cluster.close();
217+
}
218+
}
192219
}
193220

194221
public static ReadWriteBinding getBinding(final Cluster cluster) {
@@ -263,15 +290,19 @@ public static synchronized Cluster getAsyncCluster() {
263290
return asyncCluster;
264291
}
265292

266-
@SuppressWarnings("deprecation")
267293
public static Cluster createCluster(final StreamFactory streamFactory) {
268-
return new DefaultClusterFactory().createCluster(ClusterSettings.builder().applyConnectionString(getConnectionString()).build(),
294+
return createCluster(getConnectionString(), streamFactory);
295+
}
296+
297+
@SuppressWarnings("deprecation")
298+
private static Cluster createCluster(final ConnectionString connectionString, final StreamFactory streamFactory) {
299+
return new DefaultClusterFactory().createCluster(ClusterSettings.builder().applyConnectionString(connectionString).build(),
269300
ServerSettings.builder().build(),
270-
ConnectionPoolSettings.builder().applyConnectionString(getConnectionString()).build(),
301+
ConnectionPoolSettings.builder().applyConnectionString(connectionString).build(),
271302
streamFactory,
272-
new SocketStreamFactory(SocketSettings.builder().build(), getSslSettings()),
273-
getConnectionString().getCredentialList(), null, null, null,
274-
getConnectionString().getCompressorList());
303+
new SocketStreamFactory(SocketSettings.builder().build(), getSslSettings(connectionString)),
304+
connectionString.getCredentialList(), null, null, null,
305+
connectionString.getCompressorList());
275306
}
276307

277308
public static StreamFactory getAsyncStreamFactory() {

driver-legacy/src/test/functional/com/mongodb/Fixture.java

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,6 @@
2424
* Helper class for the acceptance tests.
2525
*/
2626
public final class Fixture {
27-
private static final String DEFAULT_URI = "mongodb://localhost:27017";
28-
private static final String MONGODB_URI_SYSTEM_PROPERTY_NAME = "org.mongodb.test.uri";
2927
private static final String DEFAULT_DATABASE_NAME = "JavaDriverTest";
3028

3129
private static MongoClient mongoClient;
@@ -85,9 +83,7 @@ public void run() {
8583
}
8684

8785
public static synchronized String getMongoClientURIString() {
88-
String mongoURIProperty = System.getProperty(MONGODB_URI_SYSTEM_PROPERTY_NAME);
89-
return mongoURIProperty == null || mongoURIProperty.isEmpty()
90-
? DEFAULT_URI : mongoURIProperty;
86+
return ClusterFixture.getConnectionString().getConnectionString();
9187
}
9288

9389
public static synchronized MongoClientURI getMongoClientURI() {

driver-sync/src/test/functional/com/mongodb/client/Fixture.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
package com.mongodb.client;
1818

1919
import com.mongodb.Block;
20+
import com.mongodb.ClusterFixture;
2021
import com.mongodb.ConnectionString;
2122
import com.mongodb.MongoClientSettings;
2223
import com.mongodb.ServerAddress;
@@ -29,8 +30,6 @@
2930
* Helper class for the acceptance tests.
3031
*/
3132
public final class Fixture {
32-
private static final String DEFAULT_URI = "mongodb://localhost:27017";
33-
private static final String MONGODB_URI_SYSTEM_PROPERTY_NAME = "org.mongodb.test.uri";
3433
private static final String DEFAULT_DATABASE_NAME = "JavaDriverTest";
3534

3635
private static MongoClient mongoClient;
@@ -75,8 +74,7 @@ public void run() {
7574
}
7675

7776
private static synchronized String getConnectionStringProperty() {
78-
String mongoURIProperty = System.getProperty(MONGODB_URI_SYSTEM_PROPERTY_NAME);
79-
return mongoURIProperty == null || mongoURIProperty.isEmpty() ? DEFAULT_URI : mongoURIProperty;
77+
return ClusterFixture.getConnectionString().getConnectionString();
8078
}
8179

8280
public static synchronized MongoClientSettings getMongoClientSettings() {

0 commit comments

Comments
 (0)