/****************************************************************************** * Copyright (c) 2006, 2010 VMware Inc., Oracle 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. * Oracle Inc. *****************************************************************************/ package org.eclipse.gemini.blueprint.iandt.serviceListener; import java.util.ArrayList; import java.util.List; import java.util.PropertyPermission; import org.eclipse.gemini.blueprint.iandt.BaseIntegrationTest; import org.osgi.framework.AdminPermission; import org.osgi.framework.Bundle; import org.eclipse.gemini.blueprint.iandt.service.listener.MyListener; import org.eclipse.gemini.blueprint.util.OsgiBundleUtils; /** * @author Hal Hildebrand Date: Nov 14, 2006 Time: 8:18:15 AM */ public class ServiceListenerTest extends BaseIntegrationTest { protected String[] getTestBundlesNames() { return new String[] { "org.eclipse.gemini.blueprint.iandt,simple.service," + getSpringDMVersion(), "org.eclipse.gemini.blueprint.iandt, service.listener," + getSpringDMVersion() }; } public void testServiceListener() throws Exception { assertEquals("Expected initial binding of service", 1, MyListener.BOUND_COUNT); assertEquals("Unexpected initial unbinding of service", 0, MyListener.UNBOUND_COUNT); Bundle simpleServiceBundle = OsgiBundleUtils.findBundleBySymbolicName(bundleContext, "org.eclipse.gemini.blueprint.iandt.simpleservice"); assertNotNull("Cannot find the simple service bundle", simpleServiceBundle); simpleServiceBundle.stop(); while (simpleServiceBundle.getState() == Bundle.STOPPING) { Thread.sleep(100); } assertEquals("Expected one binding of service", 1, MyListener.BOUND_COUNT); assertTrue("Expected only one unbinding of service", MyListener.UNBOUND_COUNT < 2); assertEquals("Expected unbinding of service not seen", 1, MyListener.UNBOUND_COUNT); logger.debug("about to restart simple service"); simpleServiceBundle.start(); waitOnContextCreation("org.eclipse.gemini.blueprint.iandt.simpleservice"); // wait some more to let the listener binding propagate Thread.sleep(1000); logger.debug("simple service succesfully restarted"); assertTrue("Expected only two bindings of service", MyListener.BOUND_COUNT < 3); assertEquals("Expected binding of service not seen", 2, MyListener.BOUND_COUNT); assertEquals("Unexpected unbinding of service", 1, MyListener.UNBOUND_COUNT); } protected long getDefaultWaitTime() { return 10L; } protected List getTestPermissions() { List perms = super.getTestPermissions(); // export package perms.add(new AdminPermission("*", AdminPermission.EXECUTE)); return perms; } }