You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by du...@apache.org on 2019/09/16 19:57:24 UTC

[sling-org-apache-sling-testing-clients] 01/04: SLING-8710: IndexingClient should have configurable lanes

This is an automated email from the ASF dual-hosted git repository.

dulvac pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-testing-clients.git

commit a04c8139fd6a232f67583a019c71b9f66d63f96b
Author: Vikas Saurabh <vs...@adobe.com>
AuthorDate: Mon Sep 16 18:48:21 2019 +0530

    SLING-8710: IndexingClient should have configurable lanes
---
 .../testing/clients/indexing/IndexingClient.java   | 25 ++++++++++++++++++++++
 .../testing/clients/indexing/package-info.java     |  2 +-
 .../clients/indexing/IndexingClientTest.java       | 18 ++++++++++++++++
 3 files changed, 44 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/apache/sling/testing/clients/indexing/IndexingClient.java b/src/main/java/org/apache/sling/testing/clients/indexing/IndexingClient.java
index de1782b..62cf14d 100644
--- a/src/main/java/org/apache/sling/testing/clients/indexing/IndexingClient.java
+++ b/src/main/java/org/apache/sling/testing/clients/indexing/IndexingClient.java
@@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory;
 import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
 import java.util.List;
 import java.util.concurrent.Callable;
 import java.util.concurrent.TimeUnit;
@@ -58,6 +59,11 @@ import static org.apache.http.HttpStatus.SC_OK;
 public class IndexingClient extends SlingClient {
     private static final Logger LOG = LoggerFactory.getLogger(IndexingClient.class);
 
+    /** Configuration name in {@link SlingClientConfig} to be used to initialize pre-defined index lanes
+     *  Configured value, if any, is supposed to be an array of lane names
+     */
+    public static final String INDEX_LANES_CSV_CONFIG_NAME = "indexLanesCsv";
+
     /** Root of all the data created by this tool. Its presence marks that it was already installed */
     private static final String WAIT_FOR_ASYNC_INDEXING_ROOT = "/tmp/testing/waitForAsyncIndexing";
 
@@ -175,6 +181,11 @@ public class IndexingClient extends SlingClient {
      * @throws ClientException if the request fails
      */
     public List<String> getLaneNames() throws ClientException {
+        List<String> configuredLanes = getConfiguredLaneNames();
+        if (configuredLanes != null) {
+            return configuredLanes;
+        }
+
         try {
             Object asyncConfigs = adaptTo(OsgiConsoleClient.class)
                     .getConfiguration("org.apache.jackrabbit.oak.plugins.index.AsyncIndexerService")
@@ -196,6 +207,20 @@ public class IndexingClient extends SlingClient {
         }
     }
 
+    private List<String> getConfiguredLaneNames() {
+        String configLanesCsv = getValue(INDEX_LANES_CSV_CONFIG_NAME);
+        if (configLanesCsv == null) {
+            return null;
+        }
+
+        String[] configLanesArr = configLanesCsv.split(",");
+        for (int i = 0; i < configLanesArr.length; i++) {
+            configLanesArr[i] = configLanesArr[i].trim();
+        }
+
+        return Collections.unmodifiableList(Arrays.asList(configLanesArr));
+    }
+
     /**
      * <p>Blocks until all the async indices are up to date, to guarantee that the susequent queries return
      * all the results.</p>
diff --git a/src/main/java/org/apache/sling/testing/clients/indexing/package-info.java b/src/main/java/org/apache/sling/testing/clients/indexing/package-info.java
index 385a674..f6ae230 100644
--- a/src/main/java/org/apache/sling/testing/clients/indexing/package-info.java
+++ b/src/main/java/org/apache/sling/testing/clients/indexing/package-info.java
@@ -17,7 +17,7 @@
  * under the License.
  */
 
-@Version("0.1.0")
+@Version("0.2.0")
 package org.apache.sling.testing.clients.indexing;
 
 import org.osgi.annotation.versioning.Version;
diff --git a/src/test/java/org/apache/sling/testing/clients/indexing/IndexingClientTest.java b/src/test/java/org/apache/sling/testing/clients/indexing/IndexingClientTest.java
index 0fde485..f409204 100644
--- a/src/test/java/org/apache/sling/testing/clients/indexing/IndexingClientTest.java
+++ b/src/test/java/org/apache/sling/testing/clients/indexing/IndexingClientTest.java
@@ -27,6 +27,7 @@ import org.apache.http.protocol.HttpRequestHandler;
 import org.apache.sling.testing.clients.ClientException;
 import org.apache.sling.testing.clients.HttpServerRule;
 import org.apache.sling.testing.clients.query.servlet.QueryServlet;
+import org.junit.Assert;
 import org.junit.ClassRule;
 import org.junit.Test;
 import org.slf4j.Logger;
@@ -37,6 +38,7 @@ import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.concurrent.TimeoutException;
+import java.util.concurrent.atomic.AtomicInteger;
 
 public class IndexingClientTest {
     private static final Logger LOG = LoggerFactory.getLogger(IndexingClientTest.class);
@@ -44,6 +46,10 @@ public class IndexingClientTest {
     private static final String EXPLAIN_RESPONSE = "{\"plan\": \"random plan with testIndexingLane-async and testIndexingLane-fulltext-async\",\"time\": 1}";
     private static final String QUERY_RESPONSE = "{\"total\": 1234,\"time\": 1}";
 
+    private static final String PRE_DEFINED_INDEXING_LANES_CSV = "async, fulltext-async";
+
+    private static final AtomicInteger NUM_INDEXING_LANE_CONSOLE_CALLS = new AtomicInteger();
+
     @ClassRule
     public static HttpServerRule httpServer = new HttpServerRule() {
         HttpRequestHandler okHandler =  new HttpRequestHandler() {
@@ -124,6 +130,7 @@ public class IndexingClientTest {
                         @Override
                         public void handle(HttpRequest request, HttpResponse response, HttpContext context)
                                 throws HttpException, IOException {
+                            NUM_INDEXING_LANE_CONSOLE_CALLS.incrementAndGet();
                             response.setStatusCode(200);
                             response.setEntity(new StringEntity("{\"properties\":{" +
                                     "\"asyncConfigs\":{\"values\":[\"async:5\",\"fulltext-async:5\"]}}}"));
@@ -180,6 +187,7 @@ public class IndexingClientTest {
     private IndexingClient client;
 
     public IndexingClientTest() throws ClientException {
+        NUM_INDEXING_LANE_CONSOLE_CALLS.set(0);
         client = new IndexingClient(httpServer.getURI(), "admin", "admin");
         //client = new IndexingClient(java.net.URI.create("http://localhost:4502"), "admin", "admin");
     }
@@ -199,6 +207,16 @@ public class IndexingClientTest {
         client.waitForAsyncIndexing();
     }
 
+    @Test
+    public void testWaitForAsyncIndexing_ConfiguredLanes() throws ClientException, TimeoutException, InterruptedException {
+        client.getValues().put(IndexingClient.INDEX_LANES_CSV_CONFIG_NAME, PRE_DEFINED_INDEXING_LANES_CSV);
+
+        client.waitForAsyncIndexing();
+
+        Assert.assertEquals("Must not get indexing lanes from /system/console",
+                0, NUM_INDEXING_LANE_CONSOLE_CALLS.get());
+    }
+
     private static List<NameValuePair> extractParameters(HttpRequest request) {
         if (request instanceof HttpEntityEnclosingRequest) {
             HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity();