Package org.jboss.serial.soaktest

Source Code of org.jboss.serial.soaktest.DataContainerMultiThreadTestCase

package org.jboss.serial.soaktest;

import java.io.ObjectInput;
import java.io.ObjectOutput;

import org.jboss.serial.DataSerializationTest;
import org.jboss.serial.data.TestReadResolve;
import org.jboss.serial.objectmetamodel.DataContainer;

public class DataContainerMultiThreadTestCase extends DataSerializationTest
{
 
  static class TestThread extends Thread
  {
    Exception e;
    DataContainer container;
    Object originalObject;
    public TestThread (DataContainer container, Object source)
    {
      this.container = container;
      this.originalObject=source;
    }

    public void run()
    {
      for (int i=0;i<100;i++)
      {
        try
        {
          Thread.yield();
          ObjectInput input = container.getInput();
          Object newObject = input.readObject();
          if (newObject==originalObject)
          {
            throw new Exception ("Object was the same for " + newObject.getClass().getName());
          }
          if (!newObject.equals(originalObject))
          {
            throw new Exception ("Object was not equals");
          }
        }
        catch (Exception e)
        {
          e.printStackTrace();
          this.e=e;
        }
      }
    }
   
  }

  public void executTest(Object dataObject) throws Throwable {
   
    if (dataObject instanceof String || dataObject instanceof String[] || dataObject instanceof TestReadResolve)
    {
      return;
    }
    System.out.println("Testing " + dataObject.getClass().getName());
      DataContainer container = new DataContainer(null, null, null, false);
        ObjectOutput output = container.getOutput();
        output.writeObject(dataObject);
        output.flush();
        container.flush();
       
       
        TestThread threads[] = new TestThread[100];
        for (int i=0;i<threads.length;i++)
        {
            ObjectInput input = container.getInput();
            Object newObject = input.readObject();
            assertNotSame(dataObject, newObject);
            assertEquals(dataObject,newObject);

            threads[i] = new TestThread(container.cloneContainer(),newObject);
        }
       
        for (int i=0;i<threads.length;i++)
        {
          threads[i].start();
        }
       
        for (int i=0;i<threads.length;i++)
        {
          threads[i].join();
        }
       
        for (int i=0;i<threads.length;i++)
        {
          if (threads[i].e!=null)
          {
            throw threads[i].e;
          }
        }
       
       
       
   
  }

}
TOP

Related Classes of org.jboss.serial.soaktest.DataContainerMultiThreadTestCase

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.