| /******************************************************************************** |
| * Copyright (c) 2015-2018 Contributors to the Eclipse Foundation |
| * |
| * See the NOTICE file(s) distributed with this work for additional |
| * information regarding copyright ownership. |
| * |
| * This program and the accompanying materials are made available under the |
| * terms of the Eclipse Public License v. 2.0 which is available at |
| * http://www.eclipse.org/legal/epl-2.0. |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| * |
| ********************************************************************************/ |
| |
| package org.eclipse.mdm.freetextindexer.boundary; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertFalse; |
| import static org.junit.Assert.assertTrue; |
| import static org.mockito.ArgumentMatchers.any; |
| import static org.mockito.Mockito.mock; |
| import static org.mockito.Mockito.when; |
| |
| import java.io.File; |
| import java.util.ArrayList; |
| import java.util.HashMap; |
| import java.util.List; |
| import java.util.Map; |
| import java.util.UUID; |
| import java.util.concurrent.ExecutionException; |
| |
| import org.eclipse.mdm.api.base.model.ContextComponent; |
| import org.eclipse.mdm.api.base.model.ContextRoot; |
| import org.eclipse.mdm.api.base.model.ContextType; |
| import org.eclipse.mdm.api.base.model.TestStep; |
| import org.eclipse.mdm.api.base.model.Value; |
| import org.eclipse.mdm.api.base.query.DataAccessException; |
| import org.eclipse.mdm.api.dflt.EntityManager; |
| import org.eclipse.mdm.freetextindexer.entities.MDMEntityResponse; |
| import org.elasticsearch.action.search.SearchRequestBuilder; |
| import org.elasticsearch.action.search.SearchResponse; |
| import org.elasticsearch.client.Client; |
| import org.elasticsearch.common.settings.Settings; |
| import org.elasticsearch.index.query.QueryBuilders; |
| import org.elasticsearch.node.Node; |
| import org.elasticsearch.node.NodeBuilder; |
| import org.elasticsearch.search.SearchHits; |
| import org.junit.AfterClass; |
| import org.junit.Before; |
| import org.junit.BeforeClass; |
| import org.junit.Ignore; |
| import org.junit.Test; |
| |
| public class ElasticsearchBoundaryTest { |
| |
| private static Node elasticSearchNode; |
| private static ElasticsearchBoundary es; |
| |
| private static Client client; |
| |
| @BeforeClass |
| public static void beforeClass() throws Exception { |
| File tempDir = File.createTempFile("elasticsearch-temp", Long.toString(System.nanoTime())); |
| tempDir.delete(); |
| tempDir.mkdir(); |
| |
| String clusterName = UUID.randomUUID().toString(); |
| elasticSearchNode = NodeBuilder.nodeBuilder().local(true).clusterName(clusterName) |
| .settings(Settings.settingsBuilder() |
| .put("path.home", File.createTempFile("elasticsearch", "").getParent()) |
| .put("index.number_of_shards", 1).put("index.number_of_replicas", 0).put("http.port", 9301)) |
| .node(); |
| elasticSearchNode.start(); |
| client = elasticSearchNode.client(); |
| |
| es = new ElasticsearchBoundary(); |
| es.esAddress = "http://localhost:9301/"; |
| } |
| |
| @AfterClass |
| public static void afterClass() { |
| elasticSearchNode.close(); |
| } |
| |
| @Before |
| public void setup() { |
| es.active = "true"; |
| } |
| |
| @Test |
| public void indexSuccessfullyCreated_CaseDoesNotMatter() throws InterruptedException, ExecutionException { |
| es.createIndex("BlA"); |
| assertTrue(es.hasIndex("bla")); |
| } |
| |
| @Test |
| public void indexSuccessfullyCreated_OtherIndizesNot() throws InterruptedException, ExecutionException { |
| es.createIndex("someIndex"); |
| assertFalse(es.hasIndex("asdf")); |
| } |
| |
| @Ignore |
| @Test |
| public void deletedDoc_isGone() throws InterruptedException, DataAccessException { |
| TestStep ts = mock(TestStep.class); |
| when(ts.getID()).thenReturn("1"); |
| when(ts.getSourceName()).thenReturn("mdmdiff"); |
| EntityManager manager = mockManager(); |
| |
| MDMEntityResponse document = MDMEntityResponse.build(TestStep.class, ts, manager); |
| es.index(document); |
| |
| es.delete("mdmdiff", "TestStep", "1"); |
| |
| assertEquals(0, searchForASDF("mdmdiff").totalHits()); |
| } |
| |
| @Ignore |
| @Test |
| public void docIsIndexed_isFound() throws DataAccessException, InterruptedException { |
| TestStep ts = mock(TestStep.class); |
| when(ts.getSourceName()).thenReturn("mdm"); |
| EntityManager manager = mockManager(); |
| |
| MDMEntityResponse document = MDMEntityResponse.build(TestStep.class, ts, manager); |
| es.index(document); |
| |
| assertEquals(1, searchForASDF("mdm").totalHits()); |
| } |
| |
| @Test(expected = IllegalStateException.class) |
| public void indexCreatedTwice_ThrowsError() { |
| es.createIndex("someRandomIndex"); |
| es.createIndex("someRandomIndex"); |
| } |
| |
| @Test |
| public void indexDeactivated_NoIndexingDone() { |
| es.active = "false"; |
| |
| es.createIndex("someSource"); |
| assertFalse(es.hasIndex("someSource")); |
| } |
| |
| private SearchHits searchForASDF(String index) throws InterruptedException { |
| Thread.sleep(1000); // wait until cluster is healthy again |
| |
| SearchRequestBuilder request = client.prepareSearch(index) |
| .setQuery(QueryBuilders.simpleQueryStringQuery("asdf").field("_all").field("name^2").lenient(true)); |
| SearchResponse getResponse = request.execute().actionGet(); |
| SearchHits hits = getResponse.getHits(); |
| return hits; |
| } |
| |
| private EntityManager mockManager() throws DataAccessException { |
| EntityManager manager = mock(EntityManager.class); |
| ContextRoot root = mock(ContextRoot.class); |
| ContextComponent comp = mock(ContextComponent.class); |
| Value value = mock(Value.class); |
| |
| Map<ContextType, ContextRoot> map = new HashMap<>(); |
| List<ContextComponent> comps = new ArrayList<>(); |
| Map<String, Value> values = new HashMap<>(); |
| values.put("name", value); |
| comps.add(comp); |
| |
| when(value.toString()).thenReturn("asdf"); |
| when(comp.getValues()).thenReturn(values); |
| when(root.getContextComponents()).thenReturn(comps); |
| map.put(ContextType.UNITUNDERTEST, root); |
| |
| when(manager.loadContexts(any(TestStep.class), any())).thenReturn(map); |
| |
| return manager; |
| } |
| |
| } |