/** * 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.aries.jmx.codec; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.osgi.jmx.JmxConstants.BIGINTEGER; import static org.osgi.jmx.JmxConstants.BOOLEAN; import static org.osgi.jmx.JmxConstants.CHARACTER; import static org.osgi.jmx.JmxConstants.DOUBLE; import static org.osgi.jmx.JmxConstants.INTEGER; import static org.osgi.jmx.JmxConstants.KEY; import static org.osgi.jmx.JmxConstants.PROPERTY_TYPE; import static org.osgi.jmx.JmxConstants.P_BOOLEAN; import static org.osgi.jmx.JmxConstants.P_CHAR; import static org.osgi.jmx.JmxConstants.P_DOUBLE; import static org.osgi.jmx.JmxConstants.P_INT; import static org.osgi.jmx.JmxConstants.STRING; import static org.osgi.jmx.JmxConstants.TYPE; import static org.osgi.jmx.JmxConstants.VALUE; import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Vector; import javax.management.openmbean.CompositeData; import javax.management.openmbean.CompositeDataSupport; import org.junit.Test; /** * * * @version $Rev$ $Date$ */ public class PropertyDataTest { @Test public void testToCompositeDataForPrimitiveTypes() throws Exception { PropertyData<Integer> intData = PropertyData.newInstance("test", 1); CompositeData intCData = intData.toCompositeData(); assertEquals("test", intCData.get(KEY)); assertEquals("1", intCData.get(VALUE)); assertEquals(P_INT, intCData.get(TYPE)); PropertyData<Double> doubleData = PropertyData.newInstance("test", 1.0); CompositeData doubleCData = doubleData.toCompositeData(); assertEquals("test", doubleCData.get(KEY)); assertEquals("1.0", doubleCData.get(VALUE)); assertEquals(P_DOUBLE, doubleCData.get(TYPE)); PropertyData<Character> charData = PropertyData.newInstance("test", 'c'); CompositeData charCData = charData.toCompositeData(); assertEquals("test", charCData.get(KEY)); assertEquals("c", charCData.get(VALUE)); assertEquals(P_CHAR, charCData.get(TYPE)); PropertyData<Boolean> booleanData = PropertyData.newInstance("test", true); CompositeData booleanCData = booleanData.toCompositeData(); assertEquals("test", booleanCData.get(KEY)); assertEquals("true", booleanCData.get(VALUE)); assertEquals(P_BOOLEAN, booleanCData.get(TYPE)); } @Test public void testFromCompositeDataForPrimitiveTypes() throws Exception { Map<String, Object> items = new HashMap<String, Object>(); items.put(KEY, "key"); items.put(VALUE, "1"); items.put(TYPE, P_INT); CompositeData compositeData = new CompositeDataSupport(PROPERTY_TYPE, items); PropertyData<Integer> intData = PropertyData.from(compositeData); assertEquals("key", intData.getKey()); assertEquals(new Integer(1), intData.getValue()); assertEquals(P_INT, intData.getEncodedType()); assertTrue(intData.isEncodingPrimitive()); items.clear(); items.put(KEY, "key"); items.put(VALUE, "1.0"); items.put(TYPE, P_DOUBLE); compositeData = new CompositeDataSupport(PROPERTY_TYPE, items); PropertyData<Double> doubleData = PropertyData.from(compositeData); assertEquals("key", doubleData.getKey()); assertEquals(Double.valueOf(1.0), doubleData.getValue()); assertEquals(P_DOUBLE, doubleData.getEncodedType()); assertTrue(doubleData.isEncodingPrimitive()); items.clear(); items.put(KEY, "key"); items.put(VALUE, "a"); items.put(TYPE, P_CHAR); compositeData = new CompositeDataSupport(PROPERTY_TYPE, items); PropertyData<Character> charData = PropertyData.from(compositeData); assertEquals("key", charData.getKey()); assertEquals(Character.valueOf('a'), charData.getValue()); assertEquals(P_CHAR, charData.getEncodedType()); assertTrue(charData.isEncodingPrimitive()); items.clear(); items.put(KEY, "key"); items.put(VALUE, "true"); items.put(TYPE, P_BOOLEAN); compositeData = new CompositeDataSupport(PROPERTY_TYPE, items); PropertyData<Boolean> booleanData = PropertyData.from(compositeData); assertEquals("key", booleanData.getKey()); assertTrue(booleanData.getValue()); assertEquals(P_BOOLEAN, booleanData.getEncodedType()); assertTrue(booleanData.isEncodingPrimitive()); } @Test public void testToCompositeDataForWrapperTypes() { PropertyData<Integer> intData = PropertyData.newInstance("test", new Integer(1)); CompositeData intCData = intData.toCompositeData(); assertEquals("test", intCData.get(KEY)); assertEquals("1", intCData.get(VALUE)); assertEquals(INTEGER, intCData.get(TYPE)); PropertyData<Double> doubleData = PropertyData.newInstance("test", new Double(1.0)); CompositeData doubleCData = doubleData.toCompositeData(); assertEquals("test", doubleCData.get(KEY)); assertEquals("1.0", doubleCData.get(VALUE)); assertEquals(DOUBLE, doubleCData.get(TYPE)); PropertyData<Character> charData = PropertyData.newInstance("test", Character.valueOf('c')); CompositeData charCData = charData.toCompositeData(); assertEquals("test", charCData.get(KEY)); assertEquals("c", charCData.get(VALUE)); assertEquals(CHARACTER, charCData.get(TYPE)); PropertyData<Boolean> booleanData = PropertyData.newInstance("test", Boolean.TRUE); CompositeData booleanCData = booleanData.toCompositeData(); assertEquals("test", booleanCData.get(KEY)); assertEquals("true", booleanCData.get(VALUE)); assertEquals(BOOLEAN, booleanCData.get(TYPE)); } @Test public void testFromCompositeDataForWrapperTypes() throws Exception { Map<String, Object> items = new HashMap<String, Object>(); items.put(KEY, "key"); items.put(VALUE, "1"); items.put(TYPE, INTEGER); CompositeData compositeData = new CompositeDataSupport(PROPERTY_TYPE, items); PropertyData<Integer> intData = PropertyData.from(compositeData); assertEquals("key", intData.getKey()); assertEquals(new Integer(1), intData.getValue()); assertEquals(INTEGER, intData.getEncodedType()); assertFalse(intData.isEncodingPrimitive()); items.clear(); items.put(KEY, "key"); items.put(VALUE, "1.0"); items.put(TYPE, DOUBLE); compositeData = new CompositeDataSupport(PROPERTY_TYPE, items); PropertyData<Double> doubleData = PropertyData.from(compositeData); assertEquals("key", doubleData.getKey()); assertEquals(Double.valueOf(1.0), doubleData.getValue()); assertEquals(DOUBLE, doubleData.getEncodedType()); assertFalse(doubleData.isEncodingPrimitive()); items.clear(); items.put(KEY, "key"); items.put(VALUE, "a"); items.put(TYPE, CHARACTER); compositeData = new CompositeDataSupport(PROPERTY_TYPE, items); PropertyData<Character> charData = PropertyData.from(compositeData); assertEquals("key", charData.getKey()); assertEquals(Character.valueOf('a'), charData.getValue()); assertEquals(CHARACTER, charData.getEncodedType()); assertFalse(charData.isEncodingPrimitive()); items.clear(); items.put(KEY, "key"); items.put(VALUE, "true"); items.put(TYPE, BOOLEAN); compositeData = new CompositeDataSupport(PROPERTY_TYPE, items); PropertyData<Boolean> booleanData = PropertyData.from(compositeData); assertEquals("key", booleanData.getKey()); assertTrue(booleanData.getValue()); assertEquals(BOOLEAN, booleanData.getEncodedType()); assertFalse(booleanData.isEncodingPrimitive()); } @Test public void testToFromCompositeDataForAdditionalTypes() { PropertyData<String> stringData = PropertyData.newInstance("test", "value"); CompositeData stringCData = stringData.toCompositeData(); assertEquals("test", stringCData.get(KEY)); assertEquals("value", stringCData.get(VALUE)); assertEquals(STRING, stringCData.get(TYPE)); stringData = PropertyData.from(stringCData); assertEquals("test", stringData.getKey()); assertEquals("value", stringData.getValue()); assertEquals(STRING, stringData.getEncodedType()); PropertyData<BigInteger> bigIntData = PropertyData.newInstance("test", new BigInteger("1")); CompositeData bigIntCData = bigIntData.toCompositeData(); assertEquals("test", bigIntCData.get(KEY)); assertEquals("1", bigIntCData.get(VALUE)); assertEquals(BIGINTEGER, bigIntCData.get(TYPE)); bigIntData = PropertyData.from(bigIntCData); assertEquals("test", bigIntData.getKey()); assertEquals(new BigInteger("1"), bigIntData.getValue()); assertEquals(BIGINTEGER, bigIntData.getEncodedType()); } @Test public void testToFromCompositeDataForArrayTypes() { //long[] long[] primitiveLongValues = new long[] { 1, 2, 3 }; PropertyData<long[]> primitiveLongArrayData = PropertyData.newInstance("test", primitiveLongValues); CompositeData primitiveLongArrayCData = primitiveLongArrayData.toCompositeData(); assertEquals("test", primitiveLongArrayCData.get(KEY)); assertEquals("1,2,3", primitiveLongArrayCData.get(VALUE)); assertEquals("Array of long", primitiveLongArrayCData.get(TYPE)); primitiveLongArrayData = PropertyData.from(primitiveLongArrayCData); assertEquals("test", primitiveLongArrayData.getKey()); assertEquals("Array of long", primitiveLongArrayData.getEncodedType()); assertArrayEquals(primitiveLongValues, primitiveLongArrayData.getValue()); //Long[] Long[] longValues = new Long[] { new Long(4), new Long(5), new Long(6) }; PropertyData<Long[]> longArrayData = PropertyData.newInstance("test", longValues); CompositeData longArrayCData = longArrayData.toCompositeData(); assertEquals("test", longArrayCData.get(KEY)); assertEquals("4,5,6", longArrayCData.get(VALUE)); assertEquals("Array of Long", longArrayCData.get(TYPE)); longArrayData = PropertyData.from(longArrayCData); assertEquals("test", longArrayData.getKey()); assertEquals("Array of Long", longArrayData.getEncodedType()); assertArrayEquals(longValues, longArrayData.getValue()); //char[] char[] primitiveCharValues = new char[] { 'a', 'b', 'c' }; PropertyData<char[]> primitiveCharArrayData = PropertyData.newInstance("test", primitiveCharValues); CompositeData primitiveCharArrayCData = primitiveCharArrayData.toCompositeData(); assertEquals("test", primitiveCharArrayCData.get(KEY)); assertEquals("a,b,c", primitiveCharArrayCData.get(VALUE)); assertEquals("Array of char", primitiveCharArrayCData.get(TYPE)); primitiveCharArrayData = PropertyData.from(primitiveCharArrayCData); assertEquals("test", primitiveCharArrayData.getKey()); assertEquals("Array of char", primitiveCharArrayData.getEncodedType()); assertArrayEquals(primitiveCharValues, primitiveCharArrayData.getValue()); //Character[] Character[] charValues = new Character[] { 'a', 'b', 'c' }; PropertyData<Character[]> charArrayData = PropertyData.newInstance("test", charValues); CompositeData charArrayCData = charArrayData.toCompositeData(); assertEquals("test", charArrayCData.get(KEY)); assertEquals("a,b,c", charArrayCData.get(VALUE)); assertEquals("Array of Character", charArrayCData.get(TYPE)); charArrayData = PropertyData.from(charArrayCData); assertEquals("test", charArrayData.getKey()); assertEquals("Array of Character", charArrayData.getEncodedType()); assertArrayEquals(charValues, charArrayData.getValue()); } @Test public void testToFromCompositeDataForVector() { Vector<Long> vector = new Vector<Long>(); vector.add(new Long(40)); vector.add(new Long(50)); vector.add(new Long(60)); PropertyData<Vector<Long>> vectorPropertyData = PropertyData.newInstance("test", vector); CompositeData vectorCompositeData = vectorPropertyData.toCompositeData(); assertEquals("test", vectorCompositeData.get(KEY)); assertEquals("40,50,60", vectorCompositeData.get(VALUE)); assertEquals("Vector of Long", vectorCompositeData.get(TYPE)); vectorPropertyData = PropertyData.from(vectorCompositeData); assertEquals("test", vectorPropertyData.getKey()); assertEquals("Vector of Long", vectorPropertyData.getEncodedType()); assertArrayEquals(vector.toArray(new Long[vector.size()]), vectorPropertyData.getValue().toArray(new Long[vector.size()])); } @Test public void testToFromCompositeDataForList() { List<String> sl = new ArrayList<String>(); sl.add("A"); sl.add("B"); PropertyData<List<String>> pd = PropertyData.newInstance("test", sl); CompositeData cd = pd.toCompositeData(); assertEquals("test", cd.get(KEY)); assertEquals("A,B", cd.get(VALUE)); assertEquals("Array of String", cd.get(TYPE)); PropertyData<String []> pd2 = PropertyData.from(cd); assertEquals("test", pd2.getKey()); assertEquals("Array of String", pd2.getEncodedType()); assertArrayEquals(new String [] {"A", "B"}, pd2.getValue()); } @Test public void testToFromCompositeDataForList2() { List<Long> sl = new ArrayList<Long>(); sl.add(Long.MAX_VALUE); PropertyData<List<Long>> pd = PropertyData.newInstance("test", sl); CompositeData cd = pd.toCompositeData(); assertEquals("test", cd.get(KEY)); assertEquals(new Long(Long.MAX_VALUE).toString(), cd.get(VALUE)); assertEquals("Array of Long", cd.get(TYPE)); PropertyData<Long []> pd2 = PropertyData.from(cd); assertEquals("test", pd2.getKey()); assertEquals("Array of Long", pd2.getEncodedType()); assertArrayEquals(new Long [] {Long.MAX_VALUE}, pd2.getValue()); } }