fix catalog scan test dependency on local drive and tidy up url handling for catalog items
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/c72fe8a0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/c72fe8a0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/c72fe8a0 Branch: refs/heads/master Commit: c72fe8a0e1e566cc22955b69d8aee3fbe4c07a47 Parents: 1207d99 Author: Alex Heneveld <[email protected]> Authored: Thu May 28 14:50:39 2015 +0100 Committer: Alex Heneveld <[email protected]> Committed: Thu May 28 14:51:21 2015 +0100 ---------------------------------------------------------------------- .../catalog/internal/BasicBrooklynCatalog.java | 9 +++++---- .../catalog/internal/CatalogClasspathDo.java | 12 ++++++----- .../catalog/internal/CatalogInitialization.java | 2 +- .../catalog/internal/CatalogScanTest.java | 21 +++++++++++++++++--- 4 files changed, 31 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c72fe8a0/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java index bba0b73..7c192d0 100644 --- a/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java +++ b/core/src/main/java/brooklyn/catalog/internal/BasicBrooklynCatalog.java @@ -1195,11 +1195,12 @@ public class BasicBrooklynCatalog implements BrooklynCatalog { // will be set by scan -- slightly longwinded way to retrieve, but scanning for osgi needs an overhaul in any case Collection<CatalogBundle> libraryBundles = CatalogItemDtoAbstract.parseLibraries((Collection<?>) librariesCombined); dto.setLibraries(libraryBundles); - // must replace java type with plan yaml here for libraries / catalog item to be picked up - dto.setSymbolicName(dto.getJavaType()); - dto.setPlanYaml("services: [{ type: "+dto.getJavaType()+" }]"); - dto.setJavaType(null); } + // replace java type with plan yaml -- needed for libraries / catalog item to be picked up, + // but probably useful to transition away from javaType altogether + dto.setSymbolicName(dto.getJavaType()); + dto.setPlanYaml("services: [{ type: "+dto.getJavaType()+" }]"); + dto.setJavaType(null); return dto; } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c72fe8a0/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java b/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java index 077abaa..a30a9dc 100644 --- a/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java +++ b/core/src/main/java/brooklyn/catalog/internal/CatalogClasspathDo.java @@ -128,16 +128,18 @@ public class CatalogClasspathDo { InputStream uin = ResourceUtils.create(this).getResourceFromUrl(u); File f = Os.newTempFile("brooklyn-catalog-"+u, null); FileOutputStream fout = new FileOutputStream(f); - Streams.copy(uin, fout); - fout.close(); - uin.close(); + try { + Streams.copy(uin, fout); + } finally { + Streams.closeQuietly(fout); + Streams.closeQuietly(uin); + } u = f.toURI().toString(); } urls[i] = new URL(u); // TODO potential disk leak above as we have no way to know when the temp file can be removed earlier than server shutdown; - // a better way to handle this is to supply a stream handler: -// urls[i] = new URL(classpath.getEntries().get(i)); + // a better way to handle this is to supply a stream handler (but URLConnection is a little bit hard to work with): // URI uri = URI.create(classpath.getEntries().get(i)); // urls[i] = new URL(uri.getScheme(), uri.getHost(), uri.getPort(), uri.getPath() // TODO query fragment? // , new URLStreamHandler() { http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c72fe8a0/core/src/main/java/brooklyn/catalog/internal/CatalogInitialization.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/brooklyn/catalog/internal/CatalogInitialization.java b/core/src/main/java/brooklyn/catalog/internal/CatalogInitialization.java index 8f45a8c..51814ea 100644 --- a/core/src/main/java/brooklyn/catalog/internal/CatalogInitialization.java +++ b/core/src/main/java/brooklyn/catalog/internal/CatalogInitialization.java @@ -157,7 +157,7 @@ public class CatalogInitialization implements ManagementContextInjectable { * and so subsequent applications should ignore any initialization data (e.g. on a subsequent promotion to master, * after a master -> standby -> master cycle) * @param needsInitialItemsLoaded whether the catalog needs the initial items loaded - * @param needsInitialItemsLoaded whether the catalog needs the additiona items loaded + * @param needsAdditionalItemsLoaded whether the catalog needs the additions loaded * @param optionalExcplicitItemsForResettingCatalog * if supplied, the catalog is reset to contain only these items, before calling any other initialization * for use primarily when rebinding http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/c72fe8a0/core/src/test/java/brooklyn/catalog/internal/CatalogScanTest.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/catalog/internal/CatalogScanTest.java b/core/src/test/java/brooklyn/catalog/internal/CatalogScanTest.java index 5b32bed..101e306 100644 --- a/core/src/test/java/brooklyn/catalog/internal/CatalogScanTest.java +++ b/core/src/test/java/brooklyn/catalog/internal/CatalogScanTest.java @@ -37,6 +37,7 @@ import brooklyn.entity.Application; import brooklyn.entity.basic.Entities; import brooklyn.entity.proxying.EntitySpec; import brooklyn.management.internal.LocalManagementContext; +import brooklyn.util.ResourceUtils; import brooklyn.util.net.Urls; import brooklyn.util.text.Strings; @@ -75,10 +76,14 @@ public class CatalogScanTest { log.info("ENTITIES loaded for FULL: "+fullCatalog.getCatalogItems(Predicates.alwaysTrue())); } - private synchronized void loadTheDefaultCatalog() { + private synchronized void loadTheDefaultCatalog(boolean lookOnDiskForDefaultCatalog) { if (defaultCatalog!=null) return; BrooklynProperties props = BrooklynProperties.Factory.newEmpty(); - props.put(BrooklynServerConfig.BROOKLYN_CATALOG_URL.getName(), ""); + props.put(BrooklynServerConfig.BROOKLYN_CATALOG_URL.getName(), + // if default catalog is picked up from the system, we might get random stuff from ~/.brooklyn/ instead of the default; + // useful as an integration check that we default correctly, but irritating for people to use if they have such a catalog installed + (lookOnDiskForDefaultCatalog ? "" : + "data:,"+Urls.encode(new ResourceUtils(this).getResourceAsString("classpath:/brooklyn/default.catalog.bom")))); LocalManagementContext managementContext = newManagementContext(props); defaultCatalog = managementContext.getCatalog(); log.info("ENTITIES loaded for DEFAULT: "+defaultCatalog.getCatalogItems(Predicates.alwaysTrue())); @@ -162,7 +167,17 @@ public class CatalogScanTest { @Test public void testAnnotationIsDefault() { - loadTheDefaultCatalog(); + doTestAnnotationIsDefault(false); + } + + // see comment in load method; likely fails if a custom catalog is installed in ~/.brooklyn/ + @Test(groups="Integration", enabled=false) + public void testAnnotationIsDefaultOnDisk() { + doTestAnnotationIsDefault(true); + } + + private void doTestAnnotationIsDefault(boolean lookOnDiskForDefaultCatalog) { + loadTheDefaultCatalog(false); int numInDefault = Iterables.size(defaultCatalog.getCatalogItems(Predicates.alwaysTrue())); loadAnnotationsOnlyCatalog();
