blob: f6d06d37fa886d9fe4b981d155fad46988c88904 [file] [log] [blame]
/*
* 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.camp.brooklyn.AbstractYamlTest;
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 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(app.tags().getTags().contains("hi"));
}
@Test
public void testBrooklynCampMultipleTags() throws Exception {
final Entity app = createAndStartApplication(
"services:",
"- type: " + BasicApplication.class.getName(),
" brooklyn.tags:",
" - tag1",
" - \"2\"",
" - \"- 3\"");
assertTrue(app.tags().getTags().contains("tag1"));
assertTrue(app.tags().getTags().contains("2"));
assertTrue(app.tags().getTags().contains("- 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; instead got: "+app);
} 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(app.tags().getTags().contains(3));
assertTrue(app.tags().getTags().contains("tag1"));
}
@Test
public void testBrooklynCampObjectTags() throws Exception {
final Entity app = createAndStartApplication(
"services:",
"- type: " + BasicApplication.class.getName(),
" brooklyn.tags:",
" - tag1",
" - $brooklyn:object:",
" type: " + TagsTestObject.class.getName());
assertTrue(Iterables.any(app.tags().getTags(), new Predicate<Object>() {
@Override
public boolean apply(@Nullable Object input) {
return input instanceof TagsTestObject;
}
}));
assertTrue(app.tags().getTags().contains("tag1"));
}
@Test
public void testBrooklynCampFailDslTags() throws Exception {
try {
final Entity app = createAndStartApplication(
"services:",
"- type: " + BasicApplication.class.getName(),
" brooklyn.tags:",
" - tag1",
" - $brooklyn:object:",
" type: "+TagsTestObject.class.getName(),
" constructor.args:",
" - $brooklyn:attributeWhenReady(\"host.name\")");
fail("Should throw IllegalArgumentException exception; instead got "+app);
} catch (CompoundRuntimeException e) {
Asserts.assertStringContainsAtLeastOne(Exceptions.getFirstInteresting(e).getMessage(),"brooklyn.tags should not contain DeferredSupplier. A DeferredSupplier is made when using $brooklyn:attributeWhenReady");
}
}
@Test
public void testTagWithDslValue() throws Exception {
Entity app = createAndStartApplication(
"services:",
"- type: " + BasicApplication.class.getName(),
" brooklyn.tags:",
" - $brooklyn:literal(\"myval\")");
assertTrue(app.tags().getTags().contains("myval"));
}
public static class TagsTestObject {
public TagsTestObject() {}
public TagsTestObject(Object arg1) {}
}
}