|
Added
Link Here
|
| 1 |
/******************************************************************************* |
| 2 |
* Copyright (c) 2007 IBM Corporation and others. |
| 3 |
* All rights reserved. This program and the accompanying materials |
| 4 |
* are made available under the terms of the Eclipse Public License v1.0 |
| 5 |
* which accompanies this distribution, and is available at |
| 6 |
* http://www.eclipse.org/legal/epl-v10.html |
| 7 |
* |
| 8 |
* Contributors: |
| 9 |
* IBM Corporation - initial API and implementation |
| 10 |
*******************************************************************************/ |
| 11 |
package org.eclipse.osgi.tests.bundles; |
| 12 |
|
| 13 |
import java.util.ArrayList; |
| 14 |
import junit.framework.Test; |
| 15 |
import junit.framework.TestSuite; |
| 16 |
import org.eclipse.osgi.tests.OSGiTestsActivator; |
| 17 |
import org.osgi.framework.*; |
| 18 |
|
| 19 |
public class PackageAdminBundleTests extends AbstractBundleTests { |
| 20 |
public class TestListener implements SynchronousBundleListener { |
| 21 |
ArrayList events = new ArrayList(); |
| 22 |
|
| 23 |
public synchronized void bundleChanged(BundleEvent event) { |
| 24 |
events.add(event); |
| 25 |
} |
| 26 |
|
| 27 |
public synchronized BundleEvent[] getEvents() { |
| 28 |
try { |
| 29 |
return (BundleEvent[]) events.toArray(new BundleEvent[0]); |
| 30 |
} finally { |
| 31 |
events.clear(); |
| 32 |
} |
| 33 |
} |
| 34 |
} |
| 35 |
|
| 36 |
public static Test suite() { |
| 37 |
return new TestSuite(PackageAdminBundleTests.class); |
| 38 |
} |
| 39 |
|
| 40 |
public void testBundleEvents01() throws Exception { |
| 41 |
Bundle chainTest = installer.installBundle("chain.test"); |
| 42 |
Bundle chainTestA = installer.installBundle("chain.test.a"); |
| 43 |
Bundle chainTestB = installer.installBundle("chain.test.b"); |
| 44 |
Bundle chainTestC = installer.installBundle("chain.test.c"); |
| 45 |
Bundle chainTestD = installer.installBundle("chain.test.d"); |
| 46 |
Bundle[] resolveBundles = new Bundle[] {chainTestC, chainTestA, chainTestB, chainTest, chainTestD}; |
| 47 |
Bundle[] dependencyOrder = new Bundle[] {chainTest, chainTestA, chainTestB, chainTestC, chainTestD}; |
| 48 |
TestListener testListener = new TestListener(); |
| 49 |
OSGiTestsActivator.getContext().addBundleListener(testListener); |
| 50 |
try { |
| 51 |
installer.resolveBundles(resolveBundles); |
| 52 |
BundleEvent[] events = testListener.getEvents(); |
| 53 |
assertEquals("Event count", 10, events.length); |
| 54 |
int j = 0; |
| 55 |
for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) { |
| 56 |
assertTrue("Resolved Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); |
| 57 |
assertEquals("Expecting Resolved event", BundleEvent.RESOLVED, events[j].getType()); |
| 58 |
} |
| 59 |
j = 5; |
| 60 |
for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) { |
| 61 |
assertTrue("Lazy Starting Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); |
| 62 |
assertEquals("Expecting Lazy Starting event", BundleEvent.LAZY_ACTIVATION, events[j].getType()); |
| 63 |
} |
| 64 |
} finally { |
| 65 |
OSGiTestsActivator.getContext().removeBundleListener(testListener); |
| 66 |
} |
| 67 |
} |
| 68 |
|
| 69 |
public void testBundleEvents02() throws Exception { |
| 70 |
Bundle chainTest = installer.installBundle("chain.test"); |
| 71 |
Bundle chainTestA = installer.installBundle("chain.test.a"); |
| 72 |
Bundle chainTestB = installer.installBundle("chain.test.b"); |
| 73 |
Bundle chainTestC = installer.installBundle("chain.test.c"); |
| 74 |
Bundle chainTestD = installer.installBundle("chain.test.d"); |
| 75 |
Bundle[] resolveBundles = new Bundle[] {chainTestC, chainTestA, chainTestB, chainTest, chainTestD}; |
| 76 |
Bundle[] dependencyOrder = new Bundle[] {chainTest, chainTestA, chainTestB, chainTestC, chainTestD}; |
| 77 |
TestListener testListener = new TestListener(); |
| 78 |
OSGiTestsActivator.getContext().addBundleListener(testListener); |
| 79 |
try { |
| 80 |
installer.resolveBundles(resolveBundles); |
| 81 |
BundleEvent[] events = testListener.getEvents(); |
| 82 |
// throw away the events. This was already tested |
| 83 |
installer.refreshPackages(resolveBundles); |
| 84 |
events = testListener.getEvents(); |
| 85 |
assertEquals("Event count", 25, events.length); |
| 86 |
int j = 0; |
| 87 |
for (int i = 0; i < dependencyOrder.length; i++, j += 2) { |
| 88 |
assertTrue("Stopping Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); |
| 89 |
assertEquals("Expecting Stopping event", BundleEvent.STOPPING, events[j].getType()); |
| 90 |
assertTrue("Stopped Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j + 1].getBundle()); |
| 91 |
assertEquals("Expecting Stopping event", BundleEvent.STOPPED, events[j + 1].getType()); |
| 92 |
} |
| 93 |
j = 10; |
| 94 |
for (int i = 0; i < dependencyOrder.length; i++, j++) { |
| 95 |
assertTrue("Unresolved Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); |
| 96 |
assertEquals("Expecting Unresolved event", BundleEvent.UNRESOLVED, events[j].getType()); |
| 97 |
} |
| 98 |
j = 15; |
| 99 |
for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) { |
| 100 |
assertTrue("Resolved Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); |
| 101 |
assertEquals("Expecting Resolved event", BundleEvent.RESOLVED, events[j].getType()); |
| 102 |
} |
| 103 |
j = 20; |
| 104 |
for (int i = dependencyOrder.length - 1; i >= 0; i--, j++) { |
| 105 |
assertTrue("Lazy Starting Event Bundle: " + dependencyOrder[i].getSymbolicName(), dependencyOrder[i] == events[j].getBundle()); |
| 106 |
assertEquals("Expecting Lazy Starting event", BundleEvent.LAZY_ACTIVATION, events[j].getType()); |
| 107 |
} |
| 108 |
|
| 109 |
} finally { |
| 110 |
OSGiTestsActivator.getContext().removeBundleListener(testListener); |
| 111 |
} |
| 112 |
} |
| 113 |
} |