blob: c69e87d10f132f2c27fe2508c1939738ddef684b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.osgi.tests.bundles;
import java.util.ArrayList;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.osgi.tests.OSGiTestsActivator;
import org.osgi.framework.*;
public class PackageAdminBundleTests extends AbstractBundleTests {
public class TestListener implements SynchronousBundleListener {
ArrayList events = new ArrayList();
public synchronized void bundleChanged(BundleEvent event) {
events.add(event);
}
public synchronized BundleEvent[] getEvents() {
try {
return (BundleEvent[]) events.toArray(new BundleEvent[0]);
} finally {
events.clear();
}
}
}
public static Test suite() {
return new TestSuite(PackageAdminBundleTests.class);
}
public void testBundleEvents01() throws Exception {
Bundle chainTest = installer.installBundle("chain.test");
Bundle chainTestA = installer.installBundle("chain.test.a");
Bundle chainTestB = installer.installBundle("chain.test.b");
Bundle chainTestC = installer.installBundle("chain.test.c");
Bundle chainTestD = installer.installBundle("chain.test.d");
Bundle[] resolveBundles = new Bundle[] {chainTestC, chainTestA, chainTestB, chainTest, chainTestD};
Bundle[] dependencyOrder = new Bundle[] {chainTest, chainTestA, chainTestB, chainTestC, chainTestD};
TestListener testListener = new TestListener();
OSGiTestsActivator.getContext().addBundleListener(testListener);
try {
installer.resolveBundles(resolveBundles);
BundleEvent[] events = testListener.getEvents();
assertEquals("Event count", 10, events.length);
int j = 0;
for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) {
assertTrue("Resolved Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle());
assertEquals("Expecting Resolved event", BundleEvent.RESOLVED, events[j].getType());
}
j = 5;
for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) {
assertTrue("Lazy Starting Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle());
assertEquals("Expecting Lazy Starting event", BundleEvent.LAZY_ACTIVATION, events[j].getType());
}
} finally {
OSGiTestsActivator.getContext().removeBundleListener(testListener);
}
}
public void testBundleEvents02() throws Exception {
Bundle chainTest = installer.installBundle("chain.test");
Bundle chainTestA = installer.installBundle("chain.test.a");
Bundle chainTestB = installer.installBundle("chain.test.b");
Bundle chainTestC = installer.installBundle("chain.test.c");
Bundle chainTestD = installer.installBundle("chain.test.d");
Bundle[] resolveBundles = new Bundle[] {chainTestC, chainTestA, chainTestB, chainTest, chainTestD};
Bundle[] dependencyOrder = new Bundle[] {chainTest, chainTestA, chainTestB, chainTestC, chainTestD};
TestListener testListener = new TestListener();
OSGiTestsActivator.getContext().addBundleListener(testListener);
try {
installer.resolveBundles(resolveBundles);
BundleEvent[] events = testListener.getEvents();
// throw away the events. This was already tested
installer.refreshPackages(resolveBundles);
events = testListener.getEvents();
assertEquals("Event count", 25, events.length);
int j = 0;
for (int i = 0; i < dependencyOrder.length; i++, j += 2) {
assertTrue("Stopping Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle());
assertEquals("Expecting Stopping event", BundleEvent.STOPPING, events[j].getType());
assertTrue("Stopped Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j + 1].getBundle());
assertEquals("Expecting Stopping event", BundleEvent.STOPPED, events[j + 1].getType());
}
j = 10;
for (int i = 0; i < dependencyOrder.length; i++, j++) {
assertTrue("Unresolved Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle());
assertEquals("Expecting Unresolved event", BundleEvent.UNRESOLVED, events[j].getType());
}
j = 15;
for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) {
assertTrue("Resolved Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle());
assertEquals("Expecting Resolved event", BundleEvent.RESOLVED, events[j].getType());
}
j = 20;
for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) {
assertTrue("Lazy Starting Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle());
assertEquals("Expecting Lazy Starting event", BundleEvent.LAZY_ACTIVATION, events[j].getType());
}
} finally {
OSGiTestsActivator.getContext().removeBundleListener(testListener);
}
}
}