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>>
