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);
+
     }
 
     /**

Reply via email to