mirror of https://github.com/mchr3k/org.intrace
160 lines
8.2 KiB
Java
160 lines
8.2 KiB
Java
package org.intracetest.agent;
|
|
|
|
import java.util.Map;
|
|
import org.intrace.agent.InstrCriteria;
|
|
|
|
import junit.framework.TestCase;
|
|
|
|
import org.intrace.agent.AgentSettings;
|
|
import org.intrace.shared.AgentConfigConstants;
|
|
|
|
public class AgentSettingsTest extends TestCase
|
|
{
|
|
private String M1 = "org.intracetest.agent.ArgumentTypes#boolArrayArrayArg({{Z)V";
|
|
private String M2 = "org.intracetest.agent.ArgumentTypes#objArrayArg({Ljava/lang/Object;)V";
|
|
private String M3 = "org.intracetest.agent.ArgumentTypes#doubleArg(D)V";
|
|
|
|
public void testAgentSettings()
|
|
{
|
|
AgentSettings as = new AgentSettings(
|
|
AgentConfigConstants.CLASS_REGEX
|
|
+ "foo|bar"
|
|
+ AgentConfigConstants.INSTRU_ENABLED
|
|
+ "true"
|
|
+ AgentConfigConstants.SAVE_TRACED_CLASSFILES
|
|
+ "true"
|
|
+ AgentConfigConstants.VERBOSE_MODE
|
|
+ "true");
|
|
assertNotNull(as.getClassRegex());
|
|
assertEquals(as.getClassRegex().length, 2);
|
|
|
|
assertTrue( "foo".equals(as.getClassRegex()[0]) || "foo".equals(as.getClassRegex()[1]) );
|
|
assertTrue( "bar".equals(as.getClassRegex()[0]) || "bar".equals(as.getClassRegex()[1]) );
|
|
assertTrue( as.getClassesToInclude().allMethodsSpecified("foo") );
|
|
assertFalse( as.getClassesToInclude().allMethodsSpecified("unknownClass"));
|
|
|
|
assertEquals(as.isInstrumentationEnabled(), true);
|
|
assertEquals(as.saveTracedClassfiles(), true);
|
|
assertEquals(as.isVerboseMode(), true);
|
|
|
|
as = new AgentSettings(as);
|
|
assertNotNull(as.getClassRegex());
|
|
assertEquals(as.getClassRegex().length, 2);
|
|
assertTrue( "foo".equals(as.getClassRegex()[0]) || "foo".equals(as.getClassRegex()[1]) );
|
|
assertTrue( "bar".equals(as.getClassRegex()[0]) || "bar".equals(as.getClassRegex()[1]) );
|
|
|
|
assertTrue( as.getClassesToInclude().allMethodsSpecified("foo") );
|
|
assertFalse( as.getClassesToInclude().allMethodsSpecified("unknownClass"));
|
|
|
|
assertEquals(as.isInstrumentationEnabled(), true);
|
|
assertEquals(as.saveTracedClassfiles(), true);
|
|
assertEquals(as.isVerboseMode(), true);
|
|
|
|
String toString = as.toString();
|
|
assertNotNull(toString);
|
|
|
|
Map<String, String> settingsMap = as.getSettingsMap();
|
|
|
|
assertTrue( settingsMap.get(AgentConfigConstants.CLASS_REGEX).equals("foo|bar") ||
|
|
settingsMap.get(AgentConfigConstants.CLASS_REGEX).equals("bar|foo") );
|
|
|
|
assertEquals(settingsMap.get(AgentConfigConstants.INSTRU_ENABLED), "true");
|
|
assertEquals(settingsMap.get(AgentConfigConstants.SAVE_TRACED_CLASSFILES),
|
|
"true");
|
|
assertEquals(settingsMap.get(AgentConfigConstants.VERBOSE_MODE), "true");
|
|
}
|
|
|
|
public void testInstrCriteria() {
|
|
InstrCriteria ic = new InstrCriteria("foo|bar");
|
|
|
|
assertTrue(ic.allMethodsSpecified("foo") ); //This is criteria for 'foo' class, no methods here. When no methods were specified, then instrument all methods.
|
|
assertTrue(ic.allMethodsSpecified("bar") ); //This is criteria for the 'bar' class; no methods here. When no methods were specified, then instrument all methods.
|
|
assertFalse(ic.allMethodsSpecified("doesnotexist") ); //If class name was never specified, then no methods should be instrumented.
|
|
|
|
assertTrue("foo".equals(ic.getClassRegex()[0]) || "foo".equals(ic.getClassRegex()[1]) );
|
|
assertTrue("bar".equals(ic.getClassRegex()[0]) || "bar".equals(ic.getClassRegex()[1]) );
|
|
|
|
assertEquals("Added one class with a single 'instrument all', but count isn't right",
|
|
1,
|
|
ic.methodCountPerClass("foo")
|
|
);
|
|
|
|
assertEquals("Added one class with a single 'instrument all', but count isn't right",
|
|
1,
|
|
ic.methodCountPerClass("bar")
|
|
);
|
|
|
|
assertTrue("toString in InstrCriteria is not working", ic.toString().equals("foo|bar") || ic.toString().equals("bar|foo") );
|
|
}
|
|
|
|
public void testIfWeCanParseMethodCriteria() {
|
|
InstrCriteria ic2 = new InstrCriteria("org.hsqldb.jdbc.JDBCConnection#onStartEscapeSequence(Ljava/lang/String;Ljava/lang/StringBuffer;I)I");
|
|
assertFalse( ic2.allMethodsSpecified("org.hsqldb.jdbc.JDBCConnection") );
|
|
|
|
assertTrue( ic2.thisMethodSpecified("org.hsqldb.jdbc.JDBCConnection", "onStartEscapeSequence", "(Ljava/lang/String;Ljava/lang/StringBuffer;I)I"));
|
|
assertFalse( ic2.thisMethodSpecified("Xorg.hsqldb.jdbc.JDBCConnection", "onStartEscapeSequence", "(Ljava/lang/String;Ljava/lang/StringBuffer;I)I"));
|
|
assertFalse( ic2.thisMethodSpecified("org.hsqldb.jdbc.JDBCConnection", "XonStartEscapeSequence", "(Ljava/lang/String;Ljava/lang/StringBuffer;I)I"));
|
|
assertFalse( ic2.thisMethodSpecified("org.hsqldb.jdbc.JDBCConnection", "onStartEscapeSequence", "X(Ljava/lang/String;Ljava/lang/StringBuffer;I)I"));
|
|
}
|
|
public void testIfWeCanParseMix() {
|
|
|
|
InstrCriteria ic2 = new InstrCriteria("org.hsqldb.jdbc.JDBCConnection#onStartEscapeSequence(Ljava/lang/String;Ljava/lang/StringBuffer;I)I|foo");
|
|
assertFalse( ic2.allMethodsSpecified("org.hsqldb.jdbc.JDBCConnection") );
|
|
|
|
assertTrue( ic2.thisMethodSpecified("org.hsqldb.jdbc.JDBCConnection", "onStartEscapeSequence", "(Ljava/lang/String;Ljava/lang/StringBuffer;I)I"));
|
|
assertFalse( ic2.thisMethodSpecified("Xorg.hsqldb.jdbc.JDBCConnection", "onStartEscapeSequence", "(Ljava/lang/String;Ljava/lang/StringBuffer;I)I"));
|
|
assertFalse( ic2.thisMethodSpecified("org.hsqldb.jdbc.JDBCConnection", "XonStartEscapeSequence", "(Ljava/lang/String;Ljava/lang/StringBuffer;I)I"));
|
|
assertFalse( ic2.thisMethodSpecified("org.hsqldb.jdbc.JDBCConnection", "onStartEscapeSequence", "X(Ljava/lang/String;Ljava/lang/StringBuffer;I)I"));
|
|
|
|
assertTrue(ic2.allMethodsSpecified("foo") ); //If not methods were specified, then instrument all methods.
|
|
assertFalse(ic2.allMethodsSpecified("doesnotexist") ); //If class name was never specified, then no methods should be instrumented.
|
|
|
|
//assertEquals(ic2.getClassRegex()[0], "foo");
|
|
assertTrue("foo".equals(ic2.getClassRegex()[0]) || "foo".equals(ic2.getClassRegex()[1]) );
|
|
assertTrue("org.hsqldb.jdbc.JDBCConnection".equals(ic2.getClassRegex()[0]) || "org.hsqldb.jdbc.JDBCConnection".equals(ic2.getClassRegex()[1]) );
|
|
|
|
|
|
|
|
}
|
|
public void testIfWeCanParseThreeComplicatedMethods() {
|
|
String myCriteria = M1+"|"+M2+"|"+M3;
|
|
//System.out.println("@@@@@@@Start of testIfWeCanParseThreeComplicatedMethods() ");
|
|
InstrCriteria ic = new InstrCriteria(myCriteria);
|
|
//System.out.println("@@@@@@@@@@@@@@Before assert for testIfWeCanParseThreeComplicatedMethods() ");
|
|
assertEquals("Added three methods for a single class, but didn't find the right count of methods",
|
|
3,
|
|
ic.methodCountPerClass("org.intracetest.agent.ArgumentTypes")
|
|
);
|
|
//System.out.println("@@@@@@@@@@@@@@ AFTER assert for testIfWeCanParseThreeComplicatedMethods() ");
|
|
}
|
|
public void testMethodsFromDifferentClasses() {
|
|
InstrCriteria ic = new InstrCriteria("ArgumentTypes#byteArrayArg({B)V|OtherTypes#byteArrayArg({B)V");
|
|
assertFalse( ic.allMethodsSpecified("ArgumentTypes") );
|
|
assertFalse( ic.allMethodsSpecified("OtherTypes") );
|
|
|
|
String[] myClasses = ic.getClassRegex();
|
|
assertTrue( "ArgumentTypes".equals(myClasses[0]) || "ArgumentTypes".equals(myClasses[1]) );
|
|
assertTrue( "OtherTypes".equals(myClasses[0]) || "OtherTypes".equals(myClasses[1]) );
|
|
|
|
assertTrue( ic.thisMethodSpecified("ArgumentTypes","byteArrayArg", "({B)V") );
|
|
assertTrue( ic.thisMethodSpecified("OtherTypes", "byteArrayArg", "({B)V") );
|
|
|
|
assertTrue( ic.toString().equals("ArgumentTypes#byteArrayArg({B)V|OtherTypes#byteArrayArg({B)V")
|
|
|| ic.toString().equals("OtherTypes#byteArrayArg({B)V|ArgumentTypes#byteArrayArg({B)V") );
|
|
|
|
}
|
|
public void testMethodsFromSameClasses() {
|
|
InstrCriteria ic = new InstrCriteria("MyTypes#bar({B)V|MyTypes#foo({B)V");
|
|
assertFalse( ic.allMethodsSpecified("MyTypes") );
|
|
|
|
assertTrue( ic.thisMethodSpecified("MyTypes","foo", "({B)V") );
|
|
assertTrue( ic.thisMethodSpecified("MyTypes", "bar", "({B)V") );
|
|
|
|
assertTrue( ic.toString().equals("MyTypes#bar({B)V|MyTypes#foo({B)V")
|
|
|| ic.toString().equals("MyTypes#foo({B)V|MyTypes#bar({B)V") );
|
|
|
|
|
|
}
|
|
|
|
}
|