brooklyn-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ASF GitHub Bot (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (BROOKLYN-460) Brooklyn Camp syntax for adding tags to an entity spec
Date Wed, 05 Apr 2017 16:06:41 GMT

    [ https://issues.apache.org/jira/browse/BROOKLYN-460?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15957112#comment-15957112
] 

ASF GitHub Bot commented on BROOKLYN-460:
-----------------------------------------

Github user neykov commented on a diff in the pull request:

    https://github.com/apache/brooklyn-server/pull/612#discussion_r109958476
  
    --- Diff: camp/camp-brooklyn/src/test/java/org/apache/brooklyn/camp/brooklyn/spi/dsl/TagsYamlTest.java
---
    @@ -0,0 +1,171 @@
    +/*
    + * Copyright 2016 The Apache Software Foundation.
    + *
    + * Licensed 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.dsl;
    +
    +import com.google.common.base.Predicate;
    +import com.google.common.collect.Iterables;
    +import org.apache.brooklyn.api.entity.Entity;
    +import org.apache.brooklyn.api.mgmt.Task;
    +import org.apache.brooklyn.camp.brooklyn.AbstractYamlTest;
    +import org.apache.brooklyn.core.entity.EntityInternal;
    +import org.apache.brooklyn.core.mgmt.BrooklynTags;
    +import org.apache.brooklyn.entity.stock.BasicApplication;
    +import org.apache.brooklyn.test.Asserts;
    +import org.apache.brooklyn.util.exceptions.CompoundRuntimeException;
    +import org.apache.brooklyn.util.exceptions.Exceptions;
    +import org.testng.annotations.Test;
    +
    +import javax.annotation.Nullable;
    +import java.io.Serializable;
    +import java.util.Set;
    +import java.util.concurrent.Callable;
    +
    +import static org.testng.Assert.assertTrue;
    +import static org.testng.Assert.fail;
    +
    +public class TagsYamlTest extends AbstractYamlTest {
    +    @Test
    +    public void testBrooklynCampSingleTag() throws Exception {
    +        final Entity app = createAndStartApplication(
    +                "services:",
    +                "- type: " + BasicApplication.class.getName(),
    +                "  brooklyn.tags:",
    +                "    - hi");
    +        assertTrue(getTagsEventually(app).contains(BrooklynTags.newCampBrooklynTag("hi")));
    +    }
    +
    +    @Test
    +    public void testBrooklynCampMultipleTags() throws Exception {
    +        final Entity app = createAndStartApplication(
    +                "services:",
    +                "- type: " + BasicApplication.class.getName(),
    +                "  brooklyn.tags:",
    +                "  - tag1",
    +                "  - \"2\"",
    +                "  - \"- 3\"");
    +        assertTrue(getTagsEventually(app).contains(BrooklynTags.newCampBrooklynTag("tag1")));
    +        assertTrue(getTagsEventually(app).contains(BrooklynTags.newCampBrooklynTag("2")));
    +        assertTrue(getTagsEventually(app).contains(BrooklynTags.newCampBrooklynTag("-
3")));
    +    }
    +
    +    @Test
    +    public void testBrooklynCampTagsFailNonList() throws Exception {
    +        try {
    +            final Entity app = createAndStartApplication(
    +                    "services:",
    +                    "- type: " + BasicApplication.class.getName(),
    +                    "  brooklyn.tags:",
    +                    "    tag1: true",
    +                    "    tag2: 2");
    +            fail("Should throw IllegalArgumentException exception.");
    +        } catch (CompoundRuntimeException e) {
    +            Asserts.assertStringContainsAtLeastOne(Exceptions.getFirstInteresting(e).getMessage(),"brooklyn.tags
must be a list, is: ");
    +        }
    +    }
    +
    +    @Test
    +    public void testBrooklynCampKnowsIntegerTags() throws Exception {
    +        final Entity app = createAndStartApplication(
    +                "services:",
    +                "- type: " + BasicApplication.class.getName(),
    +                "  brooklyn.tags:",
    +                "  - tag1",
    +                "  - 3");
    +        assertTrue(getTagsEventually(app).contains(BrooklynTags.newCampBrooklynTag(3)));
    +        assertTrue(getTagsEventually(app).contains(BrooklynTags.newCampBrooklynTag("tag1")));
    +    }
    +
    +    @Test
    +    public void testBrooklynCampObjectTags() throws Exception {
    +        final Entity app = createAndStartApplication(
    +                "services:",
    +                "- type: " + BasicApplication.class.getName(),
    +                "  brooklyn.tags:",
    +                "  - tag1",
    +                "  - $brooklyn:object:",
    +                "      type: " + TagsTestSerializableObject.class.getName());
    +        assertTrue(Iterables.any(getTagsEventually(app), new Predicate<Object>()
{
    +            @Override
    +            public boolean apply(@Nullable Object input) {
    +                return input instanceof BrooklynTags.CampBrooklynTag && ((BrooklynTags.CampBrooklynTag)input).getContents()
instanceof TagsTestSerializableObject;
    +            }
    +        }));
    +        assertTrue(getTagsEventually(app).contains(BrooklynTags.newCampBrooklynTag("tag1")));
    +    }
    +
    +    @Test
    +    public void testBrooklynCampFailDslTags() throws Exception {
    +        try {
    +            final Entity app = createAndStartApplication(
    +                    "services:",
    +                    "- type: " + BasicApplication.class.getName(),
    +                    "  brooklyn.tags:",
    +                    "  - tag1",
    +                    "  - $brooklyn:object:",
    +                    "      type: "+TagsTestSerializableObject.class.getName(),
    +                    "      constructor.args:",
    +                    "      - $brooklyn:attributeWhenReady(\"host.name\")");
    +            fail("Should throw IllegalArgumentException exception.");
    +        } catch (CompoundRuntimeException e) {
    +            Asserts.assertStringContainsAtLeastOne(Exceptions.getFirstInteresting(e).getMessage(),"brooklyn.tags
should not contain DeferredSupplier objects, such example is using $brooklyn:attributeWhenReady");
    +        }
    +    }
    +
    +    @Test
    +    public void testBrooklynCampFailNonSerializableDslTags() throws Exception {
    +        try {
    +            final Entity app = createAndStartApplication(
    +                    "services:",
    +                    "- type: " + BasicApplication.class.getName(),
    +                    "  brooklyn.tags:",
    +                    "  - tag1",
    +                    "  - $brooklyn:object:",
    +                    "      type: "+NonSerializable.class.getName());
    +            fail("Should throw IllegalArgumentException exception.");
    +        } catch (CompoundRuntimeException e) {
    +            Asserts.assertStringContainsAtLeastOne(Exceptions.getFirstInteresting(e).getMessage(),"brooklyn.tags
should not contain DeferredSupplier objects, such example is using $brooklyn:attributeWhenReady");
    +        }
    +    }
    +
    +    public static class NonSerializable {}
    +
    +    @Test
    +    public void testTagWithDslValue() throws Exception {
    +        Entity app = createAndStartApplication(
    +                "services:",
    +                "- type: " + BasicApplication.class.getName(),
    +                "  brooklyn.tags:",
    +                "  - $brooklyn:literal(\"myval\")");
    +        assertTrue(getTagsEventually(app).contains(BrooklynTags.newCampBrooklynTag("myval")));
    +    }
    +
    +    public static class TagsTestSerializableObject implements Serializable {
    +        private static final long serialVersionUID = -5150802977330637460L;
    +
    +        public TagsTestSerializableObject() {}
    +        public TagsTestSerializableObject(Object arg1) {}
    +    }
    +
    +    private static Set<Object> getTagsEventually(final Entity entity) throws Exception
{
    +        Task<Set<Object>> result = ((EntityInternal)entity).getExecutionContext().submit(new
Callable<Set<Object>>() {
    +            @Override
    +            public Set<Object> call() throws Exception {
    +                return entity.tags().getTags();
    --- End diff --
    
    Agree, should be there since app creation.


> Brooklyn Camp syntax for adding tags to an entity spec
> ------------------------------------------------------
>
>                 Key: BROOKLYN-460
>                 URL: https://issues.apache.org/jira/browse/BROOKLYN-460
>             Project: Brooklyn
>          Issue Type: New Feature
>            Reporter: Valentin Aitken
>            Priority: Minor
>
> Current requirement is to be able to supply String tags in an entity spec in YAML so
it can be then retrieved via REST API with {{GET /v1/applications/<appId>/entities/<entityId>/tags}}.
> Example usage in a YAML blueprint:
> {noformat}
> services:
> - type: org.apache.brooklyn.entity.software.base.VanillaSoftwareProcess
>   brooklyn.tags:
>   - tag1
>   - tag2
> {noformat}
> Please shout if you have further requirements for {{brooklyn.tags}}.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Mime
View raw message