Test ServiceTypeResolver usage
Project: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/commit/09e9f1ac Tree: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/tree/09e9f1ac Diff: http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/diff/09e9f1ac Branch: refs/heads/master Commit: 09e9f1acf1f307b0da556ae96a3d2b7f3ef91c03 Parents: 883feae Author: Svetoslav Neykov <[email protected]> Authored: Wed Oct 14 17:07:43 2015 +0300 Committer: Svetoslav Neykov <[email protected]> Committed: Wed Oct 14 17:11:07 2015 +0300 ---------------------------------------------------------------------- .../resolve/AbstractServiceSpecResolver.java | 2 +- .../BrooklynComponentTemplateResolver.java | 12 ++--- .../service/ServiceTypeResolverAdaptor.java | 10 +++- .../camp/brooklyn/AbstractYamlTest.java | 2 +- .../brooklyn/catalog/CatalogYamlEntityTest.java | 2 +- .../service/ServiceTypeResolverTest.java | 39 ++++++++++++++ .../service/TestServiceTypeResolver.java | 54 ++++++++++++++++++++ ...lyn.spi.creation.service.ServiceTypeResolver | 19 +++++++ 8 files changed, 126 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/09e9f1ac/core/src/main/java/org/apache/brooklyn/core/resolve/AbstractServiceSpecResolver.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/brooklyn/core/resolve/AbstractServiceSpecResolver.java b/core/src/main/java/org/apache/brooklyn/core/resolve/AbstractServiceSpecResolver.java index 705ed0e..78c796a 100644 --- a/core/src/main/java/org/apache/brooklyn/core/resolve/AbstractServiceSpecResolver.java +++ b/core/src/main/java/org/apache/brooklyn/core/resolve/AbstractServiceSpecResolver.java @@ -51,7 +51,7 @@ public abstract class AbstractServiceSpecResolver implements ServiceSpecResolver } protected String getLocalType(String type) { - return Strings.removeFromStart(type, prefix); + return Strings.removeFromStart(type, prefix).trim(); } @Override http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/09e9f1ac/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java index 9c0e9c6..381b76b 100644 --- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java +++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/BrooklynComponentTemplateResolver.java @@ -179,15 +179,9 @@ public class BrooklynComponentTemplateResolver { private List<ServiceSpecResolver> getServiceTypeResolverOverrides() { List<ServiceSpecResolver> overrides = new ArrayList<>(); - if (type.indexOf(':') != -1) { - String prefix = Splitter.on(":").splitToList(type).get(0); - ServiceLoader<ServiceTypeResolver> loader = ServiceLoader.load(ServiceTypeResolver.class, - mgmt.getCatalogClassLoader()); - for (ServiceTypeResolver resolver : loader) { - if (prefix.equals(resolver.getTypePrefix())) { - overrides.add(new ServiceTypeResolverAdaptor(this, resolver)); - } - } + ServiceLoader<ServiceTypeResolver> loader = ServiceLoader.load(ServiceTypeResolver.class, mgmt.getCatalogClassLoader()); + for (ServiceTypeResolver resolver : loader) { + overrides.add(new ServiceTypeResolverAdaptor(this, resolver)); } return overrides; } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/09e9f1ac/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/ServiceTypeResolverAdaptor.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/ServiceTypeResolverAdaptor.java b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/ServiceTypeResolverAdaptor.java index 7b52977..17f4e2b 100644 --- a/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/ServiceTypeResolverAdaptor.java +++ b/usage/camp/src/main/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/ServiceTypeResolverAdaptor.java @@ -20,6 +20,7 @@ package org.apache.brooklyn.camp.brooklyn.spi.creation.service; import java.util.Set; +import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.entity.EntitySpec; import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynComponentTemplateResolver; import org.apache.brooklyn.core.mgmt.classloading.BrooklynClassLoadingContext; @@ -28,7 +29,7 @@ import org.apache.brooklyn.core.resolve.ServiceSpecResolver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import groovy.xml.Entity; +import com.google.common.base.Splitter; @SuppressWarnings("deprecation") public class ServiceTypeResolverAdaptor extends AbstractServiceSpecResolver { @@ -44,7 +45,12 @@ public class ServiceTypeResolverAdaptor extends AbstractServiceSpecResolver { @Override public boolean accepts(String type, BrooklynClassLoadingContext loader) { - return true; + if (type.indexOf(':') != -1) { + String prefix = Splitter.on(":").splitToList(type).get(0); + return prefix.equals(serviceTypeResolver.getTypePrefix()); + } else { + return false; + } } @SuppressWarnings({ "unchecked", "rawtypes" }) http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/09e9f1ac/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java index 8b7a04e..8a858cf 100644 --- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java +++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/AbstractYamlTest.java @@ -144,7 +144,7 @@ public abstract class AbstractYamlTest { return app; } - protected EntitySpec<?> createEntitySpec(String... yaml) { + protected EntitySpec<?> createAppEntitySpec(String... yaml) { return EntityManagementUtils.createEntitySpecForApplication(mgmt(), joinLines(yaml)); } http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/09e9f1ac/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java index f0c6e90..b62ba60 100644 --- a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java +++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/catalog/CatalogYamlEntityTest.java @@ -786,7 +786,7 @@ public class CatalogYamlEntityTest extends AbstractYamlTest { @Test public void testHardcodedCatalog() throws Exception { - createEntitySpec( + createAppEntitySpec( "services:", "- type: cluster", "- type: vanilla", http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/09e9f1ac/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/ServiceTypeResolverTest.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/ServiceTypeResolverTest.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/ServiceTypeResolverTest.java new file mode 100644 index 0000000..cbaccf0 --- /dev/null +++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/ServiceTypeResolverTest.java @@ -0,0 +1,39 @@ +/* + * 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.camp.brooklyn.spi.creation.service; + +import static org.testng.Assert.assertEquals; + +import org.apache.brooklyn.api.entity.EntitySpec; +import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest; +import org.apache.brooklyn.entity.stock.BasicEntity; +import org.testng.annotations.Test; + + +public class ServiceTypeResolverTest extends AbstractYamlTest { + + @Test + public void testAddCatalogItemVerySimple() throws Exception { + EntitySpec<?> spec = createAppEntitySpec( + "services:", + "- type: \"test-resolver:" + BasicEntity.class.getName() + "\""); + assertEquals(spec.getChildren().get(0).getFlags().get("resolver"), TestServiceTypeResolver.class); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/09e9f1ac/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/TestServiceTypeResolver.java ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/TestServiceTypeResolver.java b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/TestServiceTypeResolver.java new file mode 100644 index 0000000..7fd6d8a --- /dev/null +++ b/usage/camp/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/creation/service/TestServiceTypeResolver.java @@ -0,0 +1,54 @@ +/* + * 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.camp.brooklyn.spi.creation.service; + +import org.apache.brooklyn.api.catalog.CatalogItem; +import org.apache.brooklyn.api.entity.Entity; +import org.apache.brooklyn.api.entity.EntitySpec; +import org.apache.brooklyn.camp.brooklyn.spi.creation.BrooklynComponentTemplateResolver; +import org.apache.brooklyn.core.catalog.internal.CatalogUtils; +import org.apache.brooklyn.util.text.Strings; + +@SuppressWarnings("deprecation") +public class TestServiceTypeResolver implements ServiceTypeResolver { + + private static final String PREFIX = "test-resolver"; + + @Override + public String getTypePrefix() { + return PREFIX; + } + + @Override + public String getBrooklynType(String serviceType) { + return Strings.removeFromStart(serviceType, PREFIX + ":"); + } + + @SuppressWarnings("unchecked") + @Override + public CatalogItem<Entity, EntitySpec<?>> getCatalogItem(BrooklynComponentTemplateResolver resolver, String serviceType) { + return (CatalogItem<Entity, EntitySpec<?>>) CatalogUtils.getCatalogItemOptionalVersion(resolver.getManagementContext(), getBrooklynType(serviceType)); + } + + @Override + public <T extends Entity> void decorateSpec(BrooklynComponentTemplateResolver resolver, EntitySpec<T> spec) { + spec.configure("resolver", TestServiceTypeResolver.class); + } + +} http://git-wip-us.apache.org/repos/asf/incubator-brooklyn/blob/09e9f1ac/usage/camp/src/test/resources/META-INF/services/org.apache.brooklyn.camp.brooklyn.spi.creation.service.ServiceTypeResolver ---------------------------------------------------------------------- diff --git a/usage/camp/src/test/resources/META-INF/services/org.apache.brooklyn.camp.brooklyn.spi.creation.service.ServiceTypeResolver b/usage/camp/src/test/resources/META-INF/services/org.apache.brooklyn.camp.brooklyn.spi.creation.service.ServiceTypeResolver new file mode 100644 index 0000000..3bba7fb --- /dev/null +++ b/usage/camp/src/test/resources/META-INF/services/org.apache.brooklyn.camp.brooklyn.spi.creation.service.ServiceTypeResolver @@ -0,0 +1,19 @@ +# +# 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. +# +org.apache.brooklyn.camp.brooklyn.spi.creation.service.TestServiceTypeResolver \ No newline at end of file
