Comment écrire un test pour Elasticsearch plugin personnalisé?

j'ai créer sur mesure Elasticsearch plugin. Maintenant, je veux écrire un test pour ce plugin. Mes attentes étaient-que je pouvais courir intégré Elasticsearch exemple, le configurer correctement et ensuite faire quelques tests (indexer certains documents, puis rechercher)

le problème est que je n'ai pas pu configurer mon plugin correctement

personnaliser le code du module est parsing JSON de la requête et de mettre en place certains objets pour plus tard d'utilisation:

public class CustomQueryParserPlugin extends AbstractPlugin {
    public static final String PLUGIN_NAME = "custom_query";
    private final Settings settings;

    @Inject
    public CustomQueryParserPlugin (Settings settings) {
        this.settings = settings;
    }

    @Override
    public String name() {
        return PLUGIN_NAME;
    }

    @Override
    public String description() {
        return "custom plugin";
    }

    public void onModule(IndicesQueriesModule module) {
        module.addQuery(new CustomQueryParser(settings));
    }
}

Test code:

public class CustomParserPluginTest extends ElasticsearchSingleNodeTest {

    private static Node newNode() {
        final Settings settings = ImmutableSettings.builder()
                .put(ClusterName.SETTING, nodeName())
                .put("node.name", nodeName())
                .put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
                .put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 0)
                .put(EsExecutors.PROCESSORS, 1) // limit the number of threads created
                .put("http.enabled", false)
                .put("plugin.types", CustomParserPlugin.class.getName())
                .put("path.plugins", pathToPlugin)
                .put("index.store.type", "ram")
                .put("config.ignore_system_properties", true) // make sure we get what we set :)
                .put("gateway.type", "none").build();
        Node build = NodeBuilder.nodeBuilder().local(true).data(true).settings(
                settings).build();
        build.start();
        assertThat(DiscoveryNode.localNode(build.settings()), is(true));
        return build;
    }


    @Test
    public void jsonParsing() throws URISyntaxException {
        final Client client = newNode().client();
        final SearchResponse test = client.prepareSearch("test-index").setSource(addQuery()).execute().actionGet();
    }

    private String addQuery() {
         return "{"match_all":{"boost":1.2}}"
    }

j'ai essayé plusieurs valeurs pour pathToPlugin - mais rien ne semble bien fonctionner, parce que JSON query me donne toujours une exception:

QueryParsingException[[test-index] No query registered for [custom_query]];

toute la documentation que j'ai pu trouver concernait l'installation de plugins et leur mise à l'essai sur une installation locale D'Elasticsearch.

Ce que je fais de mal ici? Est-il de la documentation ou des exemples de tests comme ça?

UPD. Voici un repo avec code extrait de CustomQueryParserPlugin -https://github.com/MysterionRise/es-custom-parser

peut être dans la section initialiser dans le test que je dois créer dans l'index de mémoire?

25
demandé sur Mysterion 2015-01-29 20:49:13
la source

1 ответов

Pour écrire des tests pour vous plugin, vous pouvez utiliser Elasticsearch Cluster Runner. De renvoi de vérifier comment MinHash Plugin test écrit.

mise à jour:

j'ai changé CustomParserPluginTest classe à utiliser 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}}";
    }
}

j'ai créé es-plugin.properties(pluginrootdirectory\src\main\resources) fichier avec le contenu suivant qui forcera l'instance d'elasticsearch à charger le plugin:

plugin=CustomQueryParserPlugin

Quand vous exécuterez le test que vous verrez dans la sortie que l'assurance nouvellement créée d'elasticsearch a chargé le plugin.

[2015-04-29 19:22:10,783][INFO ] [org.elasticsearch.noeud] [noeud 1] version [1.5 .0], pid[34360], de construction[5448160/2015-03-23T14:30:58Z] [2015-04-29 19:22:10, 784] [INFO] [org.elasticsearch.noeud] [noeud 1] initializin g ... [2015-04-29 19:22: 10,795] [INFO ] [org.elasticsearch.plugins] [Nœud 1] chargé [custom_query], sites de [] [2015-04-29 19:22:13,342] [INFO] [org.elasticsearch.noeud] [noeud 1] initialisé

[2015-04-29 19:22:13,342][INFO ] [org.elasticsearch.noeud] [noeud 1] commencer. . .

J'espère que cela vous aidera.

5
répondu Rob 2015-04-29 20:37:45
la source

Autres questions sur