Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/SharedInstallTestsProfileSpoofEnabledConfigured.java')
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/SharedInstallTestsProfileSpoofEnabledConfigured.java227
1 files changed, 227 insertions, 0 deletions
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/SharedInstallTestsProfileSpoofEnabledConfigured.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/SharedInstallTestsProfileSpoofEnabledConfigured.java
new file mode 100644
index 000000000..a47c0a007
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/reconciler/dropins/SharedInstallTestsProfileSpoofEnabledConfigured.java
@@ -0,0 +1,227 @@
+/*******************************************************************************
+ * Copyright (c) 2003 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:
+ * Red Hat, Inc. - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.equinox.p2.tests.reconciler.dropins;
+
+import java.io.*;
+import java.util.Properties;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.equinox.internal.p2.updatesite.Activator;
+
+public class SharedInstallTestsProfileSpoofEnabledConfigured extends SharedInstallTestsProfileSpoofEnabled {
+
+ private File extensions;
+
+ public static Test suite() {
+ TestSuite suite = new ReconcilerTestSuite();
+ suite.setName(SharedInstallTestsProfileSpoofEnabledConfigured.class.getName());
+ suite.addTest(new SharedInstallTestsProfileSpoofEnabledConfigured("testBasicStartup"));
+ suite.addTest(new SharedInstallTestsProfileSpoofEnabledConfigured("testReadOnlyDropinsStartup"));
+ suite.addTest(new SharedInstallTestsProfileSpoofEnabledConfigured("testUserDropinsStartup"));
+ return suite;
+ }
+
+ /*
+ * Constructor for the class.
+ */
+ public SharedInstallTestsProfileSpoofEnabledConfigured(String name) {
+ super(name);
+ }
+
+ public void reconcileReadOnly(String message, File extensions) {
+ reconcileReadOnly(message, extensions, false);
+ }
+
+ public void reconcileReadOnly(String message, File extensions, boolean debug) {
+ File root = new File(Activator.getBundleContext().getProperty("java.home"));
+ root = new File(root, "bin");
+ File exe = new File(root, "javaw.exe");
+ if (!exe.exists())
+ exe = new File(root, "java");
+
+ String configuration = new File(userBase, "configuration").getAbsolutePath();
+ String command[];
+ if (!debug) {
+ if (extensions != null) {
+ command = new String[] {(new File(output, "eclipse/eclipse")).getAbsolutePath(), "--launcher.suppressErrors", "-debug", "-consolelog", "-nosplash", "-application", "org.eclipse.equinox.p2.reconciler.application", "-configuration", configuration, "-vm", exe.getAbsolutePath(), "-vmArgs", "-Dosgi.checkConfiguration=true", "-Dp2.fragments=" + extensions.toString()};
+ } else {
+ command = new String[] {(new File(output, "eclipse/eclipse")).getAbsolutePath(), "--launcher.suppressErrors", "-debug", "-consolelog", "-nosplash", "-application", "org.eclipse.equinox.p2.reconciler.application", "-configuration", configuration, "-vm", exe.getAbsolutePath(), "-vmArgs", "-Dosgi.checkConfiguration=true"};
+ }
+ } else {
+ if (extensions != null) {
+ command = new String[] {(new File(output, "eclipse/eclipse")).getAbsolutePath(), "--launcher.suppressErrors", "-debug", "-consolelog", "-nosplash", "-application", "org.eclipse.equinox.p2.reconciler.application", "-configuration", configuration, "-vm", exe.getAbsolutePath(), "-vmArgs", "-Dosgi.checkConfiguration=true", "-Dp2.fragments=" + extensions.toString(), "-Xdebug", "-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"};
+ } else {
+ command = new String[] {(new File(output, "eclipse/eclipse")).getAbsolutePath(), "--launcher.suppressErrors", "-debug", "-consolelog", "-nosplash", "-application", "org.eclipse.equinox.p2.reconciler.application", "-configuration", configuration, "-vm", exe.getAbsolutePath(), "-vmArgs", "-Dosgi.checkConfiguration=true", "-Xdebug", "-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y"};
+ }
+ }
+ run(message, command);
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ extensions = getTempFolder();
+ copy("", getTestData("", "testData/reconciler/extensions/ext1"), extensions);
+ setReadOnly(extensions, true);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ setReadOnly(extensions, false);
+ extensions.delete();
+ super.tearDown();
+ }
+
+ public void testBasicStartup() throws IOException {
+ assertInitialized();
+ setupReadOnlyInstall();
+ try {
+ File userBundlesInfo = new File(userBase, "configuration/org.eclipse.equinox.simpleconfigurator/bundles.info");
+ File userConfigIni = new File(userBase, "configuration/config.ini");
+ assertFalse("0.1", userBundlesInfo.exists());
+ assertFalse("0.2", userConfigIni.exists());
+ reconcileReadOnly("0.21", extensions);
+ assertFalse("0.3", userBundlesInfo.exists());
+ assertTrue("0.4", userConfigIni.exists());
+
+ Properties props = new Properties();
+ InputStream is = new BufferedInputStream(new FileInputStream(userConfigIni));
+ try {
+ props.load(is);
+ } finally {
+ is.close();
+ }
+ assertTrue("0.5", props.containsKey("osgi.sharedConfiguration.area"));
+ assertTrue("0.6", props.size() == 1);
+ } finally {
+ cleanupReadOnlyInstall();
+ }
+ }
+
+ public void testReadOnlyDropinsStartup() throws IOException {
+ if (Platform.getOS().equals(Platform.OS_MACOSX))
+ return;
+
+ assertInitialized();
+ assertDoesNotExistInBundlesInfo("0.1", "myBundle");
+ File jar = getTestData("2.0", "testData/reconciler/plugins/myBundle_1.0.0.jar");
+ add("0.2", "dropins", jar);
+ setupReadOnlyInstall();
+ try {
+ File userBundlesInfo = new File(userBase, "configuration/org.eclipse.equinox.simpleconfigurator/bundles.info");
+ File userConfigIni = new File(userBase, "configuration/config.ini");
+ assertFalse("0.1", userBundlesInfo.exists());
+ assertFalse("0.2", userConfigIni.exists());
+
+ reconcileReadOnly("0.21", extensions);
+
+ assertTrue("0.3", userBundlesInfo.exists());
+ assertTrue("0.4", userConfigIni.exists());
+
+ assertTrue(isInBundlesInfo(userBundlesInfo, "myBundle", null));
+ assertTrue(isInBundlesInfo(userBundlesInfo, "zzz", null));
+
+ // remove the bundle from the dropins and reconcile
+ setReadOnly(readOnlyBase, false);
+ assertTrue("0.7", readOnlyBase.canWrite());
+ remove("1.0", "dropins", "myBundle_1.0.0.jar");
+ setReadOnly(readOnlyBase, true);
+
+ reconcileReadOnly("0.21", extensions, false);
+
+ assertFalse(isInBundlesInfo(userBundlesInfo, "myBundle", null));
+ assertTrue(isInBundlesInfo(userBundlesInfo, "zzz", null));
+
+ reconcileReadOnly("0.2105", null, false);
+
+ // those two will never pass. Disabling extensions while no dropins change
+ // causes master profile to be loaded and user bundles *not* touched
+
+ // assertFalse(isInBundlesInfo(userBundlesInfo, "myBundle", null));
+ // assertFalse(isInBundlesInfo(userBundlesInfo, "zzz", null));
+
+ // only dropin change (or any other p2 operations) causes p2 to write a
+ // new, up-to-date bundles.info
+ setReadOnly(readOnlyBase, false);
+ assertTrue("0.7", readOnlyBase.canWrite());
+ add("0.211", "dropins", jar);
+ setReadOnly(readOnlyBase, true);
+
+ //no extension - new bundles.info should be written
+ reconcileReadOnly("0.22", null, false);
+
+ assertTrue(isInBundlesInfo(userBundlesInfo, "myBundle", null));
+ assertFalse(isInBundlesInfo(userBundlesInfo, "zzz", null));
+ } finally {
+ cleanupReadOnlyInstall();
+ // try to remove it in case an exception was thrown
+ remove("1.0", "dropins", "myBundle_1.0.0.jar");
+ }
+ }
+
+ public void testUserDropinsStartup() throws IOException {
+ if (Platform.getOS().equals(Platform.OS_MACOSX))
+ return;
+
+ assertInitialized();
+ assertDoesNotExistInBundlesInfo("0.1", "myBundle");
+ File jar = getTestData("2.0", "testData/reconciler/plugins/myBundle_1.0.0.jar");
+ File dropins = new File(userBase, "dropins");
+ setupReadOnlyInstall();
+ try {
+ dropins.mkdir();
+
+ copy("copying to dropins", jar, new File(dropins, jar.getName()));
+
+ File userBundlesInfo = new File(userBase, "configuration/org.eclipse.equinox.simpleconfigurator/bundles.info");
+ File userConfigIni = new File(userBase, "configuration/config.ini");
+ assertFalse("0.1", userBundlesInfo.exists());
+ assertFalse("0.2", userConfigIni.exists());
+
+ reconcileReadOnly("0.21", extensions);
+
+ assertTrue("0.3", userBundlesInfo.exists());
+ assertTrue("0.4", userConfigIni.exists());
+
+ assertTrue(isInBundlesInfo(userBundlesInfo, "myBundle", null));
+ assertTrue(isInBundlesInfo(userBundlesInfo, "zzz", null));
+ // remove the bundle from the dropins and reconcile
+ delete(dropins);
+
+ reconcileReadOnly("0.21", extensions);
+ assertFalse(isInBundlesInfo(userBundlesInfo, "myBundle", null));
+ assertTrue(isInBundlesInfo(userBundlesInfo, "zzz", null));
+
+ reconcileReadOnly("0.2105", null, false);
+
+ // those two will never pass. Disabling extensions while no dropins change
+ // causes master profile to be loaded and user bundles *not* touched
+
+ // assertFalse(isInBundlesInfo(userBundlesInfo, "myBundle", null));
+ // assertFalse(isInBundlesInfo(userBundlesInfo, "zzz", null));
+
+ // only dropin change (or any other p2 operations) causes p2 to write a
+ // new, up-to-date bundles.info
+
+ //no extension - new bundles.info should be written
+ dropins.mkdir();
+ copy("copying to dropins", jar, new File(dropins, jar.getName()));
+ reconcileReadOnly("0.22", null, false);
+
+ assertTrue(isInBundlesInfo(userBundlesInfo, "myBundle", null));
+ assertFalse(isInBundlesInfo(userBundlesInfo, "zzz", null));
+ } finally {
+ delete(dropins);
+ cleanupReadOnlyInstall();
+ }
+ }
+}

Back to the top