diff options
author | Mykola Nikishov | 2016-05-07 18:17:51 +0000 |
---|---|---|
committer | Mykola Nikishov | 2016-11-08 19:21:38 +0000 |
commit | 348da1c4083d2077214c55411ca9172fdbce84ce (patch) | |
tree | b00fa50847473dd5f4641b20b756add283997ed5 | |
parent | e3af66ba071eef246c815eef769b64a381b82625 (diff) | |
download | rt.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>
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) { |