Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKrzysztof Daniel2013-12-13 15:40:46 +0000
committerKrzysztof Daniel2013-12-17 15:22:28 +0000
commit73e3365d5687050be42fe7484560230fc36a99be (patch)
treef83b4c184fc2c78a0f78bc21f91feaaa695ff11e /bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/sharedinstall/BaseChangeExtendedConflicts.java
parent39da65192fec835fafe75c0f863a63757b59f2dd (diff)
downloadrt.equinox.p2-73e3365d5687050be42fe7484560230fc36a99be.tar.gz
rt.equinox.p2-73e3365d5687050be42fe7484560230fc36a99be.tar.xz
rt.equinox.p2-73e3365d5687050be42fe7484560230fc36a99be.zip
Bug 422054: Create profile from existing bundles.infoI20131224-0800
I've hijacked the bug for the purpose of something that is remotely connected to the problem. Previous commit extends simpleconfigurator to load bundles from different locations, but such an extension breaks p2, as the content of OSGi application no longer corresponds to profile. In order to fix that, following things are done: 0. A fragment must contain valid P2 metadata next to the .info file. 1. User profile is dropped when there is master configuration change. Also, when fragments are changed. 2. When a new surrogate profile is created, P2 will add to the master profile all the units that are found in the fragments repos. Therefore new user profile will contain all the units that were installed by the simpleconfigurator. Fragment repos must be runnable. 3. The director application must be configured with extensions if it is supposed to work. Change-Id: I6e857ea51dd32ae7fab39d9c39bec8a91eb203b7 Signed-off-by: Krzysztof Daniel <kdaniel@redhat.com>
Diffstat (limited to 'bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/sharedinstall/BaseChangeExtendedConflicts.java')
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/sharedinstall/BaseChangeExtendedConflicts.java196
1 files changed, 196 insertions, 0 deletions
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/sharedinstall/BaseChangeExtendedConflicts.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/sharedinstall/BaseChangeExtendedConflicts.java
new file mode 100644
index 000000000..c35b0fd34
--- /dev/null
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/sharedinstall/BaseChangeExtendedConflicts.java
@@ -0,0 +1,196 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Ericsson AB 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:
+ * Ericsson AB - initial API and implementation
+ * Red Hat, Inc. - fragment support
+ ******************************************************************************/
+package org.eclipse.equinox.p2.tests.sharedinstall;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.*;
+import junit.framework.Test;
+import junit.framework.TestSuite;
+import org.eclipse.equinox.internal.p2.updatesite.Activator;
+import org.eclipse.equinox.p2.tests.reconciler.dropins.ReconcilerTestSuite;
+
+public class BaseChangeExtendedConflicts extends BaseChange {
+
+ public static Test suite() {
+ TestSuite suite = new ReconcilerTestSuite();
+ suite.setName(BaseChangeExtendedConflicts.class.getName());
+ suite.addTest(new BaseChangeExtendedConflicts("testBundlesSpecifiedMultipleTimes"));
+ return suite;
+ }
+
+ private File extensions;
+
+ public BaseChangeExtendedConflicts(String name) {
+ super(name);
+ }
+
+ protected void realExecuteVerifier(Properties verificationProperties, boolean withConfigFlag, File... extensions) {
+ File verifierConfig = new File(getTempFolder(), "verification.properties");
+ try {
+ writeProperties(verifierConfig, verificationProperties);
+ } catch (IOException e) {
+ fail("Failing to write out properties to configure verifier", e);
+ }
+
+ String[] args = null;
+
+ if (withConfigFlag) {
+ args = new String[] {"-configuration", userBase.getAbsolutePath() + java.io.File.separatorChar + "configuration", "-application", "org.eclipse.equinox.p2.tests.verifier.application", "-verifier.properties", verifierConfig.getAbsolutePath(), "-consoleLog"};
+ } else {
+ args = new String[] {"-application", "org.eclipse.equinox.p2.tests.verifier.application", "-verifier.properties", verifierConfig.getAbsolutePath(), "-consoleLog"};
+ }
+
+ assertEquals(0, runEclipse("Running verifier", output, args, extensions));
+ }
+
+ protected void executeVerifier(Properties verificationProperties, File... extensions) {
+ realExecuteVerifier(verificationProperties, true, extensions);
+ }
+
+ protected int runEclipse(String message, File location, String[] args, File... extensions) {
+ 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");
+ assertTrue("Java executable not found in: " + exe.getAbsolutePath(), exe.exists());
+ List<String> command = new ArrayList<String>();
+ Collections.addAll(command, new String[] {(new File(location == null ? output : location, "eclipse/eclipse")).getAbsolutePath(), "--launcher.suppressErrors", "-nosplash", "-vm", exe.getAbsolutePath()});
+ Collections.addAll(command, args);
+ Collections.addAll(command, new String[] {"-vmArgs", "-Dosgi.checkConfiguration=true"});
+ if (extensions != null) {
+ String extensionParameter = "";
+ for (File f : extensions) {
+ extensionParameter += f.toString() + ",";
+ }
+ extensionParameter = extensionParameter.substring(0, extensionParameter.length() - 1);
+ Collections.addAll(command, new String[] {"-Dp2.fragments=" + extensionParameter});
+ }
+
+ // command-line if you want to run and allow a remote debugger to connect
+ if (debug)
+ Collections.addAll(command, new String[] {"-Xdebug", "-Xnoagent", "-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000"});
+ int result = run(message, command.toArray(new String[command.size()]));
+ // 13 means that we wrote something out in the log file.
+ // so try and parse it and fail via that message if we can.
+ if (result == 13)
+ parseExitdata(message);
+ return result;
+ }
+
+ protected void installFeature1AndVerifierInUser(File... extension) {
+ //TODO Install something into eclipse - make sure that this can be done in an automated setup
+ runEclipse("Installing in user", output, new String[] {"-configuration", userBase.getAbsolutePath() + java.io.File.separatorChar + "configuration", "-application", "org.eclipse.equinox.p2.director", "-installIU", "p2TestFeature1.feature.group,Verifier.feature.group", "-repository", getTestRepo()}, extension);
+ }
+
+ protected void installFeature2InUser(File... extension) {
+ runEclipse("user2", output, new String[] {"-configuration", userBase.getAbsolutePath() + java.io.File.separatorChar + "configuration", "-application", "org.eclipse.equinox.p2.director", "-installIU", "p2TestFeature2.feature.group", "-repository", getTestRepo()}, extension);
+ }
+
+ protected void installVerifierInBase() {
+ setReadOnly(readOnlyBase, false);
+ runEclipse("Running eclipse", output, new String[] {"-application", "org.eclipse.equinox.p2.director", "-installIU", "Verifier.feature.group", "-repository", getTestRepo()});
+ setReadOnly(readOnlyBase, true);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ setReadOnly(extensions, false);
+ extensions.delete();
+ super.tearDown();
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ extensions = getTestFolder("ext");
+ copy("", getTestData("", "testData/reconciler/extensions/ext1"), extensions);
+ setReadOnly(extensions, true);
+ }
+
+ public void testBundlesSpecifiedMultipleTimes() {
+ assertInitialized();
+ setupReadOnlyInstall();
+
+ { //install verifier and something else in user and checks there are there
+ // when extensions are enabled and configured
+ installFeature1AndVerifierInUser(extensions, extensions);
+ Properties verificationProperties = new Properties();
+ verificationProperties.setProperty("expectedBundleList", "p2TestBundle1,org.eclipse.equinox.p2.tests.verifier,zzz");
+ verificationProperties.setProperty("checkProfileResetFlag", "false");
+ verificationProperties.setProperty("not.sysprop.eclipse.ignoreUserConfiguration", "");
+ executeVerifier(verificationProperties, extensions);
+
+ assertTrue(isInUserBundlesInfo("p2TestBundle1"));
+ assertTrue(isInUserBundlesInfo("zzz"));
+ assertProfileStatePropertiesHasKey(getUserProfileFolder(), "_simpleProfileRegistry_internal_" + getMostRecentProfileTimestampFromBase());
+ }
+
+ { //Now drop extensions.
+
+ // this is dummy call as verifier *was* dropped, and it can't fail in that case
+ // executeVerifier(verificationProperties);
+
+ //install verifier again
+ installVerifierInBase();
+
+ // next start is with extensions, should find zzz and verifier, and no other bundles
+ // as base was changed and user configuration is ignored
+ Properties verificationProperties = new Properties();
+ verificationProperties.setProperty("checkPresenceOfVerifier", "true");
+ verificationProperties.setProperty("unexpectedBundleList", "p2TestBundle1,yyy");
+ verificationProperties.setProperty("checkPresenceOfVerifier", "false");
+ verificationProperties.setProperty("expectedBundleList", "org.eclipse.equinox.p2.tests.verifier,zzz");
+ verificationProperties.setProperty("checkProfileResetFlag", "false");
+ verificationProperties.setProperty("checkMigrationWizard", "true");
+ verificationProperties.setProperty("checkMigrationWizard.open", "true");
+ executeVerifier(verificationProperties, extensions, extensions);
+
+ assertTrue(isInUserBundlesInfo("p2TestBundle1")); //Despite the reset, the bundles.info is still on-disk unmodified since no provisioning has been done
+ assertProfileStatePropertiesHasKey(getUserProfileFolder(), "_simpleProfileRegistry_internal_" + getMostRecentProfileTimestampFromBase());
+
+ verificationProperties = new Properties();
+ //Execute the verifier another time, to check that the profile reset flag is not set
+ verificationProperties.setProperty("checkProfileResetFlag", "false");
+ verificationProperties.setProperty("checkPresenceOfVerifier", "false");
+ verificationProperties.setProperty("expectedBundleList", "org.eclipse.equinox.p2.tests.verifier,zzz");
+ executeVerifier(verificationProperties, extensions, extensions);
+ }
+
+ { //Now add something into the user install again
+ installFeature2InUser(extensions, extensions);
+ Properties verificationProperties = new Properties();
+ verificationProperties.setProperty("expectedBundleList", "org.eclipse.equinox.p2.tests.verifier,zzz,p2TestBundle2");
+ executeVerifier(verificationProperties, extensions, extensions);
+
+ assertFalse(isInUserBundlesInfo("p2TestBundle1")); // was dropped some time ago
+ assertTrue(isInUserBundlesInfo("p2TestBundle2")); // was installed recently
+ assertTrue(isInUserBundlesInfo("org.eclipse.equinox.p2.tests.verifier")); //It is now coming from the base
+ assertTrue(isInUserBundlesInfo("zzz")); // from extensions
+
+ verificationProperties.setProperty("expectedBundleList", "org.eclipse.equinox.p2.tests.verifier,zzz,p2TestBundle2");
+ executeVerifier(verificationProperties, extensions, extensions);
+
+ //verifier without extensions should drop all except verifier in the base
+ Properties newVerificationProperties = new Properties();
+ newVerificationProperties.setProperty("expectedBundleList", "org.eclipse.equinox.p2.tests.verifier");
+ newVerificationProperties.setProperty("unexpectedBundleList", "zzz,p2TestBundle2,p2TestBundle1");
+ executeVerifier(newVerificationProperties);
+
+ // zzz again present, verifier present
+ // p2Test bundle visible, because all timestamp match properly again!
+ verificationProperties.setProperty("expectedBundleList", "org.eclipse.equinox.p2.tests.verifier,zzz,p2TestBundle2,");
+ verificationProperties.setProperty("unexpectedBundleList", "p2TestBundle1");
+ executeVerifier(verificationProperties, extensions, extensions);
+ }
+ }
+}

Back to the top