/******************************************************************************
* 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.errors;
import java.io.FilePermission;
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.springframework.core.io.Resource;
/**
* @author Hal Hildebrand Date: May 29, 2007 Time: 5:07:01 PM
*/
public class ErrorHandlingTest extends BaseIntegrationTest {
protected String getManifestLocation() {
return null;
}
// Specifically do not wait
protected boolean shouldWaitForSpringBundlesContextCreation() {
return false;
}
/**
* While it may appear that this test is doing nothing, what it is doing is
* testing what happens when the OSGi framework is shutdown while the
* Spring/OSGi extender is still running threads which are trying to clean
* up after an error condition in creating the context. When running under
* the Felix platform, this test will produce deadlock or, if things are
* really going south, serious CDNFE when handling the error (e.g.
* java.lang.InputStream, java.lang.Integer, etc.). The reason for the
* latter is that the OSGi framework is shutdown and the class loaders being
* used by extender threads are no longer valid. The deadlock case stems
* from a similar condition in that the system is deadlocked around the
* synchronization of the context.create()/close() because the underlying
* framework is deadlocked around resource resolution. As we process the
* close of the context synchronously, we're blocked waiting for the
* resource resolution which is blocked because the framework is shutting
* down. We can't unblock because we're still waiting for the lock on the
* context to shutdown and unblock the event notification from the
* underlying framework.
*
* Consequently, please do not remove or modify this test unless you talk to
* Hal. :)
*/
public void testErrorHandling() throws Exception {
Resource errorResource = getLocator().locateArtifact("org.eclipse.gemini.blueprint.iandt", "error",
getSpringDMVersion());
assertNotNull("Error bundle resource exists", errorResource);
Bundle errorBundle = bundleContext.installBundle(errorResource.getURL().toExternalForm());
assertNotNull("Errro bundle exists", errorBundle);
errorBundle.start();
}
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;
}
}