How to write a test for Elasticsearch custom plugin?
To write tests for you plugin you can use Elasticsearch Cluster Runner. For reference check how MinHash Plugin wrote test.
UPDATE:
I've changed CustomParserPluginTest
class to use Elasticsearch Cluster Runner:
import static org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner.newConfigs;import java.util.Map;import junit.framework.TestCase;import org.codelibs.elasticsearch.runner.ElasticsearchClusterRunner;import org.elasticsearch.action.get.GetResponse;import org.elasticsearch.action.index.IndexResponse;import org.elasticsearch.client.Client;import org.elasticsearch.common.bytes.BytesArray;import org.elasticsearch.common.settings.ImmutableSettings;import org.elasticsearch.common.settings.ImmutableSettings.Builder;import org.elasticsearch.common.xcontent.XContentBuilder;import org.elasticsearch.common.xcontent.XContentFactory;import org.elasticsearch.index.get.GetField;import org.junit.Assert;import org.elasticsearch.action.search.SearchResponse;import static org.hamcrest.core.Is.is;public class CustomParserPluginTest extends TestCase { private ElasticsearchClusterRunner runner; @Override protected void setUp() throws Exception { // create runner instance runner = new ElasticsearchClusterRunner(); // create ES nodes runner.onBuild(new ElasticsearchClusterRunner.Builder() { @Override public void build(final int number, final Builder settingsBuilder) { } }).build(newConfigs().ramIndexStore().numOfNode(1)); // wait for yellow status runner.ensureYellow(); } @Override protected void tearDown() throws Exception { // close runner runner.close(); // delete all files runner.clean(); } public void test_jsonParsing() throws Exception { final String index = "test_index"; runner.createIndex(index, ImmutableSettings.builder().build()); runner.ensureYellow(index); final SearchResponse test = runner.client().prepareSearch(index).setSource(addQuery()).execute().actionGet(); } private String addQuery() { return "{\"match_all\":{\"boost\":1.2}}"; }}
I've created es-plugin.properties
(pluginrootdirectory\src\main\resources) file with following content which will force elasticsearch instance to load plugin:
plugin=CustomQueryParserPlugin
When you will run the this test you will see in the output that the newly created insance of elasticsearch loaded the plugin.
[2015-04-29 19:22:10,783][INFO ][org.elasticsearch.node ] [Node 1] version[1.5 .0], pid[34360], build[5448160/2015-03-23T14:30:58Z] [2015-04-29 19:22:10,784][INFO ][org.elasticsearch.node ] [Node 1] initializin g ... [2015-04-29 19:22:10,795][INFO ][org.elasticsearch.plugins] [Node 1] loaded [custom_query], sites [] [2015-04-29 19:22:13,342][INFO ][org.elasticsearch.node ] [Node 1] initialized
[2015-04-29 19:22:13,342][INFO ][org.elasticsearch.node ] [Node 1] starting .. .
Hope this helps.