package com.lordofthejars.nosqlunit.elasticsearch2;
import com.google.common.io.Files;
import com.lordofthejars.nosqlunit.core.AbstractLifecycleManager;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.node.Node;
import org.elasticsearch.node.NodeBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import static org.elasticsearch.node.NodeBuilder.nodeBuilder;
public class EmbeddedElasticsearchLifecycleManager extends AbstractLifecycleManager {
private static final Logger LOGGER = LoggerFactory.getLogger(EmbeddedElasticsearchLifecycleManager.class);
private static final String LOCALHOST = "127.0.0.1";
private static final int DEFAULT_PORT = 9300;
private static final String HOME_PATH_PROPERTY = "path.home";
private static final String DATA_PATH_PROPERTY = "path.data";
public static final File EMBEDDED_ELASTICSEARCH_HOME_PATH = Files.createTempDir();
public static final File EMBEDDED_ELASTICSEARCH_DATA_PATH = new File(EMBEDDED_ELASTICSEARCH_HOME_PATH, "data");
private File homePath = EMBEDDED_ELASTICSEARCH_HOME_PATH;
private File dataPath = EMBEDDED_ELASTICSEARCH_DATA_PATH;
private NodeBuilder nodeBuilder;
public EmbeddedElasticsearchLifecycleManager() {
nodeBuilder = nodeBuilder().local(true);
}
@Override
public String getHost() {
return LOCALHOST + dataPath;
}
@Override
public int getPort() {
return DEFAULT_PORT;
}
@Override
public void doStart() throws Throwable {
LOGGER.info("Starting Embedded Elasticsearch instance.");
nodeBuilder.getSettings()
.put(HOME_PATH_PROPERTY, homePath)
.put(DATA_PATH_PROPERTY, dataPath);
Node node = elasticsearchNode();
EmbeddedElasticsearchInstancesFactory.getInstance().addEmbeddedInstance(node, dataPath.getAbsolutePath());
LOGGER.info("Started Embedded Elasticsearch instance.");
}
private Node elasticsearchNode() {
return nodeBuilder.node();
}
@Override
public void doStop() {
LOGGER.info("Stopping Embedded Elasticsearch instance.");
Node node = EmbeddedElasticsearchInstancesFactory.getInstance().getEmbeddedByTargetPath(dataPath.getAbsolutePath());
if (node != null) {
node.close();
}
EmbeddedElasticsearchInstancesFactory.getInstance().removeEmbeddedInstance(dataPath.getAbsolutePath());
LOGGER.info("Stopped Embedded Elasticsearch instance.");
}
public void setSettings(Settings settings) {
nodeBuilder.settings(settings);
}
public void setClient(boolean client) {
nodeBuilder.client(client);
}
public void setClusterName(String clusterName) {
nodeBuilder.clusterName(clusterName);
}
public void setData(boolean data) {
nodeBuilder.data(data);
}
public void setLocal(boolean local) {
nodeBuilder.local(local);
}
public File getDataPath() {
return dataPath;
}
public void setDataPath(File dataPath) {
this.dataPath = dataPath;
}
public File getHomePath() {
return homePath;
}
public void setHomePath(File homePath) {
this.homePath = homePath;
}
}