You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ss...@apache.org on 2016/09/06 19:58:29 UTC
svn commit: r1759492 - in /sling/trunk/testing/junit:
core/src/main/java/org/apache/sling/junit/rules/ServerSideTeleporter.java
teleporter/src/main/java/org/apache/sling/testing/teleporter/client/ClientSideTeleporter.java
Author: sseifert
Date: Tue Sep 6 19:58:29 2016
New Revision: 1759492
URL: http://svn.apache.org/viewvc?rev=1759492&view=rev
Log:
SLING-6031 Teleporter.getService() should wait for required services
Modified:
sling/trunk/testing/junit/core/src/main/java/org/apache/sling/junit/rules/ServerSideTeleporter.java
sling/trunk/testing/junit/teleporter/src/main/java/org/apache/sling/testing/teleporter/client/ClientSideTeleporter.java
Modified: sling/trunk/testing/junit/core/src/main/java/org/apache/sling/junit/rules/ServerSideTeleporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/junit/core/src/main/java/org/apache/sling/junit/rules/ServerSideTeleporter.java?rev=1759492&r1=1759491&r2=1759492&view=diff
==============================================================================
--- sling/trunk/testing/junit/core/src/main/java/org/apache/sling/junit/rules/ServerSideTeleporter.java (original)
+++ sling/trunk/testing/junit/core/src/main/java/org/apache/sling/junit/rules/ServerSideTeleporter.java Tue Sep 6 19:58:29 2016
@@ -31,6 +31,8 @@ class ServerSideTeleporter extends Telep
private final List<ServiceReference> toUnget = new ArrayList<ServiceReference>();
private final BundleContext bundleContext;
+ private static final int WAITFOR_SERVICE_TIMEOUT_DEFAULT_SECONDS = 10;
+
ServerSideTeleporter() {
bundleContext = Activator.getBundleContext();
if(bundleContext == null) {
@@ -48,9 +50,41 @@ class ServerSideTeleporter extends Telep
}
}
+ /**
+ * Get OSGi service - if it is not available (yet?) try again and again until the configured timeout is reached.
+ */
public <T> T getService (Class<T> serviceClass, String ldapFilter) {
+ String configuredTimeout = (String)bundleContext.getBundle().getHeaders().get("Sling-Test-WaitForService-Timeout");
+ if (configuredTimeout == null) {
+ configuredTimeout = Integer.toString(WAITFOR_SERVICE_TIMEOUT_DEFAULT_SECONDS);
+ }
+ final long timeout = System.currentTimeMillis() + Integer.parseInt(configuredTimeout) * 1000;
+
+ while (System.currentTimeMillis() < timeout) {
+ try {
+ T service = getServiceInternal(serviceClass, ldapFilter);
+ if (service != null) {
+ return service;
+ }
+ }
+ catch (IllegalStateException ex) {
+ // ignore, try again
+ }
+ try {
+ Thread.sleep(50L);
+ }
+ catch (InterruptedException ex) {
+ // ignore
+ }
+ }
+ throw new IllegalStateException(
+ "unable to get a service reference, class=" + serviceClass.getName() + ", filter='" + ldapFilter + "'");
+ }
+
+ private <T> T getServiceInternal (Class<T> serviceClass, String ldapFilter) {
final ServiceGetter sg = new ServiceGetter(bundleContext, serviceClass, ldapFilter);
toUnget.add(sg.serviceReference);
return serviceClass.cast(sg.service);
}
+
}
Modified: sling/trunk/testing/junit/teleporter/src/main/java/org/apache/sling/testing/teleporter/client/ClientSideTeleporter.java
URL: http://svn.apache.org/viewvc/sling/trunk/testing/junit/teleporter/src/main/java/org/apache/sling/testing/teleporter/client/ClientSideTeleporter.java?rev=1759492&r1=1759491&r2=1759492&view=diff
==============================================================================
--- sling/trunk/testing/junit/teleporter/src/main/java/org/apache/sling/testing/teleporter/client/ClientSideTeleporter.java (original)
+++ sling/trunk/testing/junit/teleporter/src/main/java/org/apache/sling/testing/teleporter/client/ClientSideTeleporter.java Tue Sep 6 19:58:29 2016
@@ -48,6 +48,7 @@ public class ClientSideTeleporter extend
private DependencyAnalyzer dependencyAnalyzer;
private int testReadyTimeoutSeconds = 20;
private int webConsoleReadyTimeoutSeconds = 30;
+ private int waitForServiceTimout = 10;
private String baseUrl;
private String serverCredentials;
private String testServletPath = DEFAULT_TEST_SERVLET_PATH;
@@ -58,6 +59,7 @@ public class ClientSideTeleporter extend
final TinyBundle b = TinyBundles.bundle()
.set(Constants.BUNDLE_SYMBOLICNAME, bundleSymbolicName)
.set("Sling-Test-Regexp", c.getName() + ".*")
+ .set("Sling-Test-WaitForService-Timeout", Integer.toString(waitForServiceTimout))
.add(c);
for(Map.Entry<String, String> header : additionalBundleHeaders.entrySet()) {
@@ -110,6 +112,14 @@ public class ClientSideTeleporter extend
webConsoleReadyTimeoutSeconds = tm;
}
+ /**
+ * Define how long to wait to get a service reference.
+ * This applies only on the server-side when using the {@link #getService(Class)} or {@link #getService(Class, String)} methods.
+ */
+ public void setWaitForServiceTimoutSeconds (int tm) {
+ waitForServiceTimout = tm;
+ }
+
/** Set the credentials to use to install our test bundle on the server */
public void setServerCredentials(String username, String password) {
serverCredentials = username + ":" + password;