diff --git a/commons-api/pom.xml b/commons-api/pom.xml
index f4d0d43355..203c87ab1e 100644
--- a/commons-api/pom.xml
+++ b/commons-api/pom.xml
@@ -29,7 +29,7 @@
jar
eXo PLF:: Commons - API
- 0.12
+ 0.01
diff --git a/commons-component-upgrade/src/main/java/org/exoplatform/commons/upgrade/UpgradeProductPlugin.java b/commons-component-upgrade/src/main/java/org/exoplatform/commons/upgrade/UpgradeProductPlugin.java
index b15877621d..53223c55fd 100644
--- a/commons-component-upgrade/src/main/java/org/exoplatform/commons/upgrade/UpgradeProductPlugin.java
+++ b/commons-component-upgrade/src/main/java/org/exoplatform/commons/upgrade/UpgradeProductPlugin.java
@@ -1,6 +1,6 @@
package org.exoplatform.commons.upgrade;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.exoplatform.commons.api.settings.SettingService;
import org.exoplatform.commons.api.settings.SettingValue;
diff --git a/commons-component-upgrade/src/main/java/org/exoplatform/commons/upgrade/UpgradeProductService.java b/commons-component-upgrade/src/main/java/org/exoplatform/commons/upgrade/UpgradeProductService.java
index dec2f465d1..ec5d5deaab 100644
--- a/commons-component-upgrade/src/main/java/org/exoplatform/commons/upgrade/UpgradeProductService.java
+++ b/commons-component-upgrade/src/main/java/org/exoplatform/commons/upgrade/UpgradeProductService.java
@@ -6,7 +6,7 @@
import jakarta.servlet.ServletContext;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.exoplatform.commons.api.settings.SettingService;
import org.exoplatform.commons.api.settings.SettingValue;
diff --git a/commons-component-upgrade/src/test/java/org/exoplatform/commons/upgrade/UpgradeProductTest.java b/commons-component-upgrade/src/test/java/org/exoplatform/commons/upgrade/UpgradeProductTest.java
index 28364bf5b2..15b3435486 100644
--- a/commons-component-upgrade/src/test/java/org/exoplatform/commons/upgrade/UpgradeProductTest.java
+++ b/commons-component-upgrade/src/test/java/org/exoplatform/commons/upgrade/UpgradeProductTest.java
@@ -19,7 +19,7 @@
import java.util.Properties;
import java.util.concurrent.atomic.AtomicLong;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.exoplatform.commons.api.settings.SettingService;
import org.exoplatform.commons.info.MissingProductInformationException;
import org.exoplatform.commons.info.ProductInformations;
diff --git a/commons-extension-webapp/pom.xml b/commons-extension-webapp/pom.xml
index c3f4d5cf12..ddea017413 100644
--- a/commons-extension-webapp/pom.xml
+++ b/commons-extension-webapp/pom.xml
@@ -32,10 +32,6 @@
commons-extension
-
- org.apache.maven.plugins
- maven-war-plugin
-
org.codehaus.mojo
build-helper-maven-plugin
diff --git a/commons-search/pom.xml b/commons-search/pom.xml
index ae72af4450..0d383645c9 100644
--- a/commons-search/pom.xml
+++ b/commons-search/pom.xml
@@ -29,7 +29,7 @@
jar
eXo PLF:: Commons - Commons Search
- 0.47
+ 0.33
1.3
diff --git a/commons-search/src/main/java/org/exoplatform/commons/search/domain/Document.java b/commons-search/src/main/java/org/exoplatform/commons/search/domain/Document.java
index 5551e510f6..139e044cab 100644
--- a/commons-search/src/main/java/org/exoplatform/commons/search/domain/Document.java
+++ b/commons-search/src/main/java/org/exoplatform/commons/search/domain/Document.java
@@ -20,7 +20,7 @@
package org.exoplatform.commons.search.domain;
import org.apache.commons.codec.binary.Base64;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
diff --git a/commons-search/src/main/java/org/exoplatform/commons/search/domain/IndexingOperation.java b/commons-search/src/main/java/org/exoplatform/commons/search/domain/IndexingOperation.java
index 918688e80f..b695b6849c 100644
--- a/commons-search/src/main/java/org/exoplatform/commons/search/domain/IndexingOperation.java
+++ b/commons-search/src/main/java/org/exoplatform/commons/search/domain/IndexingOperation.java
@@ -18,7 +18,7 @@
import org.exoplatform.commons.api.persistence.ExoEntity;
-import javax.persistence.*;
+import jakarta.persistence.*;
import java.io.Serializable;
import java.util.Date;
diff --git a/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticClient.java b/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticClient.java
index c13f8c82a2..0a52b582d7 100644
--- a/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticClient.java
+++ b/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticClient.java
@@ -17,26 +17,28 @@
package org.exoplatform.commons.search.es.client;
import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-
-import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.lang.StringUtils;
-import org.apache.http.HttpResponse;
-import org.apache.http.auth.AuthScope;
-import org.apache.http.auth.UsernamePasswordCredentials;
-import org.apache.http.client.CredentialsProvider;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.*;
-import org.apache.http.conn.HttpClientConnectionManager;
-import org.apache.http.entity.ContentType;
-import org.apache.http.entity.StringEntity;
-import org.apache.http.impl.DefaultConnectionReuseStrategy;
-import org.apache.http.impl.client.BasicCredentialsProvider;
-import org.apache.http.impl.client.HttpClientBuilder;
-import org.apache.http.impl.client.HttpClients;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hc.client5.http.auth.AuthScope;
+import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
+import org.apache.hc.client5.http.classic.HttpClient;
+import org.apache.hc.client5.http.classic.methods.HttpDelete;
+import org.apache.hc.client5.http.classic.methods.HttpGet;
+import org.apache.hc.client5.http.classic.methods.HttpHead;
+import org.apache.hc.client5.http.classic.methods.HttpPost;
+import org.apache.hc.client5.http.classic.methods.HttpPut;
+import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
+import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
+import org.apache.hc.client5.http.io.HttpClientConnectionManager;
+import org.apache.hc.core5.http.ClassicHttpResponse;
+import org.apache.hc.core5.http.ContentType;
+import org.apache.hc.core5.http.HttpEntity;
+import org.apache.hc.core5.http.ParseException;
+import org.apache.hc.core5.http.impl.DefaultConnectionReuseStrategy;
+import org.apache.hc.core5.http.io.entity.EntityUtils;
+import org.apache.hc.core5.http.io.entity.StringEntity;
+
+import org.exoplatform.commons.search.es.ElasticSearchException;
import org.exoplatform.services.log.ExoLogger;
import org.exoplatform.services.log.Log;
@@ -72,7 +74,7 @@ protected ElasticResponse sendHttpPostRequest(String url, String content) {
if(StringUtils.isNotBlank(content)) {
httpTypeRequest.setEntity(new StringEntity(content, ContentType.APPLICATION_JSON));
}
- response = handleHttpResponse(client.execute(httpTypeRequest));
+ response = client.execute(httpTypeRequest, this::handleHttpResponse);
LOG.debug("Sent request to ES:\n Method = POST \nURI = {} \nContent = {}", url, content);
logResultDependingOnStatusCode(url, response);
} catch (IOException e) {
@@ -88,7 +90,7 @@ protected ElasticResponse sendHttpPutRequest(String url, String content) {
if(StringUtils.isNotBlank(content)) {
httpTypeRequest.setEntity(new StringEntity(content, ContentType.APPLICATION_JSON));
}
- response = handleHttpResponse(client.execute(httpTypeRequest));
+ response = client.execute(httpTypeRequest, this::handleHttpResponse);
LOG.debug("Sent request to ES:\n Method = PUT \nURI = '{}' \nContent = '{}'", url, content);
logResultDependingOnStatusCode(url, response);
} catch (IOException e) {
@@ -102,7 +104,7 @@ protected ElasticResponse sendHttpDeleteRequest(String url) {
try {
HttpDelete httpDeleteRequest = new HttpDelete(url);
- response = handleHttpResponse(client.execute(httpDeleteRequest));
+ response = client.execute(httpDeleteRequest, this::handleHttpResponse);
LOG.debug("Sent request to ES:\n Method = DELETE \nURI = {}", url);
logResultDependingOnStatusCode(url, response);
} catch (IOException e) {
@@ -116,7 +118,7 @@ protected ElasticResponse sendHttpGetRequest(String url) {
try {
HttpGet httpGetRequest = new HttpGet(url);
- response = handleHttpResponse(client.execute(httpGetRequest));
+ response = client.execute(httpGetRequest, this::handleHttpResponse);
LOG.debug("Sent request to ES:\n Method = GET \nURI = {}", url);
} catch (IOException e) {
throw new ElasticClientException(e);
@@ -130,7 +132,7 @@ protected ElasticResponse sendHttpHeadRequest(String url) {
try {
HttpHead httpHeadRequest = new HttpHead(url);
- response = handleHttpResponse(client.execute(httpHeadRequest));
+ response = client.execute(httpHeadRequest, this::handleHttpResponse);
LOG.debug("Sent request to ES:\n Method = HEAD \nURI = {}", url);
} catch (IOException e) {
throw new ElasticClientException(e);
@@ -145,16 +147,16 @@ protected void initHttpClient() {
protected HttpClient getHttpClient() {
// Check if Basic Authentication need to be used
HttpClientConnectionManager clientConnectionManager = getClientConnectionManager();
- HttpClientBuilder httpClientBuilder = HttpClients.custom()
+ HttpClientBuilder httpClientBuilder = HttpClientBuilder
+ .create().disableAutomaticRetries()
.setConnectionManager(clientConnectionManager)
- .setConnectionReuseStrategy(new DefaultConnectionReuseStrategy())
- .setMaxConnPerRoute(getMaxConnections());
+ .setConnectionReuseStrategy(new DefaultConnectionReuseStrategy());
if (StringUtils.isNotBlank(getEsUsernameProperty())) {
- CredentialsProvider credsProvider = new BasicCredentialsProvider();
+ BasicCredentialsProvider credsProvider = new BasicCredentialsProvider();
credsProvider.setCredentials(
- new AuthScope(AuthScope.ANY_HOST, AuthScope.ANY_PORT),
+ new AuthScope(null, -1),
new UsernamePasswordCredentials(getEsUsernameProperty(),
- getEsPasswordProperty()));
+ getEsPasswordProperty().toCharArray()));
HttpClient httpClient = httpClientBuilder
.setDefaultCredentialsProvider(credsProvider)
@@ -174,26 +176,15 @@ protected HttpClient getHttpClient() {
*
* @param httpResponse The Http Response to handle
*/
- private ElasticResponse handleHttpResponse(HttpResponse httpResponse) throws IOException {
- String response = null;
- InputStream is = null;
-
- if (httpResponse.getEntity()!=null) {
- try {
- is = httpResponse.getEntity().getContent();
- response = IOUtils.toString(is, StandardCharsets.UTF_8);
- } finally {
- if (is != null) {
- is.close();
- }
- }
- }
-
- int statusCode = httpResponse.getStatusLine().getStatusCode();
- if (statusCode == HttpStatus.SC_UNAUTHORIZED) {
- throw new ElasticClientAuthenticationException();
+ private ElasticResponse handleHttpResponse(ClassicHttpResponse httpResponse) throws IOException {
+ final HttpEntity entity = httpResponse.getEntity();
+ int statusCode = httpResponse.getCode();
+ try {
+ return new ElasticResponse(EntityUtils.toString(entity), statusCode);
+ } catch (ParseException e) {
+ throw new ElasticSearchException("Error while parsing http response with code " + statusCode + " and response " + entity,
+ e);
}
- return new ElasticResponse(response, statusCode);
}
private void logResultDependingOnStatusCode(String url, ElasticResponse response) {
diff --git a/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticIndexingAuditTrail.java b/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticIndexingAuditTrail.java
index fb821520fb..07d3240469 100644
--- a/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticIndexingAuditTrail.java
+++ b/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticIndexingAuditTrail.java
@@ -1,6 +1,6 @@
package org.exoplatform.commons.search.es.client;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.exoplatform.commons.utils.PropertyManager;
import org.exoplatform.services.log.ExoLogger;
diff --git a/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticIndexingClient.java b/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticIndexingClient.java
index b6475e0a6b..9f13192045 100644
--- a/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticIndexingClient.java
+++ b/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticIndexingClient.java
@@ -16,13 +16,17 @@
*/
package org.exoplatform.commons.search.es.client;
-import java.util.*;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Set;
import org.apache.commons.httpclient.HttpStatus;
-import org.apache.commons.lang.StringUtils;
-import org.apache.http.conn.HttpClientConnectionManager;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.json.simple.*;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.apache.hc.client5.http.io.HttpClientConnectionManager;
+import org.json.simple.JSONArray;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
diff --git a/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticSearchingClient.java b/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticSearchingClient.java
index 71336c2c58..ec89cc169b 100644
--- a/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticSearchingClient.java
+++ b/commons-search/src/main/java/org/exoplatform/commons/search/es/client/ElasticSearchingClient.java
@@ -2,9 +2,9 @@
import java.util.Map;
-import org.apache.commons.lang.StringUtils;
-import org.apache.http.conn.HttpClientConnectionManager;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
+import org.apache.hc.client5.http.io.HttpClientConnectionManager;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
diff --git a/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/ElasticIndexingOperationProcessor.java b/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/ElasticIndexingOperationProcessor.java
index 54e71b19e4..b8b4919da0 100644
--- a/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/ElasticIndexingOperationProcessor.java
+++ b/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/ElasticIndexingOperationProcessor.java
@@ -20,7 +20,7 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.picocontainer.Startable;
import org.exoplatform.commons.api.persistence.ExoTransactional;
diff --git a/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/ElasticIndexingServiceConnector.java b/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/ElasticIndexingServiceConnector.java
index ae14611539..8a55f621a4 100644
--- a/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/ElasticIndexingServiceConnector.java
+++ b/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/ElasticIndexingServiceConnector.java
@@ -18,7 +18,7 @@
import java.io.InputStream;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.json.simple.JSONObject;
import org.exoplatform.commons.search.index.IndexingServiceConnector;
diff --git a/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/QueueIndexingService.java b/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/QueueIndexingService.java
index 133f936a05..f3cffe698b 100644
--- a/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/QueueIndexingService.java
+++ b/commons-search/src/main/java/org/exoplatform/commons/search/index/impl/QueueIndexingService.java
@@ -2,7 +2,7 @@
import java.util.List;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.exoplatform.commons.search.dao.IndexingOperationDAO;
import org.exoplatform.commons.search.domain.IndexingOperation;
diff --git a/commons-search/src/test/java/org/exoplatform/commons/search/es/client/ElasticIndexingClientTest.java b/commons-search/src/test/java/org/exoplatform/commons/search/es/client/ElasticIndexingClientTest.java
deleted file mode 100644
index 1716dba681..0000000000
--- a/commons-search/src/test/java/org/exoplatform/commons/search/es/client/ElasticIndexingClientTest.java
+++ /dev/null
@@ -1,277 +0,0 @@
-/*
-* Copyright (C) 2003-2015 eXo Platform SAS.
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Lesser General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public License
-* along with this program. If not, see http://www.gnu.org/licenses/ .
-*/
-package org.exoplatform.commons.search.es.client;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.mockito.Mockito.*;
-
-import java.io.IOException;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.StatusLine;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.*;
-
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.*;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.runners.MockitoJUnitRunner;
-
-import org.exoplatform.commons.utils.PropertyManager;
-import org.mockito.stubbing.Answer;
-
-/**
- * Created by The eXo Platform SAS
- * Author : Thibault Clement
- * tclement@exoplatform.com
- * 9/1/15
- */
-@RunWith(MockitoJUnitRunner.class)
-public class ElasticIndexingClientTest {
- private ElasticIndexingClient elasticIndexingClient;
- @Mock
- private HttpClient httpClient;
- @Mock
- private ElasticIndexingAuditTrail auditTrail;
- @Captor
- private ArgumentCaptor httpPutRequestCaptor;
- @Captor
- private ArgumentCaptor httpPostRequestCaptor;
- @Captor
- private ArgumentCaptor httpDeleteRequestCaptor;
- @Captor
- private ArgumentCaptor httpGetRequestCaptor;
-
-
- @Before
- public void initMock() throws IOException {
- MockitoAnnotations.initMocks(this);
- PropertyManager.setProperty("exo.es.index.server.url", "http://127.0.0.1:9200");
- elasticIndexingClient = new ElasticIndexingClient(auditTrail);
- elasticIndexingClient.client = httpClient;
- elasticIndexingClient.resetMaxConnections();
- }
-
- @Test
- public void sendCreateIndexRequest_IfCreateNewIndex_requestShouldBeSentToElastic() throws IOException {
- //Given
- initClientMock(404, "Not Found", 200, "Success");
- //When
- elasticIndexingClient.sendCreateIndexRequest("index", "fakeSettings", "fakeMappings");
- //Then
- verify(httpClient, times(2)).execute(any(HttpRequestBase.class));
- }
-
- @Test
- public void sendCUDRequest_IfCUDOperation_bulkRequestShouldBeSentToElastic() throws IOException {
- //Given
- String response = "{\"took\":15," +
- "\"errors\":true," +
- "\"items\":[" +
- "{\"index\":{\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\",\"_version\":3,\"status\":200}}" +
- "]}";
- initClientMock(999, "", 200, response);
- //When
- elasticIndexingClient.sendCUDRequest("FakeBulkRequest");
- //Then
- verify(httpClient).execute(httpPostRequestCaptor.capture());
- assertEquals("http://127.0.0.1:9200/_bulk", httpPostRequestCaptor.getValue().getURI().toString());
- assertEquals("FakeBulkRequest", IOUtils.toString(httpPostRequestCaptor.getValue().getEntity().getContent()));
-
- }
-
- @Test
- public void sendBulkRequest_forEveryDocument_callAuditTrail() throws IOException {
- //Given
- String response = "{\"took\":15," +
- "\"errors\":true," +
- "\"items\":[" +
- "{\"index\":{\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\",\"_version\":3,\"status\":200}}," +
- "{\"delete\":{\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"2\",\"_version\":1,\"status\":404,\"found\":false}}," +
- "{\"create\":{\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"3\",\"status\":409,\"error\":{\"reason\":\"DocumentAlreadyExistsException[[test][4] [type1][3]: document already exists]\"}}}," +
- "{\"update\":{\"_index\":\"index1\",\"_type\":\"type1\",\"_id\":\"1\",\"status\":404,\"error\":{\"reason\":\"DocumentMissingException[[index1][-1] [type1][1]: document missing]\"}}}" +
- "]}";
- initClientMock(999, "", 200, response);
- when(auditTrail.isFullLogEnabled()).thenReturn(true);
- //When
- elasticIndexingClient.sendCUDRequest("myBulk");
- //Then
- verify(auditTrail).isFullLogEnabled();
- verify(auditTrail).logAcceptedBulkOperation(eq("index"), eq("1"), eq("test"), eq(HttpStatus.SC_OK), isNull(String.class), anyLong());
- verify(auditTrail).logRejectedDocumentBulkOperation(eq("delete"), eq("2"), eq("test"), eq(HttpStatus.SC_NOT_FOUND), isNull(String.class), anyLong());
- verify(auditTrail).logRejectedDocumentBulkOperation(eq("create"), eq("3"), eq("test"), eq(HttpStatus.SC_CONFLICT), eq("DocumentAlreadyExistsException[[test][4] [type1][3]: document already exists]"), anyLong());
- verify(auditTrail).logRejectedDocumentBulkOperation(eq("update"), eq("1"), eq("index1"), eq(HttpStatus.SC_NOT_FOUND), eq("DocumentMissingException[[index1][-1] [type1][1]: document missing]"), anyLong());
- verifyNoMoreInteractions(auditTrail);
- }
-
- @Test
- public void createIndex_callAuditTrail() throws IOException {
- //Given
- String response = "{\"error\":\"IndexAlreadyExistsException[[profile] already exists]\",\"status\":400}";
- initClientMock(404, "Not Found", 400, response);
- //When
- elasticIndexingClient.sendCreateIndexRequest("profile", "mySettings", "someMappings");
- //Then
- verify(auditTrail).audit(eq("create_index"), isNull(String.class), eq("profile"), eq(HttpStatus.SC_BAD_REQUEST), eq("{\"error\":\"IndexAlreadyExistsException[[profile] already exists]\",\"status\":400}"), anyLong());
- verifyNoMoreInteractions(auditTrail);
- }
-
- @Test
- public void sendBulkRequest_fullLogNotEnabled_auditTrailNotCalled() throws IOException {
- //Given
- String response = "{\"took\":15," +
- "\"errors\":false," +
- "\"items\":[" +
- "{\"index\":{\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\",\"_version\":3,\"status\":200}}" +
- "]}";
- initClientMock(999, "", 200, response);
- when(auditTrail.isFullLogEnabled()).thenReturn(false);
- //When
- elasticIndexingClient.sendCUDRequest("myBulk");
- //Then
- verify(auditTrail).isFullLogEnabled();
- verifyNoMoreInteractions(auditTrail);
- }
-
- @Test(expected = ElasticClientAuthenticationException.class)
- public void createType_notAuthenticated_throwsException() throws IOException {
- //Given
- initClientMock(999, "", 401, "Authentication Required");
- //When
- elasticIndexingClient.sendCUDRequest("myBulk");
- //Then
- fail("ElasticClientAuthenticationException expected");
- }
-
- @Test
- public void createIndex_indexAlreadyExists_noRequestIsSentToES() throws IOException {
- //Given
- initClientMock(200, "{my existing Mapping}", 999, "");
- //When
- elasticIndexingClient.sendCreateIndexRequest("myIndex", "mySettings", "someMappings");
- //Then
- verify(httpClient, times(1)).execute(httpGetRequestCaptor.capture());
- assertEquals("http://127.0.0.1:9200/myIndex", httpGetRequestCaptor.getValue().getURI().toString());
- verifyNoMoreInteractions(httpClient);
- }
-
- @Test
- public void createIndex_indexNotExists_requestIsSentToES() throws IOException {
- //Given
- initClientMock(404, ElasticIndexingClient.EMPTY_JSON, 200, "Success");
- //When
- elasticIndexingClient.sendCreateIndexRequest("myIndex", "mySettings", "someMappings");
- //Then
- verify(httpClient, times(2)).execute(httpPutRequestCaptor.capture());
- assertEquals("http://127.0.0.1:9200/myIndex", httpPutRequestCaptor.getValue().getURI().toString());
- assertEquals("{\"settings\": mySettings, \"mappings\": someMappings}", IOUtils.toString(httpPutRequestCaptor.getValue().getEntity().getContent()));
- verifyNoMoreInteractions(httpClient);
- }
-
- @Test
- public void shouldUseDefaultHttpMaxConnectionsPerRouteWhenNoConfiguration() {
- //Given
- PropertyManager.setProperty("exo.es.index.http.connections.max", "");
-
- //When
- PoolingHttpClientConnectionManager clientConnectionManager = (PoolingHttpClientConnectionManager) elasticIndexingClient.getClientConnectionManager();
-
- //Then
- assertEquals(ElasticClient.DEFAULT_MAX_HTTP_POOL_CONNECTIONS, clientConnectionManager.getDefaultMaxPerRoute());
- }
-
- @Test
- public void shouldUseDefaultHttpMaxConnectionsPerRouteWhenConfiguredValueIsNotANumber() {
- //Given
- PropertyManager.setProperty("exo.es.index.http.connections.max", "string");
-
- //When
- PoolingHttpClientConnectionManager clientConnectionManager = (PoolingHttpClientConnectionManager) elasticIndexingClient.getClientConnectionManager();
-
- //Then
- assertEquals(ElasticClient.DEFAULT_MAX_HTTP_POOL_CONNECTIONS, clientConnectionManager.getDefaultMaxPerRoute());
-
- PropertyManager.setProperty("exo.es.index.http.connections.max", "");
- }
-
- @Test
- public void shouldUseDefaultHttpMaxConnectionsPerRouteWhenConfiguredValueIsNotAPositiveNumber() {
- //Given
- PropertyManager.setProperty("exo.es.index.http.connections.max", "0");
-
- //When
- PoolingHttpClientConnectionManager clientConnectionManager = (PoolingHttpClientConnectionManager) elasticIndexingClient.getClientConnectionManager();
-
- //Then
- assertEquals(ElasticClient.DEFAULT_MAX_HTTP_POOL_CONNECTIONS, clientConnectionManager.getDefaultMaxPerRoute());
-
- PropertyManager.setProperty("exo.es.index.http.connections.max", "");
- }
-
- @Test
- public void shouldUseConfiguredHttpMaxConnectionsPerRouteWhenConfiguredValueIsAPositiveNumber() {
- //Given
- PropertyManager.setProperty("exo.es.index.http.connections.max", "10");
-
- //When
- PoolingHttpClientConnectionManager clientConnectionManager = (PoolingHttpClientConnectionManager) elasticIndexingClient.getClientConnectionManager();
-
- //Then
- assertEquals(10, clientConnectionManager.getDefaultMaxPerRoute());
-
- PropertyManager.setProperty("exo.es.index.http.connections.max", "");
- }
-
-
- private void initClientMock(Integer getOrHeadStatus, String getOrHeadContent, Integer postStatus, String postContent) throws IOException {
- // Get request
- final HttpResponse getOrHeadResponse = mock(HttpResponse.class);
- StatusLine getOrHeadStatusLine = mock(StatusLine.class);
- HttpEntity getOrHeadHttpEntity = mock(HttpEntity.class);
- when(getOrHeadResponse.getStatusLine()).thenReturn(getOrHeadStatusLine);
- when(getOrHeadStatusLine.getStatusCode()).thenReturn(getOrHeadStatus);
- when(getOrHeadResponse.getEntity()).thenReturn(getOrHeadHttpEntity);
- when(getOrHeadHttpEntity.getContent()).thenReturn(IOUtils.toInputStream(getOrHeadContent, "UTF-8"));
- // Post request
- final HttpResponse postResponse = mock(HttpResponse.class);
- StatusLine postStatusLine = mock(StatusLine.class);
- HttpEntity postHttpEntity = mock(HttpEntity.class);
- when(postResponse.getStatusLine()).thenReturn(postStatusLine);
- when(postStatusLine.getStatusCode()).thenReturn(postStatus);
- when(postResponse.getEntity()).thenReturn(postHttpEntity);
- when(postHttpEntity.getContent()).thenReturn(IOUtils.toInputStream(postContent, "UTF-8"));
- // Mock setting
- when(httpClient.execute(any(HttpRequestBase.class))).thenAnswer(new Answer() {
- @Override
- public HttpResponse answer(InvocationOnMock invocation) throws Throwable {
- Object[] args = invocation.getArguments();
- if (args[0] instanceof HttpGet || args[0] instanceof HttpHead) {
- return getOrHeadResponse;
- }
- return postResponse;
- }
- });
- }
-}
-
diff --git a/commons-search/src/test/java/org/exoplatform/commons/search/es/client/ElasticSearchingClientTest.java b/commons-search/src/test/java/org/exoplatform/commons/search/es/client/ElasticSearchingClientTest.java
deleted file mode 100644
index 1d395e7389..0000000000
--- a/commons-search/src/test/java/org/exoplatform/commons/search/es/client/ElasticSearchingClientTest.java
+++ /dev/null
@@ -1,249 +0,0 @@
-/*
-* Copyright (C) 2003-2015 eXo Platform SAS.
-*
-* This program is free software: you can redistribute it and/or modify
-* it under the terms of the GNU Lesser General Public License as published by
-* the Free Software Foundation, either version 3 of the License, or
-* (at your option) any later version.
-*
-* This program is distributed in the hope that it will be useful,
-* but WITHOUT ANY WARRANTY; without even the implied warranty of
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-* GNU Lesser General Public License for more details.
-*
-* You should have received a copy of the GNU Lesser General Public License
-* along with this program. If not, see http://www.gnu.org/licenses/ .
-*/
-package org.exoplatform.commons.search.es.client;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.StatusLine;
-import org.apache.http.client.HttpClient;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
-import org.exoplatform.commons.search.es.client.ElasticIndexingAuditTrail;
-import org.exoplatform.commons.search.es.client.ElasticSearchingClient;
-import org.exoplatform.commons.utils.PropertyManager;
-
-import org.junit.*;
-import org.junit.runner.RunWith;
-import org.mockito.ArgumentCaptor;
-import org.mockito.Captor;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.junit.MockitoJUnit;
-import org.mockito.junit.MockitoRule;
-import org.mockito.quality.Strictness;
-import org.mockito.runners.MockitoJUnitRunner;
-import org.mockito.stubbing.Answer;
-
-import java.io.IOException;
-
-import static org.junit.Assert.assertEquals;
-import static org.mockito.Mockito.*;
-
-/**
- * Created by The eXo Platform SAS
- * Author : Thibault Clement
- * tclement@exoplatform.com
- * 9/1/15
- */
-@RunWith(MockitoJUnitRunner.class)
-public class ElasticSearchingClientTest {
- private ElasticSearchingClient elasticSearchingClient;
- @Mock
- private HttpClient httpClient;
- @Mock
- private ElasticIndexingAuditTrail auditTrail;
- @Captor
- private ArgumentCaptor httpPostRequestCaptor;
-
- @Before
- public void initMock() throws IOException {
- MockitoAnnotations.initMocks(this);
- PropertyManager.setProperty("exo.es.search.server.url", "http://127.0.0.1:9200");
- elasticSearchingClient = new ElasticSearchingClient(auditTrail);
- elasticSearchingClient.client = httpClient;
- elasticSearchingClient.resetMaxConnections();
- }
-
-
-
- @Test
- public void sendSearchRequest_successRequest_callAuditTrailWithSuccessMessage() throws IOException {
- //Given
- String response = "{\n" +
- " \"took\":7,\n" +
- " \"timed_out\":false,\n" +
- " \"_shards\":{\"total\":5,\"successful\":5,\"failed\":0},\n" +
- " \"hits\":{\n" +
- " \"total\":2,\n" +
- " \"max_score\":1.0,\n" +
- " \"hits\":[\n" +
- " {\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\",\"_score\":1.0,\"_source\":{ \"field1\" : \"value1\" }},\n" +
- " {\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"3\",\"_score\":1.0,\"_source\":{ \"field1\" : \"value3\" }}\n" +
- " ]\n" +
- " }\n" +
- "}";
- initClientMock(200, response);
- when(auditTrail.isFullLogEnabled()).thenReturn(true);
- //When
- elasticSearchingClient.sendRequest("mySearch", "test");
- //Then
- verify(auditTrail).isFullLogEnabled();
- verify(auditTrail).logAcceptedSearchOperation(eq("search_type"), eq("test"), eq(HttpStatus.SC_OK), eq(response), anyLong());
- verifyNoMoreInteractions(auditTrail);
- }
-
- @Test
- public void sendSearchRequest_errorRequest_callAuditTrailWithErrorMessage() throws IOException {
- //Given
- String response = "{\n" +
- " \"took\":7,\n" +
- " \"timed_out\":false,\n" +
- " \"_shards\":{\"total\":5,\"successful\":5,\"failed\":0},\n" +
- " \"hits\":{\n" +
- " \"total\":2,\n" +
- " \"max_score\":1.0,\n" +
- " \"hits\":[\n" +
- " {\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\",\"_score\":1.0,\"_source\":{ \"field1\" : \"value1\" }},\n" +
- " {\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"3\",\"_score\":1.0,\"_source\":{ \"field1\" : \"value3\" }}\n" +
- " ]\n" +
- " }\n" +
- "}";
- initClientMock(404, response);
- lenient().when(auditTrail.isFullLogEnabled()).thenReturn(true);
- //When
- elasticSearchingClient.sendRequest("mySearch", "test");
- //Then
- verify(auditTrail).logRejectedSearchOperation(eq("search_type"), eq("test"), eq(HttpStatus.SC_NOT_FOUND), anyString(), anyLong());
- verifyNoMoreInteractions(auditTrail);
- }
-
- @Test
- public void sendSearchRequest_fullLogNotEnabledAndSuccessRequest_auditTrailNotCalled() throws IOException {
- //Given
- String response = "{\n" +
- " \"took\":7,\n" +
- " \"timed_out\":false,\n" +
- " \"_shards\":{\"total\":5,\"successful\":5,\"failed\":0},\n" +
- " \"hits\":{\n" +
- " \"total\":2,\n" +
- " \"max_score\":1.0,\n" +
- " \"hits\":[\n" +
- " {\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\",\"_score\":1.0,\"_source\":{ \"field1\" : \"value1\" }},\n" +
- " {\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"3\",\"_score\":1.0,\"_source\":{ \"field1\" : \"value3\" }}\n" +
- " ]\n" +
- " }\n" +
- "}";
- initClientMock(200, response);
- when(auditTrail.isFullLogEnabled()).thenReturn(false);
- //When
- elasticSearchingClient.sendRequest("mySearch", "test");
- //Then
- verify(auditTrail).isFullLogEnabled();
- verifyNoMoreInteractions(auditTrail);
- }
-
- @Test
- public void sendSearchRequest_fullLogNotEnabledAndErrorRequest_auditTrailCalled() throws IOException {
- //Given
- String response = "{\n" +
- " \"took\":7,\n" +
- " \"timed_out\":false,\n" +
- " \"_shards\":{\"total\":5,\"successful\":5,\"failed\":0},\n" +
- " \"hits\":{\n" +
- " \"total\":2,\n" +
- " \"max_score\":1.0,\n" +
- " \"hits\":[\n" +
- " {\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"1\",\"_score\":1.0,\"_source\":{ \"field1\" : \"value1\" }},\n" +
- " {\"_index\":\"test\",\"_type\":\"type1\",\"_id\":\"3\",\"_score\":1.0,\"_source\":{ \"field1\" : \"value3\" }}\n" +
- " ]\n" +
- " }\n" +
- "}";
- initClientMock(404, response);
- lenient().when(auditTrail.isFullLogEnabled()).thenReturn(false);
- //When
- elasticSearchingClient.sendRequest("mySearch", "test");
- //Then
- verify(auditTrail).logRejectedSearchOperation(eq("search_type"), eq("test"), eq(HttpStatus.SC_NOT_FOUND), anyString(), anyLong());
- verifyNoMoreInteractions(auditTrail);
- }
-
- @Test
- public void shouldUseDefaultHttpMaxConnectionsPerRouteWhenNoConfiguration() {
- //Given
- PropertyManager.setProperty("exo.es.search.http.connections.max", "");
-
- //When
- PoolingHttpClientConnectionManager clientConnectionManager = (PoolingHttpClientConnectionManager) elasticSearchingClient.getClientConnectionManager();
-
- //Then
- assertEquals(ElasticClient.DEFAULT_MAX_HTTP_POOL_CONNECTIONS, clientConnectionManager.getDefaultMaxPerRoute());
- }
-
- @Test
- public void shouldUseDefaultHttpMaxConnectionsPerRouteWhenConfiguredValueIsNotANumber() {
- //Given
- PropertyManager.setProperty("exo.es.search.http.connections.max", "string");
-
- //When
- PoolingHttpClientConnectionManager clientConnectionManager = (PoolingHttpClientConnectionManager) elasticSearchingClient.getClientConnectionManager();
-
- //Then
- assertEquals(ElasticClient.DEFAULT_MAX_HTTP_POOL_CONNECTIONS, clientConnectionManager.getDefaultMaxPerRoute());
-
- PropertyManager.setProperty("exo.es.search.http.connections.max", "");
- }
-
- @Test
- public void shouldUseDefaultHttpMaxConnectionsPerRouteWhenConfiguredValueIsNotAPositiveNumber() {
- //Given
- PropertyManager.setProperty("exo.es.search.http.connections.max", "0");
-
- //When
- PoolingHttpClientConnectionManager clientConnectionManager = (PoolingHttpClientConnectionManager) elasticSearchingClient.getClientConnectionManager();
-
- //Then
- assertEquals(ElasticClient.DEFAULT_MAX_HTTP_POOL_CONNECTIONS, clientConnectionManager.getDefaultMaxPerRoute());
-
- PropertyManager.setProperty("exo.es.search.http.connections.max", "");
- }
-
- @Test
- public void shouldUseConfiguredHttpMaxConnectionsPerRouteWhenConfiguredValueIsAPositiveNumber() {
- //Given
- PropertyManager.setProperty("exo.es.search.http.connections.max", "10");
-
- //When
- PoolingHttpClientConnectionManager clientConnectionManager = (PoolingHttpClientConnectionManager) elasticSearchingClient.getClientConnectionManager();
-
- //Then
- assertEquals(10, clientConnectionManager.getDefaultMaxPerRoute());
-
- PropertyManager.setProperty("exo.es.search.http.connections.max", "");
- }
-
- private void initClientMock(Integer postStatus, String postContent) throws IOException {
- // Post request
- final HttpResponse postResponse = mock(HttpResponse.class);
- StatusLine postStatusLine = mock(StatusLine.class);
- HttpEntity postHttpEntity = mock(HttpEntity.class);
- when(postResponse.getStatusLine()).thenReturn(postStatusLine);
- when(postStatusLine.getStatusCode()).thenReturn(postStatus);
- when(postResponse.getEntity()).thenReturn(postHttpEntity);
- when(postHttpEntity.getContent()).thenReturn(IOUtils.toInputStream(postContent, "UTF-8"));
- // Mock setting
- when(httpClient.execute(any(HttpPost.class))).thenAnswer(new Answer() {
- @Override
- public HttpResponse answer(InvocationOnMock invocation) throws Throwable {
- return postResponse;
- }
- });
- }
-}
-
diff --git a/commons-testing/pom.xml b/commons-testing/pom.xml
index 11ad8c522a..9db29eaf82 100644
--- a/commons-testing/pom.xml
+++ b/commons-testing/pom.xml
@@ -29,7 +29,7 @@
jar
eXo PLF:: Commons - Testing
- 0.28
+ 0.31
diff --git a/commons-testing/src/main/java/org/exoplatform/commons/testing/mock/SimpleMockOrganizationService.java b/commons-testing/src/main/java/org/exoplatform/commons/testing/mock/SimpleMockOrganizationService.java
index 88cd6ef824..b7853f4c69 100644
--- a/commons-testing/src/main/java/org/exoplatform/commons/testing/mock/SimpleMockOrganizationService.java
+++ b/commons-testing/src/main/java/org/exoplatform/commons/testing/mock/SimpleMockOrganizationService.java
@@ -12,7 +12,7 @@
import java.util.Iterator;
import java.util.Set;
-import org.apache.commons.lang.StringUtils;
+import org.apache.commons.lang3.StringUtils;
import org.exoplatform.commons.utils.ListAccess;
import org.exoplatform.commons.utils.ListAccessImpl;
import org.exoplatform.commons.utils.ObjectPageList;