package io.searchbox.core; import java.io.IOException; import java.util.concurrent.CountDownLatch; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import org.elasticsearch.action.DocWriteResponse; import org.elasticsearch.action.index.IndexRequest; import org.elasticsearch.action.index.IndexResponse; import org.elasticsearch.test.ESIntegTestCase; import org.json.JSONException; import org.junit.Before; import org.junit.Test; import org.skyscreamer.jsonassert.JSONAssert; import io.searchbox.annotations.JestId; import io.searchbox.client.JestResultHandler; import io.searchbox.common.AbstractIntegrationTest; /** * @author Dogukan Sonmez * @author cihat keser */ @ESIntegTestCase.ClusterScope(scope = ESIntegTestCase.Scope.SUITE, numDataNodes = 1) public class GetIntegrationTest extends AbstractIntegrationTest { final static String INDEX = "twitter"; final static String TYPE = "tweet"; @Before public void setup() throws Exception { IndexResponse indexResponse = client().index(new IndexRequest( INDEX, TYPE, "1") .source("{\"user\":\"tweety\"}")) .actionGet(); assertTrue(indexResponse.getResult().equals(DocWriteResponse.Result.CREATED)); } @Test public void getWithSpecialCharacterInDocId() throws IOException, JSONException { final String documentId = "asd/qwe"; IndexResponse indexResponse = client().index(new IndexRequest( INDEX, TYPE, documentId) .source("{\"user\":\"tweety\"}")) .actionGet(); assertNotNull(indexResponse); DocumentResult result = client.execute(new Get.Builder(INDEX, documentId) .type(TYPE) .build() ); assertTrue(result.getErrorMessage(), result.isSucceeded()); assertEquals(INDEX, result.getIndex()); assertEquals(TYPE, result.getType()); assertEquals(documentId, result.getId()); JSONAssert.assertEquals("{\"user\":\"tweety\"}", result.getSourceAsString(), false); } @Test public void getAsClass() throws IOException, JSONException { String id = "900"; String message = "checkout my lunch guys!"; Tweet expectedTweet = new Tweet(); expectedTweet.setUserHash(id); expectedTweet.setMessage(message); DocumentResult result = client.execute(new Index.Builder(expectedTweet).index(INDEX).type(TYPE).build()); assertTrue(result.getErrorMessage(), result.isSucceeded()); Get get = new Get.Builder(INDEX, id).type(TYPE).build(); result = client.execute(get); assertTrue(result.getErrorMessage(), result.isSucceeded()); Tweet actualTweet = result.getSourceAsObject(Tweet.class); assertEquals(expectedTweet.getMessage(), actualTweet.getMessage()); assertEquals(expectedTweet.getUserHash(), actualTweet.getUserHash()); JSONAssert.assertEquals("{\"userHash\":\"900\",\"message\":\"checkout my lunch guys!\"}", result.getSourceAsString(), false); } @Test public void get() throws IOException { Get get = new Get.Builder(INDEX, "1").type(TYPE).build(); DocumentResult result = client.execute(get); assertTrue(result.getErrorMessage(), result.isSucceeded()); } @Test public void getAsynchronously() throws InterruptedException, ExecutionException, IOException { final CountDownLatch completionChecker = new CountDownLatch(1); client.executeAsync(new Get.Builder(INDEX, "1").type(TYPE).build(), new JestResultHandler<DocumentResult>() { @Override public void completed(DocumentResult result) { assertTrue(result.getErrorMessage(), result.isSucceeded()); assertEquals(INDEX, result.getIndex()); assertEquals(TYPE, result.getType()); assertEquals("1", result.getId()); completionChecker.countDown(); } @Override public void failed(Exception ex) { fail("failed execution of asynchronous get call"); } }); boolean finishedAsync = completionChecker.await(2, TimeUnit.SECONDS); if (!finishedAsync) { fail("Execution took to long to complete"); } } @Test public void getWithType() throws Exception { final String id = "testid1"; final String type = "article"; TestArticleModel article = new TestArticleModel(); article.setId(id); article.setName("Jest"); Index index = new Index.Builder(article).index("articles").type(type).refresh(true).build(); DocumentResult indexResult = client.execute(index); assertTrue(indexResult.getErrorMessage(), indexResult.isSucceeded()); DocumentResult result = client.execute(new Get.Builder("articles", "testid1").type(type).build()); assertEquals(type, result.getType()); TestArticleModel articleResult = result.getSourceAsObject(TestArticleModel.class); assertEquals(id, articleResult.getId()); } @Test public void getWithoutType() throws Exception { final String id = "testid1"; final String type = "article"; TestArticleModel article = new TestArticleModel(); article.setId(id); article.setName("Jest"); Index index = new Index.Builder(article).index("articles").type(type).refresh(true).build(); DocumentResult indexResult = client.execute(index); assertTrue(indexResult.getErrorMessage(), indexResult.isSucceeded()); DocumentResult result = client.execute(new Get.Builder("articles", "testid1").build()); assertEquals(type, result.getType()); TestArticleModel articleResult = result.getSourceAsObject(TestArticleModel.class); assertEquals(id, articleResult.getId()); } class Tweet { @JestId String userHash; String message; public String getUserHash() { return userHash; } public void setUserHash(String userHash) { this.userHash = userHash; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } }