/****************************************************************************** * 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.lifecycle; import java.util.ArrayList; import java.util.List; import org.eclipse.gemini.blueprint.iandt.BaseIntegrationTest; import org.osgi.framework.AdminPermission; import org.osgi.framework.Bundle; import org.osgi.framework.Constants; import org.osgi.util.tracker.ServiceTracker; import org.springframework.context.ApplicationContext; import org.springframework.context.support.AbstractRefreshableApplicationContext; import org.eclipse.gemini.blueprint.context.ConfigurableOsgiBundleApplicationContext; /** * @author Hal Hildebrand Date: Oct 15, 2006 Time: 5:51:36 PM */ public class LifecycleTest extends BaseIntegrationTest { protected String getManifestLocation() { return null; } protected String[] getTestBundlesNames() { return new String[] { "org.eclipse.gemini.blueprint.iandt,lifecycle," + getSpringDMVersion() }; } public void testLifecycle() throws Exception { assertNotSame("Guinea pig has already been shutdown", "true", System.getProperty("org.eclipse.gemini.blueprint.iandt.lifecycle.GuineaPig.close")); assertEquals("Guinea pig didn't startup", "true", System.getProperty("org.eclipse.gemini.blueprint.iandt.lifecycle.GuineaPig.startUp")); Bundle[] bundles = bundleContext.getBundles(); Bundle testBundle = null; for (int i = 0; i < bundles.length; i++) { if ("org.eclipse.gemini.blueprint.iandt.lifecycle".equals(bundles[i].getSymbolicName())) { testBundle = bundles[i]; break; } } assertNotNull("Could not find the test bundle", testBundle); StringBuilder filter = new StringBuilder(); filter.append("(&"); filter.append("(").append(Constants.OBJECTCLASS).append("=").append(ApplicationContext.class.getName()).append( ")"); filter.append("(").append(ConfigurableOsgiBundleApplicationContext.APPLICATION_CONTEXT_SERVICE_PROPERTY_NAME); filter.append("=").append(testBundle.getSymbolicName()).append(")"); filter.append(")"); ServiceTracker tracker = new ServiceTracker(bundleContext, bundleContext.createFilter(filter.toString()), null); try { tracker.open(); AbstractRefreshableApplicationContext appContext = (AbstractRefreshableApplicationContext) tracker.waitForService(30000); assertNotNull("test application context", appContext); assertTrue("application context is active", appContext.isActive()); testBundle.stop(); while (testBundle.getState() == Bundle.STOPPING) { Thread.sleep(10); } assertEquals("Guinea pig didn't shutdown", "true", System.getProperty("org.eclipse.gemini.blueprint.iandt.lifecycle.GuineaPig.close")); assertFalse("application context is inactive", appContext.isActive()); } finally { tracker.close(); } } protected List getTestPermissions() { List perms = super.getTestPermissions(); // export package perms.add(new AdminPermission("*", AdminPermission.EXECUTE)); return perms; } }