/*
* Copyright (c) 2008-2015 MongoDB, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.mongodb;
import com.mongodb.connection.ServerDescription;
import java.util.List;
/**
* Helper class for the acceptance tests. Considering replacing with MongoClientTestBase.
*/
public final class Fixture {
public static final String DEFAULT_URI = "mongodb://localhost:27017";
public static final String MONGODB_URI_SYSTEM_PROPERTY_NAME = "org.mongodb.test.uri";
private static final String DEFAULT_DATABASE_NAME = "JavaDriverTest";
private static MongoClient mongoClient;
private static MongoClientURI mongoClientURI;
private static DB defaultDatabase;
private Fixture() {
}
public static synchronized MongoClient getMongoClient() {
if (mongoClient == null) {
MongoClientURI mongoURI = getMongoClientURI();
mongoClient = new MongoClient(mongoURI);
Runtime.getRuntime().addShutdownHook(new ShutdownHook());
}
return mongoClient;
}
@SuppressWarnings("deprecation") // This is for access to the old API, so it will use deprecated methods
public static synchronized DB getDefaultDatabase() {
if (defaultDatabase == null) {
defaultDatabase = getMongoClient().getDB(getDefaultDatabaseName());
}
return defaultDatabase;
}
public static String getDefaultDatabaseName() {
return DEFAULT_DATABASE_NAME;
}
static class ShutdownHook extends Thread {
@Override
public void run() {
synchronized (Fixture.class) {
if (mongoClient != null) {
if (defaultDatabase != null) {
defaultDatabase.dropDatabase();
}
mongoClient.close();
mongoClient = null;
}
}
}
}
public static synchronized String getMongoClientURIString() {
String mongoURIProperty = System.getProperty(MONGODB_URI_SYSTEM_PROPERTY_NAME);
return mongoURIProperty == null || mongoURIProperty.isEmpty()
? DEFAULT_URI : mongoURIProperty;
}
public static synchronized MongoClientURI getMongoClientURI() {
if (mongoClientURI == null) {
mongoClientURI = getMongoClientURI(MongoClientOptions.builder());
}
return mongoClientURI;
}
public static synchronized MongoClientURI getMongoClientURI(final MongoClientOptions.Builder builder) {
MongoClientURI mongoClientURI = null;
String mongoURIString = getMongoClientURIString();
if (System.getProperty("java.version").startsWith("1.6.")) {
builder.sslInvalidHostNameAllowed(true);
}
mongoClientURI = new MongoClientURI(mongoURIString, builder);
return mongoClientURI;
}
public static MongoClientOptions getOptions() {
return getMongoClientURI().getOptions();
}
@SuppressWarnings("deprecation")
public static ServerAddress getPrimary() throws InterruptedException {
getMongoClient();
List<ServerDescription> serverDescriptions = mongoClient.getCluster().getDescription().getPrimaries();
while (serverDescriptions.isEmpty()) {
Thread.sleep(100);
serverDescriptions = mongoClient.getCluster().getDescription().getPrimaries();
}
return serverDescriptions.get(0).getAddress();
}
}