Package org.jboss.serial.soaktest

Source Code of org.jboss.serial.soaktest.SoakTestCase$CountHolder

package org.jboss.serial.soaktest;

import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.HashMap;

import junit.framework.Test;

import org.jboss.jrunit.decorators.ThreadLocalDecorator;
import org.jboss.serial.DataSerializationTest;
import org.jboss.serial.benchmarks.MultiThreadJavaPerformanceTestCase;
import org.jboss.serial.data.NonSerializableTest;
import org.jboss.serial.io.JBossObjectInputStream;
import org.jboss.serial.io.JBossObjectOutputStream;
import org.jboss.serial.objectmetamodel.ObjectsCache;

public class SoakTestCase extends DataSerializationTest {
  public SoakTestCase()
  {
    super();
  }
 
    public static Test suite() throws Exception
    {
        return new ThreadLocalDecorator(SoakTestCase.class,2,1000,0,false)
        {
            public void threadsTearDown()
            {
              System.out.println("ThreadsTearDown... process finished");
                super.threadsTearDown();
            }

        };
    }

    static ThreadLocal count = new ThreadLocal();
    static class CountHolder
    {
        int i=0;
    }

    private static CountHolder getCount()
    {
        if (count.get()==null)
        {
            count.set(new CountHolder());
        }
        return ((CountHolder)count.get());
    }

    /* (non-Javadoc)
     * @see org.jboss.serial.DataSerializationTest#executTest(java.lang.Object)
     */
    public void executTest(Object dataObject) throws Throwable
    {
      if (dataObject instanceof NonSerializableTest)
      {
        return;
      }
        CountHolder count = getCount();
        doJBossSerialization(dataObject, count, true);
        count.i++;
    }

    static HashMap metaData = new HashMap();
    static
    {
        metaData.put("test","JBoss");
    }
    private void doJBossSerialization(Object dataObject, CountHolder count, boolean retry) throws Exception, Throwable
    {
      if (count.i %1000==0)
      {
        System.out.println("count.i=" + count.i);
      }
        try
        {
                ByteArrayOutputStream outByte = new ByteArrayOutputStream();
                BufferedOutputStream buffOut  = new BufferedOutputStream(outByte);
                ObjectOutputStream output = new JBossObjectOutputStream(buffOut);
                output.writeObject(dataObject);
                output.flush();
                buffOut.flush();

                ByteArrayInputStream inptByte = new ByteArrayInputStream(outByte.toByteArray());
                ObjectInputStream input = new JBossObjectInputStream(inptByte);
                Object obj=null;
                try
                {
                  obj = input.readObject();
                }
                catch (Throwable e)
                {
                  e.printStackTrace();
                  if (retry)
                  {
                    retry( dataObject,  count);
                  }
                  throw e;
                }
               
                if (!(obj instanceof Object[]) && !obj.equals(dataObject))
                {
                  System.out.println("obj1=" + obj.toString());
                  System.out.println("obj2=" + dataObject.toString());
                  if (retry)
                  {
                    retry(dataObject, count);
                  }
                }
                if (!(dataObject instanceof Object[]))
                {
                  assertEquals(obj,dataObject);
                }
        }
        // I was to be able to capture assertions also before doing the clear
        catch (Throwable e)
        {
            e.printStackTrace();
            throw e;
        }
    }
  private void retry(Object dataObject, CountHolder count) {
    // This could be used for debug purposes
    System.out.println("Retrying");
    try
    {
      for (int retryI=0;retryI<100;retryI++)
      {
        System.out.println("Retry " + retryI);
        try
        {
          MultiThreadJavaPerformanceTestCase.executeSerialization(dataObject);
        }
        catch (Throwable e)
        {
          e.printStackTrace();
        }
        try
        {
          doJBossSerialization(dataObject,count,false);
        }
        catch (Throwable e)
        {
          e.printStackTrace();
        }
      }
    }
    finally
    {
    }
  }
   


}
TOP

Related Classes of org.jboss.serial.soaktest.SoakTestCase$CountHolder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.