package de.fhopf.elasticsearch.test; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.attribute.FileAttribute; import org.apache.commons.io.FileUtils; import org.elasticsearch.client.Client; import org.elasticsearch.common.settings.ImmutableSettings; import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; import org.junit.rules.ExternalResource; /** * A JUnit rule that creates an elasticsearch client that writes to a temp dir. * Inspired by http://cupofjava.de/blog/2012/11/27/embedded-elasticsearch-server-for-tests/ * @author Florian Hopf */ public class ElasticsearchTestNode extends ExternalResource { private Node node; private Path dataDirectory; @Override protected void before() throws Throwable { try { dataDirectory = Files.createTempDirectory("es-test", new FileAttribute<?> []{}); } catch (IOException ex) { throw new IllegalStateException(ex); } ImmutableSettings.Builder elasticsearchSettings = ImmutableSettings.settingsBuilder() .put("http.enabled", "false") .put("path.data", dataDirectory.toString()); node = NodeBuilder.nodeBuilder() .local(true) .settings(elasticsearchSettings.build()) .node(); } @Override protected void after() { node.close(); try { FileUtils.deleteDirectory(dataDirectory.toFile()); } catch (IOException ex) { throw new IllegalStateException(ex); } } public Client getClient() { return node.client(); } }