mirror of https://github.com/mchr3k/org.intrace
Merge pull request #34 from eostermueller/exitStackTrace
"exitStackTrace" and "gzip" enhancements together in a single pull request.
This commit is contained in:
commit
24db68904d
Binary file not shown.
|
|
@ -23,6 +23,7 @@ public class AgentSettings
|
|||
private int actualServerPort = -1;
|
||||
|
||||
// Dynamic settings
|
||||
private boolean gzipEnabled = false;
|
||||
private String[] classRegex = new String[0];
|
||||
private String[] excludeClassRegex = new String[0];
|
||||
private boolean instruEnabled = true;
|
||||
|
|
@ -38,6 +39,7 @@ public class AgentSettings
|
|||
{
|
||||
// Copy all static state and dynamic settings
|
||||
actualServerPort = oldInstance.getActualServerPort();
|
||||
gzipEnabled = oldInstance.isGzipEnabled();
|
||||
classRegex = oldInstance.getClassRegex();
|
||||
excludeClassRegex = oldInstance.getExcludeClassRegex();
|
||||
instruEnabled = oldInstance.isInstrumentationEnabled();
|
||||
|
|
@ -45,7 +47,14 @@ public class AgentSettings
|
|||
verboseMode = oldInstance.isVerboseMode();
|
||||
}
|
||||
|
||||
public void parseArgs(String args)
|
||||
public boolean isGzipEnabled() {
|
||||
return gzipEnabled;
|
||||
}
|
||||
public void setGzipEnabled(boolean val) {
|
||||
gzipEnabled = val;
|
||||
}
|
||||
|
||||
public void parseArgs(String args)
|
||||
{
|
||||
String[] seperateArgs = args.split("\\[");
|
||||
for (int ii = 0; ii < seperateArgs.length; ii++)
|
||||
|
|
@ -107,6 +116,14 @@ public class AgentSettings
|
|||
{
|
||||
waitStart = false;
|
||||
}
|
||||
else if (arg.toLowerCase(Locale.ROOT).equals(AgentConfigConstants.GZIP + "true"))
|
||||
{
|
||||
gzipEnabled = true;
|
||||
}
|
||||
else if (arg.toLowerCase(Locale.ROOT).equals(AgentConfigConstants.GZIP + "false"))
|
||||
{
|
||||
gzipEnabled = false;
|
||||
}
|
||||
else if (arg.startsWith(AgentConfigConstants.CLASS_REGEX))
|
||||
{
|
||||
String classRegexStr = arg.replace(AgentConfigConstants.CLASS_REGEX, "");
|
||||
|
|
@ -177,6 +194,7 @@ public class AgentSettings
|
|||
{
|
||||
// Output key settings
|
||||
String currentSettings = "";
|
||||
currentSettings += "GZip Enabled : " + gzipEnabled + "\n";
|
||||
currentSettings += "Class Regex : " + Arrays.toString(classRegex) + "\n";
|
||||
currentSettings += "Exclude Class Regex : " + Arrays.toString(excludeClassRegex) + "\n";
|
||||
currentSettings += "Tracing Enabled : " + instruEnabled + "\n";
|
||||
|
|
@ -190,6 +208,8 @@ public class AgentSettings
|
|||
Map<String, String> settingsMap = new HashMap<String, String>();
|
||||
settingsMap.put(AgentConfigConstants.INSTRU_ENABLED,
|
||||
Boolean.toString(instruEnabled));
|
||||
settingsMap.put(AgentConfigConstants.GZIP,
|
||||
Boolean.toString(gzipEnabled));
|
||||
settingsMap.put(AgentConfigConstants.CLASS_REGEX,
|
||||
getPatternString(classRegex));
|
||||
settingsMap.put(AgentConfigConstants.EXCLUDE_CLASS_REGEX,
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import org.intrace.agent.server.AgentServer;
|
|||
import org.intrace.output.AgentHelper;
|
||||
import org.intrace.output.InstruRunnable;
|
||||
import org.intrace.output.trace.TraceHandler;
|
||||
import org.intrace.output.trace.TraceSettings;
|
||||
import org.intrace.shared.AgentConfigConstants;
|
||||
import org.objectweb.asm.ClassReader;
|
||||
|
||||
|
|
@ -482,6 +483,9 @@ public class ClassTransformer implements ClassFileTransformer
|
|||
Integer.toString(modifiedClasses.size()));
|
||||
return settingsMap;
|
||||
}
|
||||
public boolean isGzipEnabled() {
|
||||
return settings.isGzipEnabled();
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle a message and return a response.
|
||||
|
|
@ -507,6 +511,12 @@ public class ClassTransformer implements ClassFileTransformer
|
|||
// System.out.println("## Settings Changed");
|
||||
setInstrumentationEnabled(settings.isInstrumentationEnabled());
|
||||
}
|
||||
else if (oldSettings.isGzipEnabled() != settings.isGzipEnabled())
|
||||
{
|
||||
//For coding simplicity and user clarity, the gzip parameter can only be set on agent side
|
||||
//So, return to the old setting, which originated with the intrace agent command line parameter -- [gzip-true
|
||||
settings.setGzipEnabled(oldSettings.isGzipEnabled());
|
||||
}
|
||||
else if (!Arrays.equals(oldSettings.getClassRegex(), settings.getClassRegex()))
|
||||
{
|
||||
// System.out.println("## Settings Changed");
|
||||
|
|
|
|||
|
|
@ -25,7 +25,11 @@ public class AgentClientConnection extends InstruRunnable
|
|||
{
|
||||
private final Socket connectedClient;
|
||||
private final ClassTransformer transformer;
|
||||
private boolean traceConnEstablished = false;
|
||||
public ClassTransformer getTransformer() {
|
||||
return transformer;
|
||||
}
|
||||
|
||||
private boolean traceConnEstablished = false;
|
||||
private final Object traceConnLock = new Object();
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ public class ClientStrings
|
|||
public static final String ENABLE_BRANCH_TRACE = "Branch";
|
||||
public static final String ENABLE_ARGS_TRACE = "Method Args, Return Values, Exceptions";
|
||||
public static final String ENABLE_ARRAY_TRACE = "Truncate Array Args";
|
||||
public static final String ENABLE_EXIT_STACK_TRACE = "Add Stacktrace to Exit";
|
||||
|
||||
public static final String BEGIN_CAPTURE_CALLERS = "New Callers Capture...";
|
||||
public static final String END_CAPTURE_CALLERS = "End Callers Capture";
|
||||
|
|
|
|||
|
|
@ -787,6 +787,7 @@ public class InTraceUI implements ISocketCallback, IControlConnectionListener
|
|||
final Button branchTrace;
|
||||
final Button argsTrace;
|
||||
final Button arrayTrace;
|
||||
final Button exitStackTrace;
|
||||
|
||||
final Composite composite;
|
||||
|
||||
|
|
@ -813,6 +814,11 @@ public class InTraceUI implements ISocketCallback, IControlConnectionListener
|
|||
arrayTrace.setText(ClientStrings.ENABLE_ARRAY_TRACE);
|
||||
arrayTrace.setAlignment(SWT.CENTER);
|
||||
|
||||
exitStackTrace = new Button(composite, SWT.CHECK);
|
||||
exitStackTrace.setText(ClientStrings.ENABLE_EXIT_STACK_TRACE);
|
||||
exitStackTrace.setAlignment(SWT.CENTER);
|
||||
|
||||
|
||||
entryExitTrace
|
||||
.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
|
||||
{
|
||||
|
|
@ -857,6 +863,17 @@ public class InTraceUI implements ISocketCallback, IControlConnectionListener
|
|||
settingsData.truncArraysEnabled = !settingsData.truncArraysEnabled;
|
||||
}
|
||||
});
|
||||
exitStackTrace
|
||||
.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter()
|
||||
{
|
||||
@Override
|
||||
public void widgetSelected(SelectionEvent arg0)
|
||||
{
|
||||
toggleSetting(settingsData.exitStackTrace, "[exit-stack-trace-true",
|
||||
"[exit-stack-trace-false");
|
||||
settingsData.exitStackTrace = !settingsData.exitStackTrace;
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -2026,6 +2043,11 @@ public class InTraceUI implements ISocketCallback, IControlConnectionListener
|
|||
{
|
||||
return settingsData.netOutEnabled;
|
||||
}
|
||||
@Override
|
||||
public boolean isGzipEnabled()
|
||||
{
|
||||
return settingsData.gzipEnabled;
|
||||
}
|
||||
};
|
||||
networkTraceThread = new NetworkDataReceiverThread(remoteAddress,
|
||||
networkTracePort, config, outputTabs.textOutputTab.filterThread);
|
||||
|
|
@ -2204,6 +2226,7 @@ public class InTraceUI implements ISocketCallback, IControlConnectionListener
|
|||
|
||||
settingsTabs.traceTab.argsTrace.setEnabled(true);
|
||||
settingsTabs.traceTab.branchTrace.setEnabled(true);
|
||||
settingsTabs.traceTab.exitStackTrace.setEnabled(true);
|
||||
settingsTabs.traceTab.entryExitTrace.setEnabled(true);
|
||||
settingsTabs.traceTab.arrayTrace.setEnabled(true);
|
||||
settingsTabs.agentOutputSettingsTab.fileOutput.setEnabled(true);
|
||||
|
|
@ -2218,6 +2241,7 @@ public class InTraceUI implements ISocketCallback, IControlConnectionListener
|
|||
// Update the button pressed/unpressed state
|
||||
settingsTabs.traceTab.argsTrace.setSelection(settingsData.argsEnabled);
|
||||
settingsTabs.traceTab.branchTrace.setSelection(settingsData.branchEnabled);
|
||||
settingsTabs.traceTab.exitStackTrace.setSelection(settingsData.exitStackTrace);
|
||||
settingsTabs.traceTab.entryExitTrace.setSelection(settingsData.entryExitEnabled);
|
||||
settingsTabs.traceTab.arrayTrace.setSelection(settingsData.truncArraysEnabled);
|
||||
settingsTabs.agentOutputSettingsTab.fileOutput.setSelection(settingsData.fileOutEnabled);
|
||||
|
|
@ -2256,6 +2280,7 @@ public class InTraceUI implements ISocketCallback, IControlConnectionListener
|
|||
|
||||
settingsTabs.traceTab.argsTrace.setEnabled(false);
|
||||
settingsTabs.traceTab.branchTrace.setEnabled(false);
|
||||
settingsTabs.traceTab.exitStackTrace.setEnabled(false);
|
||||
settingsTabs.traceTab.entryExitTrace.setEnabled(false);
|
||||
settingsTabs.traceTab.arrayTrace.setEnabled(false);
|
||||
settingsTabs.agentOutputSettingsTab.fileOutput.setEnabled(false);
|
||||
|
|
|
|||
|
|
@ -6,11 +6,15 @@ import java.net.InetAddress;
|
|||
import java.net.InetSocketAddress;
|
||||
import java.net.Socket;
|
||||
|
||||
import org.intrace.shared.Base64;
|
||||
|
||||
|
||||
public class NetworkDataReceiverThread implements Runnable
|
||||
{
|
||||
public static interface INetworkOutputConfig
|
||||
{
|
||||
public boolean isNetOutputEnabled();
|
||||
public boolean isGzipEnabled();
|
||||
}
|
||||
|
||||
private final Socket traceSocket;
|
||||
|
|
@ -53,6 +57,10 @@ public class NetworkDataReceiverThread implements Runnable
|
|||
{
|
||||
if (outputConfig.isNetOutputEnabled())
|
||||
{
|
||||
if (outputConfig.isGzipEnabled()) {
|
||||
byte[] tmp = Base64.decode(traceLine);
|
||||
traceLine = new String(tmp);
|
||||
}
|
||||
traceThread.addTraceLine(traceLine);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,8 +16,11 @@ public class ParsedSettingsData
|
|||
|
||||
public boolean entryExitEnabled;
|
||||
public boolean branchEnabled;
|
||||
public boolean gzipEnabled = false;
|
||||
public boolean truncArraysEnabled;
|
||||
public boolean argsEnabled;
|
||||
public boolean exitStackTrace = false;
|
||||
|
||||
public boolean stdOutEnabled;
|
||||
public boolean fileOutEnabled;
|
||||
public boolean netOutEnabled;
|
||||
|
|
@ -35,6 +38,24 @@ public class ParsedSettingsData
|
|||
{
|
||||
this.settingsMap = settingsMap;
|
||||
|
||||
if ("true".equals(settingsMap.get(AgentConfigConstants.GZIP)))
|
||||
{
|
||||
gzipEnabled = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
gzipEnabled = false;
|
||||
}
|
||||
|
||||
if ("true".equals(settingsMap.get(AgentConfigConstants.EXIT_STACK_TRACE)))
|
||||
{
|
||||
exitStackTrace = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
exitStackTrace = false;
|
||||
}
|
||||
|
||||
classRegex = settingsMap.get(AgentConfigConstants.CLASS_REGEX);
|
||||
classExcludeRegex = settingsMap
|
||||
.get(AgentConfigConstants.EXCLUDE_CLASS_REGEX);
|
||||
|
|
@ -86,6 +107,7 @@ public class ParsedSettingsData
|
|||
branchEnabled = false;
|
||||
}
|
||||
|
||||
|
||||
if ("true".equals(settingsMap.get(TraceConfigConstants.ARG)))
|
||||
{
|
||||
argsEnabled = true;
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import java.util.concurrent.LinkedBlockingQueue;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.intrace.agent.server.AgentClientConnection;
|
||||
import org.intrace.shared.Base64;
|
||||
|
||||
public class NetworkDataSenderThread extends InstruRunnable
|
||||
{
|
||||
|
|
@ -100,6 +101,10 @@ public class NetworkDataSenderThread extends InstruRunnable
|
|||
Object traceLine = outgoingData.poll(5, TimeUnit.SECONDS);
|
||||
if (traceLine != null)
|
||||
{
|
||||
if (traceLine instanceof String && connection.getTransformer().isGzipEnabled()) {
|
||||
String tmp = (String)traceLine;
|
||||
traceLine = Base64.encodeBytes(tmp.getBytes(), Base64.GZIP);
|
||||
}
|
||||
traceWriter.writeObject(traceLine);
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -4,8 +4,10 @@ import java.io.PrintWriter;
|
|||
import java.io.StringWriter;
|
||||
import java.lang.reflect.Array;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.intrace.output.AgentHelper;
|
||||
|
|
@ -16,6 +18,12 @@ import org.intrace.output.IInstrumentationHandler;
|
|||
*/
|
||||
public class TraceHandler implements IInstrumentationHandler
|
||||
{
|
||||
/**
|
||||
* Including the period at the end enables code in "org.intracetest" to be included in the trace
|
||||
*/
|
||||
private static final String INTRACE_PACKAGE = "org.intrace.";
|
||||
private static final String THREAD = "java.lang.Thread";
|
||||
private static final String GET_STACK_TRACE = "getStackTrace";
|
||||
public static final TraceHandler INSTANCE = new TraceHandler();
|
||||
private TraceHandler()
|
||||
{
|
||||
|
|
@ -26,7 +34,8 @@ public class TraceHandler implements IInstrumentationHandler
|
|||
private boolean branchTrace = false;
|
||||
private boolean argTrace = true;
|
||||
private boolean truncateArrays = true;
|
||||
|
||||
private boolean exitStackTrace = false;
|
||||
|
||||
private static final TraceSettings traceSettings = new TraceSettings("");
|
||||
|
||||
public String getResponse(String args)
|
||||
|
|
@ -50,7 +59,8 @@ public class TraceHandler implements IInstrumentationHandler
|
|||
branchTrace = traceSettings.isBranchTraceEnabled();
|
||||
argTrace = traceSettings.isArgTraceEnabled();
|
||||
truncateArrays = traceSettings.isTruncateArraysEnabled();
|
||||
|
||||
exitStackTrace = traceSettings.isExitStackTraceEnabled();
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
@ -251,6 +261,15 @@ public class TraceHandler implements IInstrumentationHandler
|
|||
}
|
||||
|
||||
private static final char ESCAPE_REPLACEMENT = '\u25A1';
|
||||
/**
|
||||
* If user has requested to see a stack trace for each 'exit' event (with the parameter [exit-stack-trace-true) , then
|
||||
* this delimiter will follow the regular event text, which will be followed by the text of the stack trace.
|
||||
*/
|
||||
private static final String STACK_TRACE_DELIM = "~";
|
||||
/**
|
||||
* Just like Arrays.toString(Object), place a comma between each element of the stack trace
|
||||
*/
|
||||
private static final Object STACK_ELE_DELIM = ",";
|
||||
|
||||
private String replaceChars(String xiArg)
|
||||
{
|
||||
|
|
@ -384,13 +403,38 @@ public class TraceHandler implements IInstrumentationHandler
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove all "org.intrace" elements from the current stack trace and return it as string.
|
||||
* @return
|
||||
*/
|
||||
public String getStackTrace() {
|
||||
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int counter = 0;
|
||||
for(StackTraceElement ste : Thread.currentThread().getStackTrace() ) {
|
||||
if ( ste.getClassName().indexOf(INTRACE_PACKAGE) <0
|
||||
&& (ste.getClassName().indexOf(THREAD) < 0) && ste.getMethodName().indexOf(GET_STACK_TRACE)<0) {
|
||||
if (counter++>0) sb.append(STACK_ELE_DELIM); //Just like Arrays.toString(), place a comma between each stack trace ele.
|
||||
sb.append(ste.toString());
|
||||
}
|
||||
}
|
||||
|
||||
return sb.toString();
|
||||
}
|
||||
@Override
|
||||
public void exit(String className, String methodName, int lineNo)
|
||||
{
|
||||
if (entryExitTrace)
|
||||
{
|
||||
writeTraceOutput(className + ":" + methodName + ": }" +
|
||||
(lineNo >= 0 ? ":" + lineNo : ""));
|
||||
|
||||
if (exitStackTrace) {
|
||||
writeTraceOutput(className + ":" + methodName + ": }" +
|
||||
(lineNo >= 0 ? ":" + lineNo : "") +
|
||||
STACK_TRACE_DELIM + getStackTrace() );
|
||||
} else {
|
||||
writeTraceOutput(className + ":" + methodName + ": }" +
|
||||
(lineNo >= 0 ? ":" + lineNo : "") );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -17,6 +17,16 @@ public class TraceSettings
|
|||
private boolean branchTraceEnabled = false;
|
||||
private boolean argTraceEnabled = true;
|
||||
private boolean truncateArraysEnabled = true;
|
||||
|
||||
/**
|
||||
* If true, append the 'current' stack trace to the text of the exit trace event.
|
||||
* This is helpful for discovering who is invoking a particular line of code.
|
||||
* Here is an example of the trace output:
|
||||
* <PRE>
|
||||
* [07:53:15.509]:[1]:example.FirstTraceExample:intArrayMethod: }:70~java.lang.Thread.getStackTrace(Thread.java:1567),example.FirstTraceExample.intArrayMethod(FirstTraceExample.java:70),example.FirstTraceExample.workMethod(FirstTraceExample.java:38),example.FirstTraceExample.otherMain(FirstTraceExample.java:29),example.FirstTraceExample.main(FirstTraceExample.java:16)
|
||||
* </PRE>
|
||||
*/
|
||||
private boolean exitStackTrace = false;
|
||||
|
||||
public TraceSettings(TraceSettings oldSettings)
|
||||
{
|
||||
|
|
@ -24,6 +34,7 @@ public class TraceSettings
|
|||
branchTraceEnabled = oldSettings.branchTraceEnabled;
|
||||
argTraceEnabled = oldSettings.argTraceEnabled;
|
||||
truncateArraysEnabled = oldSettings.truncateArraysEnabled;
|
||||
exitStackTrace = oldSettings.exitStackTrace;
|
||||
}
|
||||
|
||||
public TraceSettings(String args)
|
||||
|
|
@ -74,6 +85,14 @@ public class TraceSettings
|
|||
{
|
||||
truncateArraysEnabled = false;
|
||||
}
|
||||
else if (arg.equals(TraceConfigConstants.EXIT_STACK_TRACE + "false"))
|
||||
{
|
||||
exitStackTrace = false;
|
||||
}
|
||||
else if (arg.equals(TraceConfigConstants.EXIT_STACK_TRACE + "true"))
|
||||
{
|
||||
exitStackTrace = true;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean isEntryExitTraceEnabled()
|
||||
|
|
@ -95,6 +114,9 @@ public class TraceSettings
|
|||
{
|
||||
return truncateArraysEnabled;
|
||||
}
|
||||
public boolean isExitStackTraceEnabled() {
|
||||
return exitStackTrace;
|
||||
}
|
||||
|
||||
public Map<String, String> getSettingsMap()
|
||||
{
|
||||
|
|
@ -107,6 +129,9 @@ public class TraceSettings
|
|||
.put(TraceConfigConstants.ARG, Boolean.toString(argTraceEnabled));
|
||||
settingsMap
|
||||
.put(TraceConfigConstants.ARRAYS, Boolean.toString(truncateArraysEnabled));
|
||||
|
||||
settingsMap.put(TraceConfigConstants.EXIT_STACK_TRACE,
|
||||
Boolean.toString(exitStackTrace));
|
||||
return settingsMap;
|
||||
}
|
||||
}
|
||||
|
|
@ -16,6 +16,7 @@ public class AgentConfigConstants
|
|||
|
||||
public static final String SERVER_PORT = "SERVER_PORT";
|
||||
|
||||
public static final String GZIP = "[gzip-"; //Default is not enabled (false).
|
||||
public static final String CLASS_REGEX = "[regex-";
|
||||
public static final String EXCLUDE_CLASS_REGEX = "[exclude-regex-";
|
||||
public static final String INSTRU_ENABLED = "[instru-";
|
||||
|
|
@ -23,6 +24,7 @@ public class AgentConfigConstants
|
|||
public static final String VERBOSE_MODE = "[verbose-";
|
||||
public static final String OPT_SERVER_PORT = "[serverport-";
|
||||
public static final String CALLBACK_PORT = "[callbackport-";
|
||||
public static final String EXIT_STACK_TRACE = "[exit-stack-trace-";
|
||||
|
||||
public static final String START_WAIT = "[startwait";
|
||||
public static final String START_ACTIVATE = "[startactivate";
|
||||
|
|
@ -37,5 +39,7 @@ public class AgentConfigConstants
|
|||
COMMANDS.add(VERBOSE_MODE + "<true/false>");
|
||||
COMMANDS.add(OPT_SERVER_PORT + "<int>");
|
||||
COMMANDS.add(CALLBACK_PORT + "<int>");
|
||||
COMMANDS.add(GZIP + "<true/false>");
|
||||
COMMANDS.add(EXIT_STACK_TRACE + "<true/false>");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load Diff
|
|
@ -12,6 +12,7 @@ public class TraceConfigConstants
|
|||
public static final String STD_OUT = "[out-stdout-";
|
||||
public static final String FILE_OUT = "[out-file-";
|
||||
public static final String NET_OUT = "[out-network-";
|
||||
public static final String EXIT_STACK_TRACE = "[exit-stack-trace-";
|
||||
public static final Set<String> COMMANDS = new HashSet<String>();
|
||||
static
|
||||
{
|
||||
|
|
@ -22,5 +23,6 @@ public class TraceConfigConstants
|
|||
COMMANDS.add(STD_OUT + "<true/false>");
|
||||
COMMANDS.add(FILE_OUT + "<true/false>");
|
||||
COMMANDS.add(NET_OUT + "<true/false>");
|
||||
COMMANDS.add(EXIT_STACK_TRACE + "<true/false>");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -109,9 +109,28 @@ public class AgentTest extends TestCase
|
|||
assertEquals(helpResponse, expectedHelpResponse);
|
||||
}
|
||||
|
||||
/**
|
||||
Intentionally, testSetting(AgentConfigConstants.GZIP, "true") does not work.
|
||||
For simplicity's sake, this setting can only be configured as an intrace agent command line parameter -- [gzip-true
|
||||
Note that there is no GUI checkbox to enabled Gzip.
|
||||
To instead enable the client to change this, just change how ClassTransformer#getResponse() deals with a new gzip parameter.
|
||||
The following simply confirms that
|
||||
<ul>
|
||||
<li> getsettings works for gzip parm </li>
|
||||
<li> b) by default, GZIP is turned off. </li>
|
||||
</ul>
|
||||
*
|
||||
* @throws Exception
|
||||
*/
|
||||
public void testRetrievalOfGzipSetting() throws Exception {
|
||||
testGetSetting(AgentConfigConstants.GZIP, "false");
|
||||
}
|
||||
public void testSettings() throws Exception
|
||||
{
|
||||
// Boolean settings
|
||||
|
||||
|
||||
|
||||
testSetting(AgentConfigConstants.INSTRU_ENABLED, "true");
|
||||
testSetting(AgentConfigConstants.INSTRU_ENABLED, "false");
|
||||
testSetting(AgentConfigConstants.SAVE_TRACED_CLASSFILES, "true");
|
||||
|
|
@ -124,8 +143,12 @@ public class AgentTest extends TestCase
|
|||
testSetting(AgentConfigConstants.INSTRU_ENABLED, "true");
|
||||
testSetting(AgentConfigConstants.VERBOSE_MODE, "true");
|
||||
testSetting(AgentConfigConstants.CLASS_REGEX, ".*");
|
||||
|
||||
//Need to learn more about why these don't work here. --ETO 12/1/2013
|
||||
//testSetting(TraceConfigConstants.BRANCH, "true");
|
||||
//testSetting(TraceConfigConstants.BRANCH, "false");
|
||||
}
|
||||
|
||||
|
||||
public void testBranchPatterns() throws Throwable
|
||||
{
|
||||
// Create and init the mock
|
||||
|
|
@ -205,6 +228,7 @@ public class AgentTest extends TestCase
|
|||
|
||||
// Setup agent
|
||||
testSetting(AgentConfigConstants.INSTRU_ENABLED, "false");
|
||||
testSetting(AgentConfigConstants.GZIP, "false");
|
||||
testSetting(AgentConfigConstants.CLASS_REGEX, "BranchPatterns");
|
||||
testSetting(AgentConfigConstants.VERBOSE_MODE, "false");
|
||||
testSetting(AgentConfigConstants.SAVE_TRACED_CLASSFILES, "true");
|
||||
|
|
@ -320,6 +344,7 @@ public class AgentTest extends TestCase
|
|||
|
||||
// Setup agent
|
||||
testSetting(AgentConfigConstants.INSTRU_ENABLED, "false");
|
||||
testSetting(AgentConfigConstants.GZIP, "false");
|
||||
testSetting(AgentConfigConstants.CLASS_REGEX, "ArgumentTypes");
|
||||
testSetting(AgentConfigConstants.VERBOSE_MODE, "false");
|
||||
testSetting(AgentConfigConstants.SAVE_TRACED_CLASSFILES, "true");
|
||||
|
|
@ -552,6 +577,18 @@ public class AgentTest extends TestCase
|
|||
Map<String, String> settingsResponseMap = (Map<String, String>) settingsResponse;
|
||||
assertEquals(configValue, settingsResponseMap.get(configConstant));
|
||||
}
|
||||
@SuppressWarnings("unchecked")
|
||||
private void testGetSetting(String configConstant, String configValue)
|
||||
throws Exception
|
||||
{
|
||||
// Get settings
|
||||
sender.sendMessage("getsettings");
|
||||
Object settingsResponse = receiver.incomingMessages.take();
|
||||
assertNotNull(settingsResponse);
|
||||
assertTrue(settingsResponse instanceof Map<?, ?>);
|
||||
Map<String, String> settingsResponseMap = (Map<String, String>) settingsResponse;
|
||||
assertEquals(configValue, settingsResponseMap.get(configConstant));
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void tearDown() throws Exception
|
||||
|
|
|
|||
|
|
@ -0,0 +1,185 @@
|
|||
package org.intracetest.agent;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.intrace.shared.Base64;
|
||||
/**
|
||||
|
||||
This test proves out the following API using text data from an intrace Event
|
||||
|
||||
* <code>String encoded = Base64.encode( myByteArray );</code>
|
||||
* <br />
|
||||
* <code>byte[] myByteArray = Base64.decode( encoded );</code>
|
||||
|
||||
<pre>
|
||||
|
||||
Plain ASCII Base64 Base64+GZIP
|
||||
-----------------------------------------
|
||||
Tiny | 70 96 116
|
||||
|
|
||||
Small | 248 332 256
|
||||
|
|
||||
Big | 2306 3076 904
|
||||
|
|
||||
Huge | 12591 16788 1036
|
||||
|
||||
|
||||
</pre>
|
||||
How small can we compress the InTrace event text for various sized InTrace events?
|
||||
<ul>
|
||||
<li>Base64 without GZIP was detrimental to small compression size in all cases</li>
|
||||
<li>The 70 and 248 byte events were slightly larger with both Base64 and Base64+GZIP -- bad but a not horrible show stopper.</li>
|
||||
<li>The Big event was more than 2x as small with Base64+GZIP -- good.</li>
|
||||
<li>The Huge event was more than 10x as small with Base64+GZIP -- great.</li>
|
||||
<li> </li>
|
||||
</ul>
|
||||
|
||||
Conclusions:
|
||||
Will not use Base64 alone -- doesn't provide any compression with these samples.
|
||||
Base64+GZIP doesn't hurt much with smaller event
|
||||
|
||||
|
||||
|
||||
*/
|
||||
public class CompressionTest extends TestCase
|
||||
{
|
||||
private static final String ORIGINAL_TINY_INTRACE_EVENT = "[18:07:53.683]:[67]:org.hsqldb.jdbc.jdbcConnection:prepareStatement: {";
|
||||
private static final String ORIGINAL_SMALL_INTRACE_EVENT = "[18:07:53.683]:[67]:org.hsqldb.jdbc.jdbcConnection:prepareStatement" +
|
||||
": Return: org.hsqldb.jdbc.jdbcPreparedStatement@4b8efa2f[sql=" +
|
||||
"[INSERT INTO Event (name, description, date, location) VALUES(?, ?, ?, ?)]" +
|
||||
", parameters=[[null], [null], [null], [null]]]";
|
||||
/**
|
||||
* This isn't a real event (yet)...just adding some text to assess compression for larger messages.
|
||||
*/
|
||||
private static final String ORIGINAL_LARGE_STACK_TRACE = "[18:07:53.683]:[67]:org.hsqldb.jdbc.jdbcConnection:prepareStatement" +
|
||||
": Return: org.hsqldb.jdbc.jdbcPreparedStatement@4b8efa2f[sql=" +
|
||||
"[INSERT INTO Event (name, description, date, location) VALUES(?, ?, ?, ?)]" +
|
||||
", parameters=[[null], [null], [null], [null]]]" +
|
||||
"~java.lang.Thread.getStackTrace(Thread.java:1567) example.webapp.servlet.HelloWorld.doGet(HelloWorld.java:38) javax.servlet.http.HttpServlet.service(HttpServlet.java:668) javax.servlet.http.HttpServlet.service(HttpServlet.java:770) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) org.eclipse.jetty.server.Server.handle(Server.java:365) org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) java.lang.Thread.run(Thread.java:722) ";
|
||||
|
||||
/**
|
||||
* This isn't a real event at all...just adding some text to assess compression for msg with more bytes.
|
||||
*/
|
||||
private static final String ORIGINAL_HUGE_STACK_TRACE = "[18:07:53.683]:[67]:org.hsqldb.jdbc.jdbcConnection:prepareStatement" +
|
||||
": Return: org.hsqldb.jdbc.jdbcPreparedStatement@4b8efa2f[sql=" +
|
||||
"[INSERT INTO Event (name, description, date, location) VALUES(?, ?, ?, ?)]" +
|
||||
", parameters=[[null], [null], [null], [null]]]" +
|
||||
"~java.lang.Thread.getStackTrace(Thread.java:1567) example.webapp.servlet.HelloWorld.doGet(HelloWorld.java:38) javax.servlet.http.HttpServlet.service(HttpServlet.java:668) javax.servlet.http.HttpServlet.service(HttpServlet.java:770) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) org.eclipse.jetty.server.Server.handle(Server.java:365) org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) java.lang.Thread.run(Thread.java:722) "+
|
||||
"java.lang.Thread.getStackTrace(Thread.java:1567) example.webapp.servlet.HelloWorld.doGet(HelloWorld.java:38) javax.servlet.http.HttpServlet.service(HttpServlet.java:668) javax.servlet.http.HttpServlet.service(HttpServlet.java:770) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) org.eclipse.jetty.server.Server.handle(Server.java:365) org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) java.lang.Thread.run(Thread.java:722) "+
|
||||
"java.lang.Thread.getStackTrace(Thread.java:1567) example.webapp.servlet.HelloWorld.doGet(HelloWorld.java:38) javax.servlet.http.HttpServlet.service(HttpServlet.java:668) javax.servlet.http.HttpServlet.service(HttpServlet.java:770) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) org.eclipse.jetty.server.Server.handle(Server.java:365) org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) java.lang.Thread.run(Thread.java:722) "+
|
||||
"java.lang.Thread.getStackTrace(Thread.java:1567) example.webapp.servlet.HelloWorld.doGet(HelloWorld.java:38) javax.servlet.http.HttpServlet.service(HttpServlet.java:668) javax.servlet.http.HttpServlet.service(HttpServlet.java:770) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) org.eclipse.jetty.server.Server.handle(Server.java:365) org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) java.lang.Thread.run(Thread.java:722) "+
|
||||
"java.lang.Thread.getStackTrace(Thread.java:1567) example.webapp.servlet.HelloWorld.doGet(HelloWorld.java:38) javax.servlet.http.HttpServlet.service(HttpServlet.java:668) javax.servlet.http.HttpServlet.service(HttpServlet.java:770) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) org.eclipse.jetty.server.Server.handle(Server.java:365) org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) java.lang.Thread.run(Thread.java:722) "+
|
||||
"java.lang.Thread.getStackTrace(Thread.java:1567) example.webapp.servlet.HelloWorld.doGet(HelloWorld.java:38) javax.servlet.http.HttpServlet.service(HttpServlet.java:668) javax.servlet.http.HttpServlet.service(HttpServlet.java:770) org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:669) org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:455) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137) org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:560) org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:231) org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1072) org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:382) org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:193) org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1006) org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135) org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) org.eclipse.jetty.server.Server.handle(Server.java:365) org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:485) org.eclipse.jetty.server.BlockingHttpConnection.handleRequest(BlockingHttpConnection.java:53) org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:926) org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:988) org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635) org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235) org.eclipse.jetty.server.BlockingHttpConnection.handle(BlockingHttpConnection.java:72) org.eclipse.jetty.server.bio.SocketConnector$ConnectorEndPoint.run(SocketConnector.java:264) org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) java.lang.Thread.run(Thread.java:722) ";
|
||||
|
||||
|
||||
public void testBasicCompressionAndDecompression_smallerWithGZip() throws IOException
|
||||
{
|
||||
// System.out.println("Original length of short data [" + ORIGINAL_SMALL_INTRACE_EVENT.length() + "]");
|
||||
// System.out.println("Original length of long data [" + ORIGINAL_LARGE_STACK_TRACE.length() + "]");
|
||||
byte[] eventData = ORIGINAL_SMALL_INTRACE_EVENT.getBytes();
|
||||
String compressedString = Base64.encodeBytes(eventData, Base64.GZIP);
|
||||
byte[] reconstitutedData = Base64.decode(compressedString, Base64.GZIP);
|
||||
String reconstitutedString = new String(reconstitutedData);
|
||||
|
||||
assertEquals("Size of original text", 248, ORIGINAL_SMALL_INTRACE_EVENT.length() );
|
||||
assertEquals("Size of compressed text", 256, compressedString.length() );
|
||||
// System.out.println("Compressed data [" + compressedString + "]");
|
||||
// System.out.println("Compressed with GZIP length - small data [" + compressedString.length() + "]");
|
||||
assertEquals("Unable to compress and decompress intrace event data", ORIGINAL_SMALL_INTRACE_EVENT, reconstitutedString);
|
||||
}
|
||||
public void testBasicCompressionAndDecompression_largerWithGZip() throws IOException
|
||||
{
|
||||
byte[] eventData = ORIGINAL_LARGE_STACK_TRACE.getBytes();
|
||||
String compressedData = Base64.encodeBytes(eventData, Base64.GZIP);
|
||||
//String compressedData = Base64.encodeBytes(eventData, Base64.NO_OPTIONS);
|
||||
byte[] reconstitutedData = Base64.decode(compressedData, Base64.GZIP);
|
||||
String reconstitutedString = new String(reconstitutedData);
|
||||
|
||||
assertEquals("Size of original text", 2306, ORIGINAL_LARGE_STACK_TRACE.length() );
|
||||
assertEquals("Size of compressed text", 904, compressedData.length() );
|
||||
|
||||
// System.out.println("Compressed data [" + compressedData + "]");
|
||||
// System.out.println("Compressed with GZIP data - long data [" + compressedData.length() + "]");
|
||||
assertEquals("Unable to compress and decompress intrace event data", ORIGINAL_LARGE_STACK_TRACE, reconstitutedString);
|
||||
}
|
||||
public void testBasicCompressionAndDecompression_smallerWithoutGZip() throws IOException
|
||||
{
|
||||
byte[] eventData = ORIGINAL_SMALL_INTRACE_EVENT.getBytes();
|
||||
String compressedString = Base64.encodeBytes(eventData, Base64.NO_OPTIONS);
|
||||
byte[] reconstitutedData = Base64.decode(compressedString, Base64.NO_OPTIONS);
|
||||
String reconstitutedString = new String(reconstitutedData);
|
||||
|
||||
|
||||
assertEquals("Size of original text", 248, ORIGINAL_SMALL_INTRACE_EVENT.length() );
|
||||
assertEquals("Size of compressed text", 332, compressedString.length() );
|
||||
// System.out.println("Compressed data [" + compressedString + "]");
|
||||
// System.out.println("Compressed without gzip data - small data [" + compressedString.length() + "]");
|
||||
assertEquals("Unable to compress and decompress intrace event data", ORIGINAL_SMALL_INTRACE_EVENT, reconstitutedString);
|
||||
}
|
||||
public void testBasicCompressionAndDecompression_largerWithoutGZip() throws IOException
|
||||
{
|
||||
byte[] eventData = ORIGINAL_LARGE_STACK_TRACE.getBytes();
|
||||
String compressedData = Base64.encodeBytes(eventData, Base64.NO_OPTIONS);
|
||||
//String compressedData = Base64.encodeBytes(eventData, Base64.NO_OPTIONS);
|
||||
byte[] reconstitutedData = Base64.decode(compressedData, Base64.NO_OPTIONS);
|
||||
String reconstitutedString = new String(reconstitutedData);
|
||||
|
||||
assertEquals("Size of original text", 2306, ORIGINAL_LARGE_STACK_TRACE.length() );
|
||||
assertEquals("Size of compressed text", 3076, compressedData.length() );
|
||||
|
||||
// System.out.println("Compressed data [" + compressedData + "]");
|
||||
// System.out.println("Compressed without gzip - large data [" + compressedData.length() + "]");
|
||||
assertEquals("Unable to compress and decompress intrace event data", ORIGINAL_LARGE_STACK_TRACE, reconstitutedString);
|
||||
}
|
||||
|
||||
public void testBasicCompressionAndDecompression_tinyWithGZip() throws IOException
|
||||
{
|
||||
byte[] eventData = ORIGINAL_TINY_INTRACE_EVENT.getBytes();
|
||||
String compressedString = Base64.encodeBytes(eventData, Base64.GZIP);
|
||||
byte[] reconstitutedData = Base64.decode(compressedString, Base64.GZIP);
|
||||
String reconstitutedString = new String(reconstitutedData);
|
||||
|
||||
|
||||
assertEquals("Size of original text", 70, ORIGINAL_TINY_INTRACE_EVENT.length() );
|
||||
assertEquals("Size of compressed text", 116, compressedString.length() );
|
||||
assertEquals("Unable to compress and decompress intrace event data", ORIGINAL_TINY_INTRACE_EVENT, reconstitutedString);
|
||||
}
|
||||
public void testBasicCompressionAndDecompression_tinyWithoutGZip() throws IOException
|
||||
{
|
||||
byte[] eventData = ORIGINAL_TINY_INTRACE_EVENT.getBytes();
|
||||
String compressedString = Base64.encodeBytes(eventData, Base64.NO_OPTIONS);
|
||||
byte[] reconstitutedData = Base64.decode(compressedString, Base64.NO_OPTIONS);
|
||||
String reconstitutedString = new String(reconstitutedData);
|
||||
|
||||
|
||||
assertEquals("Size of original text", 70, ORIGINAL_TINY_INTRACE_EVENT.length() );
|
||||
assertEquals("Size of compressed text", 96, compressedString.length() );
|
||||
assertEquals("Unable to compress and decompress intrace event data", ORIGINAL_TINY_INTRACE_EVENT, reconstitutedString);
|
||||
}
|
||||
public void testBasicCompressionAndDecompression_hugeWithGZip() throws IOException
|
||||
{
|
||||
byte[] eventData = ORIGINAL_HUGE_STACK_TRACE.getBytes();
|
||||
String compressedString = Base64.encodeBytes(eventData, Base64.GZIP);
|
||||
byte[] reconstitutedData = Base64.decode(compressedString, Base64.GZIP);
|
||||
String reconstitutedString = new String(reconstitutedData);
|
||||
|
||||
|
||||
assertEquals("Size of original text", 12591, ORIGINAL_HUGE_STACK_TRACE.length() );
|
||||
assertEquals("Size of compressed text", 1036, compressedString.length() );
|
||||
assertEquals("Unable to compress and decompress intrace event data", ORIGINAL_HUGE_STACK_TRACE, reconstitutedString);
|
||||
}
|
||||
public void testBasicCompressionAndDecompression_hugeWithoutGZip() throws IOException
|
||||
{
|
||||
byte[] eventData = ORIGINAL_HUGE_STACK_TRACE.getBytes();
|
||||
String compressedString = Base64.encodeBytes(eventData, Base64.NO_OPTIONS);
|
||||
byte[] reconstitutedData = Base64.decode(compressedString, Base64.NO_OPTIONS);
|
||||
String reconstitutedString = new String(reconstitutedData);
|
||||
|
||||
|
||||
assertEquals("Size of original text", 12591, ORIGINAL_HUGE_STACK_TRACE.length() );
|
||||
assertEquals("Size of compressed text", 16788, compressedString.length() );
|
||||
assertEquals("Unable to compress and decompress intrace event data", ORIGINAL_HUGE_STACK_TRACE, reconstitutedString);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,63 @@
|
|||
package org.intracetest.agent;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.intrace.agent.AgentSettings;
|
||||
import org.intrace.output.trace.TraceHandler;
|
||||
import org.intrace.output.trace.TraceSettings;
|
||||
import org.intrace.shared.AgentConfigConstants;
|
||||
import org.intrace.shared.TraceConfigConstants;
|
||||
|
||||
public class StackTraceTest extends TestCase
|
||||
{
|
||||
private static final String MY_PACKAGE_AND_CLASS = "org.intracetest.agent.StackTraceTest";
|
||||
private String m_stackTrace;
|
||||
/** Here is the raw stack trace that we want to validate:
|
||||
* <PRE>
|
||||
org.intracetest.agent.StackTraceTest.c(StackTraceTest.java:57),org.intracetest.agent.StackTraceTest.b(StackTraceTest.java:54),org.intracetest.agent.StackTraceTest.a(StackTraceTest.java:51),org.intracetest.agent.StackTraceTest.testStackTrace(StackTraceTest.java:27),sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method),sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57),sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43),java.lang.reflect.Method.invoke(Method.java:601),junit.framework.TestCase.runTest(TestCase.java:168),junit.framework.TestCase.runBare(TestCase.java:134),junit.framework.TestResult$1.protect(TestResult.java:110),junit.framework.TestResult.runProtected(TestResult.java:128),junit.framework.TestResult.run(TestResult.java:113),junit.framework.TestCase.run(TestCase.java:124),junit.framework.TestSuite.runTest(TestSuite.java:243),junit.framework.TestSuite.run(TestSuite.java:238),org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83),org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50),org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38),org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467),org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683),org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390),org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
|
||||
* </PRE>
|
||||
* Among other things, this test validates that the following are removed from the stack trace:
|
||||
* <ul>
|
||||
* <li>java.lang.Thread.getStackTrace</li>
|
||||
* <li>all org.intrace. activity</li>
|
||||
* </ul>
|
||||
*
|
||||
*/
|
||||
public void testStackTrace()
|
||||
{
|
||||
a();
|
||||
String[] parts = m_stackTrace.split(",");
|
||||
//System.out.println(m_stackTrace);
|
||||
//JUnit has a thick call stack -- when I checked, there were 23 stack trace elements.
|
||||
//Application developers only care about the ones on the very top.
|
||||
assertTrue("Didn't not find the right number of StackTraceElements", parts.length > 4);
|
||||
validateStackTraceElement("org.intracetest.agent.StackTraceTest.c", parts[0]);
|
||||
validateStackTraceElement("org.intracetest.agent.StackTraceTest.b", parts[1]);
|
||||
validateStackTraceElement("org.intracetest.agent.StackTraceTest.a", parts[2]);
|
||||
validateStackTraceElement("org.intracetest.agent.StackTraceTest.testStackTrace", parts[3]);
|
||||
//validateStackTraceElement("sun.reflect.NativeMethodAccessorImpl.invoke0", parts[4]);
|
||||
}
|
||||
private void validateStackTraceElement(String expectedPackageAndClassAndMethod, String actual) {
|
||||
String[] partsOfStackTraceElement = actual.split("[\\(:\\)]");
|
||||
assertEquals("The package and class and method name were not found in the right place",
|
||||
expectedPackageAndClassAndMethod,
|
||||
partsOfStackTraceElement[0]);
|
||||
|
||||
assertEquals("source file not found in the right place",
|
||||
"StackTraceTest.java",
|
||||
partsOfStackTraceElement[1]);
|
||||
|
||||
}
|
||||
private void a() {
|
||||
b();
|
||||
}
|
||||
private void b() {
|
||||
c();
|
||||
}
|
||||
private void c() {
|
||||
m_stackTrace = TraceHandler.INSTANCE.getStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
package org.intracetest.agent;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.intrace.agent.AgentSettings;
|
||||
import org.intrace.output.trace.TraceSettings;
|
||||
import org.intrace.shared.AgentConfigConstants;
|
||||
import org.intrace.shared.TraceConfigConstants;
|
||||
|
||||
public class TraceSettingsTest extends TestCase
|
||||
{
|
||||
public void testAgentSettings()
|
||||
{
|
||||
TraceSettings ts = new TraceSettings(
|
||||
TraceConfigConstants.ARG
|
||||
+ "true"
|
||||
+ TraceConfigConstants.ARRAYS
|
||||
+ "true"
|
||||
+ TraceConfigConstants.ENTRY_EXIT
|
||||
+ "true"
|
||||
+ TraceConfigConstants.BRANCH
|
||||
+ "true"
|
||||
+ TraceConfigConstants.EXIT_STACK_TRACE
|
||||
+ "true"
|
||||
);
|
||||
|
||||
assertTrue(ts.isArgTraceEnabled());
|
||||
assertTrue(ts.isEntryExitTraceEnabled());
|
||||
assertTrue(ts.isBranchTraceEnabled());
|
||||
assertTrue(ts.isExitStackTraceEnabled());
|
||||
assertTrue(ts.isTruncateArraysEnabled());
|
||||
|
||||
ts = new TraceSettings(ts);
|
||||
assertTrue(ts.isArgTraceEnabled());
|
||||
assertTrue(ts.isEntryExitTraceEnabled());
|
||||
assertTrue(ts.isBranchTraceEnabled());
|
||||
assertTrue(ts.isExitStackTraceEnabled());
|
||||
assertTrue(ts.isTruncateArraysEnabled());
|
||||
|
||||
String toString = ts.toString();
|
||||
assertNotNull(toString);
|
||||
|
||||
Map<String, String> settingsMap = ts.getSettingsMap();
|
||||
assertEquals(settingsMap.get(TraceConfigConstants.ARG), "true");
|
||||
assertEquals(settingsMap.get(TraceConfigConstants.ARRAYS), "true");
|
||||
assertEquals(settingsMap.get(TraceConfigConstants.BRANCH), "true");
|
||||
assertEquals(settingsMap.get(TraceConfigConstants.EXIT_STACK_TRACE),"true");
|
||||
assertEquals(settingsMap.get(TraceConfigConstants.ENTRY_EXIT), "true");
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue