elasticsearch-test, a framework that makes elasticsearch unit testing a breeze.
Here you will find simple Java annotations that simplifies unit testing with Elasticsearch
| elasticsearch-test | ElasticSearch |
|---|---|
| master (0.0.5) | 0.20.0.RC1 |
| 0.0.4 | 0.19.8 |
| 0.0.3 | 0.19.7 |
| 0.0.2 | 0.19.4 |
| 0.0.1 | 0.19.4 |
Add a new dependency in your Maven POM file:
<dependency>
<groupId>com.github.tlrx</groupId>
<artifactId>elasticsearch-test</artifactId>
<version>0.0.5</version>
</dependency>Define the JUnit Runner to use in your test classes with the annotation @RunWith(ElasticsearchRunner.class) :
package com.github.tlrx.elasticsearch.samples.core;
@RunWith(ElasticsearchRunner.class)
public class VersionTest {
...
}
The library provides the following annotations:
| Annotation | |
|---|---|
| @ElasticsearchNode | Instantiate an elasticsearch Node |
| @ElasticsearchClient | Instantiate an elasticsearch Client |
| @ElasticsearchAdminClient | Instantiate an elasticsearch AdminClient |
| @ElasticsearchTransportClient | Instantiate an elasticsearch TransportClient |
| @ElasticsearchIndexes | Used to create multiple index |
| @ElasticsearchIndex | Creates an index |
| @ElasticsearchMapping | Defines a mapping for an index and a document type |
| @ElasticsearchMappingField | Defines field properties in a mapping |
| @ElasticsearchSetting | Defines settings (at node or index level) |
| @ElasticsearchBulkRequest | Used to import data |
| @ElasticsearchMappingMultiField | Used to define a multi_field in the mapping properties |
| @ElasticsearchAnalysis | Used to define analysis settings of an ElasticsearchIndex |
| @ElasticsearchAnalyzer | Used to define an analyzer |
| @ElasticsearchFilter | Used to define an analysis filter |
Used to instantiate an elasticsearch Node in a unit test class.
Simple node has default name “elasticsearch-test-node” and is part of default cluster name “elasticsearch-test-cluster”. Node is local and can hold data.
package com.github.tlrx.elasticsearch.samples.core;
@RunWith(ElasticsearchRunner.class)
public class VersionTest {
@ElasticsearchNode
Node node;
@Test
public void test(){
// Use of node
}
}
Example with custom cluster and node names, and local set to true and data set to false:
@ElasticsearchNode(name = "node3", clusterName = "fourth-cluster-name", local = true, data = false)
Node node3;Example with custom settings:
@ElasticsearchNode(name = "node0", settings = {
@ElasticsearchSetting(name = "http.enabled", value = "false"),
@ElasticsearchSetting(name = "node.zone", value = "zone_one") })
Node node;
Used to instantiate an elasticsearch Client from a Node. The nodeName parameter of the annotation is used to retrieve the node from which the client will be instantiated. If no nodeName is defined, a default node will be instantiated.
Example with default node:
@ElasticsearchClient
Client client;Example with a predefined node:
@ElasticsearchNode(name = "node1") Node node1; @ElasticsearchClient(nodeName = "node1") Client client1;
Same as ElasticsearchClient but instantiates an AdminClient.
@ElasticsearchAdminClient AdminClient adminClient0; @ElasticsearchNode(name = "node1") Node node1; @ElasticsearchAdminClient(nodeName = "node1") AdminClient adminClient1;
Used to instantiate an elasticsearch TransportClient. By default the TransportClient will try to join localhost:9200.
Connect to a remote node with a TransportClient:
@ElasticsearchTransportClient(local = false, clusterName = "external",
hostnames = {"host1", "host2"},
ports= {9300, 9300})
Client client;
Used to creates one or many index before a test method. A node must be instantiated before using this annotation.
This example will create an index with default name test:
@ElasticsearchAdminClient
AdminClient adminClient;
@Test
@ElasticsearchIndex
public void test(){...}
This example will create an index “people”:
@Test
@ElasticsearchIndex(indexName = "people")
public void test(){
...
}
This example will create 2 indexs with settings:
@Test
@ElasticsearchIndexes(indexes = {
@ElasticsearchIndex(indexName = "library",
forceCreate = true,
settings = {
@ElasticsearchSetting(name = "number_of_shards", value = "2"),
@ElasticsearchSetting(name = "number_of_replicas", value = "1") }),
@ElasticsearchIndex(indexName = "people") })
public void test(){
...
}
This example will create an index with settings:
@Test
@Test
@ElasticsearchIndex(indexName = "documents", settingsFile = "path/to/settings.json")
public void test() {
...
}
@Test
@ElasticsearchIndex(indexName = "documents", forceCreate = true)
@ElasticsearchBulkRequest(dataFile = "com/tlrx/elasticsearch/test/annotations/documents/bulk1.json")
public void test() {
// Data from JSON file are indexed
}
Used to define the mappings and settings of an index
This example will create 2 indexs, “people” and “library”, with a mapping for document type “book”:
@ElasticsearchNode
Node node;@Test
@ElasticsearchIndexes(indexes = {
@ElasticsearchIndex(indexName = “people”, settings = {
@ElasticsearchSetting(name = “number_of_shards”, value = “2”),
@ElasticsearchSetting(name = “number_of_replicas”, value = “1”)
}),
@ElasticsearchIndex(indexName = “library”,
mappings = {
@ElasticsearchMapping(typeName = “book”,
properties = {
@ElasticsearchMappingField(name = “title”, store = Store.Yes, type = Types.String),
@ElasticsearchMappingField(name = “author”, store = Store.Yes, type = Types.String)
})
})
})
public void test(){
…
}
You can also look at the unit tests for some inspiration