/* * 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.entity; import static org.testng.Assert.assertEquals; import java.util.Map; import org.apache.brooklyn.api.entity.Entity; import org.apache.brooklyn.api.location.PortRange; import org.apache.brooklyn.core.entity.AbstractEntity; import org.apache.brooklyn.core.location.PortRanges; import org.testng.annotations.Test; import org.apache.brooklyn.util.collections.MutableMap; import org.apache.brooklyn.util.core.flags.SetFromFlag; public class EntitySetFromFlagTest { @Test public void testSetFromFlagUsingFieldName() { MyEntity entity = new MyEntity(MutableMap.of("str1", "myval")); assertEquals(entity.str1, "myval"); } @Test public void testSetFromFlagUsingOverridenName() { MyEntity entity = new MyEntity(MutableMap.of("altStr2", "myval")); assertEquals(entity.str2, "myval"); } @Test public void testSetFromFlagWhenNoDefaultIsNull() { MyEntity entity = new MyEntity(); assertEquals(entity.str1, null); } @Test public void testSetFromFlagUsesDefault() { MyEntity entity = new MyEntity(); assertEquals(entity.str3, "default str3"); } @Test public void testSetFromFlagOverridingDefault() { MyEntity entity = new MyEntity(MutableMap.of("str3", "overridden str3")); assertEquals(entity.str3, "overridden str3"); } @Test public void testSetFromFlagCastsPrimitives() { MyEntity entity = new MyEntity(MutableMap.of("double1", 1f)); assertEquals(entity.double1, 1d); } @Test public void testSetFromFlagCastsDefault() { MyEntity entity = new MyEntity(); assertEquals(entity.byte1, (byte)1); assertEquals(entity.short1, (short)2); assertEquals(entity.int1, 3); assertEquals(entity.long1, 4l); assertEquals(entity.float1, 5f); assertEquals(entity.double1, 6d); assertEquals(entity.char1, 'a'); assertEquals(entity.bool1, true); assertEquals(entity.byte2, Byte.valueOf((byte)1)); assertEquals(entity.short2, Short.valueOf((short)2)); assertEquals(entity.int2, Integer.valueOf(3)); assertEquals(entity.long2, Long.valueOf(4l)); assertEquals(entity.float2, Float.valueOf(5f)); assertEquals(entity.double2, Double.valueOf(6d)); assertEquals(entity.char2, Character.valueOf('a')); assertEquals(entity.bool2, Boolean.TRUE); } @Test public void testSetFromFlagCoercesDefaultToPortRange() { MyEntity entity = new MyEntity(); assertEquals(entity.portRange1, PortRanges.fromInteger(1234)); } @Test public void testSetFromFlagCoercesStringValueToPortRange() { MyEntity entity = new MyEntity(MutableMap.of("portRange1", "1-3")); assertEquals(entity.portRange1, new PortRanges.LinearPortRange(1, 3)); } @Test public void testSetFromFlagCoercesStringValueToInt() { MyEntity entity = new MyEntity(MutableMap.of("int1", "123")); assertEquals(entity.int1, 123); } @Test public void testSetIconUrl() { MyEntity entity = new MyEntity(MutableMap.of("iconUrl", "/img/myicon.gif")); assertEquals(entity.getIconUrl(), "/img/myicon.gif"); } @Test(expectedExceptions=IllegalArgumentException.class) public void testFailsFastOnInvalidCoercion() {; new MyEntity(MutableMap.of("int1", "thisisnotanint")); } // Fails because configure being called from inside constructor; so field is set after configure called @Test(enabled=false) public void testSetFromFlagWithFieldThatIsExplicitySet() { MyEntity entity = new MyEntity(MutableMap.of("str4", "myval")); assertEquals(entity.str4, "myval"); MyEntity entity2 = new MyEntity(); assertEquals(entity2.str4, "explicit str4"); } private static class MyEntity extends AbstractEntity { @SetFromFlag(defaultVal="1234") PortRange portRange1; @SetFromFlag String str1; @SetFromFlag("altStr2") String str2; @SetFromFlag(defaultVal="default str3") String str3; @SetFromFlag String str4 = "explicit str4"; @SetFromFlag(defaultVal="1") byte byte1; @SetFromFlag(defaultVal="2") short short1; @SetFromFlag(defaultVal="3") int int1; @SetFromFlag(defaultVal="4") long long1; @SetFromFlag(defaultVal="5") float float1; @SetFromFlag(defaultVal="6") double double1; @SetFromFlag(defaultVal="a") char char1; @SetFromFlag(defaultVal="true") boolean bool1; @SetFromFlag(defaultVal="1") Byte byte2; @SetFromFlag(defaultVal="2") Short short2; @SetFromFlag(defaultVal="3") Integer int2; @SetFromFlag(defaultVal="4") Long long2; @SetFromFlag(defaultVal="5") Float float2; @SetFromFlag(defaultVal="6") Double double2; @SetFromFlag(defaultVal="a") Character char2; @SetFromFlag(defaultVal="true") Boolean bool2; MyEntity() { super(MutableMap.of(), null); } MyEntity(Map flags) { super(flags, null); } MyEntity(Entity parent) { super(MutableMap.of(), parent); } MyEntity(Map flags, Entity parent) { super(flags, parent); } } }