Class IndexingClient
- java.lang.Object
-
- org.apache.sling.testing.clients.AbstractSlingClient
-
- org.apache.sling.testing.clients.SlingClient
-
- org.apache.sling.testing.clients.indexing.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 dateFor 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.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class org.apache.sling.testing.clients.SlingClient
SlingClient.Builder, SlingClient.InternalBuilder<T extends SlingClient>
-
-
Field Summary
Fields Modifier and Type Field Description static StringASYNC_INDEXER_CONFIG-
Fields inherited from class org.apache.sling.testing.clients.SlingClient
CLIENT_CONNECTION_TIMEOUT_PROP, DEFAULT_NODE_TYPE, SUDO_COOKIE_NAME
-
-
Constructor Summary
Constructors Constructor Description IndexingClient(URI url, String user, String password)Handy constructor easy to use in simple tests.IndexingClient(org.apache.http.impl.client.CloseableHttpClient http, SlingClientConfig config)Constructor used by Builders and adaptTo().
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description List<String>getLaneNames()Return the list of indexing lanes configured bysetLaneNames(java.lang.String...), if any.voidinstall()Creates the necessary custom indices in the repository, if not already present.voidsetLaneNames(String... laneNames)Set providedlaneNamesto config map.voiduninstall()Deprecated.Use #uninstallWithRetryvoiduninstallWithRetry()Retries cleaning all the data generated byinstall()andwaitForAsyncIndexing(long, long).voidwaitForAsyncIndexing()Same aswaitForAsyncIndexing(long timeout, long delay), but with default values fortimeout=1minanddelay=500ms.voidwaitForAsyncIndexing(long timeout, long delay)Blocks until all the async indices are up to date, to guarantee that the susequent queries return all the results.-
Methods inherited from class org.apache.sling.testing.clients.SlingClient
createFolder, createNode, createNodeRecursive, deletePath, doGetJson, endImpersonation, exists, getJsonNode, getJsonNode, getNodeNameFromPath, getParentPath, getUser, getUUId, getUUID, impersonate, importContent, importContent, importJson, move, setPropertiesString, setPropertyString, setPropertyStringArray, upload, waitExists, waitUntilExists
-
Methods inherited from class org.apache.sling.testing.clients.AbstractSlingClient
adaptTo, addValue, close, doDelete, doGet, doGet, doGet, doHead, doPatch, doPost, doPost, doPut, doRawRequest, doRequest, doStreamGet, doStreamPost, doStreamRequest, execute, execute, execute, execute, execute, execute, execute, execute, getClientId, getConnectionManager, getCookieStore, getCredentialsProvider, getParams, getPassword, getPath, getPath, getUrl, getUrl, getUrl, getValue, getValues, hasValue
-
-
-
-
Field Detail
-
ASYNC_INDEXER_CONFIG
public static final String ASYNC_INDEXER_CONFIG
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
IndexingClient
public IndexingClient(org.apache.http.impl.client.CloseableHttpClient http, SlingClientConfig config) throws ClientExceptionConstructor used by Builders and adaptTo(). Should never be called directly from the code.- Parameters:
http- the underlying HttpClient to be usedconfig- 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.InternalBuilderFor 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 authenticationpassword- password for basic authentication- Throws:
ClientException- never, kept for uniformity with the other constructors
-
-
Method Detail
-
setLaneNames
public void setLaneNames(String... laneNames)
Set providedlaneNamesto config map. This allows for subsequent initializations usingadaptTothat 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 bysetLaneNames(java.lang.String...), if any. Else, retrieves configured lanes on the instance- Returns:
- list of lane names
- Throws:
ClientException- if the request fails
-
waitForAsyncIndexing
public void waitForAsyncIndexing(long timeout, long delay) throws TimeoutException, InterruptedException, ClientExceptionBlocks 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 throwingTimeoutExceptiondelay- time to sleep between retries- Throws:
TimeoutException- if thetimeoutwas reached before all the indices were updatedInterruptedException- to mark this method as waitingClientException- if an error occurs during http requests/responses
-
waitForAsyncIndexing
public void waitForAsyncIndexing() throws InterruptedException, ClientException, TimeoutExceptionSame aswaitForAsyncIndexing(long timeout, long delay), but with default values fortimeout=1minanddelay=500ms.- Throws:
TimeoutException- if thetimeoutwas reached before all the indices were updatedInterruptedException- to mark this method as waitingClientException- if an error occurs during http requests/responses- See Also:
waitForAsyncIndexing(long, long)
-
install
public void install() throws ClientExceptionCreates 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 ClientExceptionDeprecated.Use #uninstallWithRetryCleans all the data generated by
install()andwaitForAsyncIndexing(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, InterruptedExceptionRetries cleaning all the data generated by
install()andwaitForAsyncIndexing(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 existsInterruptedException- if the retry operation was interrupted by the user
-
-