package io.searchbox.core;
import static org.junit.Assert.assertEquals;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONException;
import org.junit.Test;
import org.skyscreamer.jsonassert.JSONAssert;
import com.google.gson.Gson;
/**
* @author Dogukan Sonmez
*/
public class BulkTest {
@Test
public void emptyBulkOperation() {
executeAsserts(new Bulk.Builder().build());
}
@Test
public void bulkOperationWithIndex() throws JSONException {
Map source = new HashMap();
source.put("field", "value");
Bulk bulk = new Bulk.Builder()
.addAction(new Index.Builder(source).index("twitter").type("tweet").id("1").build())
.build();
executeAsserts(bulk);
String expectedData = "{\"index\":{\"_id\":\"1\",\"_index\":\"twitter\",\"_type\":\"tweet\"}}\n" +
"{\"field\":\"value\"}";
JSONAssert.assertEquals(expectedData, bulk.getData(new Gson()).toString(), false);
}
@Test
public void bulkOperationWithSingleDelete() throws JSONException {
Bulk bulk = new Bulk.Builder()
.addAction(new Delete.Builder("1").index("twitter").type("tweet").build())
.build();
executeAsserts(bulk);
String expectedData = "{\"delete\":{\"_id\":\"1\",\"_index\":\"twitter\",\"_type\":\"tweet\"}}\n";
JSONAssert.assertEquals(expectedData, bulk.getData(new Gson()).toString(), false);
}
@Test
public void bulkOperationWithMultipleIndex() throws JSONException {
Map source = new HashMap();
source.put("field", "value");
Bulk bulk = new Bulk.Builder()
.addAction(new Index.Builder(source).index("twitter").type("tweet").id("1").build())
.addAction(new Index.Builder(source).index("elasticsearch").type("jest").id("2").build())
.build();
executeAsserts(bulk);
String expectedData = "{\"index\":{\"_id\":\"1\",\"_index\":\"twitter\",\"_type\":\"tweet\"}}\n" +
"{\"field\":\"value\"}\n" +
"{\"index\":{\"_id\":\"2\",\"_index\":\"elasticsearch\",\"_type\":\"jest\"}}\n" +
"{\"field\":\"value\"}";
JSONAssert.assertEquals(expectedData, bulk.getData(new Gson()).toString(), false);
}
@Test
public void bulkOperationWithMultipleDelete() throws JSONException {
Bulk bulk = new Bulk.Builder()
.addAction(new Delete.Builder("1").index("twitter").type("tweet").build())
.addAction(new Delete.Builder("2").index("twitter").type("tweet").build())
.build();
executeAsserts(bulk);
String expectedData = "{\"delete\":{\"_id\":\"1\",\"_index\":\"twitter\",\"_type\":\"tweet\"}}\n" +
"{\"delete\":{\"_id\":\"2\",\"_index\":\"twitter\",\"_type\":\"tweet\"}}";
JSONAssert.assertEquals(expectedData, bulk.getData(new Gson()).toString(), false);
}
@Test
public void bulkOperationWithMultipleIndexAndDelete() throws JSONException {
Map source = new HashMap();
source.put("field", "value");
Bulk bulk = new Bulk.Builder()
.addAction(new Index.Builder(source).index("twitter").type("tweet").id("1").build())
.addAction(new Index.Builder(source).index("elasticsearch").type("jest").id("2").build())
.addAction(new Delete.Builder("1").index("twitter").type("tweet").build())
.addAction(new Delete.Builder("2").index("twitter").type("tweet").build())
.build();
executeAsserts(bulk);
String expectedData = "{\"index\":{\"_id\":\"1\",\"_index\":\"twitter\",\"_type\":\"tweet\"}}\n" +
"{\"field\":\"value\"}\n" +
"{\"index\":{\"_id\":\"2\",\"_index\":\"elasticsearch\",\"_type\":\"jest\"}}\n" +
"{\"field\":\"value\"}\n" +
"{\"delete\":{\"_id\":\"1\",\"_index\":\"twitter\",\"_type\":\"tweet\"}}\n" +
"{\"delete\":{\"_id\":\"2\",\"_index\":\"twitter\",\"_type\":\"tweet\"}}";
JSONAssert.assertEquals(expectedData, bulk.getData(new Gson()), false);
}
@Test
public void testUris() {
Bulk bulkWitIndex = new Bulk.Builder().defaultIndex("twitter").build();
assertEquals("twitter/_bulk", bulkWitIndex.getURI());
Bulk bulkWitIndexAndType = new Bulk.Builder().defaultIndex("twitter").defaultType("tweet").build();
assertEquals("twitter/tweet/_bulk", bulkWitIndexAndType.getURI());
}
private void executeAsserts(Bulk bulk) {
assertEquals("POST", bulk.getRestMethodName());
assertEquals("/_bulk", bulk.getURI());
}
}