Tests for old-style catalog items when loaded from external classpath or OSGi bundle
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/8523e112 Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/8523e112 Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/8523e112 Branch: refs/heads/master Commit: 8523e112dd783c9a516782b04d7c1dfb75498db9 Parents: e7b9a74 Author: Svetoslav Neykov <[email protected]> Authored: Wed Feb 25 18:08:48 2015 +0200 Committer: Svetoslav Neykov <[email protected]> Committed: Wed Feb 25 18:08:48 2015 +0200 ---------------------------------------------------------------------- .../management/osgi/OsgiTestResources.java | 1 + .../catalog/AbstractCatalogXmlTest.java | 107 +++++++++++++++++++ .../brooklyn/catalog/CatalogXmlOsgiTest.java | 37 +++++++ .../brooklyn/catalog/CatalogXmlVersionTest.java | 28 ++--- usage/camp/src/test/resources/osgi-catalog.xml | 29 +++++ .../camp/src/test/resources/simple-catalog.xml | 22 ++-- 6 files changed, 195 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8523e112/core/src/test/java/brooklyn/management/osgi/OsgiTestResources.java ---------------------------------------------------------------------- diff --git a/core/src/test/java/brooklyn/management/osgi/OsgiTestResources.java b/core/src/test/java/brooklyn/management/osgi/OsgiTestResources.java index 48d01dc..ef0321d 100644 --- a/core/src/test/java/brooklyn/management/osgi/OsgiTestResources.java +++ b/core/src/test/java/brooklyn/management/osgi/OsgiTestResources.java @@ -41,6 +41,7 @@ public class OsgiTestResources { * defines an entity and an application, to confirm it can be read and used by brooklyn */ public static final String BROOKLYN_TEST_OSGI_ENTITIES_PATH = "/brooklyn/osgi/brooklyn-test-osgi-entities.jar"; + public static final String BROOKLYN_TEST_OSGI_ENTITIES_SIMPLE_APPLICATION = "brooklyn.osgi.tests.SimpleApplication"; public static final String BROOKLYN_TEST_OSGI_ENTITIES_SIMPLE_ENTITY = "brooklyn.osgi.tests.SimpleEntity"; public static final String BROOKLYN_TEST_OSGI_ENTITIES_SIMPLE_POLICY = "brooklyn.osgi.tests.SimplePolicy"; http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8523e112/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/AbstractCatalogXmlTest.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/AbstractCatalogXmlTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/AbstractCatalogXmlTest.java new file mode 100644 index 0000000..44ea9a8 --- /dev/null +++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/AbstractCatalogXmlTest.java @@ -0,0 +1,107 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package io.brooklyn.camp.brooklyn.catalog; + +import io.brooklyn.camp.brooklyn.AbstractYamlTest; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.StringReader; + +import brooklyn.config.BrooklynProperties; +import brooklyn.config.BrooklynServerConfig; +import brooklyn.entity.Entity; +import brooklyn.management.internal.LocalManagementContext; +import brooklyn.management.osgi.OsgiTestResources; +import brooklyn.test.entity.LocalManagementContextForTests; +import brooklyn.util.ResourceUtils; +import brooklyn.util.exceptions.Exceptions; +import brooklyn.util.os.Os; +import brooklyn.util.stream.ReaderInputStream; +import brooklyn.util.stream.Streams; + +import com.google.common.io.ByteStreams; + +public class AbstractCatalogXmlTest extends AbstractYamlTest { + + private String catalogUrl; + + public AbstractCatalogXmlTest(String catalogUrl) { + this.catalogUrl = catalogUrl; + } + + @Override + protected LocalManagementContext newTestManagementContext() { + ResourceUtils ru = new ResourceUtils(this); + File jar = createJar(ru); + File catalog = createCatalog(ru, jar); + + BrooklynProperties properties = BrooklynProperties.Factory.newEmpty(); + properties.put(BrooklynServerConfig.BROOKLYN_CATALOG_URL, catalog.toURI().toString()); + return LocalManagementContextForTests.builder(true) + .useProperties(properties) + .disableOsgi(false) + .build(); + } + + protected Entity startApp(String type) throws Exception { + String yaml = "name: simple-app-yaml\n" + + "location: localhost\n" + + "services: \n" + + " - type: " + type; + return createAndStartApplication(yaml); + } + + private File createCatalog(ResourceUtils ru, File tmpJar) { + String catalogTemplate = ru.getResourceAsString(catalogUrl); + String catalog = catalogTemplate.replace("${osgi-entities-path}", tmpJar.toURI().toString()); + File catalogTmp = Os.newTempFile("simple-catalog-", ".xml"); + copy(catalog, catalogTmp); + return catalogTmp; + } + + private File createJar(ResourceUtils ru) { + File tmpJar = Os.newTempFile("osgi-entities-", ".jar"); + InputStream in = ru.getResourceFromUrl("classpath://" + OsgiTestResources.BROOKLYN_TEST_OSGI_ENTITIES_PATH); + copy(in, tmpJar); + return tmpJar; + } + + private void copy(String src, File dst) { + try { + copy(new ReaderInputStream(new StringReader(src), "UTF-8"), dst); + } catch (Exception e) { + throw Exceptions.propagate(e); + } + } + + private void copy(InputStream in, File tmpJar) { + try { + OutputStream out = new FileOutputStream(tmpJar); + ByteStreams.copy(in, out); + Streams.closeQuietly(in); + Streams.closeQuietly(out); + } catch (Exception e) { + throw Exceptions.propagate(e); + } + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8523e112/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogXmlOsgiTest.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogXmlOsgiTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogXmlOsgiTest.java new file mode 100644 index 0000000..bac2991 --- /dev/null +++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogXmlOsgiTest.java @@ -0,0 +1,37 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package io.brooklyn.camp.brooklyn.catalog; + +import org.testng.annotations.Test; + +public class CatalogXmlOsgiTest extends AbstractCatalogXmlTest { + + public CatalogXmlOsgiTest(String catalogUrl) { + super("classpath://osgi-catalog.xml"); + } + + //OSGi libraries not supported with old-style catalog items + //We treat those catalog items just as an alias to the java type they hold. + //No loader wrapping their libraries is ever created. + @Test(expectedExceptions=IllegalStateException.class) + public void testOsgiItem() throws Exception { + startApp("OsgiApp"); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8523e112/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogXmlVersionTest.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogXmlVersionTest.java b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogXmlVersionTest.java index cf1e211..93e23e6 100644 --- a/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogXmlVersionTest.java +++ b/usage/camp/src/test/java/io/brooklyn/camp/brooklyn/catalog/CatalogXmlVersionTest.java @@ -19,23 +19,16 @@ package io.brooklyn.camp.brooklyn.catalog; import static org.testng.Assert.assertTrue; -import io.brooklyn.camp.brooklyn.AbstractYamlTest; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; -import brooklyn.config.BrooklynProperties; -import brooklyn.config.BrooklynServerConfig; import brooklyn.entity.Entity; -import brooklyn.management.internal.LocalManagementContext; -import brooklyn.test.entity.LocalManagementContextForTests; -public class CatalogXmlVersionTest extends AbstractYamlTest { - @Override - protected LocalManagementContext newTestManagementContext() { - BrooklynProperties properties = BrooklynProperties.Factory.newEmpty(); - properties.put(BrooklynServerConfig.BROOKLYN_CATALOG_URL, "classpath://simple-catalog.xml"); - return LocalManagementContextForTests.newInstance(properties); +public class CatalogXmlVersionTest extends AbstractCatalogXmlTest { + + public CatalogXmlVersionTest(String catalogUrl) { + super("classpath://simple-catalog.xml"); } @DataProvider(name = "types") @@ -44,9 +37,10 @@ public class CatalogXmlVersionTest extends AbstractYamlTest { {"brooklyn.entity.basic.BasicApplication"}, {"brooklyn.entity.basic.BasicApplication:0.0.0.SNAPSHOT"}, {"brooklyn.entity.basic.BasicApplication:2.0"}, - {"BasicApp"}, + {"BasicApp"}, // test that items with symbolicName not matching the type work {"BasicApp:0.0.0.SNAPSHOT"}, - {"BasicApp:2.0"} + {"BasicApp:2.0"}, + {"brooklyn.osgi.tests.SimpleApplication"}, //test that classpath is used }; } @@ -61,12 +55,4 @@ public class CatalogXmlVersionTest extends AbstractYamlTest { assertTrue(entity instanceof TestBasicApp, "Entity is not a " + TestBasicApp.class.getName() + ", instead the type is " + entity.getEntityType().getName()); } - private Entity startApp(String type) throws Exception { - String yaml = "name: simple-app-yaml\n" + - "location: localhost\n" + - "services: \n" + - " - type: " + type; - return createAndStartApplication(yaml); - } - } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8523e112/usage/camp/src/test/resources/osgi-catalog.xml ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/resources/osgi-catalog.xml b/usage/camp/src/test/resources/osgi-catalog.xml new file mode 100644 index 0000000..f409a52 --- /dev/null +++ b/usage/camp/src/test/resources/osgi-catalog.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> + +<catalog> + <name>OSGi catalogue</name> + <template name="Osgi App" type="brooklyn.osgi.tests.SimpleApplication"> + <symbolicName>OsgiApp</symbolicName> + <libraries> + <bundle>${osgi-entities-path}</bundle> + </libraries> + </template> +</catalog> http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/8523e112/usage/camp/src/test/resources/simple-catalog.xml ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/resources/simple-catalog.xml b/usage/camp/src/test/resources/simple-catalog.xml index e3a1214..242478c 100644 --- a/usage/camp/src/test/resources/simple-catalog.xml +++ b/usage/camp/src/test/resources/simple-catalog.xml @@ -20,22 +20,28 @@ <catalog> <name>Simple catalogue</name> - <template name="Basic App" type="brooklyn.entity.basic.BasicApplication"> - <description>An example application</description> - </template> - <template name="Basic App" type="brooklyn.entity.basic.BasicApplication" version="2.0"> - <description>An example application</description> - </template> + <template name="Basic App" type="brooklyn.entity.basic.BasicApplication" /> + <template name="Basic App" type="brooklyn.entity.basic.BasicApplication" version="2.0" /> <template name="Basic App" type="brooklyn.entity.basic.BasicApplication"> <symbolicName>BasicApp</symbolicName> - <description>An example application</description> </template> <template name="Basic App" type="brooklyn.entity.basic.BasicApplication" version="2.0"> <symbolicName>BasicApp</symbolicName> - <description>An example application</description> </template> <template name="Custom App" type="brooklyn.entity.basic.BasicApplication"> <symbolicName>io.brooklyn.camp.brooklyn.catalog.TestBasicApp</symbolicName> <!-- Tests that "java:" prefix won't load an old-style catalog item with the same id --> </template> + <template name="Osgi App" type="brooklyn.osgi.tests.SimpleApplication"> + <symbolicName>OsgiApp</symbolicName> + <libraries> + <bundle>${osgi-entities-path}</bundle> + </libraries> + </template> + <catalog> + <template name="Simple App" type="brooklyn.osgi.tests.SimpleApplication" /> + <classpath> + <entry>${osgi-entities-path}</entry> + </classpath> + </catalog> </catalog>
