Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMykola Nikishov2016-05-07 18:17:51 +0000
committerMykola Nikishov2016-11-08 19:21:38 +0000
commit348da1c4083d2077214c55411ca9172fdbce84ce (patch)
treeb00fa50847473dd5f4641b20b756add283997ed5
parente3af66ba071eef246c815eef769b64a381b82625 (diff)
downloadrt.equinox.p2-348da1c4083d2077214c55411ca9172fdbce84ce.tar.gz
rt.equinox.p2-348da1c4083d2077214c55411ca9172fdbce84ce.tar.xz
rt.equinox.p2-348da1c4083d2077214c55411ca9172fdbce84ce.zip
Bug 493193 - MirrorApplication should explicitly use MD5 artifact comparator
The only place that documents the usage of MD5 comparator in MirrorApplication is Equinox p2 Repository Mirroring wiki page [1]: Adding the argument -comparator <comparator ID> specifies the mirroring application should use an Artifact Comparator with an ID of "comparator ID" to compare artifact descriptors. The mirroring application uses the "MD5 Comparator" to compare the MD5 hash property of the artifact descriptors if no comparator is defined. If no comparator is defined, ArtifactComparatorFactory's getArtifactComparator(String) will be finally called with null as a comparator ID. It's an ArtifactComparatorFactory's implementation detail that it will return the first configured one. MD5 comparator is the only one available now, but this may change and break MirrorApplication's expectation. To avoid such breakage, MirrorApplication declares an explicit dependency on MD5 comparator. So, when '-compare' CLI parameter is true but '-comparator' CLI parameter is missing, it will request MD5 artifact comparator to be used. Also improve testBaselineCompareUsingMD5Comparator() and testCompareUsingMD5Comparator(). These two tests should: - not only set 'compare' to true but also set a desired comparator's id explicitly - run twice, for an empty comparator id and MD5. To not copy-n-paste them, use @Theory [2]. To make theories work, run with Theories test runner. [1] https://wiki.eclipse.org/Equinox_p2_Repository_Mirroring [2] https://github.com/junit-team/junit4/wiki/Theories Change-Id: I5adda382c2824b6488af3716fc645cb6eff14b94 Signed-off-by: Mykola Nikishov <mn@mn.com.ua>
-rw-r--r--bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java3
-rw-r--r--bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/mirror/NewMirrorApplicationArtifactTest.java21
2 files changed, 17 insertions, 7 deletions
diff --git a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java
index 80bf3bf40..8d25ad08a 100644
--- a/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java
+++ b/bundles/org.eclipse.equinox.p2.repository.tools/src/org/eclipse/equinox/p2/internal/repository/tools/MirrorApplication.java
@@ -23,6 +23,7 @@ import org.eclipse.equinox.internal.p2.repository.Transport;
import org.eclipse.equinox.internal.p2.repository.helpers.RepositoryHelper;
import org.eclipse.equinox.p2.core.ProvisionException;
import org.eclipse.equinox.p2.engine.*;
+import org.eclipse.equinox.p2.internal.repository.comparator.MD5ArtifactComparator;
import org.eclipse.equinox.p2.internal.repository.mirroring.*;
import org.eclipse.equinox.p2.metadata.*;
import org.eclipse.equinox.p2.planner.IPlanner;
@@ -230,7 +231,7 @@ public class MirrorApplication extends AbstractApplication implements IApplicati
Mirroring mirror = new Mirroring(getCompositeArtifactRepository(), destinationArtifactRepository, raw);
mirror.setCompare(compare);
- mirror.setComparatorId(comparatorID);
+ mirror.setComparatorId(comparatorID == null ? MD5ArtifactComparator.MD5_COMPARATOR_ID : comparatorID);
mirror.setBaseline(initializeBaseline());
mirror.setValidate(validate);
mirror.setCompareExclusions(compareExclusions);
diff --git a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/mirror/NewMirrorApplicationArtifactTest.java b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/mirror/NewMirrorApplicationArtifactTest.java
index 9966ba52c..693282043 100644
--- a/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/mirror/NewMirrorApplicationArtifactTest.java
+++ b/bundles/org.eclipse.equinox.p2.tests/src/org/eclipse/equinox/p2/tests/mirror/NewMirrorApplicationArtifactTest.java
@@ -22,6 +22,7 @@ import org.eclipse.equinox.internal.p2.artifact.repository.simple.SimpleArtifact
import org.eclipse.equinox.internal.p2.core.helpers.OrderedProperties;
import org.eclipse.equinox.internal.p2.core.helpers.ServiceHelper;
import org.eclipse.equinox.p2.core.ProvisionException;
+import org.eclipse.equinox.p2.internal.repository.comparator.MD5ArtifactComparator;
import org.eclipse.equinox.p2.internal.repository.tools.MirrorApplication;
import org.eclipse.equinox.p2.internal.repository.tools.RepositoryDescriptor;
import org.eclipse.equinox.p2.metadata.IArtifactKey;
@@ -36,10 +37,13 @@ import org.eclipse.equinox.spi.p2.publisher.PublisherHelper;
import org.eclipse.osgi.framework.log.FrameworkLog;
import org.eclipse.osgi.util.NLS;
import org.junit.*;
+import org.junit.experimental.theories.*;
+import org.junit.runner.RunWith;
/*
* Modified from ArtifactMirrorApplicationTest
*/
+@RunWith(Theories.class)
public class NewMirrorApplicationArtifactTest extends AbstractProvisioningTest {
private static final String MISSING_ARTIFACT = "canonical: osgi.bundle,javax.wsdl,1.4.0.v200803061811.";
protected File destRepoLocation;
@@ -1141,8 +1145,11 @@ public class NewMirrorApplicationArtifactTest extends AbstractProvisioningTest {
}
- @Test
- public void testCompareUsingMD5Comparator() {
+ @DataPoints
+ public static String[] defaultComparator = {null, MD5ArtifactComparator.MD5_COMPARATOR_ID};
+
+ @Theory
+ public void testCompareUsingMD5Comparator(String comparator) {
//Setup create descriptors with different md5 values
IArtifactKey dupKey = PublisherHelper.createBinaryArtifactKey("testKeyId", Version.create("1.2.3"));
File artifact1 = getTestData("0.0", "/testData/mirror/mirrorSourceRepo1 with space/artifacts.xml");
@@ -1176,8 +1183,9 @@ public class NewMirrorApplicationArtifactTest extends AbstractProvisioningTest {
app.addSource(createRepositoryDescriptor(repo1Location.toURI(), null, null, null));
app.addDestination(createRepositoryDescriptor(repo2Location.toURI(), null, null, null));
app.setVerbose(true);
- //Set compare flag.
+ //Call a comparator
app.setCompare(true);
+ app.setComparatorID(comparator);
//run the mirror application
app.run(null);
} catch (Exception e) {
@@ -1198,8 +1206,8 @@ public class NewMirrorApplicationArtifactTest extends AbstractProvisioningTest {
}
}
- @Test
- public void testBaselineCompareUsingMD5Comparator() {
+ @Theory
+ public void testBaselineCompareUsingMD5Comparator(String comparator) {
//Setup create descriptors with different md5 values
IArtifactKey dupKey = PublisherHelper.createBinaryArtifactKey("testKeyId", Version.create("1.2.3"));
File artifact1 = getTestData("0.0", "/testData/mirror/mirrorSourceRepo1 with space/content.xml");
@@ -1241,8 +1249,9 @@ public class NewMirrorApplicationArtifactTest extends AbstractProvisioningTest {
//Set baseline
app.setBaseline(baselineLocation.toURI());
app.setVerbose(true);
- //Set compare flag.
+ //Call a comparator
app.setCompare(true);
+ app.setComparatorID(comparator);
//run the mirror application
app.run(null);
} catch (Exception e) {

Back to the top