restore test bundle counts, and resolve library URLs on install

Project: http://git-wip-us.apache.org/repos/asf/brooklyn-server/repo
Commit: http://git-wip-us.apache.org/repos/asf/brooklyn-server/commit/21e93d27
Tree: http://git-wip-us.apache.org/repos/asf/brooklyn-server/tree/21e93d27
Diff: http://git-wip-us.apache.org/repos/asf/brooklyn-server/diff/21e93d27

Branch: refs/heads/master
Commit: 21e93d27bed7efd3d8f115c8fc2234b39360ee3a
Parents: 480a0c7
Author: Alex Heneveld <[email protected]>
Authored: Wed Jun 28 11:28:24 2017 +0100
Committer: Alex Heneveld <[email protected]>
Committed: Wed Jun 28 11:28:24 2017 +0100

----------------------------------------------------------------------
 .../CatalogOsgiVersionMoreEntityTest.java       | 19 ++++++++---
 .../catalog/internal/BasicBrooklynCatalog.java  | 35 ++++++++++++++------
 .../core/catalog/internal/CatalogBundleDto.java | 13 ++++++++
 .../apache/brooklyn/util/core/osgi/Osgis.java   |  1 +
 4 files changed, 52 insertions(+), 16 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/21e93d27/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
----------------------------------------------------------------------
diff --git 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
index 6fee53e..10f2454 100644
--- 
a/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
+++ 
b/camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogOsgiVersionMoreEntityTest.java
@@ -20,6 +20,7 @@ package org.apache.brooklyn.camp.brooklyn.catalog;
 
 import static org.testng.Assert.assertTrue;
 
+import java.util.List;
 import java.util.Map;
 
 import org.apache.brooklyn.api.entity.Entity;
@@ -30,10 +31,10 @@ import org.apache.brooklyn.api.policy.Policy;
 import org.apache.brooklyn.api.policy.PolicySpec;
 import org.apache.brooklyn.api.typereg.BrooklynTypeRegistry;
 import org.apache.brooklyn.api.typereg.ManagedBundle;
+import org.apache.brooklyn.api.typereg.OsgiBundleWithUrl;
 import org.apache.brooklyn.api.typereg.RegisteredType;
 import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
 import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynEntityMatcher;
-import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog;
 import org.apache.brooklyn.core.mgmt.ha.OsgiBundleInstallationResult;
 import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
 import org.apache.brooklyn.core.mgmt.osgi.OsgiVersionMoreEntityTest;
@@ -42,6 +43,7 @@ import 
org.apache.brooklyn.core.typereg.RegisteredTypePredicates;
 import org.apache.brooklyn.core.typereg.RegisteredTypes;
 import org.apache.brooklyn.test.Asserts;
 import org.apache.brooklyn.test.support.TestResourceUnavailableException;
+import org.apache.brooklyn.util.collections.MutableList;
 import org.apache.brooklyn.util.core.ResourceUtils;
 import org.apache.brooklyn.util.osgi.OsgiTestResources;
 import org.apache.brooklyn.util.text.Strings;
@@ -75,7 +77,7 @@ public class CatalogOsgiVersionMoreEntityTest extends 
AbstractYamlTest implement
         
         // bundle installed
         Map<String, ManagedBundle> bundles = 
((ManagementContextInternal)mgmt()).getOsgiManager().get().getManagedBundles();
-        Asserts.assertSize(bundles.keySet(), 1 + 
(BasicBrooklynCatalog.AUTO_WRAP_CATALOG_YAML_AS_BUNDLE ? 1 : 0));
+        Asserts.assertSize(bundles.keySet(), 1);
         Assert.assertTrue(bundles.keySet().contains( br.getMetadata().getId() 
));
         
         // types installed
@@ -96,7 +98,7 @@ public class CatalogOsgiVersionMoreEntityTest extends 
AbstractYamlTest implement
         Assert.assertNotNull(item);
         Assert.assertEquals(item.getVersion(), "1.0");
         Assert.assertTrue(RegisteredTypePredicates.IS_ENTITY.apply(item));
-        Assert.assertEquals(item.getLibraries().size(), 1 + 
(BasicBrooklynCatalog.AUTO_WRAP_CATALOG_YAML_AS_BUNDLE ? 1 : 0));
+        Assert.assertEquals(item.getLibraries().size(), 1);
         
         Entity app = createAndStartApplication("services: [ { type: 
'more-entity:1.0' } ]");
         Entity moreEntity = Iterables.getOnlyElement(app.getChildren());
