Class IndexingClient

All Implemented Interfaces:
Closeable, AutoCloseable, org.apache.http.client.HttpClient

public class IndexingClient extends SlingClient

Interface to the oak indexing mechanism

Exposes waitForAsyncIndexing(long, long) for waiting all the indexing lanes to finish indexing and to guarantee all the indices are up to date

For using waitForAsyncIndexing(long, long), the user must have access rights to:

  • read/write in /tmp
  • install bundles via OsgiConsoleClient (if the query servlet was not previously installed)

In short, it requires administrative rights.

  • Field Details

  • Constructor Details

    • IndexingClient

      public IndexingClient(org.apache.http.impl.client.CloseableHttpClient http, SlingClientConfig config) throws ClientException
      Constructor used by Builders and adaptTo(). Should never be called directly from the code.
      Parameters:
      http - the underlying HttpClient to be used
      config - sling specific configs
      Throws:
      ClientException - if the client could not be created
    • IndexingClient

      public IndexingClient(URI url, String user, String password) throws ClientException

      Handy constructor easy to use in simple tests. Creates a client that uses basic authentication.

      For constructing clients with complex configurations, use a SlingClient.InternalBuilder

      For constructing clients with the same configuration, but a different class, use AbstractSlingClient.adaptTo(Class)

      Parameters:
      url - url of the server (including context path)
      user - username for basic authentication
      password - password for basic authentication
      Throws:
      ClientException - never, kept for uniformity with the other constructors
  • Method Details

    • setLaneNames

      public void setLaneNames(String... laneNames)
      Set provided laneNames to config map. This allows for subsequent initializations using adaptTo that shard the same config map to not require further configuration of lane names
      Parameters:
      laneNames - lane names to work on
    • getLaneNames

      public List<String> getLaneNames() throws ClientException
      Return the list of indexing lanes configured by setLaneNames(java.lang.String...), if any. Else, retrieves configured lanes on the instance
      Returns:
      list of lane names
      Throws:
      ClientException - in case of problems
    • waitForAsyncIndexing

      public void waitForAsyncIndexing(long timeout, long delay) throws TimeoutException, InterruptedException, ClientException

      Blocks until all the async indices are up to date, to guarantee that the susequent queries return all the results.

      Works by creating a custom index for each lane, adding specific content to be indexed by these indices and then repeatedly searching this content until everything is found (indexed). All the content is created under "/tmp/testing/waitForAsyncIndexing"

      Indices are automatically created, but only if not already present. This method does not delete the indices at the end to avoid generating too much noise on the instance. To completely clean any traces, the user must call uninstall()

      Requires administrative rights to install bundles and to create nodes under "/tmp/testing/waitForAsyncIndexing"

      Parameters:
      timeout - max time to wait, in milliseconds, before throwing TimeoutException
      delay - time to sleep between retries
      Throws:
      TimeoutException - if the timeout was reached before all the indices were updated
      InterruptedException - to mark this method as waiting
      ClientException - if an error occurs during http requests/responses
    • waitForAsyncIndexing

      public void waitForAsyncIndexing() throws InterruptedException, ClientException, TimeoutException
      Same as waitForAsyncIndexing(long timeout, long delay), but with default values for timeout=1min and delay=500ms.
      Throws:
      TimeoutException - if the timeout was reached before all the indices were updated
      InterruptedException - to mark this method as waiting
      ClientException - if an error occurs during http requests/responses
      See Also:
    • install

      public void install() throws ClientException

      Creates the necessary custom indices in the repository, if not already present.

      It is automatically called in each wait, there's no need to explicitly invoke it from the test.

      Throws:
      ClientException - if the installation fails
    • uninstall

      public void uninstall() throws ClientException
      Deprecated.
      Use #uninstallWithRetry

      Cleans all the data generated by install() and waitForAsyncIndexing(long, long).

      User must manually call this if needed, as opposed to install(), which is called automatically.

      Throws:
      ClientException - if the cleanup failed
    • uninstallWithRetry

      public void uninstallWithRetry() throws TimeoutException, InterruptedException

      Retries cleaning all the data generated by install() and waitForAsyncIndexing(long, long).

      User must manually call this if needed, as opposed to install(), which is called automatically.

      Throws:
      TimeoutException - if retry operation times out and the path still exists
      InterruptedException - if the retry operation was interrupted by the user