package org.stagemonitor.tracing.prof;
import net.sf.ehcache.pool.sizeof.AgentSizeOf;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;
import org.stagemonitor.core.Stagemonitor;
import org.stagemonitor.tracing.profiler.CallStackElement;
import org.stagemonitor.tracing.profiler.Profiler;
public class ProfilerTest {
@BeforeClass
public static void attachProfiler() {
// tests whether the agent still works if other agents are around
new AgentSizeOf();
Stagemonitor.init();
}
@Test
public void testProfiler() {
ProfilerTest profilerTest = new ProfilerTest();
CallStackElement total = Profiler.activateProfiling("total");
Assert.assertEquals(21, profilerTest.method1());
Profiler.stop();
Assert.assertEquals(total.toString(), 1, total.getChildren().size());
Assert.assertEquals(total.toString(), 3, total.getChildren().get(0).getChildren().size());
final String method5 = total.getChildren().get(0).getChildren().get(2).getSignature();
Assert.assertTrue(method5, method5.contains("org.stagemonitor.tracing.prof.ProfilerTest.method5"));
}
@Test
public void testInnerPrivateMethod() {
class Test {
private void test() {
}
}
Test test = new Test();
CallStackElement total = Profiler.activateProfiling("total");
test.test();
Profiler.stop();
Assert.assertFalse(total.toString(), total.getChildren().iterator().next().getSignature().contains("access$"));
}
public int method1() {
return method2(1) + method3() + method5();
}
private int method2(int i) {
return 1 + i;
}
private int method3() {
return method4();
}
private int method4() {
return 4;
}
private int method5() {
return method6() + method7();
}
private int method6() {
int value = 1;
if (Math.random() > 0.5) {
return 6;
}
switch (value) {
case 1:
value = 6;
break;
}
return value;
}
private int method7() {
return method8();
}
private int method8() {
return method9();
}
private int method9() {
return 9;
}
}