configuration.put(Constants.FRAMEWORK_STORAGE, "target/papoose");
FrameworkFactory factory = new PapooseFrameworkFactory();
final Framework framework = factory.newFramework(configuration);
FrameworkEvent frameworkEvent = framework.waitForStop(0);
assertNotNull(frameworkEvent);
assertEquals(FrameworkEvent.STOPPED, frameworkEvent.getType());
assertSame(framework, frameworkEvent.getBundle());
framework.init();
Bundle systemBundle = framework.getBundleContext().getBundle(0);
assertEquals(Bundle.STARTING, framework.getState());
assertEquals(Bundle.STARTING, systemBundle.getState());
ThreadPoolExecutor pool = new ThreadPoolExecutor(1, 1, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
try
{
Future<FrameworkEvent> result = pool.submit(new Callable<FrameworkEvent>()
{
public FrameworkEvent call() throws Exception
{
return framework.waitForStop(0);
}
});
framework.stop();
frameworkEvent = result.get();
assertNotNull(frameworkEvent);
assertEquals(FrameworkEvent.STOPPED, frameworkEvent.getType());
assertSame(systemBundle, frameworkEvent.getBundle());
framework.waitForStop(0);
}
finally
{
pool.shutdown();
}
try
{
framework.waitForStop(-1);
Assert.fail("Should never accept negative wait timeouts");
}
catch (IllegalArgumentException iae)
{
}
frameworkEvent = framework.waitForStop(Long.MAX_VALUE);
assertNotNull(frameworkEvent);
assertEquals(FrameworkEvent.STOPPED, frameworkEvent.getType());
assertSame(systemBundle, frameworkEvent.getBundle());
framework.start();
framework.stop();
Thread.sleep(1);
frameworkEvent = framework.waitForStop(0);
assertNotNull(frameworkEvent);
assertEquals(FrameworkEvent.STOPPED, frameworkEvent.getType());
assertSame(systemBundle, frameworkEvent.getBundle());
}