This commit is contained in:
eostermueller 2013-12-06 10:24:07 -08:00
commit ef05775501
13 changed files with 2402 additions and 3 deletions

Binary file not shown.

View File

@ -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,

View File

@ -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");

View File

@ -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();
/**

View File

@ -2026,6 +2026,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);

View File

@ -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);
}
}

View File

@ -16,6 +16,7 @@ public class ParsedSettingsData
public boolean entryExitEnabled;
public boolean branchEnabled;
public boolean gzipEnabled = false;
public boolean truncArraysEnabled;
public boolean argsEnabled;
public boolean stdOutEnabled;
@ -35,6 +36,15 @@ public class ParsedSettingsData
{
this.settingsMap = settingsMap;
if ("true".equals(settingsMap.get(AgentConfigConstants.GZIP)))
{
gzipEnabled = true;
}
else
{
gzipEnabled = false;
}
classRegex = settingsMap.get(AgentConfigConstants.CLASS_REGEX);
classExcludeRegex = settingsMap
.get(AgentConfigConstants.EXCLUDE_CLASS_REGEX);
@ -86,6 +96,7 @@ public class ParsedSettingsData
branchEnabled = false;
}
if ("true".equals(settingsMap.get(TraceConfigConstants.ARG)))
{
argsEnabled = true;

View File

@ -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

View File

@ -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-";
@ -37,5 +38,6 @@ 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>");
}
}

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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);
}
}

View File

@ -0,0 +1,48 @@
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"
);
assertTrue(ts.isArgTraceEnabled());
assertTrue(ts.isEntryExitTraceEnabled());
assertTrue(ts.isBranchTraceEnabled());
assertTrue(ts.isTruncateArraysEnabled());
ts = new TraceSettings(ts);
assertTrue(ts.isArgTraceEnabled());
assertTrue(ts.isEntryExitTraceEnabled());
assertTrue(ts.isBranchTraceEnabled());
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.ENTRY_EXIT), "true");
}
}