PageRenderTime 46ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/org.intrace/testsrc/org/intracetest/agent/SerializationTest.java

http://github.com/mchr3k/org.intrace
Java | 222 lines | 158 code | 53 blank | 11 comment | 9 complexity | dd1284903e722c23f6ba12c5a405cf44 MD5 | raw file
  1. package org.intracetest.agent;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertTrue;
  4. import static org.junit.Assert.fail;
  5. import java.io.IOException;
  6. import java.io.ByteArrayOutputStream;
  7. import java.io.ByteArrayInputStream;
  8. import java.io.ObjectOutputStream;
  9. import java.io.ObjectInputStream;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import org.intrace.shared.SerializationHelper;
  13. import org.intrace.output.NetworkDataSenderThread.TraceEventForBatch;
  14. import org.intrace.output.NetworkDataSenderThread;
  15. import org.junit.Before;
  16. import org.junit.Test;
  17. public class SerializationTest {
  18. String[] myData = { "foo", "bar" };
  19. String sampleEvent = "[00:48:55.797]:[19]:org.hsqldb.jdbc.jdbcStatement:<init>: }~org.hsqldb.jdbc.jdbcStatement.<init>(Unknown Source),org.hsqldb.jdbc.jdbcConnection.createStatement(Unknown Source),org.apache.commons.dbcp.DelegatingConnection.createStatement(DelegatingConnection.java:257),org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createStatement(PoolingDataSource.java:216),org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:389),org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455),org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:463),org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:471),org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:476),org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:485),example.webapp.dao.JdbcEventDAO.countAll(JdbcEventDAO.java:64),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:606),org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309),org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183),org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150),org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110),org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172),org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202),com.sun.proxy.$Proxy6.countAll(Unknown Source),example.webapp.servlet.HelloExecuteQuery.doGet(HelloExecuteQuery.java:25),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)";
  20. @Before
  21. public void setup() {
  22. sampleEvents[0] = "[00:48:55.797]:[19]:org.hsqldb.jdbc.jdbcStatement:<init>: }~org.hsqldb.jdbc.jdbcStatement.<init>(Unknown Source),org.hsqldb.jdbc.jdbcConnection.createStatement(Unknown Source),org.apache.commons.dbcp.DelegatingConnection.createStatement(DelegatingConnection.java:257),org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createStatement(PoolingDataSource.java:216),org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:389),org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455),org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:463),org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:471),org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:476),org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:485),example.webapp.dao.JdbcEventDAO.countAll(JdbcEventDAO.java:64),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:606),org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309),org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183),org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150),org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110),org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172),org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202),com.sun.proxy.$Proxy6.countAll(Unknown Source),example.webapp.servlet.HelloExecuteQuery.doGet(HelloExecuteQuery.java:25),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)";
  23. sampleEvents[1] = "[00:48:55.797]:[19]:org.apache.commons.dbcp.DelegatingStatement:<init>: {:61";
  24. sampleEvents[2] = "[00:48:55.797]:[19]:org.apache.commons.dbcp.DelegatingStatement:<init>: Arg (c): jdbc:hsqldb:mem:event, UserName=SA, HSQL Database Engine Driver";
  25. sampleEvents[3] = "[00:48:55.797]:[19]:org.apache.commons.dbcp.DelegatingStatement:<init>: Arg (s): org.hsqldb.jdbc.jdbcStatement@2300de71";
  26. sampleEvents[4] = "[00:48:55.798]:[19]:org.apache.commons.dbcp.DelegatingStatement:<init>: }:64~org.apache.commons.dbcp.DelegatingStatement.<init>(DelegatingStatement.java:64),org.apache.commons.dbcp.DelegatingConnection.createStatement(DelegatingConnection.java:257),org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createStatement(PoolingDataSource.java:216),org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:389),org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455),org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:463),org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:471),org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:476),org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:485),example.webapp.dao.JdbcEventDAO.countAll(JdbcEventDAO.java:64),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:606),org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309),org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183),org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150),org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110),org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172),org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202),com.sun.proxy.$Proxy6.countAll(Unknown Source),example.webapp.servlet.HelloExecuteQuery.doGet(HelloExecuteQuery.java:25),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)";
  27. sampleEvents[5] = "[00:48:55.798]:[19]:org.apache.commons.dbcp.DelegatingStatement:<init>: {:61";
  28. sampleEvents[6] = "[00:48:55.798]:[19]:org.apache.commons.dbcp.DelegatingStatement:<init>: Arg (c): jdbc:hsqldb:mem:event, UserName=SA, HSQL Database Engine Driver";
  29. sampleEvents[7] = "[00:48:55.799]:[19]:org.apache.commons.dbcp.DelegatingStatement:<init>: Arg (s): org.hsqldb.jdbc.jdbcStatement@2300de71";
  30. sampleEvents[8] = "[00:48:55.799]:[19]:org.apache.commons.dbcp.DelegatingStatement:<init>: }:64~org.apache.commons.dbcp.DelegatingStatement.<init>(DelegatingStatement.java:64),org.apache.commons.dbcp.PoolingDataSource$PoolGuardConnectionWrapper.createStatement(PoolingDataSource.java:216),org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:389),org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:455),org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:463),org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:471),org.springframework.jdbc.core.JdbcTemplate.queryForObject(JdbcTemplate.java:476),org.springframework.jdbc.core.JdbcTemplate.queryForInt(JdbcTemplate.java:485),example.webapp.dao.JdbcEventDAO.countAll(JdbcEventDAO.java:64),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:606),org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309),org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183),org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150),org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110),org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172),org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202),com.sun.proxy.$Proxy6.countAll(Unknown Source),example.webapp.servlet.HelloExecuteQuery.doGet(HelloExecuteQuery.java:25),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)";
  31. sampleEvents[9] = "[00:48:55.799]:[19]:org.apache.commons.dbcp.DelegatingStatement:executeQuery: {:206";
  32. }
  33. @Test
  34. public void canSerializeAndDeserializeEvents() throws IOException, ClassNotFoundException {
  35. byte[] myBytes = SerializationHelper.toWire(this.myData);
  36. assertEquals("Didn't find right size of data-on-the-wire.", 75, myBytes.length) ;
  37. String[] surprise = SerializationHelper.fromWire(myBytes);
  38. assertEquals("Could not find 1st element in deserialized array of strings","foo",surprise[0]);
  39. assertEquals("Could not find 2nd element in deserialized array of strings","bar",surprise[1]);
  40. }
  41. /**
  42. * These are typical times for serializing/compressing about 12mb of events
  43. * on my 2.3Ghz i7 MacBook
  44. * Serialize time [199]
  45. * Deserialize time [171]
  46. * @throws IOException
  47. * @throws ClassNotFoundException
  48. */
  49. @Test
  50. public void canCalculateSizeOfDataSerializedAndCompressed() throws IOException, ClassNotFoundException {
  51. List<String> myEvents = new ArrayList<String>();
  52. int unCompressedByteCount = 0;
  53. for(int i = 0; i < 10000;i++) {
  54. long timestamp = System.currentTimeMillis();
  55. Long longTimestamp = new Long(timestamp);
  56. String tmp =
  57. longTimestamp.toString() //Throw in some randomness, more realism for the compression algo.
  58. + sampleEvents [ i % 10 ]
  59. + Long.toHexString(2*timestamp) ;
  60. unCompressedByteCount+=tmp.length(); //Throw in some randomness, more realism for the compression algo.
  61. myEvents.add(tmp);
  62. }
  63. assertTrue("Did not find correct total size for 10k uncompressed strings ",unCompressedByteCount > 12000000 );
  64. assertTrue("Did not find correct total size for 10k uncompressed strings ",unCompressedByteCount < 12500000 );
  65. String[] myEventsArray;// = new String[myEvents.size()];
  66. myEventsArray = myEvents.toArray(new String[0]);
  67. assertEquals("Unable to create array from list", 10000,myEventsArray.length);
  68. long start = System.currentTimeMillis();
  69. byte[] myBytes = SerializationHelper.toWire(myEventsArray);
  70. long finish = System.currentTimeMillis();
  71. System.out.println("Serialize time [" + (finish-start) + "]");
  72. assertTrue("Did not find correct size for String array compressed into a byte array",myBytes.length > 80000);
  73. assertTrue("Did not find correct size for String array compressed into a byte array",myBytes.length < 90000);
  74. start = System.currentTimeMillis();
  75. String[] surprise = SerializationHelper.fromWire(myBytes);
  76. finish = System.currentTimeMillis();
  77. System.out.println("Deserialize time [" + (finish-start) + "]");
  78. }
  79. @Test
  80. public void canSendOneBurstsOfEvents() throws Exception {
  81. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  82. ObjectOutputStream o = new ObjectOutputStream(baos);
  83. List<TraceEventForBatch> events = new ArrayList<TraceEventForBatch>();
  84. events.add( new TraceEventForBatch("foo",System.currentTimeMillis(), 1));
  85. events.add( new TraceEventForBatch("bar",System.currentTimeMillis(), 2));
  86. NetworkDataSenderThread sender = new NetworkDataSenderThread(null,null);
  87. int numBursts = sender.transmitBatch( o, events, 10 );
  88. assertEquals("Sent just two events with a larger burst size. should have sent exactly 1 burst.", 1, numBursts);
  89. //o.close();
  90. byte[] compressedObjects = baos.toByteArray() ;
  91. assertTrue( "didn't find enough raw compressed data", compressedObjects.length > 4);//surely the data has to be bigger than 4 bytes, right?
  92. ByteArrayInputStream bais = new ByteArrayInputStream(compressedObjects);
  93. ObjectInputStream ois = new ObjectInputStream(bais);
  94. Object objectFromWire = ois.readObject();
  95. ois.close();
  96. if (objectFromWire instanceof byte[]) {
  97. byte[] freshFromWire = (byte[]) objectFromWire;
  98. assertEquals("Didn't find size of byte array on wire", 75, freshFromWire.length);
  99. String results[] = SerializationHelper.fromWire( freshFromWire );
  100. assertEquals( "Didn't find right count of String in the array after sending bursts", 2, results.length );
  101. assertEquals( "Couldn't receive multiple bursts with just two events", "foo", results[0] );
  102. assertEquals( "Couldn't receive multiple bursts with just two events", "bar", results[1] );
  103. } else {
  104. fail("Didn't serialize right kind of object");
  105. }
  106. }
  107. @Test
  108. public void canSendThreeBurstsOfEvents() throws Exception {
  109. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  110. ObjectOutputStream o = new ObjectOutputStream(baos);
  111. List<TraceEventForBatch> events = new ArrayList<TraceEventForBatch>();
  112. events.add( new TraceEventForBatch("yankee",System.currentTimeMillis(), 1));
  113. events.add( new TraceEventForBatch("doodle",System.currentTimeMillis(), 2));
  114. events.add( new TraceEventForBatch("went",System.currentTimeMillis(), 2));
  115. events.add( new TraceEventForBatch("to",System.currentTimeMillis(), 2));
  116. events.add( new TraceEventForBatch("town", System.currentTimeMillis(), 2));
  117. events.add( new TraceEventForBatch("riding",System.currentTimeMillis(), 2));
  118. events.add( new TraceEventForBatch("on",System.currentTimeMillis(), 2));
  119. events.add( new TraceEventForBatch("a",System.currentTimeMillis(), 2));
  120. events.add( new TraceEventForBatch("pony",System.currentTimeMillis(), 2));
  121. NetworkDataSenderThread sender = new NetworkDataSenderThread(null,null);
  122. int numBursts = sender.transmitBatch( o, events, 3 );
  123. assertEquals("Sent just 9 events with a burst size of 3. should have sent exactly 3 burst.", 3, numBursts);
  124. //o.close();
  125. byte[] compressedObjects = baos.toByteArray() ;
  126. assertTrue( "didn't find enough raw compressed data", compressedObjects.length > 4);//surely the data has to be bigger than 4 bytes, right?
  127. ByteArrayInputStream bais = new ByteArrayInputStream(compressedObjects);
  128. ObjectInputStream ois = new ObjectInputStream(bais);
  129. Object objectFromWire1 = ois.readObject();
  130. Object objectFromWire2 = ois.readObject();
  131. Object objectFromWire3 = ois.readObject();
  132. ois.close();
  133. if (objectFromWire1 instanceof byte[]) {
  134. byte[] freshFromWire = (byte[]) objectFromWire1;
  135. assertEquals("Didn't find size of byte array on wire", 87, freshFromWire.length);
  136. String results[] = SerializationHelper.fromWire( freshFromWire );
  137. assertEquals( "Didn't find right count of String in the array after sending bursts", 3, results.length );
  138. assertEquals( "Couldn't receive multiple bursts with just 9 events", "yankee", results[0] );
  139. assertEquals( "Couldn't receive multiple bursts with just 9 events", "doodle", results[1] );
  140. assertEquals( "Couldn't receive multiple bursts with just 9 events", "went", results[2] );
  141. } else {
  142. fail("Didn't serialize right kind of object");
  143. }
  144. if (objectFromWire2 instanceof byte[]) {
  145. byte[] freshFromWire = (byte[]) objectFromWire2;
  146. assertEquals("Didn't find size of byte array on wire", 84, freshFromWire.length);
  147. String results[] = SerializationHelper.fromWire( freshFromWire );
  148. assertEquals( "Didn't find right count of String in the array for the 2nd burst", 3, results.length );
  149. assertEquals( "Couldn't receive multiple bursts with just 9 events", "to", results[0] );
  150. assertEquals( "Couldn't receive multiple bursts with just 9 events", "town", results[1] );
  151. assertEquals( "Couldn't receive multiple bursts with just 9 events", "riding", results[2] );
  152. } else {
  153. fail("Didn't serialize right kind of object");
  154. }
  155. if (objectFromWire1 instanceof byte[]) {
  156. byte[] freshFromWire = (byte[]) objectFromWire3;
  157. assertEquals("Didn't find size of byte array on wire", 80, freshFromWire.length);
  158. String results[] = SerializationHelper.fromWire( freshFromWire );
  159. assertEquals( "Didn't find right count of String in the array for the 3rd burst", 3, results.length );
  160. assertEquals( "Couldn't receive multiple bursts with just 9 events", "on", results[0] );
  161. assertEquals( "Couldn't receive multiple bursts with just 9 events", "a", results[1] );
  162. assertEquals( "Couldn't receive multiple bursts with just 9 events", "pony", results[2] );
  163. } else {
  164. fail("Didn't serialize right kind of object");
  165. }
  166. }
  167. private String[] sampleEvents = new String[10];
  168. }