blob: 7372a97b251a935d4fd9c21e18ff5828d07abafe [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2007, 2008 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.osgi.tests.services.resolver;
import java.io.File;
import java.io.IOException;
import junit.framework.Test;
import junit.framework.TestSuite;
import org.eclipse.osgi.service.resolver.*;
import org.eclipse.osgi.tests.OSGiTestsActivator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleException;
public class DisabledInfoTest extends AbstractStateTest {
private final String B1_LOCATION = "b1"; //$NON-NLS-1$
private final String B2_LOCATION = "b2"; //$NON-NLS-1$
private final String B3_LOCATION = "b3"; //$NON-NLS-1$
private final String POLICY = "test.policy"; //$NON-NLS-1$
public static Test suite() {
return new TestSuite(DisabledInfoTest.class);
}
public DisabledInfoTest(String name) {
super(name);
}
public void testDisabledInfo01() throws BundleException {
State state = buildTestState();
BundleDescription b1 = state.getBundleByLocation(B1_LOCATION);
BundleDescription b2 = state.getBundleByLocation(B2_LOCATION);
BundleDescription b3 = state.getBundleByLocation(B3_LOCATION);
DisabledInfo info1 = new DisabledInfo(POLICY, "message 1", b1); //$NON-NLS-1$
DisabledInfo info2 = new DisabledInfo(POLICY, "message 1", b2); //$NON-NLS-1$
DisabledInfo info3 = new DisabledInfo(POLICY, "message 1", b3); //$NON-NLS-1$
state.addDisabledInfo(info1);
state.addDisabledInfo(info2);
state.addDisabledInfo(info3);
State copy = state.getFactory().createState(state);
BundleDescription copyB1 = copy.getBundleByLocation(B1_LOCATION);
BundleDescription copyB2 = copy.getBundleByLocation(B2_LOCATION);
BundleDescription copyB3 = copy.getBundleByLocation(B3_LOCATION);
DisabledInfo copyInfo1 = copy.getDisabledInfo(copyB1, POLICY);
DisabledInfo copyInfo2 = copy.getDisabledInfo(copyB2, POLICY);
DisabledInfo copyInfo3 = copy.getDisabledInfo(copyB3, POLICY);
assertNotNull("copyInfo1", copyInfo1); //$NON-NLS-1$
assertNotNull("copyInfo2", copyInfo2); //$NON-NLS-1$
assertNotNull("copyInfo3", copyInfo3); //$NON-NLS-1$
assertTrue("copyInfo1 bundle", copyInfo1.getBundle() == copyB1); //$NON-NLS-1$
assertTrue("copyInfo2 bundle", copyInfo2.getBundle() == copyB2); //$NON-NLS-1$
assertTrue("copyInfo3 bundle", copyInfo3.getBundle() == copyB3); //$NON-NLS-1$
}
public void testDisabledInfo02() throws BundleException {
State state = buildTestState();
BundleDescription b1 = state.getBundleByLocation(B1_LOCATION);
BundleDescription b2 = state.getBundleByLocation(B2_LOCATION);
BundleDescription b3 = state.getBundleByLocation(B3_LOCATION);
DisabledInfo info1 = new DisabledInfo(POLICY, "message 1", b1); //$NON-NLS-1$
DisabledInfo info2 = new DisabledInfo(POLICY, "message 1", b2); //$NON-NLS-1$
DisabledInfo info3 = new DisabledInfo(POLICY, "message 1", b3); //$NON-NLS-1$
state.resolve();
assertTrue("b1 resolved", b1.isResolved()); //$NON-NLS-1$
assertTrue("b2 resolved", b2.isResolved()); //$NON-NLS-1$
assertTrue("b3 resolved", b3.isResolved()); //$NON-NLS-1$
state.addDisabledInfo(info1);
state.addDisabledInfo(info2);
state.addDisabledInfo(info3);
state.resolve(false);
assertFalse("b1 resolved", b1.isResolved()); //$NON-NLS-1$
assertFalse("b2 resolved", b2.isResolved()); //$NON-NLS-1$
assertFalse("b3 resolved", b3.isResolved()); //$NON-NLS-1$
}
public void testDisabledInfo03() throws BundleException {
State state = buildTestState();
BundleDescription b1 = state.getBundleByLocation(B1_LOCATION);
BundleDescription b2 = state.getBundleByLocation(B2_LOCATION);
BundleDescription b3 = state.getBundleByLocation(B3_LOCATION);
DisabledInfo info1 = new DisabledInfo(POLICY, "message 1", b1); //$NON-NLS-1$
DisabledInfo info2 = new DisabledInfo(POLICY, "message 1", b2); //$NON-NLS-1$
DisabledInfo info3 = new DisabledInfo(POLICY, "message 1", b3); //$NON-NLS-1$
state.addDisabledInfo(info1);
state.addDisabledInfo(info2);
state.addDisabledInfo(info3);
BundleContext context = OSGiTestsActivator.getContext();
File stateDir = context.getDataFile("testDisabledInfo03"); //$NON-NLS-1$
stateDir.mkdirs();
try {
state.getFactory().writeState(state, stateDir);
State copy = state.getFactory().readState(stateDir);
BundleDescription copyB1 = copy.getBundleByLocation(B1_LOCATION);
BundleDescription copyB2 = copy.getBundleByLocation(B2_LOCATION);
BundleDescription copyB3 = copy.getBundleByLocation(B3_LOCATION);
DisabledInfo copyInfo1 = copy.getDisabledInfo(copyB1, POLICY);
DisabledInfo copyInfo2 = copy.getDisabledInfo(copyB2, POLICY);
DisabledInfo copyInfo3 = copy.getDisabledInfo(copyB3, POLICY);
assertNotNull("copyInfo1", copyInfo1); //$NON-NLS-1$
assertNotNull("copyInfo2", copyInfo2); //$NON-NLS-1$
assertNotNull("copyInfo3", copyInfo3); //$NON-NLS-1$
assertTrue("copyInfo1 bundle", copyInfo1.getBundle() == copyB1); //$NON-NLS-1$
assertTrue("copyInfo2 bundle", copyInfo2.getBundle() == copyB2); //$NON-NLS-1$
assertTrue("copyInfo3 bundle", copyInfo3.getBundle() == copyB3); //$NON-NLS-1$
} catch (IOException e) {
fail("Unexpected exception", e); //$NON-NLS-1$
}
}
public void testDisabledInfo04() throws BundleException {
State state = buildTestState();
BundleDescription b1 = state.getBundleByLocation(B1_LOCATION);
BundleDescription b2 = state.getBundleByLocation(B2_LOCATION);
BundleDescription b3 = state.getBundleByLocation(B3_LOCATION);
DisabledInfo info1 = new DisabledInfo(POLICY, "message 1", b1); //$NON-NLS-1$
DisabledInfo info2 = new DisabledInfo(POLICY, "message 1", b2); //$NON-NLS-1$
DisabledInfo info3 = new DisabledInfo(POLICY, "message 1", b3); //$NON-NLS-1$
state.resolve();
assertTrue("b1 resolved", b1.isResolved()); //$NON-NLS-1$
assertTrue("b2 resolved", b2.isResolved()); //$NON-NLS-1$
assertTrue("b3 resolved", b3.isResolved()); //$NON-NLS-1$
state.addDisabledInfo(info1);
state.addDisabledInfo(info2);
state.addDisabledInfo(info3);
BundleDescription[] disabledBundles = state.getDisabledBundles();
assertNotNull("disabledBundles", disabledBundles); //$NON-NLS-1$
assertEquals("disabledBundles length", 3, disabledBundles.length); //$NON-NLS-1$
assertTrue("b1 not found", disabledBundles[0] == b1 || disabledBundles[1] == b1 || disabledBundles[2] == b1); //$NON-NLS-1$
assertTrue("b2 not found", disabledBundles[0] == b2 || disabledBundles[1] == b2 || disabledBundles[2] == b2); //$NON-NLS-1$
assertTrue("b3 not found", disabledBundles[0] == b3 || disabledBundles[1] == b3 || disabledBundles[2] == b3); //$NON-NLS-1$
state.removeDisabledInfo(info1);
disabledBundles = state.getDisabledBundles();
assertNotNull("disabledBundles", disabledBundles); //$NON-NLS-1$
assertEquals("disabledBundles length", 2, disabledBundles.length); //$NON-NLS-1$
assertTrue("b2 not found", disabledBundles[0] == b2 || disabledBundles[1] == b2); //$NON-NLS-1$
assertTrue("b3 not found", disabledBundles[0] == b3 || disabledBundles[1] == b3); //$NON-NLS-1$
state.removeDisabledInfo(info2);
disabledBundles = state.getDisabledBundles();
assertNotNull("disabledBundles", disabledBundles); //$NON-NLS-1$
assertEquals("disabledBundles length", 1, disabledBundles.length); //$NON-NLS-1$
assertTrue("b3 not found", disabledBundles[0] == b3); //$NON-NLS-1$
state.removeDisabledInfo(info3);
disabledBundles = state.getDisabledBundles();
assertNotNull("disabledBundles", disabledBundles); //$NON-NLS-1$
assertEquals("disabledBundles length", 0, disabledBundles.length); //$NON-NLS-1$
}
public void testBug251427() throws BundleException {
State state = buildTestState();
BundleDescription b1 = state.getBundleByLocation(B1_LOCATION);
BundleDescription b2 = state.getBundleByLocation(B2_LOCATION);
DisabledInfo info11 = new DisabledInfo(POLICY, "message 1", b1); //$NON-NLS-1$
DisabledInfo info12 = new DisabledInfo(POLICY, "message 1", b1); //$NON-NLS-1$
DisabledInfo info21 = new DisabledInfo(POLICY, "message 1", b2); //$NON-NLS-1$
DisabledInfo info22 = new DisabledInfo(POLICY, "message 1", b2); //$NON-NLS-1$
assertEquals("infos not equal", info11, info12); //$NON-NLS-1$
assertEquals("infos hashCode not equal", info11.hashCode(), info12.hashCode()); //$NON-NLS-1$
assertEquals("infos not equal", info21, info22); //$NON-NLS-1$
assertEquals("infos hashCode not equal", info21.hashCode(), info22.hashCode()); //$NON-NLS-1$
}
private State buildTestState() throws BundleException {
State state = buildEmptyState();
final String B1_MANIFEST = "Bundle-ManifestVersion: 1\n" + "Bundle-SymbolicName: b1\n" + "Bundle-Version: 1.0\n" + "Import-Package: b2"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
BundleDescription b1 = state.getFactory().createBundleDescription(state, parseManifest(B1_MANIFEST), B1_LOCATION, 1);
state.addBundle(b1);
final String B2_MANIFEST = "Bundle-ManifestVersion: 1\n" + "Bundle-SymbolicName: b2\n" + "Bundle-Version: 1.0\n" + "Export-Package: b2\n" + "Import-Package: b3"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$
BundleDescription b2 = state.getFactory().createBundleDescription(state, parseManifest(B2_MANIFEST), B2_LOCATION, 2);
state.addBundle(b2);
final String B3_MANIFEST = "Bundle-ManifestVersion: 1\n" + "Bundle-SymbolicName: b3\n" + "Bundle-Version: 1.0\n" + "Export-Package: b3; version=1.0"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
BundleDescription b3 = state.getFactory().createBundleDescription(state, parseManifest(B3_MANIFEST), B3_LOCATION, 3);
state.addBundle(b3);
return state;
}
}