/*
* Copyright (C) 2009 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.container.jmx;
import junit.framework.TestCase;
import org.exoplatform.management.jmx.annotations.NameTemplate;
import org.exoplatform.management.jmx.annotations.Property;
import org.exoplatform.management.jmx.impl.ObjectNameBuilder;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
/**
* @author <a href="mailto:julien.viet@exoplatform.com">Julien Viet</a>
* @version $Revision$
*/
public class TestNameTemplate extends TestCase
{
public <T> void assertCannotBuild(T o, Class<T> clazz)
{
try
{
ObjectNameBuilder<T> builder = new ObjectNameBuilder<T>("foo", clazz);
builder.build(o);
fail();
}
catch (Exception ignore)
{
}
}
public <T> void assertSame(T o, Class<T> clazz, String value)
{
ObjectName expectedValue;
try
{
expectedValue = new ObjectName(value);
}
catch (MalformedObjectNameException e)
{
throw new AssertionError(e);
}
ObjectNameBuilder<T> builder = new ObjectNameBuilder<T>("foo", clazz);
assertEquals(expectedValue, builder.build(o));
}
public void testSame()
{
assertSame(new MBean1(), MBean1.class, "foo:a=b");
assertSame(new MBean2(), MBean2.class, "foo:a=something");
assertSame(new MBean3(), MBean3.class, "foo:foo=3");
}
@NameTemplate(@Property(key = "a", value = "b"))
public static class MBean1
{
}
@NameTemplate(@Property(key = "a", value = "{B}"))
public static class MBean2
{
public String getB()
{
return "something";
}
}
@NameTemplate(@Property(key = "foo", value = "{Foo}"))
public static class MBean3
{
public Integer getFoo()
{
return 3;
}
}
public void testCannotBuilder()
{
assertCannotBuild(new MBean4(), MBean4.class);
assertCannotBuild(new MBean5(), MBean5.class);
assertCannotBuild(new MBean6(), MBean6.class);
assertCannotBuild(new MBean7(), MBean7.class);
assertCannotBuild(new MBean8(), MBean8.class);
assertCannotBuild(new MBean9(), MBean9.class);
// assertCannotBuild(new MBean10());
assertCannotBuild(new MBean11(), MBean11.class);
assertCannotBuild(new MBean12(), MBean12.class);
}
@NameTemplate(@Property(key = "a", value = "{b}"))
public static class MBean4
{
}
@NameTemplate(@Property(key = "a", value = "{b}"))
public static class MBean5
{
public void getB()
{
}
}
@NameTemplate(@Property(key = "a", value = "{b}"))
public static class MBean6
{
public String getB(String s)
{
return "Foo";
}
}
@NameTemplate(@Property(key = "a", value = "{b}"))
public static class MBean7
{
public String getB()
{
throw new RuntimeException();
}
}
@NameTemplate(@Property(key = "a", value = "{b}"))
public static class MBean8
{
public String getB()
{
return null;
}
}
@NameTemplate(@Property(key = "a", value = "{b}"))
public static class MBean9
{
public static String getB()
{
return "Foo";
}
}
// @NameTemplate("foo:a=={b}")
// public static class MBean10 {
// public String getB() {
// return "Foo";
// }
// }
@NameTemplate(@Property(key = "a", value = "{b}"))
public static class MBean11
{
protected String getB()
{
return "Foo";
}
}
@NameTemplate(@Property(key = "a", value = "{b}"))
public static class MBean12
{
public String getB()
{
return "=";
}
}
public void testNoAnnotation()
{
ObjectNameBuilder<MBean13> builder = new ObjectNameBuilder<MBean13>("foo", MBean13.class);
assertEquals(null, builder.build(new MBean13()));
}
public static class MBean13
{
}
public void testInheritence()
{
assertSame(new MBean14(), MBean14.class, "foo:a=b");
assertSame(new MBean15(), MBean15.class, "foo:c=d");
assertSame(new MBean16(), MBean16.class, "foo:e=f");
assertSame(new MBean17(), MBean17.class, "foo:g=h");
assertSame(new MBean18(), MBean18.class, "foo:g=h");
assertSame(new MBean19(), MBean19.class, "foo:i=j");
}
@NameTemplate(@Property(key = "a", value = "b"))
public static interface Interface1
{
}
public static class MBean14 implements Interface1
{
}
@NameTemplate(@Property(key = "c", value = "d"))
public static class MBean15 implements Interface1
{
}
@NameTemplate(@Property(key = "e", value = "f"))
public static interface Interface2 extends Interface1
{
}
public static class MBean16 implements Interface2
{
}
@NameTemplate(@Property(key = "g", value = "h"))
public static class MBean17
{
}
public static class MBean18 extends MBean17
{
}
@NameTemplate(@Property(key = "i", value = "j"))
public static class MBean19 extends MBean17
{
}
}