/* * ModeShape (http://www.modeshape.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.modeshape.jcr.index.elasticsearch.client; import javax.jcr.PropertyType; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.node.Node; import org.elasticsearch.node.NodeBuilder; import org.junit.After; import org.junit.AfterClass; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import org.modeshape.common.util.FileUtil; import org.modeshape.jcr.ExecutionContext; import org.modeshape.jcr.index.elasticsearch.EsIndexColumn; import org.modeshape.jcr.index.elasticsearch.EsIndexColumns; /** * * @author kulikov */ public class EsClientTest { private final static ExecutionContext context = new ExecutionContext(); private final static EsIndexColumn def1 = new EsIndexColumn(context, "field1", PropertyType.STRING); private final static EsIndexColumn def2 = new EsIndexColumn(context, "field2", PropertyType.DECIMAL); private final static EsIndexColumn def3 = new EsIndexColumn(context, "field3", PropertyType.STRING); private final static EsIndexColumn def4 = new EsIndexColumn(context, "mixinTypes", PropertyType.NAME); private final static EsIndexColumn def5 = new EsIndexColumn(context, "myfield", PropertyType.STRING); private final static EsIndexColumns columns = new EsIndexColumns(def1, def2, def3, def4, def5); private static Node esNode; private final EsClient client = new EsClient("localhost", 9200); private final static String INDEX_NAME = "test-index"; private final static String TYPE_NAME = "test-type"; public EsClientTest() { } @BeforeClass public static void setUpClass() { FileUtil.delete("target/data"); try { esNode = NodeBuilder.nodeBuilder() .local(false) .settings(Settings.settingsBuilder().put("path.home", "target/data")) .node(); } catch (Exception t) { } } @AfterClass public static void tearDownClass() throws InterruptedException { Thread.sleep(1000); esNode.close(); FileUtil.delete("target/data"); } @Before public void setUp() throws Exception { client.createIndex(INDEX_NAME, TYPE_NAME, columns.mappings("test-type")); client.flush(INDEX_NAME); } @After public void tearDown() throws Exception { client.deleteIndex(INDEX_NAME); } @Test public void testStoreAndGetDocument() throws Exception { EsRequest doc = new EsRequest(); doc.put("field1", "value1"); client.storeDocument(INDEX_NAME, TYPE_NAME, "1", doc); EsRequest doc1 = client.getDocument(INDEX_NAME, TYPE_NAME, "1"); assertEquals(doc.get("field1"), doc1.get("field1")); } @Test public void testUpdateDocument() throws Exception { EsRequest doc = new EsRequest(); doc.put("field1", "value1"); client.storeDocument(INDEX_NAME, TYPE_NAME, "1", doc); EsRequest doc1 = client.getDocument(INDEX_NAME, TYPE_NAME, "1"); doc1.put("field1", "VALUE1"); client.storeDocument(INDEX_NAME, TYPE_NAME, "1", doc1); EsRequest doc2 = client.getDocument(INDEX_NAME, TYPE_NAME, "1"); assertEquals("VALUE1", doc2.get("field1")); } @Test public void testStoreAndGetDocumentWithArrays() throws Exception { EsRequest doc = new EsRequest(); doc.put("field1", new String[]{"1", "2", "3"}); client.storeDocument(INDEX_NAME, TYPE_NAME, "1", doc); EsRequest doc1 = client.getDocument(INDEX_NAME, TYPE_NAME, "1"); assertTrue(java.util.Arrays.equals((Object[])doc.get("field1"), (Object[])doc1.get("field1"))); } @Test public void testUpdateDocumentWithArrays() throws Exception { EsRequest doc = new EsRequest(); doc.put("field1", new String[]{"1", "2", "3"}); client.storeDocument(INDEX_NAME, TYPE_NAME, "1", doc); EsRequest doc1 = client.getDocument(INDEX_NAME, TYPE_NAME, "1"); doc1.put("field1", new String[]{"1", "2", "3", "4"}); client.storeDocument(INDEX_NAME, TYPE_NAME, "1", doc1); EsRequest doc2 = client.getDocument(INDEX_NAME, TYPE_NAME, "1"); assertEquals(4, ((Object[])doc2.get("field1")).length); } @Test public void shouldReturnNull() throws Exception { EsRequest doc1 = client.getDocument(INDEX_NAME, TYPE_NAME, "1"); assertTrue(doc1 == null); } @Test public void testCount() throws Exception { EsRequest doc = new EsRequest(); doc.put("field1", "value1"); assertTrue(client.storeDocument(INDEX_NAME, TYPE_NAME, "10", doc)); Thread.sleep(1500); long count = client.count(INDEX_NAME, TYPE_NAME); assertEquals(1, count); } }