Aled Sage created BROOKLYN-565:
----------------------------------
Summary: brooklyn:object with nested DSL inside list is not
resolved
Key: BROOKLYN-565
URL: https://issues.apache.org/jira/browse/BROOKLYN-565
Project: Brooklyn
Issue Type: Bug
Reporter: Aled Sage
When using {{$brooklyn:object}} with a nested DSL expression that is contained
within a list, it does not resolve the nested DSL expression.
This is because it thinks that deferred-evaluation is not necessary. It
constructs the object immediately - we end up with a DSL object in the list
rather than the resolved value.
The workaround is to include {{deferred: true}} inside the brooklyn object.
The problem does not happen if there are any other top-level values in
{{brooklyn.fields}} that are DSL expressions (it realises then that it must
defer the evaluation).
This is demonstrated by adding the following tests to {{ObjectsYamlTest}}:
{noformat}
@Test
public void testFieldOfTypeListAsDeferredSuppliersExplicitlyDeferred()
throws Exception {
// Using explicit `deferred: true`
Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
" brooklyn.config:",
" mystring: myval",
" myint: 123",
" test.confObject:",
" $brooklyn:object:",
" type: "+ObjectsYamlTest.class.getName()+"$TestObject",
" deferred: true",
" object.fields:",
" list: ",
" - $brooklyn:config(\"mystring\")");
TestObject testObject = (TestObject)
testEntity.getConfig(TestEntity.CONF_OBJECT);
Assert.assertEquals(testObject.getList(), ImmutableList.of("myval"));
}
// Fails if don't include `deferred: true`
// see {@link #testFieldOfTypeListAsDeferredSuppliersExplicitlyDeferred()}
@Test(groups="Broken")
public void testFieldOfTypeListAsDeferredSuppliers() throws Exception {
// should defer evaluation automatically, and resolve config
Entity testEntity = setupAndCheckTestEntityInBasicYamlWith(
" brooklyn.config:",
" mystring: myval",
" myint: 123",
" test.confObject:",
" $brooklyn:object:",
" type: "+ObjectsYamlTest.class.getName()+"$TestObject",
" object.fields:",
" list: ",
" - $brooklyn:config(\"mystring\")");
TestObject testObject = (TestObject)
testEntity.getConfig(TestEntity.CONF_OBJECT);
Assert.assertEquals(testObject.getList(), ImmutableList.of("myval"));
}
{noformat}
--
This message was sent by Atlassian JIRA
(v6.4.14#64029)