package com.lordofthejars.nosqlunit.elasticsearch.integration;
import static com.lordofthejars.nosqlunit.elasticsearch.ManagedElasticsearch.ManagedElasticsearchRuleBuilder.newManagedElasticsearchRule;
import static org.hamcrest.collection.IsMapContaining.hasEntry;
import static org.junit.Assert.assertThat;
import static org.hamcrest.CoreMatchers.is;
import java.io.ByteArrayInputStream;
import java.util.Map;
import org.elasticsearch.action.deletebyquery.DeleteByQueryRequestBuilder;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilders;
import org.junit.After;
import org.junit.ClassRule;
import org.junit.Test;
import com.lordofthejars.nosqlunit.elasticsearch.ElasticsearchOperation;
import com.lordofthejars.nosqlunit.elasticsearch.ManagedElasticsearch;
public class WhenManagedElasticsearchOperationsAreRequired {
private static final String ELASTICSEARCH_DATA = "{\n" +
" \"documents\":[\n" +
" {\n" +
" \"document\":[\n" +
" {\n" +
" \"index\":{\n" +
" \"indexName\":\"tweeter\",\n" +
" \"indexType\":\"tweet\",\n" +
" \"indexId\":\"1\"\n" +
" }\n" +
" },\n" +
" {\n" +
" \"data\":{\n" +
" \"name\":\"a\",\n" +
" \"msg\":\"b\"\n" +
" }\n" +
" }\n" +
" ]\n" +
" }\n" +
" ]\n" +
"}";
@ClassRule
public static ManagedElasticsearch managedElasticsearch = newManagedElasticsearchRule().elasticsearchPath("/usr/local/Cellar/elasticsearch/1.3.2/").build();
@After
public void removeIndexes() {
Client client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
DeleteByQueryRequestBuilder deleteByQueryRequestBuilder = new DeleteByQueryRequestBuilder(client);
deleteByQueryRequestBuilder.setQuery(QueryBuilders.matchAllQuery());
deleteByQueryRequestBuilder.execute().actionGet();
client.admin().indices().prepareRefresh().execute().actionGet();
client.close();
}
@Test
public void insert_operation_should_index_all_dataset() {
Client client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
ElasticsearchOperation elasticsearchOperation = new ElasticsearchOperation(client);
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
GetResponse document = client.prepareGet("tweeter", "tweet", "1").execute().actionGet();
Map<String, Object> documentSource = document.getSource();
//Strange a cast to Object
assertThat(documentSource, hasEntry("name", (Object)"a"));
assertThat(documentSource, hasEntry("msg", (Object)"b"));
client.close();
}
@Test
public void delete_operation_should_remove_all_Indexes() {
Client client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
ElasticsearchOperation elasticsearchOperation = new ElasticsearchOperation(client);
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
elasticsearchOperation.deleteAll();
GetResponse document = client.prepareGet("tweeter", "tweet", "1").execute().actionGet();
assertThat(document.isSourceEmpty(), is(true));
client.close();
}
@Test
public void databaseIs_operation_should_compare_all_Indexes() {
Client client = new TransportClient().addTransportAddress(new InetSocketTransportAddress("localhost", 9300));
ElasticsearchOperation elasticsearchOperation = new ElasticsearchOperation(client);
elasticsearchOperation.insert(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
boolean isEqual = elasticsearchOperation.databaseIs(new ByteArrayInputStream(ELASTICSEARCH_DATA.getBytes()));
assertThat(isEqual, is(true));
client.close();
}
}