Repository: karaf Updated Branches: refs/heads/karaf-3.0.x 75de07355 -> f72a527c4
KARAF-4642: featuresBoot order is not honored Project: http://git-wip-us.apache.org/repos/asf/karaf/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf/commit/f72a527c Tree: http://git-wip-us.apache.org/repos/asf/karaf/tree/f72a527c Diff: http://git-wip-us.apache.org/repos/asf/karaf/diff/f72a527c Branch: refs/heads/karaf-3.0.x Commit: f72a527c48ae39b12f6a6b1821846865da3c28e2 Parents: 75de073 Author: James Carman <[email protected]> Authored: Fri Jul 29 14:40:57 2016 -0400 Committer: James Carman <[email protected]> Committed: Fri Jul 29 14:40:57 2016 -0400 ---------------------------------------------------------------------- .../internal/BootFeaturesInstaller.java | 5 ++- .../internal/BootFeaturesInstallerTest.java | 45 ++++++++++++++------ 2 files changed, 36 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf/blob/f72a527c/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java ---------------------------------------------------------------------- diff --git a/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java b/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java index caaa0e2..729710a 100644 --- a/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java +++ b/features/core/src/main/java/org/apache/karaf/features/internal/BootFeaturesInstaller.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.EnumSet; import java.util.HashSet; import java.util.Hashtable; +import java.util.LinkedHashSet; import java.util.List; import java.util.Set; import java.util.regex.Matcher; @@ -99,7 +100,7 @@ public class BootFeaturesInstaller { private List<Set<Feature>> toFeatureSetList(List<Set<String>> stagedFeatures) { ArrayList<Set<Feature>> result = new ArrayList<Set<Feature>>(); for (Set<String> features : stagedFeatures) { - HashSet<Feature> featureSet = new HashSet<Feature>(); + HashSet<Feature> featureSet = new LinkedHashSet<Feature>(); for (String featureName : features) { try { Feature feature = getFeature(featureName); @@ -152,7 +153,7 @@ public class BootFeaturesInstaller { } private Set<String> parseFeatureList(String group) { - HashSet<String> features = new HashSet<String>(); + HashSet<String> features = new LinkedHashSet<String>(); for (String feature : Arrays.asList(group.trim().split("\\s*,\\s*"))) { if (feature.length() > 0) { features.add(feature); http://git-wip-us.apache.org/repos/asf/karaf/blob/f72a527c/features/core/src/test/java/org/apache/karaf/features/internal/BootFeaturesInstallerTest.java ---------------------------------------------------------------------- diff --git a/features/core/src/test/java/org/apache/karaf/features/internal/BootFeaturesInstallerTest.java b/features/core/src/test/java/org/apache/karaf/features/internal/BootFeaturesInstallerTest.java index 6da8c11..7b6b23d 100644 --- a/features/core/src/test/java/org/apache/karaf/features/internal/BootFeaturesInstallerTest.java +++ b/features/core/src/test/java/org/apache/karaf/features/internal/BootFeaturesInstallerTest.java @@ -16,29 +16,46 @@ */ package org.apache.karaf.features.internal; -import static java.util.Arrays.asList; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; - +import java.util.Arrays; import java.util.EnumSet; +import java.util.LinkedHashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; import org.apache.karaf.features.Feature; import org.apache.karaf.features.FeaturesService.Option; +import org.easymock.Capture; import org.easymock.EasyMock; -import org.junit.Assert; import org.junit.Test; +import static java.util.Arrays.asList; +import static org.easymock.EasyMock.capture; +import static org.easymock.EasyMock.eq; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.junit.Assert.assertEquals; + public class BootFeaturesInstallerTest extends TestBase { @Test @SuppressWarnings("unchecked") public void testParser() { BootFeaturesInstaller installer = new BootFeaturesInstaller(null, null, "", false); - Assert.assertEquals(asList(setOf("test1", "test2"), setOf("test3")), installer.parseBootFeatures(" ( test1 , test2 ) , test3 ")); - Assert.assertEquals(asList(setOf("test1", "test2", "test3")), installer.parseBootFeatures(" test1 , test2, test3")); - Assert.assertEquals(asList(setOf("test1"), setOf("test2"), setOf("test3")), installer.parseBootFeatures("(test1), (test2), test3")); + + assertEquals(asList(orderedSet("test1", "test2"), orderedSet("test3")), installer.parseBootFeatures(" ( test1 , test2 ) , test3 ")); + assertEquals(asList(orderedSet("test1", "test2", "test3")), installer.parseBootFeatures(" test1 , test2, test3")); + assertEquals(asList(orderedSet("test1"), orderedSet("test2"), orderedSet("test3")), installer.parseBootFeatures("(test1), (test2), test3")); } - + + private <T> Set<T> orderedSet(T... elements) { + Set<T> set = new LinkedHashSet<T>(); + for (T element : elements) { + set.add(element); + } + return set; + } + @Test public void testDefaultBootFeatures() throws Exception { FeaturesServiceImpl impl = EasyMock.createMock(FeaturesServiceImpl.class); @@ -49,14 +66,18 @@ public class BootFeaturesInstallerTest extends TestBase { expect(impl.getFeature("config", "0.0.0")).andReturn(configFeature); expect(impl.getFeature("standard", "0.0.0")).andReturn(standardFeature); expect(impl.getFeature("region", "0.0.0")).andReturn(regionFeature); - - impl.installFeatures(setOf(configFeature, standardFeature, regionFeature), EnumSet.of(Option.NoAutoRefreshBundles, Option.NoCleanIfFailure, Option.ContinueBatchOnFailure)); + Capture<Set<Feature>> featuresCapture = EasyMock.newCapture(); + impl.installFeatures(capture(featuresCapture), eq(EnumSet.of(Option.NoAutoRefreshBundles, Option.NoCleanIfFailure, Option.ContinueBatchOnFailure))); EasyMock.expectLastCall(); replay(impl); BootFeaturesInstaller bootFeatures = new BootFeaturesInstaller(null, impl, "config,standard,region", false); bootFeatures.installBootFeatures(); - EasyMock.verify(impl); + EasyMock.verify(impl); + List<Feature> installedFeatures = new LinkedList<Feature>(featuresCapture.getValue()); + assertEquals(3, installedFeatures.size()); + assertEquals(Arrays.asList(configFeature, standardFeature, regionFeature), installedFeatures); + } /**
