package com.arondor.common.management.statistics;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.lang.management.ManagementFactory;
import java.util.Set;
import javax.management.MBeanServer;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import org.junit.Test;
import com.arondor.common.management.mbean.MBeanObject;
public class TestMBeanStatistics
{
public Statistics stats = Statistics.getInstance();
public class TestA extends MBeanObject
{
public TestA(String name)
{
super(name);
}
public void addStat(String name) throws InterruptedException
{
StatPoint statPoint = new StatPoint(this, name);
Thread.sleep((long) (Math.random() * 200));
stats.updateStat(statPoint);
}
private Boolean javaLangBooleanField = true;
public void setJavaLangBooleanField(Boolean javaLangBooleanField)
{
this.javaLangBooleanField = javaLangBooleanField;
}
public Boolean getJavaLangBooleanField()
{
return javaLangBooleanField;
}
private boolean primitiveBooleanField = false;
public void setPrimitiveBooleanField(boolean primitiveBooleanField)
{
this.primitiveBooleanField = primitiveBooleanField;
}
public boolean isPrimitiveBooleanField()
{
return primitiveBooleanField;
}
private String javaLangStringField = "A java.lang.String field";
public void setJavaLangStringField(String javaLangStringField)
{
this.javaLangStringField = javaLangStringField;
}
public String getJavaLangStringField()
{
return javaLangStringField;
}
private long primitiveLongField = 47387;
public void setPrimitiveLongField(long primitiveLongField)
{
this.primitiveLongField = primitiveLongField;
}
public long getPrimitiveLongField()
{
return primitiveLongField;
}
private int primitiveIntField = 42;
public void setPrimitiveIntField(int primitiveIntField)
{
this.primitiveIntField = primitiveIntField;
}
public int getPrimitiveIntField()
{
return primitiveIntField;
}
private java.lang.Long javaLangLongField = 434343L;
public void setJavaLangLongField(java.lang.Long javaLangLongField)
{
this.javaLangLongField = javaLangLongField;
}
public java.lang.Long getJavaLangLongField()
{
return javaLangLongField;
}
private java.lang.Integer javaLangIntegerField = 434342;
public void setJavaLangIntegerField(java.lang.Integer javaLangIntegerField)
{
this.javaLangIntegerField = javaLangIntegerField;
}
public java.lang.Integer getJavaLangIntegerField()
{
return javaLangIntegerField;
}
}
@Test
public void testMBeanStats() throws InterruptedException, MalformedObjectNameException
{
TestA testA1 = new TestA("testA1");
TestA testA2 = new TestA("testA2");
testA1.addStat("My testA1.1");
testA1.addStat("My testA1.2");
testA2.addStat("My testA2.1");
TestA testA2_Dupl = new TestA("testA3");
testA2_Dupl.addStat("My testA2.1");
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = new ObjectName(TestA.class.getName(), "type", "My_testA1.1");
Set<ObjectInstance> insts = mbs.queryMBeans(name, null);
assertTrue(!insts.isEmpty());
assertEquals(1, insts.size());
}
}