blob: 4b6544b9bbde7f04d242e2bf6eb4f8a3b92d4afe [file] [log] [blame]
/******************************************************************************
* 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.extender;
import java.io.FilePermission;
import java.util.ArrayList;
import java.util.Iterator;
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.core.io.Resource;
import org.springframework.util.CollectionUtils;
/**
* @author Hal Hildebrand Date: May 21, 2007 Time: 4:43:52 PM
*/
public class ExtenderTest extends BaseIntegrationTest {
protected String getManifestLocation() {
return null;
}
// Overridden to remove the spring extender bundle!
protected String[] getTestFrameworkBundlesNames() {
String[] bundles = super.getTestFrameworkBundlesNames();
List list = new ArrayList(bundles.length);
// remove extender
CollectionUtils.mergeArrayIntoCollection(bundles, list);
// additionally remove the annotation bundle as well (if included)
int bundlesFound = 0;
for (Iterator iter = list.iterator(); (iter.hasNext() && (bundlesFound < 2));) {
String element = (String) iter.next();
if (element.indexOf("extender") >= 0 || element.indexOf("osgi-annotation") >= 0) {
iter.remove();
bundlesFound++;
}
}
return (String[]) list.toArray(new String[list.size()]);
}
// Specifically cannot wait - test scenario has bundles which are spring
// powered, but will not be started.
protected boolean shouldWaitForSpringBundlesContextCreation() {
return false;
}
protected String[] getTestBundlesNames() {
return new String[] { "org.eclipse.gemini.blueprint.iandt, lifecycle," + getGeminiBlueprintVersion() };
}
public void testLifecycle() throws Exception {
assertNull("Guinea pig has already been started", System
.getProperty("org.eclipse.gemini.blueprint.iandt.lifecycle.GuineaPig.close"));
StringBuilder filter = new StringBuilder();
filter.append("(&");
filter.append("(").append(Constants.OBJECTCLASS).append("=").append(ApplicationContext.class.getName()).append(
")");
filter.append("(").append("org.springframework.context.service.name");
filter.append("=").append("org.eclipse.gemini.blueprint.iandt.lifecycle").append(")");
filter.append(")");
ServiceTracker tracker = new ServiceTracker(bundleContext, bundleContext.createFilter(filter.toString()), null);
tracker.open();
ApplicationContext appContext = (ApplicationContext) tracker.waitForService(1);
assertNull("lifecycle application context does not exist", appContext);
Resource extenderResource =
getLocator().locateArtifact("org.eclipse.gemini.blueprint", "gemini-blueprint-extender",
getGeminiBlueprintVersion());
assertNotNull("Extender bundle resource", extenderResource);
Bundle extenderBundle = bundleContext.installBundle(extenderResource.getURL().toExternalForm());
assertNotNull("Extender bundle", extenderBundle);
extenderBundle.start();
tracker.open();
appContext = (ApplicationContext) tracker.waitForService(60000);
assertNotNull("lifecycle application context exists", appContext);
assertNotSame("Guinea pig hasn't already been shutdown", "true", System
.getProperty("org.eclipse.gemini.blueprint.iandt.lifecycle.GuineaPig.close"));
assertEquals("Guinea pig started up", "true", System
.getProperty("org.eclipse.gemini.blueprint.iandt.lifecycle.GuineaPig.startUp"));
}
protected List getTestPermissions() {
List perms = super.getTestPermissions();
// export package
perms.add(new AdminPermission("*", AdminPermission.EXECUTE));
perms.add(new AdminPermission("*", AdminPermission.LIFECYCLE));
perms.add(new AdminPermission("*", AdminPermission.RESOLVE));
perms.add(new FilePermission("<<ALL FILES>>", "read"));
return perms;
}
}