| /* |
| * 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 org.apache.brooklyn.core.catalog.internal; |
| |
| import static org.testng.Assert.assertEquals; |
| import static org.testng.Assert.assertNotNull; |
| |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| import org.testng.Assert; |
| import org.testng.annotations.AfterMethod; |
| import org.testng.annotations.BeforeMethod; |
| import org.testng.annotations.Test; |
| import org.apache.brooklyn.api.catalog.CatalogItem.CatalogBundle; |
| import org.apache.brooklyn.core.catalog.internal.BasicBrooklynCatalog; |
| import org.apache.brooklyn.core.catalog.internal.CatalogBundleDto; |
| import org.apache.brooklyn.core.catalog.internal.CatalogDo; |
| import org.apache.brooklyn.core.catalog.internal.CatalogDto; |
| import org.apache.brooklyn.core.catalog.internal.CatalogEntityItemDto; |
| import org.apache.brooklyn.core.catalog.internal.CatalogItemBuilder; |
| import org.apache.brooklyn.core.catalog.internal.CatalogItemDo; |
| import org.apache.brooklyn.core.catalog.internal.CatalogUtils; |
| import org.apache.brooklyn.core.catalog.internal.CatalogXmlSerializer; |
| import org.apache.brooklyn.core.catalog.internal.CatalogClasspathDo.CatalogScanningModes; |
| import org.apache.brooklyn.core.entity.Entities; |
| import org.apache.brooklyn.core.mgmt.BrooklynTags; |
| import org.apache.brooklyn.core.mgmt.internal.LocalManagementContext; |
| import org.apache.brooklyn.core.test.entity.LocalManagementContextForTests; |
| import org.apache.brooklyn.core.test.entity.TestApplication; |
| import org.apache.brooklyn.core.test.entity.TestEntity; |
| import org.apache.brooklyn.util.core.BrooklynMavenArtifacts; |
| import org.apache.brooklyn.util.maven.MavenRetriever; |
| import org.apache.commons.lang3.ClassUtils; |
| |
| import com.google.common.collect.ImmutableList; |
| |
| public class CatalogDtoTest { |
| |
| private static final Logger log = LoggerFactory.getLogger(CatalogDtoTest.class); |
| |
| private LocalManagementContext managementContext; |
| |
| @BeforeMethod(alwaysRun = true) |
| public void setUp() throws Exception { |
| managementContext = LocalManagementContextForTests.newInstanceWithOsgi(); |
| } |
| |
| @AfterMethod(alwaysRun = true) |
| public void tearDown() throws Exception { |
| if (managementContext != null) Entities.destroyAll(managementContext); |
| } |
| |
| @Test(groups="Integration") |
| public void testCatalogLookup() { |
| CatalogDto root = buildExampleCatalog(); |
| checkCatalogHealthy(root); |
| } |
| |
| @Test(groups="Integration") |
| public void testCatalogSerializeAndLookup() { |
| CatalogDto root = buildExampleCatalog(); |
| CatalogXmlSerializer serializer = new CatalogXmlSerializer(); |
| |
| String xml = serializer.toString(root); |
| log.info("Example catalog serialized as:\n"+xml); |
| |
| CatalogDto root2 = (CatalogDto) serializer.fromString(xml); |
| checkCatalogHealthy(root2); |
| } |
| |
| protected void checkCatalogHealthy(CatalogDto root) { |
| assertEquals(root.catalogs.size(), 4); |
| CatalogDo loader = new CatalogDo(managementContext, root).load(); |
| |
| // test app comes from jar, by default |
| CatalogItemDo<?,?> worker = loader.getIdCache().get(CatalogUtils.getVersionedId(TestApplication.class.getCanonicalName(), BasicBrooklynCatalog.NO_VERSION)); |
| assertNotNull(worker); |
| assertEquals(worker.getDisplayName(), "Test App from JAR"); |
| |
| // TODO can test scanned elements, links to other catalogs, etc |
| } |
| |
| public CatalogDto buildExampleCatalog() { |
| CatalogDo root = new CatalogDo( |
| managementContext, |
| CatalogDto.newNamedInstance("My Local Catalog", |
| "My favourite local settings, including remote catalogs -- intended partly as a teaching " + |
| "example for what can be expressed, and how", "contents-built-in-test")); |
| root.setClasspathScanForEntities(CatalogScanningModes.NONE); |
| |
| String bundleUrl = MavenRetriever.localUrl(BrooklynMavenArtifacts.artifact("", "brooklyn-core", "jar", "tests")); |
| CatalogDo testEntitiesJavaCatalog = new CatalogDo( |
| managementContext, |
| CatalogDto.newNamedInstance("Test Entities from Java", null, "test-java")); |
| testEntitiesJavaCatalog.setClasspathScanForEntities(CatalogScanningModes.NONE); |
| testEntitiesJavaCatalog.addToClasspath(bundleUrl); |
| testEntitiesJavaCatalog.addEntry(CatalogItemBuilder.newTemplate(TestApplication.class.getCanonicalName(), BasicBrooklynCatalog.NO_VERSION) |
| .displayName("Test App from JAR") |
| .javaType(TestApplication.class.getCanonicalName()) |
| .tag(BrooklynTags.newNotesTag("Some notes for catalog testing")) |
| .tag(BrooklynTags.newYamlSpecTag("This is the spec for a test catalog item")) |
| .tag(BrooklynTags.newTraitsTag(ClassUtils.getAllInterfaces(TestApplication.class))) |
| .build()); |
| testEntitiesJavaCatalog.addEntry(CatalogItemBuilder.newEntity(TestEntity.class.getCanonicalName(), BasicBrooklynCatalog.NO_VERSION) |
| .displayName("Test Entity from JAR") |
| .javaType(TestEntity.class.getCanonicalName()) |
| .build()); |
| root.addCatalog(testEntitiesJavaCatalog.dto); |
| |
| CatalogDo testEntitiesJavaCatalogScanning = new CatalogDo( |
| managementContext, |
| CatalogDto.newNamedInstance("Test Entities from Java Scanning", null, "test-java-scan")); |
| testEntitiesJavaCatalogScanning.addToClasspath(bundleUrl); |
| testEntitiesJavaCatalogScanning.setClasspathScanForEntities(CatalogScanningModes.ANNOTATIONS); |
| root.addCatalog(testEntitiesJavaCatalogScanning.dto); |
| |
| CatalogDo osgiCatalog = new CatalogDo( |
| managementContext, |
| CatalogDto.newNamedInstance("Test Entities from OSGi", |
| "A catalog whose entries define their libraries as a list of OSGi bundles", "test-osgi-defined")); |
| osgiCatalog.setClasspathScanForEntities(CatalogScanningModes.NONE); |
| CatalogEntityItemDto osgiEntity = CatalogItemBuilder.newEntity(TestEntity.class.getCanonicalName(), "Test Entity from OSGi") |
| // NB: this is not actually an OSGi bundle, but it's okay as we don't instantiate the bundles ahead of time (currently) |
| .libraries(ImmutableList.<CatalogBundle>of(new CatalogBundleDto(null, null, bundleUrl))) |
| .build(); |
| testEntitiesJavaCatalog.addEntry(osgiEntity); |
| root.addCatalog(osgiCatalog.dto); |
| |
| root.addCatalog(CatalogDto.newLinkedInstance("classpath://brooklyn-catalog-empty.xml")); |
| return root.dto; |
| } |
| |
| @Test |
| public void testVersionedIdSplitter() { |
| String id = "simple.id"; |
| String version = "0.1.2"; |
| String versionedId = CatalogUtils.getVersionedId(id, version); |
| |
| Assert.assertNull(CatalogUtils.getSymbolicNameFromVersionedId(null)); |
| Assert.assertNull(CatalogUtils.getVersionFromVersionedId(null)); |
| Assert.assertNull(CatalogUtils.getSymbolicNameFromVersionedId(id)); |
| Assert.assertNull(CatalogUtils.getVersionFromVersionedId(version)); |
| Assert.assertEquals(CatalogUtils.getSymbolicNameFromVersionedId(versionedId), id); |
| Assert.assertEquals(CatalogUtils.getVersionFromVersionedId(versionedId), version); |
| } |
| } |