Avoid timeouts

Project: http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/repo
Commit: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/commit/77e9bf3e
Tree: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/tree/77e9bf3e
Diff: 
http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/diff/77e9bf3e

Branch: refs/heads/master
Commit: 77e9bf3e49f067748f5c5ec8a3ae26253e288584
Parents: a1b410f
Author: Carlos Sierra <[email protected]>
Authored: Mon Apr 30 17:28:58 2018 +0200
Committer: Carlos Sierra <[email protected]>
Committed: Tue May 8 09:01:47 2018 +0200

----------------------------------------------------------------------
 jax-rs.itests/src/main/java/test/JaxrsTest.java | 92 +++++++++++++++++++-
 .../jax/rs/whiteboard/internal/Whiteboard.java  | 21 ++---
 2 files changed, 96 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/77e9bf3e/jax-rs.itests/src/main/java/test/JaxrsTest.java
----------------------------------------------------------------------
diff --git a/jax-rs.itests/src/main/java/test/JaxrsTest.java 
b/jax-rs.itests/src/main/java/test/JaxrsTest.java
index 35f7aa4..ab5e561 100644
--- a/jax-rs.itests/src/main/java/test/JaxrsTest.java
+++ b/jax-rs.itests/src/main/java/test/JaxrsTest.java
@@ -48,6 +48,11 @@ import org.apache.cxf.Bus;
 import org.apache.cxf.jaxrs.ext.ContextProvider;
 import org.apache.cxf.message.Message;
 import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.PrototypeServiceFactory;
+import org.osgi.framework.ServiceFactory;
+import org.osgi.framework.ServiceReference;
 import org.osgi.framework.ServiceRegistration;
 
 import org.osgi.service.cm.Configuration;
@@ -63,7 +68,8 @@ import org.osgi.service.jaxrs.runtime.dto.ResourceDTO;
 import org.osgi.service.jaxrs.runtime.dto.ResourceMethodInfoDTO;
 import org.osgi.service.jaxrs.runtime.dto.RuntimeDTO;
 import org.osgi.util.promise.Promise;
-
+import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.util.tracker.ServiceTrackerCustomizer;
 import test.types.ConfigurationAwareResource;
 import test.types.CxfExtensionTestAddon;
 import test.types.ExtensionA;
@@ -1171,7 +1177,9 @@ public class JaxrsTest extends TestHelper {
     }
 
     @Test
-    public void testDefaultWeb() throws IOException, InterruptedException {
+    public void testDefaultWeb() throws
+        IOException, InterruptedException, InvalidSyntaxException {
+
         WebTarget defaultTarget = createDefaultTarget();
 
         assertFalse(
@@ -1190,18 +1198,94 @@ public class JaxrsTest extends TestHelper {
                 "org.apache.aries.jax.rs.whiteboard.default.application",
                 "false");
 
+            CountDownLatch countDownLatch = new CountDownLatch(3);
+
+            ServiceTracker<Object, Object> tracker =
+                new ServiceTracker<>(
+                    bundleContext,
+                    bundleContext.createFilter(
+                        "(&(osgi.jaxrs.name=.default)" +
+                            "(objectClass=org.apache.aries.jax.rs.whiteboard." 
+
+                                "internal.cxf.CxfJaxrsServiceRegistrator))"),
+                    new ServiceTrackerCustomizer<Object, Object>() {
+
+                        @Override
+                        public Object addingService(
+                            ServiceReference<Object> serviceReference) {
+
+                            countDownLatch.countDown();
+
+                            return serviceReference;
+                        }
+
+                        @Override
+                        public void modifiedService(
+                            ServiceReference<Object> serviceReference,
+                            Object o) {
+
+                        }
+
+                        @Override
+                        public void removedService(
+                            ServiceReference<Object> serviceReference,
+                            Object o) {
+
+                            countDownLatch.countDown();
+                        }
+                    });
+
+            tracker.open();
+
             configuration.update(properties);
 
-            Thread.sleep(3000);
+            countDownLatch.await(1, TimeUnit.MINUTES);
 
             assertTrue(
                 defaultTarget.request().get(String.class).
                     contains("No services have been found"));
         }
         finally {
+            CountDownLatch countDownLatch = new CountDownLatch(3);
+
+            ServiceTracker<Object, Object> tracker =
+                new ServiceTracker<>(
+                    bundleContext,
+                    bundleContext.createFilter(
+                        "(&(osgi.jaxrs.name=.default)" +
+                            "(objectClass=org.apache.aries.jax.rs.whiteboard." 
+
+                                "internal.cxf.CxfJaxrsServiceRegistrator))"),
+                    new ServiceTrackerCustomizer<Object, Object>() {
+
+                        @Override
+                        public Object addingService(
+                            ServiceReference<Object> serviceReference) {
+
+                            countDownLatch.countDown();
+
+                            return serviceReference;
+                        }
+
+                        @Override
+                        public void modifiedService(
+                            ServiceReference<Object> serviceReference,
+                            Object o) {
+
+                        }
+
+                        @Override
+                        public void removedService(
+                            ServiceReference<Object> serviceReference,
+                            Object o) {
+
+                            countDownLatch.countDown();
+                        }
+                    });
+
+            tracker.open();
+
             configuration.delete();
 
-            Thread.sleep(3000);
+            countDownLatch.await(1, TimeUnit.MINUTES);
         }
 
         assertFalse(

http://git-wip-us.apache.org/repos/asf/aries-jax-rs-whiteboard/blob/77e9bf3e/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
----------------------------------------------------------------------
diff --git 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
index 3e1e2bc..aa53942 100644
--- 
a/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
+++ 
b/jax-rs.whiteboard/src/main/java/org/apache/aries/jax/rs/whiteboard/internal/Whiteboard.java
@@ -590,12 +590,14 @@ public class Whiteboard {
         return
             getCxfExtensions(tuple.getCachingServiceReference()).
                 flatMap(extensions ->
-            deployRegistrator(extensions, tuple, properties).
+            createRegistrator(extensions, tuple, properties).
                 flatMap(registrator ->
             registerCXFServletService(
                 registrator.getBus(), properties, contextReference).then(
+            register(
+                CxfJaxrsServiceRegistrator.class, () -> registrator, 
properties).then(
             just(registrator)
-        )));
+        ))));
     }
 
     public OSGi<Map<String, ServiceTuple<Object>>> getCxfExtensions(
@@ -648,21 +650,14 @@ public class Whiteboard {
             getClassLoader();
     }
 
-    private OSGi<CxfJaxrsServiceRegistrator> deployRegistrator(
+    private OSGi<CxfJaxrsServiceRegistrator> createRegistrator(
         Map<String, ServiceTuple<Object>> extensions,
         ServiceTuple<Application> tuple, Supplier<Map<String, ?>> props) {
 
         return
-            just(() ->
-                    new CxfJaxrsServiceRegistrator(
-                        createBus(extensions), tuple, props.get())).
-                flatMap(registrator ->
-            onClose(registrator::close).then(
-            register(
-                    CxfJaxrsServiceRegistrator.class, () -> registrator, 
props).
-                then(
-            just(registrator)
-        )));
+            just(() -> new CxfJaxrsServiceRegistrator(
+                    createBus(extensions), tuple, props.get())).
+            effects(__ -> {}, CxfJaxrsServiceRegistrator::close);
     }
 
     private OSGi<CachingServiceReference<Object>>

Reply via email to