@@ -220,7 +222,7 @@ public class CatalogOsgiVersionMoreEntityTest extends 
AbstractYamlTest implement
         // this refers to the java item, where the libraries are defined
         item = 
mgmt().getTypeRegistry().get("org.apache.brooklyn.test.osgi.entities.more.MoreEntity");
         Assert.assertEquals(item.getVersion(), "2.0.test_java");
-        Assert.assertEquals(item.getLibraries().size(), 2 + 
(BasicBrooklynCatalog.AUTO_WRAP_CATALOG_YAML_AS_BUNDLE ? 1 : 0));
+        Assert.assertEquals(item.getLibraries().size(), 2);
         
         Entity app = createAndStartApplication("services: [ { type: 
'more-entity:2.0.test' } ]");
         Entity moreEntity = Iterables.getOnlyElement(app.getChildren());
@@ -247,7 +249,14 @@ public class CatalogOsgiVersionMoreEntityTest extends 
AbstractYamlTest implement
         // this refers to the java item, where the libraries are defined
         item = 
mgmt().getTypeRegistry().get("org.apache.brooklyn.test.osgi.entities.more.MorePolicy");
         Assert.assertEquals(item.getVersion(), "2.0.test_java");
-        Assert.assertEquals(item.getLibraries().size(), 2 + 
(BasicBrooklynCatalog.AUTO_WRAP_CATALOG_YAML_AS_BUNDLE ? 1 : 0));
+        // check the libraries are as expected and fully resolved
+        List<String> libStr = MutableList.of();
+        for (OsgiBundleWithUrl ob: item.getLibraries()) {
+            libStr.add(ob.getVersionedName()==null ? ob.getUrl() : 
ob.getVersionedName().toString());
+        }
+        Assert.assertEquals(libStr, MutableList.of(
+            BROOKLYN_TEST_MORE_ENTITIES_SYMBOLIC_NAME_FULL+":"+"0.2.0", 
+            BROOKLYN_TEST_OSGI_ENTITIES_SYMBOLIC_NAME_FULL+":"+"0.1.0"));
         
         Entity app = createAndStartApplication(
                 "services: ",

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/21e93d27/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
 
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
index dacdb90..116113d 100644
--- 
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/BasicBrooklynCatalog.java
@@ -67,6 +67,7 @@ import org.apache.brooklyn.util.collections.MutableSet;
 import org.apache.brooklyn.util.core.ResourceUtils;
 import org.apache.brooklyn.util.core.flags.TypeCoercions;
 import org.apache.brooklyn.util.core.osgi.BundleMaker;
+import org.apache.brooklyn.util.core.osgi.Osgis;
 import org.apache.brooklyn.util.core.task.Tasks;
 import org.apache.brooklyn.util.exceptions.Exceptions;
 import org.apache.brooklyn.util.exceptions.UserFacingException;
@@ -546,7 +547,7 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
         Collection<CatalogBundle> librariesAddedHereBundles = 
CatalogItemDtoAbstract.parseLibraries(librariesAddedHereNames);
         
         MutableSet<Object> librariesCombinedNames = MutableSet.of();
-        if (!isNoBundleOrSimpleWrappingBundle(containingBundle)) {
+        if (!isNoBundleOrSimpleWrappingBundle(mgmt, containingBundle)) {
             // ensure containing bundle is declared, first, for search purposes
             
librariesCombinedNames.add(containingBundle.getVersionedName().toOsgiString());
         }
@@ -561,12 +562,16 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
         // but this load is required for resolving YAML in this BOM (and if 
java-scanning);
         // need to think through how we expect dependencies to be installed
         CatalogUtils.installLibraries(mgmt, librariesAddedHereBundles);
+        
+        // use resolved bundles
+        librariesAddedHereBundles = resolveWherePossible(mgmt, 
librariesAddedHereBundles);
+        libraryBundles = resolveWherePossible(mgmt, libraryBundles);
 
         Boolean scanJavaAnnotations = getFirstAs(itemMetadataWithoutItemDef, 
Boolean.class, "scanJavaAnnotations", "scan_java_annotations").orNull();
         if (scanJavaAnnotations==null || !scanJavaAnnotations) {
             // don't scan
         } else {
-            if (isNoBundleOrSimpleWrappingBundle(containingBundle)) {
+            if (isNoBundleOrSimpleWrappingBundle(mgmt, containingBundle)) {
                 // BOMs wrapped in JARs, or without JARs, have special 
treatment
                 if 
(isLibrariesMoreThanJustContainingBundle(librariesAddedHereBundles, 
containingBundle)) {
                     // legacy mode, since 0.12.0, scan libraries referenced in 
a legacy non-bundle BOM
@@ -800,7 +805,15 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
         result.add(dto);
     }
 
-    private boolean 
isLibrariesMoreThanJustContainingBundle(Collection<CatalogBundle> library, 
ManagedBundle containingBundle) {
+    protected static Collection<CatalogBundle> 
resolveWherePossible(ManagementContext mgmt, Collection<CatalogBundle> 
libraryBundles) {
+        Collection<CatalogBundle> libraryBundlesResolved = MutableSet.of();
+        for (CatalogBundle b: libraryBundles) {
+            libraryBundlesResolved.add(CatalogBundleDto.resolve(mgmt, 
b).or(b));
+        }
+        return libraryBundlesResolved;
+    }
+
+    private static boolean 
isLibrariesMoreThanJustContainingBundle(Collection<CatalogBundle> library, 
ManagedBundle containingBundle) {
         if (library==null) return false;
         if (containingBundle==null) return !library.isEmpty();
         if (library.size()>1) return true;
@@ -808,7 +821,7 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
         return 
!containingBundle.getVersionedName().equalsOsgi(li.getVersionedName());
     }
 
-    private boolean isNoBundleOrSimpleWrappingBundle(ManagedBundle b) {
+    private static boolean isNoBundleOrSimpleWrappingBundle(ManagementContext 
mgmt, ManagedBundle b) {
         if (b==null) return true;
         String wrapped = 
((ManagementContextInternal)mgmt).getOsgiManager().get().findBundle(b).get().getHeaders().get(BROOKLYN_WRAPPED_BOM_BUNDLE);
         return wrapped!=null && wrapped.equalsIgnoreCase("true");
@@ -915,7 +928,7 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
         @SuppressWarnings({ "unchecked", "rawtypes" })
         Collection<CatalogItemDtoAbstract<?, ?>> result = 
(Collection)Collections2.transform(
                 
(Collection<CatalogItemDo<Object,Object>>)(Collection)subCatalog.getIdCache().values(),
 
-                itemDoToDtoAddingSelectedMetadataDuringScan(catalogMetadata, 
containingBundle));
+                itemDoToDtoAddingSelectedMetadataDuringScan(mgmt, 
catalogMetadata, containingBundle));
         return result;
     }
 
@@ -1397,7 +1410,7 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
         };
     }
     
-    private static <T,SpecT> Function<CatalogItemDo<T, SpecT>, 
CatalogItem<T,SpecT>> itemDoToDtoAddingSelectedMetadataDuringScan(final Map<?, 
?> catalogMetadata, ManagedBundle containingBundle) {
+    private static <T,SpecT> Function<CatalogItemDo<T, SpecT>, 
CatalogItem<T,SpecT>> itemDoToDtoAddingSelectedMetadataDuringScan(final 
ManagementContext mgmt, final Map<?, ?> catalogMetadata, ManagedBundle 
containingBundle) {
         return new Function<CatalogItemDo<T,SpecT>, CatalogItem<T,SpecT>>() {
             @Override
             public CatalogItem<T,SpecT> apply(@Nullable CatalogItemDo<T,SpecT> 
item) {
@@ -1412,21 +1425,21 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
                 if (Strings.isNonBlank(version)) dto.setVersion(version);
                 
                 Collection<CatalogBundle> libraryBundles = MutableSet.of(); 
-                if (containingBundle!=null) {
+                if (!isNoBundleOrSimpleWrappingBundle(mgmt, containingBundle)) 
{
                     libraryBundles.add(new 
CatalogBundleDto(containingBundle.getSymbolicName(), 
containingBundle.getSuppliedVersionString(), null));
                 }
                 libraryBundles.addAll(dto.getLibraries());
                 Object librariesInherited;
                 librariesInherited = catalogMetadata.get("brooklyn.libraries");
                 if (librariesInherited instanceof Collection) {
-                    // will be set by scan -- slightly longwinded way to 
retrieve, but scanning for osgi needs an overhaul in any case
-                    
libraryBundles.addAll(CatalogItemDtoAbstract.parseLibraries((Collection<?>) 
librariesInherited));
+                    // will be set by scan -- slightly longwinded way to 
retrieve, but scanning java should be deprecated I think (AH)
+                    libraryBundles.addAll(resolveWherePossible(mgmt, 
CatalogItemDtoAbstract.parseLibraries((Collection<?>) librariesInherited)));
                 }
                 librariesInherited = catalogMetadata.get("libraries");
                 if (librariesInherited instanceof Collection) {
                     log.warn("Legacy 'libraries' encountered; use 
'brooklyn.libraries'");
                     // will be set by scan -- slightly longwinded way to 
retrieve, but scanning for osgi needs an overhaul in any case
-                    
libraryBundles.addAll(CatalogItemDtoAbstract.parseLibraries((Collection<?>) 
librariesInherited));
+                    libraryBundles.addAll(resolveWherePossible(mgmt, 
CatalogItemDtoAbstract.parseLibraries((Collection<?>) librariesInherited)));
                 }
                 dto.setLibraries(libraryBundles);
                 
@@ -1488,7 +1501,7 @@ public class BasicBrooklynCatalog implements 
BrooklynCatalog {
             Maybe<OsgiManager> osgi = 
((ManagementContextInternal)mgmt).getOsgiManager();
             if (osgi.isAbsent()) return;
             for (ManagedBundle b: osgi.get().getManagedBundles().values()) {
-                if (isNoBundleOrSimpleWrappingBundle(b)) {
+                if (isNoBundleOrSimpleWrappingBundle(mgmt, b)) {
                     Iterable<RegisteredType> typesInBundle = 
osgi.get().getTypesFromBundle(b.getVersionedName());
                     if (Iterables.isEmpty(typesInBundle)) {
                         log.debug("uninstalling empty wrapper bundle "+b);

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/21e93d27/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
----------------------------------------------------------------------
diff --git 
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
 
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
index 2006d5b..1653fcc 100644
--- 
a/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
+++ 
b/core/src/main/java/org/apache/brooklyn/core/catalog/internal/CatalogBundleDto.java
@@ -23,8 +23,13 @@ import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 
 import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle;
+import org.apache.brooklyn.api.mgmt.ManagementContext;
+import org.apache.brooklyn.core.mgmt.ha.OsgiManager;
+import org.apache.brooklyn.core.mgmt.internal.ManagementContextInternal;
+import org.apache.brooklyn.util.guava.Maybe;
 import org.apache.brooklyn.util.osgi.VersionedName;
 import org.apache.brooklyn.util.text.BrooklynVersionSyntax;
+import org.osgi.framework.Bundle;
 
 public class CatalogBundleDto implements CatalogBundle {
     private String symbolicName;
@@ -106,5 +111,13 @@ public class CatalogBundleDto implements CatalogBundle {
         return true;
     }
     
+    public static Maybe<CatalogBundle> resolve(ManagementContext mgmt, 
CatalogBundle b) {
+        if (b.isNameResolved()) return Maybe.of(b);
+        OsgiManager osgi = 
((ManagementContextInternal)mgmt).getOsgiManager().orNull();
+        if (osgi==null) return Maybe.absent("No OSGi manager");
+        Maybe<Bundle> b2 = osgi.findBundle(b);
+        if (b2.isAbsent()) return Maybe.absent("Nothing installed for "+b);
+        return Maybe.of(new CatalogBundleDto(b2.get().getSymbolicName(), 
b2.get().getVersion().toString(), b.getUrl()));
+    }
     
 }

http://git-wip-us.apache.org/repos/asf/brooklyn-server/blob/21e93d27/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java 
b/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
index c1a40f8..235f9dd 100644
--- a/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
+++ b/core/src/main/java/org/apache/brooklyn/util/core/osgi/Osgis.java
@@ -428,4 +428,5 @@ public class Osgis {
         Bundle bundle = org.osgi.framework.FrameworkUtil.getBundle(clazz);
         return Optional.fromNullable(bundle);
     }
+
 }

Reply via email to