CQ-4081: Initial import
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/.classpath b/tests/org.eclipse.e4.enterprise.installer.test/.classpath new file mode 100644 index 0000000..8a8f166 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/.classpath
@@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> + <classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/> + <classpathentry kind="src" path="src"/> + <classpathentry kind="output" path="bin"/> +</classpath>
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/.project b/tests/org.eclipse.e4.enterprise.installer.test/.project new file mode 100644 index 0000000..c0e9017 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/.project
@@ -0,0 +1,34 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>org.eclipse.e4.enterprise.installer.test</name> + <comment></comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.ManifestBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.SchemaBuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.pde.api.tools.apiAnalysisBuilder</name> + <arguments> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.pde.PluginNature</nature> + <nature>org.eclipse.jdt.core.javanature</nature> + <nature>org.eclipse.pde.api.tools.apiAnalysisNature</nature> + </natures> +</projectDescription>
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.e4.enterprise.installer.test/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..eec20cf --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,12 @@ +#Mon Apr 20 09:46:07 CDT 2009 +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.5 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.5
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/META-INF/MANIFEST.MF b/tests/org.eclipse.e4.enterprise.installer.test/META-INF/MANIFEST.MF new file mode 100644 index 0000000..921c075 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/META-INF/MANIFEST.MF
@@ -0,0 +1,10 @@ +Manifest-Version: 1.0 +Bundle-ManifestVersion: 2 +Bundle-Name: Installer Test Fragment +Bundle-SymbolicName: org.eclipse.e4.enterprise.installer.test +Bundle-Version: 4.6.0.qualifier +Fragment-Host: org.eclipse.e4.enterprise.installer;bundle-version="4.0.0" +Bundle-RequiredExecutionEnvironment: JavaSE-1.6 +Require-Bundle: org.junit, + org.easymock, + org.eclipse.e4.ui.test.utils
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/about.html b/tests/org.eclipse.e4.enterprise.installer.test/about.html new file mode 100644 index 0000000..f77f378 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/about.html
@@ -0,0 +1,22 @@ +<h1>About This Content</h1> + +23 June, 2010 + +<h2>License</h2> + +<p>The Eclipse Foundation makes available all content in this plug-in +("Content"). Unless otherwise indicated below, the Content is provided +to you under the terms and conditions of the Eclipse Public License +Version 1.0 ("EPL"). A copy of the EPL is available at +http://www.eclipse.org/legal/epl-v10.html. For purposes of the EPL, +"Program" will mean the Content.</p> + +<p>If you did not receive this Content directly from the Eclipse +Foundation, the Content is being redistributed by another party +("Redistributor") and different terms and conditions may apply to your +use of any object code in the Content. Check the Redistributor’s +license that was provided with the Content. If no such license exists, +contact the Redistributor. Unless otherwise indicated below, the terms +and conditions of the EPL still apply to any source code in the +Content and such source code may be obtained at +http://www.eclipse.org.</p>
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/build.properties b/tests/org.eclipse.e4.enterprise.installer.test/build.properties new file mode 100644 index 0000000..41eb6ad --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/build.properties
@@ -0,0 +1,4 @@ +source.. = src/ +output.. = bin/ +bin.includes = META-INF/,\ + .
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/AbstractBundleTest.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/AbstractBundleTest.java new file mode 100644 index 0000000..6619aa3 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/AbstractBundleTest.java
@@ -0,0 +1,95 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.util.List; + +import org.eclipse.e4.enterprise.installer.internal.site.InstallationSite; +import org.eclipse.e4.enterprise.installer.internal.site.InstallationSiteManager; +import org.eclipse.e4.ui.test.utils.FixturesLocation; +import org.eclipse.e4.ui.test.utils.TestCaseX; + + +public abstract class AbstractBundleTest extends TestCaseX { + + public static final URL SITE400_FIXTURE_URL = makeFixtureURL("fixtures/site_4.0.0/site.xml"); + public static final URL SITE401_FIXTURE_URL = makeFixtureURL("fixtures/site_4.0.1/site.xml"); + public static final URL SITE500_FIXTURE_URL = makeFixtureURL("fixtures/site_5.0.0/site.xml"); + + + protected BundleUpdater testee; + + private static final String INSTALL_TO_SITE_DIR = System.getProperty("java.io.tmpdir") + File.separator + "AbstractBundleTest"; + + protected File downloadRootDir; + + public AbstractBundleTest() { + super(); + } + + @Override + protected void setUp() throws Exception { + //delete anything in the INSTALL_TO_SITE_DIR + downloadRootDir = new File(INSTALL_TO_SITE_DIR); + testee = new BundleUpdater(); + + //if any tests are forced to stop AFTER the set-up but before the tearDown then we might have + //a problem, so we are just running tearDown first for safety + tearDown(); + } + + @Override + protected void tearDown() throws Exception { + //find the site that exists and get rid of it + InstallationSiteManager builder = new InstallationSiteManager(downloadRootDir); + InstallationSite currentSite = builder.find(); + currentSite.removeFromConfiguredSites(); + deleteDir(downloadRootDir); + } + + protected int countOccurancesOfListItemsStartingWithPrefix(List<String> list, String prefix) { + int count = 0; + for (String string : list) { + if (string.startsWith(prefix)) + count++; + } + return count; + } + + private static URL makeFixtureURL(String fixturePath) { + // DJO: FIXME: Why does this ignore the fixturePath parameter? This is smelly! Phew! + try { +// return FileLocator.toFileURL(find); + return new URL(FixturesLocation.FIXTURE_ROOT); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + private boolean deleteDir(File fileOrDir) { + if (fileOrDir.isDirectory()) { + String[] children = fileOrDir.list(); + for (int i = 0; i < children.length; i++) { + boolean success = deleteDir(new File(fileOrDir, children[i])); + if (!success) { + return false; + } + } + } + + // The directory or file can now be deleted + return fileOrDir.delete(); + } + +} \ No newline at end of file
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/BundleUpdaterConfigTest.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/BundleUpdaterConfigTest.java new file mode 100644 index 0000000..ef08e05 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/BundleUpdaterConfigTest.java
@@ -0,0 +1,321 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer; + +import static org.eclipse.e4.enterprise.installer.BundleUpdaterConfig.DOWNLOAD_ROOT_KEY; + +import java.io.ByteArrayInputStream; +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Properties; +import java.util.Set; + +import org.eclipse.e4.enterprise.installer.BundleUpdaterConfig; +import org.eclipse.e4.enterprise.installer.FeatureVersionedIdentifier; +import org.eclipse.e4.enterprise.installer.InstallError; + +import junit.framework.TestCase; + + +public class BundleUpdaterConfigTest extends TestCase { + + // convertToFeatureVersionSet + // ------------------------------------------------------------------------------- + + public void testConvertToFeatureVersionSet_MoreThan2SpaceSeparatedString_ThrowsException() throws Exception { + String id = "featureID"; + String version = "1.2.3"; + String spurious = "spuriousExtraThing"; + + String line = id + " " + version + " " + spurious; + + try { + BundleUpdaterConfig.convertToFeatureVersionSet(convertStringToStream(line)); + fail(); + } catch (InstallError e) { + // want to be here + } + + } + + public void testConvertToFeatureVersionSet_InLineCommentsIgnored() throws Exception { + String id1 = "featureID1"; + String version1 = "1.2.31"; + String id2 = "featureID2"; + String version2 = "1.2.32"; + String id3 = "featureID3"; + String version3 = "1.2.33"; + String id4 = "featureID4"; + String version4 = "1.2.34"; + + String comment = "# I am a comment because I start with a hash."; + + String line1 = id1 + " " + version1 + comment + "\n"; + String line2 = id2 + " " + version2 + comment + "\n"; + String line3 = id3 + " " + version3 + comment + "\n"; + String line4 = id4 + " " + version4 + comment + "\n"; + + String input = line1 + line2 + line3 + line4; + + Set<FeatureVersionedIdentifier> result = BundleUpdaterConfig.convertToFeatureVersionSet(convertStringToStream(input)); + + assertEquals(4, result.size()); + assertTrue(result.contains(new FeatureVersionedIdentifier(id1, version1))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id2, version2))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id3, version3))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id4, version4))); + } + + public void testConvertToFeatureVersionSet_CommentLinesIgnored() throws Exception { + String id1 = "featureID1"; + String version1 = "1.2.31"; + String id2 = "featureID2"; + String version2 = "1.2.32"; + String id3 = "featureID3"; + String version3 = "1.2.33"; + String id4 = "featureID4"; + String version4 = "1.2.34"; + + String line1 = id1 + " " + version1 + "\n"; + String line2 = id2 + " " + version2 + "\n"; + String line3 = id3 + " " + version3 + "\n"; + String line4 = id4 + " " + version4 + "\n"; + + String commentLine = "# I am a comment because I start with a hash. \n"; + + String input = line1 + commentLine + line2 + commentLine + line3 + commentLine + line4; + + Set<FeatureVersionedIdentifier> result = BundleUpdaterConfig.convertToFeatureVersionSet(convertStringToStream(input)); + + assertEquals(4, result.size()); + assertTrue(result.contains(new FeatureVersionedIdentifier(id1, version1))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id2, version2))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id3, version3))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id4, version4))); + } + + public void testConvertToFeatureVersionSet_EmptyLinesIgnored() throws Exception { + String id1 = "featureID1"; + String version1 = "1.2.31"; + String id2 = "featureID2"; + String version2 = "1.2.32"; + String id3 = "featureID3"; + String version3 = "1.2.33"; + String id4 = "featureID4"; + String version4 = "1.2.34"; + + String line1 = id1 + " " + version1 + "\n"; + String line2 = id2 + " " + version2 + "\n"; + String line3 = id3 + " " + version3 + "\n"; + String line4 = id4 + " " + version4 + "\n"; + + String blankLine = " \n"; + + String input = line1 + blankLine + line2 + blankLine + line3 + blankLine + line4; + + Set<FeatureVersionedIdentifier> result = BundleUpdaterConfig.convertToFeatureVersionSet(convertStringToStream(input)); + + assertEquals(4, result.size()); + assertTrue(result.contains(new FeatureVersionedIdentifier(id1, version1))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id2, version2))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id3, version3))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id4, version4))); + } + + public void testConvertToFeatureVersionSet_UnspecifiedVersion_defaultsTo000() throws Exception { + String id = "featureID"; + String version = ""; + Set<FeatureVersionedIdentifier> result = BundleUpdaterConfig.convertToFeatureVersionSet(convertStringToStream(id + " " + version)); + + assertEquals(1, result.size()); + assertTrue(result.contains(new FeatureVersionedIdentifier(id, "0.0.0"))); + } + + public void testConvertToFeatureVersionSet_ManyItems_returnsCorrectlyParsedSet() throws Exception { + String id1 = "featureID1"; + String version1 = "1.2.31"; + String id2 = "featureID2"; + String version2 = "1.2.32"; + String id3 = "featureID3"; + String version3 = "1.2.33"; + String id4 = "featureID4"; + String version4 = "1.2.34"; + + String line1 = id1 + " " + version1 + "\n"; + String line2 = id2 + " " + version2 + "\n"; + String line3 = id3 + " " + version3 + "\n"; + String line4 = id4 + " " + version4 + "\n"; + + String input = line1 + line2 + line3 + line4; + + Set<FeatureVersionedIdentifier> result = BundleUpdaterConfig.convertToFeatureVersionSet(convertStringToStream(input)); + + assertEquals(4, result.size()); + assertTrue(result.contains(new FeatureVersionedIdentifier(id1, version1))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id2, version2))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id3, version3))); + assertTrue(result.contains(new FeatureVersionedIdentifier(id4, version4))); + } + + public void testConvertToFeatureVersionSet_singleItem_returnsCorrectlyParsedSet() throws Exception { + String id = "featureID"; + String version = "1.2.3"; + Set<FeatureVersionedIdentifier> result = BundleUpdaterConfig.convertToFeatureVersionSet(convertStringToStream(id + " " + version)); + + assertEquals(1, result.size()); + assertTrue(result.contains(new FeatureVersionedIdentifier(id, version))); + } + + public void testConvertToFeatureVersionSet_EmptyStream_returnsEmptySet() throws Exception { + Set<FeatureVersionedIdentifier> result = BundleUpdaterConfig.convertToFeatureVersionSet(convertStringToStream("")); + + assertEquals(0, result.size()); + } + + private ByteArrayInputStream convertStringToStream(String contents) { + ByteArrayInputStream inputStream = new ByteArrayInputStream(contents.getBytes()); + return inputStream; + } + + // parseURLs + // ------------------------------------------------------------------------------- + + public void testParseURLS_WithAtLeastOneDuffOne_throwsException() throws Exception { + String urlAsString1 = "http://www.eclipse.org"; + String urlAsString2 = "http://news.bbc.co.uk"; + String urlAsString3 = "I-am-not-a-valid-url"; + String urlAsString4 = "http://www.theregister.co.uk/"; + + String input = urlAsString1 + " " + urlAsString2 + " " + urlAsString3 + " " + urlAsString4 + " "; + + try { + BundleUpdaterConfig.parseURLs(input); + fail(); + } catch (InstallError e) { + assertTrue(e.getCause() instanceof MalformedURLException); + } + } + + public void testParseURLS_N_ValidURLsWithVariousSpaces_parsedCorrectly() throws Exception { + String urlAsString1 = "http://www.eclipse.org"; + String urlAsString2 = "http://news.bbc.co.uk"; + String urlAsString3 = "http://slashdot.org/"; + String urlAsString4 = "http://www.theregister.co.uk/"; + + String s = " "; + + String input = s + s + s + urlAsString1 + s + urlAsString2 + s + s + s + urlAsString3 + s + s + s + s + s + urlAsString4 + s + s; + + URL[] result = BundleUpdaterConfig.parseURLs(input); + + assertEquals(4, result.length); + assertEquals(urlAsString1, result[0].toString()); + assertEquals(urlAsString2, result[1].toString()); + assertEquals(urlAsString3, result[2].toString()); + assertEquals(urlAsString4, result[3].toString()); + } + + public void testParseURLS_TwoValidURLsWithManySpaces_parsedCorrectly() throws Exception { + String urlAsString1 = "http://www.eclipse.org"; + String urlAsString2 = "http://news.bbc.co.uk"; + + String fourSpaces = " "; + String input = urlAsString1 + fourSpaces + urlAsString2; + + URL[] result = BundleUpdaterConfig.parseURLs(input); + + assertEquals(2, result.length); + assertEquals(urlAsString1, result[0].toString()); + assertEquals(urlAsString2, result[1].toString()); + } + + public void testParseURLS_TwoValidURLs_parsedCorrectly() throws Exception { + String urlAsString1 = "http://www.eclipse.org"; + String urlAsString2 = "http://news.bbc.co.uk"; + + String input = urlAsString1 + " " + urlAsString2; + + URL[] result = BundleUpdaterConfig.parseURLs(input); + + assertEquals(2, result.length); + assertEquals(urlAsString1, result[0].toString()); + assertEquals(urlAsString2, result[1].toString()); + } + + public void testParseURLS_SingleURLWithPadding_parsedCorrectly() throws Exception { + String urlAsString = " http://www.eclipse.org "; + + URL[] result = BundleUpdaterConfig.parseURLs(urlAsString); + + assertEquals(1, result.length); + assertEquals(urlAsString.trim(), result[0].toString()); + } + + public void testParseURLS_SingleURL_parsedCorrectly() throws Exception { + String urlAsString = "http://www.eclipse.org"; + + URL[] result = BundleUpdaterConfig.parseURLs(urlAsString); + + assertEquals(1, result.length); + assertEquals(urlAsString, result[0].toString()); + } + + public void testParseURLS_KeyPresentValueIsSpace_throwsException() throws Exception { + try { + BundleUpdaterConfig.parseURLs(" "); + fail(); + } catch (InstallError e) { + assertTrue(e.getCause() instanceof MalformedURLException); + } + } + + public void testParseURLS_KeyPresentValueIsEmptyString_throwsException() throws Exception { + try { + BundleUpdaterConfig.parseURLs(""); + fail(); + } catch (InstallError e) { + assertTrue(e.getCause() instanceof MalformedURLException); + } + } + + public void testParseURLS_KeyPresentButNoValue_ThrowsException() throws Exception { + try { + BundleUpdaterConfig.parseURLs(null); + fail(); + } catch (InstallError e) { + // want to be here + } + } + + public void testFindDownloadDirectoryRoot_PropertySet_returnsValueOfProperty() throws Exception { + String expectedPath = "c:/temp/mytestvalue"; + Properties properties = new Properties(); + properties.put(DOWNLOAD_ROOT_KEY, expectedPath); + BundleUpdaterConfig.props = properties; // inject our properties into + // BundleUpdaterConfig + + File actual = BundleUpdaterConfig.findDownloadDirectoryRoot(); + + File expected = new File(expectedPath); + + assertEquals(expected, actual); + } + + public void testFindDownloadDirectoryRoot_NoPropertySet_returnsDefaultDownloadRoot() throws Exception { + BundleUpdaterConfig.props = new Properties(); + + File actual = BundleUpdaterConfig.findDownloadDirectoryRoot(); + File expected = BundleUpdaterConfig.getDefaultDownloadRoot(); + + assertEquals(expected, actual); + } +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/BundleUpdaterTest.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/BundleUpdaterTest.java new file mode 100644 index 0000000..8b22d79 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/BundleUpdaterTest.java
@@ -0,0 +1,600 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer; + +import java.io.File; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.e4.enterprise.installer.internal.FeatureReferenceTree; +import org.eclipse.e4.enterprise.installer.internal.site.InstallationSite; +import org.eclipse.e4.enterprise.installer.internal.site.InstallationSiteManager; +import org.eclipse.e4.enterprise.installer.internal.site.StubInstallationSite; +import org.eclipse.e4.ui.test.utils.FixturesLocation; +import org.eclipse.e4.ui.test.utils.TestCaseX; +import org.eclipse.update.core.IFeature; +import org.eclipse.update.core.IFeatureReference; +import org.eclipse.update.core.ISite; +import org.eclipse.update.core.VersionedIdentifier; + + +public class BundleUpdaterTest extends TestCaseX { + private static final String FIXTURE_FEATURE_ID = "org.eclipse.e4.enterprise.installer.test.fixture.feature"; + + private static final String FIXTURE_FEATURE_ID_A = "org.eclipse.e4.enterprise.installer.test.fixture.many_a.feature"; + private static final String FIXTURE_FEATURE_ID_B = "org.eclipse.e4.enterprise.installer.test.fixture.many_b.feature"; + private static final String FIXTURE_FEATURE_ID_C = "org.eclipse.e4.enterprise.installer.test.fixture.many_c.feature"; + + private static final String SITE400_FIXTURE = FixturesLocation.FIXTURE_ROOT + "/site_4.0.0/site.xml"; + private static final String SITEABC_FIXTURE = FixturesLocation.FIXTURE_ROOT + "/site_ABC/site.xml"; + private static final String SITE401_FIXTURE = FixturesLocation.FIXTURE_ROOT + "/site_4.0.1/site.xml"; + private static final String SITE500_FIXTURE = FixturesLocation.FIXTURE_ROOT + "/site_5.0.0/site.xml"; + private static final String FOO_FIXTURE = FixturesLocation.FIXTURE_ROOT + "/no_site_ABC/foo.xml"; + + private URL SITE400_URL; + private URL SITEABC_URL; + private URL SITE401_URL; + private URL SITE500_URL; + private URL FOO_URL; + + + BundleUpdater testee; + + public BundleUpdaterTest() throws MalformedURLException { + SITE400_URL = new URL(SITE400_FIXTURE); + SITEABC_URL = new URL(SITEABC_FIXTURE); + SITE401_URL = new URL(SITE401_FIXTURE); + SITE500_URL = new URL(SITE500_FIXTURE); + FOO_URL = new URL(FOO_FIXTURE); + + } + + protected void setUp() throws Exception { + super.setUp(); + testee = new BundleUpdater(null); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + + // Custom-Asserts-------------------------------------------------------------------------------------------------------------------- + + private void assertFeatureFoundIn(List<IFeatureReference> list, String featureID) throws Exception { + for (IFeatureReference feature : list) { + if (feature.getVersionedIdentifier().getIdentifier().equals(featureID)) { + return; + } + } + fail("Expected pruned feature to install list to contain: " + featureID); + } + + // calculateFeaturesReferencesToInstall----------------------------------------------------------------------------------------------- + + public void testVersionQualifiersAreOrderedAsAStringComparisonWhenUsingList() throws InstallError { + List<IFeatureReference> featuresToLookIn = new ArrayList<IFeatureReference>(); + Set<FeatureVersionedIdentifier> featuresToProvision = new HashSet<FeatureVersionedIdentifier>(); + + String featureID = "MyFeature"; + featuresToLookIn.add(FeatureReferenceMother.createFeatureReferenceFromFVIWithNoChildren( + new FeatureVersionedIdentifier(featureID, "1.0.0.M7"))); + IFeatureReference expectedIFR = FeatureReferenceMother.createFeatureReferenceFromFVIWithNoChildren( + new FeatureVersionedIdentifier(featureID, "1.0.0.R3")); + featuresToLookIn.add(expectedIFR); + + featuresToProvision.add(new FeatureVersionedIdentifier(featureID, "0.0.0")); + + List<IFeatureReference> result = testee.resolveVersionNumbersAsIFRList(featuresToLookIn, featuresToProvision, true); + + assertEquals(1, result.size()); + assertTrue(result.contains(expectedIFR)); + } + + public void testVersionQualifiersAreOrderedAsAStringComparisonWhenUsingSet() throws InstallError { + FeatureReferenceTree tree = new FeatureReferenceTree(); + String featureID = "MyFeature"; + FeatureVersionedIdentifier oldFvi = new FeatureVersionedIdentifier(featureID, "1.0.0.M7"); + IFeatureReference oldFeature = FeatureReferenceMother.createFeatureReferenceFromFVIWithNoChildren(oldFvi); + + FeatureVersionedIdentifier newFvi = new FeatureVersionedIdentifier(featureID, "1.0.0.R3"); + IFeatureReference newFeature = FeatureReferenceMother.createFeatureReferenceFromFVIWithNoChildren(newFvi); + + tree.add(newFeature); + tree.add(oldFeature); + + Set<FeatureVersionedIdentifier> setToProvision = new HashSet<FeatureVersionedIdentifier>(); + setToProvision.add(new FeatureVersionedIdentifier(featureID, "0.0.0")); + + Set<FeatureVersionedIdentifier> result = testee.resolveVersionNumbersAsFVISet(tree, setToProvision, true); + + assertEquals(1, result.size()); + assertTrue(result.contains(newFvi)); + } + + // 0 FRs come from local, the rest from remote + public void testCalculateFeaturesReferencesToInstall_0FeatureRefsComeFromTheLocalSite() throws Exception { + List<IFeatureReference> local = new ArrayList<IFeatureReference>(); + List<IFeatureReference> remote = new ArrayList<IFeatureReference>(); + remote.add(new SpecialStubFeatureReference("f1", false)); + remote.add(new SpecialStubFeatureReference("f2", false)); + remote.add(new SpecialStubFeatureReference("f3", false)); + + List<IFeatureReference> result = testee.calculateFeaturesReferencesToInstall(remote, local); + + for (IFeatureReference featureReference : result) { + SpecialStubFeatureReference stubFR = (SpecialStubFeatureReference) featureReference; + assertFalse("featureName:" + stubFR.name, stubFR.isLocal); + } + } + + // 1 FR comes from local, the rest from remote + public void testCalculateFeaturesReferencesToInstall_1FeatureRefComesFromTheLocalSite() throws Exception { + String featureOnBothLocalAndRemote = "f2"; + List<IFeatureReference> local = new ArrayList<IFeatureReference>(); + local.add(new SpecialStubFeatureReference(featureOnBothLocalAndRemote, true)); + List<IFeatureReference> remote = new ArrayList<IFeatureReference>(); + remote.add(new SpecialStubFeatureReference("f1", false)); + remote.add(new SpecialStubFeatureReference(featureOnBothLocalAndRemote, false)); + remote.add(new SpecialStubFeatureReference("f3", false)); + + List<IFeatureReference> result = testee.calculateFeaturesReferencesToInstall(remote, local); + + for (IFeatureReference featureReference : result) { + SpecialStubFeatureReference stubFR = (SpecialStubFeatureReference) featureReference; + String name = stubFR.name; + if (featureOnBothLocalAndRemote.equals(name)) { + assertTrue("featureName:" + name, stubFR.isLocal); + } else { + assertFalse("featureName:" + name, stubFR.isLocal); + } + } + } + + // n FRs come from local, the rest from remote + public void testCalculateFeaturesReferencesToInstall_ManyFeatureRefComesFromTheLocalSite() throws Exception { + String featureOnBothLocalAndRemote1 = "f2"; + String featureOnBothLocalAndRemote2 = "f3"; + + HashSet<String> localNames = new HashSet<String>(2); + localNames.add(featureOnBothLocalAndRemote1); + localNames.add(featureOnBothLocalAndRemote2); + + List<IFeatureReference> local = new ArrayList<IFeatureReference>(); + local.add(new SpecialStubFeatureReference(featureOnBothLocalAndRemote1, true)); + local.add(new SpecialStubFeatureReference(featureOnBothLocalAndRemote2, true)); + + List<IFeatureReference> remote = new ArrayList<IFeatureReference>(); + remote.add(new SpecialStubFeatureReference("f1", false)); + remote.add(new SpecialStubFeatureReference(featureOnBothLocalAndRemote1, false)); + remote.add(new SpecialStubFeatureReference(featureOnBothLocalAndRemote2, false)); + remote.add(new SpecialStubFeatureReference("f4", false)); + + List<IFeatureReference> result = testee.calculateFeaturesReferencesToInstall(remote, local); + + for (IFeatureReference featureReference : result) { + SpecialStubFeatureReference stubFR = (SpecialStubFeatureReference) featureReference; + String name = stubFR.name; + if (localNames.contains(name)) { + assertTrue("featureName:" + name, stubFR.isLocal); + } else { + assertFalse("featureName:" + name, stubFR.isLocal); + } + } + } + // all come from local. + public void testCalculateFeaturesReferencesToInstall_AllFeatureRefsComeFromTheLocalSite() throws Exception { + List<IFeatureReference> local = new ArrayList<IFeatureReference>(); + local.add(new SpecialStubFeatureReference("f1", true)); + local.add(new SpecialStubFeatureReference("f2", true)); + local.add(new SpecialStubFeatureReference("f3", true)); + List<IFeatureReference> remote = new ArrayList<IFeatureReference>(); + + List<IFeatureReference> result = testee.calculateFeaturesReferencesToInstall(remote, local); + + for (IFeatureReference featureReference : result) { + SpecialStubFeatureReference stubFR = (SpecialStubFeatureReference) featureReference; + assertTrue("featureName:" + stubFR.name, stubFR.isLocal); + } + } + // setFeaturesToProvisionAsSetOfAllFeaturesOnRemoteSitesIfUnspecified----------------------------------------------------------------- + + public void testSetFeaturesToProvisionAsSetOfAllFeaturesOnRemoteSitesIfUnspecified_whenProvisingSetNull_CopiesFromIFRs() throws Exception { + FeatureReferenceTree input = testee.getAllFeaturesFromUpdateSites(new URL[] { SITEABC_URL }); + + Set<FeatureVersionedIdentifier> result = testee.setFeaturesToProvisionToBeOfAllFeaturesOnRemoteSitesIfUnspecified(null, input); + + assertEquals(3, result.size()); + assertTrue(result.contains(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID_A, "1.0.0"))); + assertTrue(result.contains(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID_B, "1.0.0"))); + assertTrue(result.contains(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID_C, "1.0.0"))); + } + + public void testSetFeaturesToProvisionAsSetOfAllFeaturesOnRemoteSitesIfUnspecified_returnsFirstArgWhenFirstArgNonNull() throws Exception { + Set<FeatureVersionedIdentifier> input = new HashSet<FeatureVersionedIdentifier>(); + input.add(new FeatureVersionedIdentifier("oink", "1.2.3")); + input.add(new FeatureVersionedIdentifier("moo", "2.3.4")); + input.add(new FeatureVersionedIdentifier("baah", "3.4.5")); + + Set<FeatureVersionedIdentifier> result = testee.setFeaturesToProvisionToBeOfAllFeaturesOnRemoteSitesIfUnspecified(input, new FeatureReferenceTree()); + + assertTrue(input.equals(result)); + } + + + // extractCorrectVersionsOfFeatureReferenceToProvision------------------------------------------------------------------------------------ + + public void testExtractCorrectVersionsOfFeatureReferenceToProvision_whereFeatureToBeProvisionedHasVersion000_updateSitesHaveMultipleVersions_getsLatestVersions_andIsNotOrderDependent() throws Exception { + Set<FeatureVersionedIdentifier> featureIDsToProvision = new HashSet<FeatureVersionedIdentifier>(); + featureIDsToProvision.add(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID, "0.0.0")); + + FeatureVersionedIdentifier expectedFVI = new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID, "4.0.1"); + + // Ordered 400, 401 + FeatureReferenceTree featuresOnUpdateSite = testee.getAllFeaturesFromUpdateSites(new URL[] { SITE400_URL, SITE401_URL }); + List<IFeatureReference> result = testee.resolveVersionNumbersAsIFRList(featuresOnUpdateSite.getAllReferences(), featureIDsToProvision, true); + assertEquals(1, result.size()); + assertEquals(expectedFVI, new FeatureVersionedIdentifier(result.get(0))); + + // Ordered 401, 400 - this was causing an error + featuresOnUpdateSite = testee.getAllFeaturesFromUpdateSites(new URL[] { SITE401_URL, SITE400_URL }); + result = testee.resolveVersionNumbersAsIFRList(featuresOnUpdateSite.getAllReferences(), featureIDsToProvision, true); + assertEquals(1, result.size()); + assertEquals(expectedFVI, new FeatureVersionedIdentifier(result.get(0))); + } + + public void testExtractCorrectVersionsOfFeatureReferenceToProvision_featureToProvisionVersion000_UpdateSiteFeatureVersionNot000() throws Exception { + Set<FeatureVersionedIdentifier> featureIDsToProvision = new HashSet<FeatureVersionedIdentifier>(); + featureIDsToProvision.add(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID, "0.0.0")); + + FeatureReferenceTree featuresOnUpdateSite = testee.getAllFeaturesFromUpdateSites(new URL[] { SITE400_URL }); + + List<IFeatureReference> result = testee.resolveVersionNumbersAsIFRList(featuresOnUpdateSite.getAllReferences(), featureIDsToProvision, true); + + assertEquals(1, result.size()); + assertEquals(featuresOnUpdateSite.getAllReferences().get(0), result.get(0)); + } + + + public void testExtractCorrectVersionsOfFeatureReferenceToProvision_FeatureNotAvailableThrowsException() throws Exception { + Set<FeatureVersionedIdentifier> featureIDsToProvision = new HashSet<FeatureVersionedIdentifier>(); + featureIDsToProvision.add(new FeatureVersionedIdentifier("a_feature_that_doesnt_exist on_the_site", "1.0.0")); + + try { + testee.resolveVersionNumbersAsIFRList(new ArrayList<IFeatureReference>(), featureIDsToProvision, true); + fail("Should have failed"); + } catch (InstallError e) { + // success + } + } + + public void testExtractCorrectVersionsOfFeatureReferenceToProvision_FeatureNotAvailableStillSucceeds() throws Exception { + Set<FeatureVersionedIdentifier> featureIDsToProvision = new HashSet<FeatureVersionedIdentifier>(); + featureIDsToProvision.add(new FeatureVersionedIdentifier("a_feature_that_doesnt_exist on_the_site", "1.0.0")); + + try { + testee.resolveVersionNumbersAsIFRList(new ArrayList<IFeatureReference>(), featureIDsToProvision, false); + // success + } catch (InstallError e) { + fail("Should not have failed"); + } + } + + public void testExtractCorrectVersionsOfFeatureReferenceToProvision_featureToProvisionSameAsUpdateSiteFeatures_oneFeature() throws Exception { + Set<FeatureVersionedIdentifier> featureIDsToProvision = new HashSet<FeatureVersionedIdentifier>(); + featureIDsToProvision.add(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID, "4.0.0")); + FeatureReferenceTree featuresOnUpdateSite = testee.getAllFeaturesFromUpdateSites(new URL[] { SITE400_URL }); + + List<IFeatureReference> result = testee.resolveVersionNumbersAsIFRList(featuresOnUpdateSite.getAllReferences(), featureIDsToProvision, true); + + assertEquals(1, result.size()); + assertEquals(featuresOnUpdateSite.getAllReferences().get(0), result.get(0)); + } + + public void testExtractCorrectVersionsOfFeatureReferenceToProvision_featureToProvisionSameAsUpdateSiteFeatures_threeFeatures() throws Exception { + Set<FeatureVersionedIdentifier> featureIDsToProvision = new HashSet<FeatureVersionedIdentifier>(); + featureIDsToProvision.add(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID_A, "1.0.0")); + featureIDsToProvision.add(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID_B, "1.0.0")); + featureIDsToProvision.add(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID_C, "1.0.0")); + FeatureReferenceTree featuresOnUpdateSite = testee.getAllFeaturesFromUpdateSites(new URL[] { SITEABC_URL }); + + List<IFeatureReference> result = testee.resolveVersionNumbersAsIFRList(featuresOnUpdateSite.getAllReferences(), featureIDsToProvision, true); + + assertEquals(3, result.size()); + + assertFeatureFoundIn(result, FIXTURE_FEATURE_ID_A); + assertFeatureFoundIn(result, FIXTURE_FEATURE_ID_B); + assertFeatureFoundIn(result, FIXTURE_FEATURE_ID_C); + } + + // test where provisioning list is a subset of features on site + public void testExtractCorrectVersionsOfFeatureReferenceToProvision_featureToProvisionFewerThanUpdateSiteFeatures() throws Exception { + Set<FeatureVersionedIdentifier> featureIDsToProvision = new HashSet<FeatureVersionedIdentifier>(); + featureIDsToProvision.add(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID_A, "1.0.0")); + featureIDsToProvision.add(new FeatureVersionedIdentifier(FIXTURE_FEATURE_ID_C, "1.0.0")); + FeatureReferenceTree featuresOnUpdateSite = testee.getAllFeaturesFromUpdateSites(new URL[] { SITEABC_URL }); + + List<IFeatureReference> result = testee.resolveVersionNumbersAsIFRList(featuresOnUpdateSite.getAllReferences(), featureIDsToProvision, true); + + assertEquals(2, result.size()); + assertFeatureFoundIn(result, FIXTURE_FEATURE_ID_A); + assertFeatureFoundIn(result, FIXTURE_FEATURE_ID_C); + } + + // getAllFeaturesFromUpdateSites----------------------------------------------------------------------------------------------------- + + public void testGetAllFeaturesFromUpdateSite_AlternativeNameXML_returnsAllFeatures() throws Exception { + URL[] updateSites = new URL[] { FOO_URL}; + + List<IFeatureReference> result = testee.getAllFeaturesFromUpdateSites(updateSites).getAllReferences(); + + assertFeatureFoundIn(result, FIXTURE_FEATURE_ID_A); + assertFeatureFoundIn(result, FIXTURE_FEATURE_ID_B); + assertFeatureFoundIn(result, FIXTURE_FEATURE_ID_C); + } + + public void testGetAllFeaturesFromUpdateSites_worksFor2Sites() throws Exception { + URL[] updateSites = new URL[] { SITE400_URL, SITE401_URL }; + + FeatureReferenceTree allFeaturesFromUpdateSites = testee.getAllFeaturesFromUpdateSites(updateSites); + + assertEquals(2, allFeaturesFromUpdateSites.getAllReferences().size()); + + String[] resultVersions = extractVersionStringsAndSort(allFeaturesFromUpdateSites.getAllReferences()); + + assertEquals("org.eclipse.e4.enterprise.installer.test.fixture.feature_4.0.0", resultVersions[0]); + assertEquals("org.eclipse.e4.enterprise.installer.test.fixture.feature_4.0.1", resultVersions[1]); + } + + private String[] extractVersionStringsAndSort(List<IFeatureReference> allFeaturesFromUpdateSites) throws CoreException { + String[] resultVersions = new String[allFeaturesFromUpdateSites.size()]; + for (int i = 0; i < allFeaturesFromUpdateSites.size(); i++) { + resultVersions[i] = allFeaturesFromUpdateSites.get(i).getVersionedIdentifier().toString(); + } + Arrays.sort(resultVersions); + return resultVersions; + } + + public void testGetAllFeaturesFromUpdateSites_worksForSingleSite() throws Exception { + URL[] updateSites = new URL[] { SITE400_URL }; + + FeatureReferenceTree allFeaturesFromUpdateSites = testee.getAllFeaturesFromUpdateSites(updateSites); + + assertEquals(1, allFeaturesFromUpdateSites.getAllReferences().size()); + + IFeatureReference featureReference = allFeaturesFromUpdateSites.getAllReferences().get(0); + assertEquals("org.eclipse.e4.enterprise.installer.test.fixture.feature_4.0.0", featureReference.getVersionedIdentifier().toString()); + } + + public static class StuntSiteManager extends InstallationSiteManager { + public StuntSiteManager(File downloadRootDir) { + super(downloadRootDir); + downloadRootDir.delete(); + downloadRootDir.mkdirs(); + } + + int callCount = 0; + + public int getCallCount() { + return callCount; + } + + @Override + public void restartInitiated() throws IOException { + callCount++; + } + }; + + public void testInstallAndRollBackOnError_WhenNoRestartIsNeeded_RestartInitiatedNotInvoked() throws Exception { + InstallationSite currentSite = new StubInstallationSite(false); + File downloadRoot = File.createTempFile("any", "thing"); + final StuntSiteManager stuntManager = new StuntSiteManager(downloadRoot); + + testee.installAndRollBackOnError(stuntManager, currentSite, new ArrayList<IFeatureReference>()); + + assertEquals(0, stuntManager.getCallCount()); + } + + public void testIOExceptionInRestartManager_causesInstallRollbackAndInstallError() throws Exception { + final StubInstallationSite newSite = new StubInstallationSite(true); + StubInstallationSite currentSite = new StubInstallationSite(true); + + // stubs + InstallationSiteManager stuntManager = new InstallationSiteManager(File.createTempFile("any", "thing")) { + @Override + public InstallationSite create() throws CoreException { + return newSite; + } + @Override + public void restartInitiated() throws IOException { + throw new IOException(); + } + }; + + try { + testee.installAndRollBackOnError(stuntManager, currentSite, new ArrayList<IFeatureReference>()); + fail(); + } catch (InstallError e) { + // want to be here + } + + /* + * the following expectations embody "rollback". There may be better ways to + * represent "rolling back" as currently we are saying the same thing in + * two places (code, test). Perhaps this could be done with a proper + * transaction of some kind. + * + * Really, what you want above is to know that + * "roll back has been initiated"; you probably don't need to care how + * the rollback works. + */ + assertEquals(1, newSite.removeFromConfiguredSitesCount); + assertEquals(1, currentSite.addToConfiguredSitesCount); + } + + // ------------------------------------------------------------------------------------ + + public void testResolveVersionNumbersAsVFISet_cannotFindFeatureReference_featuresMustBePresent_throwsInstallError() throws Exception { + FeatureReferenceTree tree = new FeatureReferenceTree(); + Set<FeatureVersionedIdentifier> toProvision = new HashSet<FeatureVersionedIdentifier>(); + toProvision.add(new FeatureVersionedIdentifier("org.eclipse.foo.bar", "1.1.0")); + toProvision.add(new FeatureVersionedIdentifier("org.eclipse.foo2.bar", "1.1.0")); + + try { + testee.resolveVersionNumbersAsFVISet(tree, toProvision, true); + fail("Should have thrown an InstallError"); + } catch (InstallError e) { + //success + } + } + + public void testResolveVersionNumbersAsVFISet_cannotFindFeatureReference_returnsEmptySet() throws Exception { + FeatureReferenceTree tree = new FeatureReferenceTree(); + Set<FeatureVersionedIdentifier> toProvision = new HashSet<FeatureVersionedIdentifier>(); + toProvision.add(new FeatureVersionedIdentifier("org.eclipse.foo.bar", "1.1.0")); + toProvision.add(new FeatureVersionedIdentifier("org.eclipse.foo2.bar", "1.1.0")); + + Set<FeatureVersionedIdentifier> result = testee.resolveVersionNumbersAsFVISet(tree, toProvision, false); + assertTrue("returned set should be empty", result.isEmpty()); + } + + // ------------------------------------------------------------------------------------ + + private class SpecialStubFeatureReference implements IFeatureReference { + +// This class smells fishy, there is another StubFeatureReference class that should +// be used in this test class. The getOuterType() method is added automatically +// by the IDE, probably because this is in an inner class. + + public String name = ""; + public boolean isLocal = false; + + public SpecialStubFeatureReference(String name) { + this.name = name; + } + + public SpecialStubFeatureReference(String name, boolean isLocal) { + this.name = name; + this.isLocal = isLocal; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + getOuterType().hashCode(); + result = prime * result + ((name == null) ? 0 : name.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + SpecialStubFeatureReference other = (SpecialStubFeatureReference) obj; + if (!getOuterType().equals(other.getOuterType())) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + public IFeature getFeature() throws CoreException { + // TODO Auto-generated method stub + return null; + } + + public IFeature getFeature(IProgressMonitor monitor) throws CoreException { + // TODO Auto-generated method stub + return null; + } + + public String getName() { + // TODO Auto-generated method stub + return null; + } + + public ISite getSite() { + // TODO Auto-generated method stub + return null; + } + + public URL getURL() { + // TODO Auto-generated method stub + return null; + } + + public VersionedIdentifier getVersionedIdentifier() throws CoreException { + // TODO Auto-generated method stub + return null; + } + + public boolean isPatch() { + // TODO Auto-generated method stub + return false; + } + + public void setSite(ISite site) { + // TODO Auto-generated method stub + + } + + public void setURL(URL url) throws CoreException { + // TODO Auto-generated method stub + + } + + public Object getAdapter(Class adapter) { + // TODO Auto-generated method stub + return null; + } + + public String getNL() { + // TODO Auto-generated method stub + return null; + } + + public String getOS() { + // TODO Auto-generated method stub + return null; + } + + public String getOSArch() { + // TODO Auto-generated method stub + return null; + } + + public String getWS() { + // TODO Auto-generated method stub + return null; + } + + private BundleUpdaterTest getOuterType() { + return BundleUpdaterTest.this; + } + + } +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/FeatureReferenceMother.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/FeatureReferenceMother.java new file mode 100644 index 0000000..d6b23be --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/FeatureReferenceMother.java
@@ -0,0 +1,48 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer; + +import org.eclipse.update.core.IFeatureReference; +import org.eclipse.update.core.IIncludedFeatureReference; + +public class FeatureReferenceMother { + + private static final String DEFAULT_ID = "id"; + private static final String DEFAULT_VERSION = "0.0.1"; + + public static IFeatureReference createFeatureReferenceFromFVIWithChildren(FeatureVersionedIdentifier fvi, IIncludedFeatureReference... featureReference) { + StubFeatureReference stub = new StubFeatureReference(new StubFeature(featureReference)); + stub.setVersionedIdentifier(fvi.featureID, fvi.featureVersion); + return stub; + } + + public static IFeatureReference createFeatureReferenceFromFVIWithNoChildren(FeatureVersionedIdentifier fvi) { + StubFeatureReference stub = new StubFeatureReference(new StubFeature(new StubFeatureReference[]{})); + stub.setVersionedIdentifier(fvi.featureID, fvi.featureVersion); + return stub; + } + + public static IIncludedFeatureReference createFeatureWithNoChildren() { + StubFeatureReference stubFeatureReference = new StubFeatureReference(new StubFeature(new StubFeatureReference[]{})); + stubFeatureReference.setVersionedIdentifier(DEFAULT_ID, DEFAULT_VERSION); + return stubFeatureReference; + } + + public static IFeatureReference createFeatureWithChildren(IIncludedFeatureReference... featureReference) { + StubFeatureReference stubFeatureReference = new StubFeatureReference(new StubFeature(featureReference)); + stubFeatureReference.setVersionedIdentifier(DEFAULT_ID, DEFAULT_VERSION); + return stubFeatureReference; + } + + + + +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/FeatureVersionedIdentifierTest.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/FeatureVersionedIdentifierTest.java new file mode 100644 index 0000000..b43253c --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/FeatureVersionedIdentifierTest.java
@@ -0,0 +1,34 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer; + +import org.eclipse.e4.enterprise.installer.FeatureVersionedIdentifier; + +import junit.framework.TestCase; + +public class FeatureVersionedIdentifierTest extends TestCase { + + public void testConstructorValidatesVersionCorrectly() throws Exception { + + //valid: + new FeatureVersionedIdentifier("name","1.2.3"); + + //invalid: + try{ + FeatureVersionedIdentifier testee = new FeatureVersionedIdentifier("name","1.monkey.foo"); + fail(); + } + catch (IllegalArgumentException e) { + // want to be here + } + } + +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/StubFeature.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/StubFeature.java new file mode 100644 index 0000000..b060879 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/StubFeature.java
@@ -0,0 +1,32 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.update.core.Feature; +import org.eclipse.update.core.IIncludedFeatureReference; + +public class StubFeature extends Feature { + + private final IIncludedFeatureReference[] includedFeatureReferences; + + public StubFeature(IIncludedFeatureReference[] includedFeatureReferences) { + this.includedFeatureReferences = includedFeatureReferences; + } + + + @Override + public IIncludedFeatureReference[] getIncludedFeatureReferences() + throws CoreException { + return includedFeatureReferences; + } + +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/StubFeatureReference.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/StubFeatureReference.java new file mode 100644 index 0000000..24df063 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/StubFeatureReference.java
@@ -0,0 +1,74 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.update.core.IFeature; +import org.eclipse.update.core.IncludedFeatureReference; +import org.eclipse.update.core.VersionedIdentifier; + +public class StubFeatureReference extends IncludedFeatureReference { + + private IFeature feature; + private VersionedIdentifier versionedIdentifier; + + public StubFeatureReference(IFeature feature){ + this.feature = feature; + } + + public void setVersionedIdentifier(String id, String version){ + versionedIdentifier = new VersionedIdentifier(id, version); + } + + @Override + public VersionedIdentifier getVersionedIdentifier() { + return versionedIdentifier; + } + + @Override + public IFeature getFeature() throws CoreException { + return feature; + } + + @Override + public IFeature getFeature(IProgressMonitor monitor) throws CoreException { + return feature; + } + + @Override + public int hashCode() { + final int prime = 31; + int result = 1; + result = prime * result + ((feature == null) ? 0 : feature.hashCode()); + return result; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (!super.equals(obj)) + return false; + if (getClass() != obj.getClass()) + return false; + StubFeatureReference other = (StubFeatureReference) obj; + if (feature == null) { + if (other.feature != null) + return false; + } else if (!feature.equals(other.feature)) + return false; + return true; + } + + + +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/FeatureReferenceTreeTest.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/FeatureReferenceTreeTest.java new file mode 100644 index 0000000..9e7d6e4 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/FeatureReferenceTreeTest.java
@@ -0,0 +1,181 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer.internal; + +import java.util.List; + +import junit.framework.TestCase; + +import org.eclipse.e4.enterprise.installer.FeatureReferenceMother; +import org.eclipse.e4.enterprise.installer.FeatureVersionedIdentifier; +import org.eclipse.update.core.IFeatureReference; +import org.eclipse.update.core.IIncludedFeatureReference; + +public class FeatureReferenceTreeTest extends TestCase { + + private FeatureReferenceTree testee; + + public void setUp() { + testee = new FeatureReferenceTree(); + } + + public void testGetDescendants_GivenKnownKeysWithManyDescendants_returnsAllDescendants() throws Exception { + + // f1 + // ...f11 * + // ......f111 + // ......f112 + // ......f113 + // .........f1131 + // ...f12 + // ......f121 + // ...f13 + // f2 * + // ...f21 + // ...f22 + // ......f221 + // ......f222 + + IIncludedFeatureReference f111 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference f112 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference f1131 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference f113 = (IIncludedFeatureReference) FeatureReferenceMother.createFeatureWithChildren(f1131); + + FeatureVersionedIdentifier keyf11 = new FeatureVersionedIdentifier("f11", "11.11.11"); + IIncludedFeatureReference f11 = (IIncludedFeatureReference) FeatureReferenceMother.createFeatureReferenceFromFVIWithChildren(keyf11, f111, f112, f113); + + IIncludedFeatureReference f121 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference f12 = (IIncludedFeatureReference )FeatureReferenceMother.createFeatureWithChildren(f121); + + IIncludedFeatureReference f13 = FeatureReferenceMother.createFeatureWithNoChildren(); + IFeatureReference f1 = FeatureReferenceMother.createFeatureWithChildren(f11, f12, f13); + + IIncludedFeatureReference f21 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference f221 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference f222 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference f22 = (IIncludedFeatureReference)FeatureReferenceMother.createFeatureWithChildren(f221, f222); + + FeatureVersionedIdentifier keyf2 = new FeatureVersionedIdentifier("f2", "2.2.2"); + IFeatureReference f2 = FeatureReferenceMother.createFeatureReferenceFromFVIWithChildren(keyf2, f21,f22); + + testee.add(f1); + testee.add(f2); + + List<IFeatureReference> descendantsF11 = testee.getFeatureReferenceWithDescendants(keyf11); + assertEquals(5, descendantsF11.size()); + assertTrue(descendantsF11.contains(f11)); + assertTrue(descendantsF11.contains(f111)); + assertTrue(descendantsF11.contains(f112)); + assertTrue(descendantsF11.contains(f113)); + assertTrue(descendantsF11.contains(f1131)); + + List<IFeatureReference> descendantsF2 = testee.getFeatureReferenceWithDescendants(keyf2); + assertEquals(5, descendantsF2.size()); + assertTrue(descendantsF2.contains(f2)); + assertTrue(descendantsF2.contains(f21)); + assertTrue(descendantsF2.contains(f22)); + assertTrue(descendantsF2.contains(f221)); + assertTrue(descendantsF2.contains(f222)); + } + + public void testGetDescendants_GivenKnownKeyWithManyDescendants_returnsAllDescendants() throws Exception { + + IIncludedFeatureReference f4 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference f3 = (IIncludedFeatureReference) FeatureReferenceMother.createFeatureWithChildren(f4); + + FeatureVersionedIdentifier key = new FeatureVersionedIdentifier("foo", "1.2.3"); + IIncludedFeatureReference f2 = (IIncludedFeatureReference) FeatureReferenceMother.createFeatureReferenceFromFVIWithChildren(key, f3); + IIncludedFeatureReference f1 = (IIncludedFeatureReference) FeatureReferenceMother.createFeatureWithChildren(f2); + + testee.add(f1); + + List<IFeatureReference> descendants = testee.getFeatureReferenceWithDescendants(key); + assertEquals(3, descendants.size()); + assertTrue(descendants.contains(f2)); + assertTrue(descendants.contains(f3)); + assertTrue(descendants.contains(f4)); + + + } + + + public void testGetDescendants_GivenKnownKeyWithNoDescendants_returnsTheReference() throws Exception { + FeatureVersionedIdentifier key = new FeatureVersionedIdentifier("myFeature", "1.1.1"); + IFeatureReference keyReference = FeatureReferenceMother.createFeatureReferenceFromFVIWithNoChildren(key); + testee.add(keyReference); + + List<IFeatureReference> descendants = testee.getFeatureReferenceWithDescendants(key); + + assertEquals(1, descendants.size()); + assertEquals(keyReference, descendants.get(0)); + } + + public void testGetDescendants_GivenUnknownKey_returnsEmptyList() throws Exception { + List<IFeatureReference> descendants = testee.getFeatureReferenceWithDescendants(new FeatureVersionedIdentifier("missingfeature", "1.1.1")); + assertTrue(descendants.isEmpty()); + } + + public void testWhenOneReferenceWithChildrenOfChildren_returnsAllFeatureReference() throws Exception { + + IIncludedFeatureReference grandChild1 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference grandChild2 = FeatureReferenceMother.createFeatureWithNoChildren(); + + IFeatureReference child1 = FeatureReferenceMother.createFeatureWithChildren(grandChild1, grandChild2); + + IFeatureReference parent = FeatureReferenceMother.createFeatureWithChildren((IIncludedFeatureReference) child1); + testee.add(parent); + + assertEquals(4, testee.getAllReferences().size()); + assertTrue(testee.getAllReferences().contains(parent)); + assertTrue(testee.getAllReferences().contains(child1)); + assertTrue(testee.getAllReferences().contains(grandChild1)); + assertTrue(testee.getAllReferences().contains(grandChild2)); + } + + public void testWhenOneReferenceWithMultipleChildren_returnsAll() throws Exception { + IIncludedFeatureReference child1 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference child2 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference child3 = FeatureReferenceMother.createFeatureWithNoChildren(); + IIncludedFeatureReference child4 = FeatureReferenceMother.createFeatureWithNoChildren(); + IFeatureReference parent = FeatureReferenceMother.createFeatureWithChildren(child1, child2, child3, child4); + testee.add(parent); + + assertEquals(5, testee.getAllReferences().size()); + assertTrue(testee.getAllReferences().contains(parent)); + assertTrue(testee.getAllReferences().contains(child1)); + assertTrue(testee.getAllReferences().contains(child2)); + assertTrue(testee.getAllReferences().contains(child3)); + assertTrue(testee.getAllReferences().contains(child4)); + } + + public void testWhenOneReferenceWithOneChildHasBeenAdded_returnsBoth() throws Exception { + IIncludedFeatureReference child = FeatureReferenceMother.createFeatureWithNoChildren(); + IFeatureReference parent = FeatureReferenceMother.createFeatureWithChildren(child); + testee.add(parent); + + assertEquals(2, testee.getAllReferences().size()); + assertTrue(testee.getAllReferences().contains(parent)); + assertTrue(testee.getAllReferences().contains(child)); + } + + public void testWhenOneReferenceWithNoChildrenHasBeenAdded_OnlyOneReturned() throws Exception { + IFeatureReference expectedFeatureReference = FeatureReferenceMother.createFeatureWithNoChildren(); + testee.add(expectedFeatureReference); + + assertEquals(1, testee.getAllReferences().size()); + assertEquals(expectedFeatureReference, testee.getAllReferences().get(0)); + } + + public void testWhenNoObjectsHaveBeenAdded_EmptyListReturned() { + assertTrue(testee.getAllReferences().isEmpty()); + } + +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/InstallationSiteBuilderTest.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/InstallationSiteBuilderTest.java new file mode 100644 index 0000000..ee4cca4 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/InstallationSiteBuilderTest.java
@@ -0,0 +1,191 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer.internal.site; + +import java.io.File; +import java.text.SimpleDateFormat; +import java.util.Date; + +import junit.framework.TestCase; + +import org.eclipse.e4.enterprise.installer.internal.site.InstallationSite; +import org.eclipse.e4.enterprise.installer.internal.site.InstallationSiteManager; +import org.eclipse.e4.enterprise.installer.internal.site.NullInstallationSite; +import org.eclipse.e4.enterprise.installer.internal.site.UpdateManagerSite; +import org.eclipse.update.configuration.IConfiguredSite; +import org.eclipse.update.core.SiteManager; + + +public class InstallationSiteBuilderTest extends TestCase { + + private File downloadRootDir; + private InstallationSiteManager testee; + + protected void setUp() throws Exception { + downloadRootDir = new File(System.getProperty("java.io.tmpdir") + "/obtest"); + downloadRootDir.mkdir(); + testee = new InstallationSiteManager(downloadRootDir); + } + + protected void tearDown() throws Exception { + deleteDir(downloadRootDir); + } + + public void testDirectoryNameFiltering() throws Exception { + File root = File.createTempFile("downloadroot", "temp"); + + SimpleDateFormat simpleDateFormat = new SimpleDateFormat(InstallationSiteManager.CONFIG_SITE_DIR_DATE_NAME_FORMAT); + Date now = new Date(); + String date = simpleDateFormat.format(now); + + long nowLong = now.getTime(); + + File pruneMe1 = new File(root, "I should not be deleted"); + File pruneMe2 = new File(root, "_I should not be deleted"); + File pruneMe3 = new File(root, date + "something"); + File pruneMe4 = new File(root, date.substring(0, 10)); + + + File expected1 = new File(root, simpleDateFormat.format(now)); + File expected2 = new File(root, simpleDateFormat.format(new Date(nowLong + 12345))); + File expected3 = new File(root, simpleDateFormat.format(new Date(nowLong + 123456))); + File expected4 = new File(root, simpleDateFormat.format(new Date(nowLong + 1234567))); + + File[] testData = new File[] { expected4, pruneMe1, expected3, pruneMe2, expected2, pruneMe3, expected1 , pruneMe4}; + + File[] result = testee.filterOutFilesThatDoNotMatchExpectedFormat(testData); + + assertTrue(arrayContains(result, expected1)); + assertTrue(arrayContains(result, expected2)); + assertTrue(arrayContains(result, expected3)); + assertTrue(arrayContains(result, expected4)); + + assertFalse(arrayContains(result, pruneMe1)); + assertFalse(arrayContains(result, pruneMe2)); + assertFalse(arrayContains(result, pruneMe3)); + assertFalse(arrayContains(result, pruneMe4)); + + assertEquals(4, result.length); + } + + private boolean arrayContains(Object[] array, Object objectToLookFor) { + for (Object object : array) { + if (object == objectToLookFor) { + return true; + } + } + return false; + } + + public void testFind_existingSitePresent_returnsInstallationSite() throws Exception { + InstallationSite expectedSite = testee.create(); + expectedSite.addToConfiguredSites(); + + InstallationSite actualSite = testee.find(); + + assertEquals(expectedSite,actualSite); + expectedSite.removeFromConfiguredSites(); + } + + public void testFind_noSiteExists_returnsNullInstallationSite() throws Exception { + InstallationSite site = testee.find(); + assertTrue(site instanceof NullInstallationSite); + } + + public void testCreate_creatingNewSite_leavesExistingDirectoriesUntouched() throws Exception { + File testSubDir = new File(downloadRootDir,"rubbish"); + testSubDir.mkdir(); + + testee.create(); + + File[] subdirs = downloadRootDir.listFiles(); + + assertEquals(2,subdirs.length); + assertTrue(testSubDir.exists()); + } + + public void testCreate_creatingNewSite_makesDirectoryUnderDownloadRootDir() throws Exception { + assertEquals(0,downloadRootDir.list().length); + testee.create(); + + File[] subdirs = downloadRootDir.listFiles(); + assertEquals(1,subdirs.length); + assertTrue(subdirs[0].isDirectory()); + + File[] subsubdirs = subdirs[0].listFiles(); + assertEquals(1,subsubdirs.length); + assertTrue(subsubdirs[0].isDirectory()); + assertEquals("eclipse",subsubdirs[0].getName()); + } + + public void testFindCurrentDownloadSite_existingSitePresent_returnsSite() throws Exception { + UpdateManagerSite expectedSite = (UpdateManagerSite) testee.create(); + expectedSite.addToConfiguredSites(); + IConfiguredSite actualSite = testee.findCurrentDownloadSite(downloadRootDir, SiteManager.getLocalSite().getCurrentConfiguration().getConfiguredSites()); + + expectedSite.removeFromConfiguredSites(); + assertEquals(expectedSite.getConfiguredSite(),actualSite); + } + + public void testFindCurrentDownloadSite_NoPreviouslyCreatedDownloadSites_returnsNullCurrentSite() throws Exception { + IConfiguredSite[] onlyEclipseConfiguredSites = SiteManager.getLocalSite().getCurrentConfiguration().getConfiguredSites(); + IConfiguredSite actual = testee.findCurrentDownloadSite(downloadRootDir,onlyEclipseConfiguredSites); + assertNull(actual); + } + + public void testFindCurrentDownloadSite_NoConfiguredSites_returnsNullCurrentSite() throws Exception { + IConfiguredSite actual = testee.findCurrentDownloadSite(downloadRootDir,new IConfiguredSite[0]); + assertNull(actual); + } + + public void testIsSubdirectory_SourceIsNull_returnsFalse() { + boolean isSubdirectory = testee.isSubdirectory(null, new File("c:\\windows")); + assertFalse(isSubdirectory); + } + + public void testIsSubdirectory_TargetIsNull_returnsFalse() { + boolean isSubdirectory = testee.isSubdirectory(new File("c:\\windows"), null); + assertFalse(isSubdirectory); + } + + public void testIsSubdirectory_TargetIsSubdirectoryOfSource_returnsTrue() { + boolean isSubdirectory = testee.isSubdirectory(new File("c:\\windows"), new File("C:\\windows/system")); + assertTrue(isSubdirectory); + } + + public void testIsSubdirectory_TargetIsNotSubdirectoryOfSource_returnsFalse() { + boolean isSubdirectory = testee.isSubdirectory(new File("c:/windows"), new File("c:/temp")); + assertFalse(isSubdirectory); + } + + public void testIsSubdirectory_TargetIsSameAsParentButWithTrailingSlash_returnsFalse() { + boolean isSubdirectory = testee.isSubdirectory(new File("c:/windows"), new File("c:/windows/")); + assertFalse(isSubdirectory); + } + + public void testIsSubdirectory_TargetHasNoDirectorySeparator_returnsFalse() { + boolean isSubdirectory = testee.isSubdirectory(new File("c:/windows"), new File("c:/windowsrubbish")); + assertFalse(isSubdirectory); + } + + private boolean deleteDir(File dir) { + if (dir.isDirectory()) { + String[] children = dir.list(); + for (int i=0; i<children.length; i++) { + boolean success = deleteDir(new File(dir, children[i])); + if (!success) { + return false; + } + } + } + return dir.delete(); + } +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/RestartManagerTest.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/RestartManagerTest.java new file mode 100644 index 0000000..5bd29ba --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/RestartManagerTest.java
@@ -0,0 +1,34 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer.internal.site; + +import junit.framework.TestCase; + +public class RestartManagerTest extends TestCase { + + public RestartManagerTest(String name) { + super(name); + } + + protected void setUp() throws Exception { + super.setUp(); + } + + protected void tearDown() throws Exception { + super.tearDown(); + } + + public void testDummyTest() throws Exception { + // success: to keep JUnit from complaining that there are no tests here. + } + + +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/StubInstallationSite.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/StubInstallationSite.java new file mode 100644 index 0000000..feae759 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/StubInstallationSite.java
@@ -0,0 +1,49 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer.internal.site; + +import java.lang.reflect.InvocationTargetException; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.update.core.IFeatureReference; + +public class StubInstallationSite extends NullInstallationSite { + + private final boolean installReturnValue; + public int addToConfiguredSitesCount = 0; + public int removeFromConfiguredSitesCount = 0; + + public StubInstallationSite(boolean installReturnValue) { + this.installReturnValue = installReturnValue; + + } + + @Override + public boolean install(IFeatureReference[] updateSiteFeatures, IProgressMonitor progressMonitor) throws CoreException, InvocationTargetException { + return installReturnValue; + } + + @Override + public void addToConfiguredSites() { + addToConfiguredSitesCount++; + } + + @Override + public void removeFromConfiguredSites() { + removeFromConfiguredSitesCount++; + } + + + + + +}
diff --git a/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/UpdateManagerSiteTest.java b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/UpdateManagerSiteTest.java new file mode 100644 index 0000000..7ec2a30 --- /dev/null +++ b/tests/org.eclipse.e4.enterprise.installer.test/src/org/eclipse/e4/enterprise/installer/internal/site/UpdateManagerSiteTest.java
@@ -0,0 +1,250 @@ +/****************************************************************************** + * Copyright (c) David Orme 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: + * David Orme - initial API and implementation + ******************************************************************************/ +package org.eclipse.e4.enterprise.installer.internal.site; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedList; +import java.util.List; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; +import org.eclipse.e4.enterprise.installer.InstallError; +import org.eclipse.e4.enterprise.installer.internal.site.InstallationSiteManager; +import org.eclipse.e4.enterprise.installer.internal.site.UpdateManagerSite; +import org.eclipse.e4.enterprise.installer.internal.site.UpdateManagerSite.UpdateSiteFeatureXML; +import org.eclipse.e4.ui.test.utils.FixturesLocation; +import org.eclipse.e4.ui.test.utils.TestCaseX; +import org.eclipse.update.core.IFeature; +import org.eclipse.update.core.IFeatureReference; +import org.eclipse.update.core.ISite; +import org.eclipse.update.core.ISiteFeatureReference; +import org.eclipse.update.core.SiteManager; +import org.eclipse.update.core.VersionedIdentifier; + + + +public class UpdateManagerSiteTest extends TestCaseX { + private UpdateManagerSite testee; + private File downloadRootDir; + + protected void setUp() throws Exception { + downloadRootDir = new File(System.getProperty("java.io.tmpdir") + "/obtest"); + testee = (UpdateManagerSite) new InstallationSiteManager(downloadRootDir).create(); + } + + // downloadToUpdateSet-------------------------------------------------------------------------------------------- + private static final String SITE400_FIXTURE = FixturesLocation.FIXTURE_ROOT + "/site_4.0.0/site.xml"; + + public void testConvertIntoUpdateSite_CheckThatUpdateSiteContainsSameFeaturesAsConfigSiteItIsGeneratedFrom() throws Exception { + UpdateManagerSite testee = createTemporaryDownloadSiteWithDownloadedContents(); + try { + testee.convertIntoUpdateSite(); + assertUpdateSiteHasIdenticalFeaturesAsDownloadSite(testee); + } finally { + testee.removeFromConfiguredSites(); // Make sure we don't leave Eclipse in a wierd state + } + } + + private void assertUpdateSiteHasIdenticalFeaturesAsDownloadSite( + UpdateManagerSite testee) throws CoreException, InstallError { + URL url = testee.getConfiguredSite().getSite().getURL(); + IFeatureReference[] featureReferences = SiteManager.getSite(url, false, new NullProgressMonitor()).getFeatureReferences(); + + List<IFeatureReference> featureReferencesList = Arrays.asList(featureReferences); + + assertTrue("Update site should have identical Features as download site", + testee.hasIdenticalFeatures(featureReferencesList)); + } + + private UpdateManagerSite createTemporaryDownloadSiteWithDownloadedContents() throws IOException, + CoreException, MalformedURLException, InvocationTargetException + { + File tempDir = createTempDir("1BenchTest-"); // start w/ numeral so that it sorts to the top + System.out.println("Temp update site dir = " + tempDir.getAbsolutePath()); // for debugging purposes + + InstallationSiteManager siteBuilder = new InstallationSiteManager(tempDir); + UpdateManagerSite temporaryDownloadSite = (UpdateManagerSite) siteBuilder.create(); + temporaryDownloadSite.addToConfiguredSites(); + + ISiteFeatureReference[] remoteFeatures = SiteManager.getSite( + new URL(SITE400_FIXTURE), false, new NullProgressMonitor()) + .getFeatureReferences(); + temporaryDownloadSite.install(remoteFeatures, new NullProgressMonitor()); + + return temporaryDownloadSite; + } + + // computeUpdateSiteFeatureData-------------------------------------------------------------------------------- + + public void testComputeUpdateSiteFeatureData_emptyInput_resultsInEmptyOutput() throws Exception { + UpdateSiteFeatureXML[] result = testee.computeUpdateSiteFeatureData( + new IFeatureReference[] {}); + assertEquals(0, result.length); + } + + public void testComputeUpdateSiteFeatureData_indexesMatch() throws Exception { + IFeatureReference[] input = new IFeatureReference[] { + newFeatureRef("file:///c:/path/to/features/featurefolder/", + "com.foo.feature.id", "1.0.0"), + newFeatureRef("file:///c:/path/to/features/featurefolder/", + "com.foo.feature.id", "1.0.0"), + }; + + UpdateSiteFeatureXML[] result = testee.computeUpdateSiteFeatureData(input); + + assertEquals(2, result.length); + } + + // computeFeatureXMLData--------------------------------------------------------------------------------------- + + public void testComputeFeatureXMLData_dataMatches() throws Exception { + IFeatureReference input = newFeatureRef( + "file:///c:/path/to/features/featurefolder/", + "com.foo.feature.id", "1.0.0"); + + UpdateSiteFeatureXML result = testee.computeFeatureXMLData(input); + + assertEquals("features/featurefolder.jar", result.jarRelativePath); + assertEquals("com.foo.feature.id", result.id); + assertEquals("1.0.0", result.version); + } + + // areFeaturesDifferent?--------------------------------------------------------------------------------------- + + public void testAreFeaturesDifferent_catchesListsInDifferentOrders(){ + List<String> list1 = new ArrayList<String>(); + List<String> list2 = new LinkedList<String>(); + + list1.add("thing 1"); + list1.add("thing 2"); + list1.add("thing 3"); + + list2.add("thing 3"); + list2.add("thing 1"); + list2.add("thing 2"); + + assertFalse(testee.areFeaturesDifferent(list1, list2)); + } + + public void testAreFeaturesDifferent_matchesSimpleDuplicate(){ + List<String> list1 = new ArrayList<String>(); + List<String> list2 = new LinkedList<String>(); + + list1.add("the same thing"); + list2.add("the same thing"); + + assertFalse(testee.areFeaturesDifferent(list1, list2)); + } + + public void testAreFeaturesDifferent_catchesDifferentNoEmptyLists(){ + List<String> list1 = new ArrayList<String>(); + List<String> list2 = new LinkedList<String>(); + + list1.add("something"); + list1.add("somethingelse"); + + assertTrue(testee.areFeaturesDifferent(list1, list2)); + } + + public void testAreFeaturesDifferent_catchesDifferentListAndEmptyList(){ + List<String> list1 = new ArrayList<String>(); + List<String> list2 = new LinkedList<String>(); + + list1.add("something"); + + assertTrue(testee.areFeaturesDifferent(list1, list2)); + } + + public void testAreFeaturesDifferent_matchesEmptyLists(){ + List<String> empty1 = new ArrayList<String>(); + List<String> empty2 = new LinkedList<String>(); + + assertFalse(testee.areFeaturesDifferent(empty1, empty2)); + } + + //-------------------------------------------------------------------------------- + + private IFeatureReference newFeatureRef(final String url, final String id, final String version) { + return new IFeatureReference() { + + public IFeature getFeature() throws CoreException { + return null; + } + + public IFeature getFeature(IProgressMonitor monitor) + throws CoreException { + return null; + } + + public String getName() { + return null; + } + + public ISite getSite() { + return null; + } + + public URL getURL() { + URL result = null; + try { + result = new URL(url); + } catch (MalformedURLException e) { + fail(); + } + return result; + } + + public VersionedIdentifier getVersionedIdentifier() + throws CoreException { + return new VersionedIdentifier(id, version); + } + + public boolean isPatch() { + return false; + } + + public void setSite(ISite site) { + } + + public void setURL(URL url) throws CoreException { + } + + @SuppressWarnings("unchecked") + public Object getAdapter(Class adapter) { + return null; + } + + public String getNL() { + return null; + } + + public String getOS() { + return null; + } + + public String getOSArch() { + return null; + } + + public String getWS() { + return null; + }}; + } + + +}