/****************************************************************************** * Copyright (c) 2006, 2010 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0 * is available at http://www.opensource.org/licenses/apache2.0.php. * You may elect to redistribute this code under either of these licenses. * * Contributors: * VMware Inc. *****************************************************************************/ package org.eclipse.gemini.blueprint.iandt.referenceProxy; import java.awt.Shape; import org.eclipse.gemini.blueprint.iandt.BaseIntegrationTest; import org.eclipse.gemini.blueprint.service.ServiceUnavailableException; import org.eclipse.gemini.blueprint.service.importer.support.Cardinality; import org.eclipse.gemini.blueprint.service.importer.support.ImportContextClassLoader; import org.eclipse.gemini.blueprint.service.importer.support.OsgiServiceProxyFactoryBean; /** * @author Costin Leau * */ public class ReferenceInterruptTest extends BaseIntegrationTest { public void testProxyInterrupt() throws Exception { long initialWait = 20 * 1000; final OsgiServiceProxyFactoryBean proxyFactory = new OsgiServiceProxyFactoryBean(); proxyFactory.setBeanClassLoader(getClass().getClassLoader()); proxyFactory.setBundleContext(bundleContext); proxyFactory.setCardinality(Cardinality.C_0__1); proxyFactory.setContextClassLoader(ImportContextClassLoader.UNMANAGED); proxyFactory.setInterfaces(new Class<?>[] { Shape.class }); proxyFactory.setTimeout(initialWait); proxyFactory.afterPropertiesSet(); Runnable resetProxy = new Runnable() { public void run() { try { Thread.sleep(3 * 1000); } catch (InterruptedException e) { throw new RuntimeException(e); } proxyFactory.setTimeout(0); } }; Object proxy = proxyFactory.getObject(); assertNotNull(proxy); Thread stopThread = new Thread(resetProxy, "reset-proxy-thread"); stopThread.start(); long start = System.currentTimeMillis(); logger.info("Invoking proxy..."); try { proxy.toString(); fail("no service should have been found..."); } catch (ServiceUnavailableException sue) { } long stop = System.currentTimeMillis(); assertTrue(stop - start < initialWait); } }