Clover coverage report -
Coverage timestamp: Wed Jan 31 2007 15:38:53 EST
file stats: LOC: 144   Methods: 4
NCLOC: 101   Classes: 2
 
 Source file Conditionals Statements Methods TOTAL
JBossSerializationTest.java 83.3% 92.9% 100% 91.7%
coverage coverage
 1    /*
 2    * JBoss, Home of Professional Open Source
 3    *
 4    * Distributable under LGPL license.
 5    * See terms of license at gnu.org.
 6    */
 7    package org.jboss.cache.marshall;
 8   
 9    import junit.framework.TestCase;
 10   
 11    import java.io.ByteArrayOutputStream;
 12    import java.io.File;
 13    import java.io.FileOutputStream;
 14    import java.io.ObjectInputStream;
 15    import java.io.ObjectOutputStream;
 16    import java.util.Random;
 17   
 18    /**
 19    * Tests the performance of JBoss Serialization
 20    *
 21    * @author <a href="mailto:manik@jboss.org">Manik Surtani (manik@jboss.org)</a>
 22    */
 23    public class JBossSerializationTest extends TestCase
 24    {
 25   
 26    // you can change these variables to change behavior of this testsuite, for debug purposes:
 27   
 28    public static boolean SAVE_FILE = false;
 29    public static boolean USE_STRING = false;
 30   
 31    static class DummyObject implements java.io.Serializable
 32    {
 33    private static final long serialVersionUID = -1374365296408936578L;
 34    String stringName;
 35   
 36  1 public DummyObject()
 37    {
 38  1 stringName = "Hello world, blah blah blah." + (new Random().nextInt());
 39    }
 40   
 41  100000 public boolean equals(Object obj)
 42    {
 43  100000 return stringName.equals(((DummyObject) obj).stringName);
 44    }
 45    }
 46   
 47  2 private static void saveBytes(File fileName, byte[] bytes) throws Exception
 48    {
 49  2 if (SAVE_FILE)
 50    {
 51  0 FileOutputStream fileOut = new FileOutputStream(fileName);
 52  0 fileOut.write(bytes);
 53  0 fileOut.close();
 54    }
 55    }
 56   
 57  1 public void testSpeedSizeAndDefaults() throws Exception
 58    {
 59   
 60  1 assertTrue("JBoss Serialization should be enabled by default", ObjectSerializationFactory.useJBossSerialization);
 61  1 assertEquals("Should be using the JBossObjectStreamFactory", JBossObjectStreamFactory.class, ObjectSerializationFactory.factory.getClass());
 62  1 Object dummyObject = null;
 63   
 64  1 if (USE_STRING)
 65    {
 66  0 dummyObject = "Hello world, blah blah blah.";
 67    }
 68    else
 69    {
 70  1 dummyObject = new DummyObject();
 71    }
 72   
 73  1 ObjectSerializationFactory.useJBossSerialization = false;
 74  1 ObjectSerializationFactory.factory = new JavaObjectStreamFactory();
 75  1 assertTrue("Should be false", !ObjectSerializationFactory.useJBossSerialization);
 76   
 77   
 78  1 ByteArrayOutputStream out = new ByteArrayOutputStream();
 79   
 80  1 long start = 0;
 81   
 82  1 for (int i = 0; i < 50000; i++)
 83    {
 84  50000 out.reset();
 85  50000 if (i == 1000)
 86    {
 87  1 start = System.currentTimeMillis();
 88    }
 89  50000 ObjectOutputStream objectOut = ObjectSerializationFactory.createObjectOutputStream(out);
 90  50000 objectOut.writeObject(dummyObject);
 91  50000 objectOut.close();
 92   
 93  50000 ObjectInputStream objectInput = ObjectSerializationFactory.createObjectInputStream(out.toByteArray());
 94  50000 Object newObject = objectInput.readObject();
 95   
 96  50000 assertEquals(dummyObject, newObject);
 97  50000 assertNotSame(dummyObject, newObject);
 98    }
 99   
 100   
 101  1 long javaSerializationTime = System.currentTimeMillis() - start;
 102  1 int javaSerializationSize = out.toByteArray().length;
 103   
 104  1 saveBytes(new File("/tmp/fileJava.bin"), out.toByteArray());
 105   
 106  1 ObjectSerializationFactory.useJBossSerialization = true;
 107  1 ObjectSerializationFactory.factory = new JBossObjectStreamFactory();
 108  1 assertTrue("Should be false", ObjectSerializationFactory.useJBossSerialization);
 109   
 110  1 start = 0;
 111  1 for (int i = 0; i < 50000; i++)
 112    {
 113  50000 out.reset();
 114  50000 if (i == 1000)
 115    {
 116  1 start = System.currentTimeMillis();
 117    }
 118  50000 ObjectOutputStream objectOut = ObjectSerializationFactory.createObjectOutputStream(out);
 119  50000 objectOut.writeObject(dummyObject);
 120  50000 objectOut.close();
 121   
 122  50000 ObjectInputStream objectInput = ObjectSerializationFactory.createObjectInputStream(out.toByteArray());
 123  50000 Object newObject = objectInput.readObject();
 124   
 125  50000 assertEquals(dummyObject, newObject);
 126  50000 assertNotSame(dummyObject, newObject);
 127    }
 128  1 long jbossSerializationTime = System.currentTimeMillis() - start;
 129  1 int jbossSerializationSize = out.toByteArray().length;
 130   
 131  1 System.out.println("FinishJBoss:" + System.currentTimeMillis());
 132  1 saveBytes(new File("/tmp/fileJBoss.bin"), out.toByteArray());
 133   
 134  1 System.out.println("JBossSerialization Time:" + jbossSerializationTime);
 135  1 System.out.println("JavaSerialization Time:" + javaSerializationTime);
 136   
 137  1 System.out.println("JBossSerialization Size:" + jbossSerializationSize);
 138  1 System.out.println("JavaSerialization Size:" + javaSerializationSize);
 139   
 140  1 assertTrue("JBoss Serialization should be FASTER than Java Serialization. Java: " + javaSerializationTime + "; jboss: " + jbossSerializationTime, jbossSerializationTime < javaSerializationTime);
 141  1 assertTrue("JBoss Serialization output should be SMALLER than Java Serialization. Java: " + javaSerializationSize + "; jboss: " + jbossSerializationSize, jbossSerializationSize < javaSerializationSize);
 142    }
 143   
 144    }