Author: jsong Date: Mon Jan 24 12:45:50 2005 New Revision: 126311 URL: http://svn.apache.org/viewcvs?view=rev&rev=126311 Log: Adding tests on controls threading in nested controls.
Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThreadControl.java incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThreadControlImpl.jcs incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedSingleThreadControl.java incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedSingleThreadControlImpl.jcs incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite.java incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/threading/CompositeTest.java Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThreadControl.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThreadControl.java?view=auto&rev=126311 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThreadControl.java Mon Jan 24 12:45:50 2005 @@ -0,0 +1,17 @@ +package org.apache.beehive.controls.test.controls.threading.nested; + +import org.apache.beehive.controls.api.bean.ControlInterface; + +/** + * A control interface with two methods declared. + * This control interface is designed to test threading model of + * control framework. + */ + [EMAIL PROTECTED] +public interface CompositeMultiThreadControl +{ + + public long[] doRead(); + public void doSet(); +} Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThreadControlImpl.jcs Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThreadControlImpl.jcs?view=auto&rev=126311 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThreadControlImpl.jcs Mon Jan 24 12:45:50 2005 @@ -0,0 +1,47 @@ +package org.apache.beehive.controls.test.controls.threading.nested; + +import java.util.Date; +import java.lang.Thread; +import java.lang.InterruptedException; +import org.apache.beehive.controls.api.bean.Control; +import org.apache.beehive.controls.api.bean.ControlImplementation; +import org.apache.beehive.controls.api.bean.Threading; +import org.apache.beehive.controls.api.bean.ThreadingPolicy; + +/** + * An impl of CompositeMultiThreadControl. + * + * Test objective: doRead and doSet on same instance should not + * inter-lock each other when invoked by different thread. + * + */ [EMAIL PROTECTED] [EMAIL PROTECTED](ThreadingPolicy.MULTI_THREADED) +public class CompositeMultiThreadControlImpl implements CompositeMultiThreadControl +{ + public final static int LOOPS=50; + private long count=0; + + @Control + NestedSingleThreadControlBean nested; + + /**returns it's own count and that of the nested control*/ + public long[] doRead() + { + long result[]=new long[2]; + result[0]=count; + result[1]=nested.doRead(); + return result; + } + + public void doSet() + { + nested.doSet(); + for(int i=0;i<LOOPS;i++){ + try{Thread.sleep(1);} + catch(InterruptedException e){} + Date now=new Date(); + count=now.getTime(); + } + } +} Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedSingleThreadControl.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedSingleThreadControl.java?view=auto&rev=126311 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedSingleThreadControl.java Mon Jan 24 12:45:50 2005 @@ -0,0 +1,17 @@ +package org.apache.beehive.controls.test.controls.threading.nested; + +import org.apache.beehive.controls.api.bean.ControlInterface; + +/** + * A control interface with two methods declared. + * This control interface is designed to a nested control and + * test control threading. + */ + [EMAIL PROTECTED] +public interface NestedSingleThreadControl +{ + + public long doRead(); + public void doSet(); +} Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedSingleThreadControlImpl.jcs Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedSingleThreadControlImpl.jcs?view=auto&rev=126311 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedSingleThreadControlImpl.jcs Mon Jan 24 12:45:50 2005 @@ -0,0 +1,39 @@ +package org.apache.beehive.controls.test.controls.threading.nested; + +import java.util.Date; +import java.lang.Thread; +import java.lang.InterruptedException; +import org.apache.beehive.controls.api.bean.ControlImplementation; +import org.apache.beehive.controls.api.bean.Threading; +import org.apache.beehive.controls.api.bean.ThreadingPolicy; + +/** + * An impl of NestedHelloControl. + * By default, control impl is single thread. + * + * Test objective: doRead and doSet on same instance should + * inter-lock each other when invoked by different thread. + * + */ [EMAIL PROTECTED] [EMAIL PROTECTED](ThreadingPolicy.SINGLE_THREADED) +public class NestedSingleThreadControlImpl implements NestedSingleThreadControl +{ + public final static int LOOPS=50; + private long count=0; + + public long doRead() + { + return count; + } + + public void doSet() + { + for(int i=0;i<LOOPS;i++){ + try{Thread.sleep(1);} + catch(InterruptedException e){} + Date now=new Date(); + count=now.getTime(); + } + } +} Added: incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite.java?view=auto&rev=126311 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite.java Mon Jan 24 12:45:50 2005 @@ -0,0 +1,86 @@ +package org.apache.beehive.controls.test.driver.threading; + + +import java.lang.Thread; +import java.lang.InterruptedException; +import org.apache.beehive.controls.test.controls.threading.nested.CompositeMultiThreadControl; +import org.apache.beehive.controls.test.controls.threading.nested.CompositeMultiThreadControlBean; + +import org.apache.beehive.test.tools.milton.common.Report; + +public class DriveComposite extends Thread +{ + public final static String ACTION_READ="read"; + public final static String ACTION_SET="set"; + public final static int LOOPS=30; + private CompositeMultiThreadControlBean myControl; + private String action=""; + private long[][] records=new long[LOOPS][2]; + + + public DriveComposite(String name){ + super(name); + } + + public void setControl(CompositeMultiThreadControlBean bean){ + myControl=bean; + } + + public void setMethod(String str){ + action=str; + } + + public void run() { + //System.out.println("DONE! " + getName()); + long ints[]=new long[2]; + if(action.equals(ACTION_READ)){ + for(int i=0;i<LOOPS;i++){ + ints=myControl.doRead(); + try{Thread.sleep(1);} + catch(InterruptedException e){} + records[i][0]=ints[0]; + records[i][1]=ints[1]; + + } + } + else if(action.equals(ACTION_SET)) + myControl.doSet(); + + } + + public Report analyseRecord(){ + + Report report=new Report(); + report.setStatus(Report.FAIL); + report.setMessage("Composite control is not multi-threaded."); + //Inspect multithreading of composite control + long composite_start=records[0][0]; + long composite_end=records[LOOPS-1][0]; + + for(int i=0;i<LOOPS;i++){ + //System.out.println(">>>>>>>> "+records[i][0]+"..."+records[i][1]+" <<<<<<<<"); + if ((records[i][0]>composite_start)&&(records[i][0]<composite_end)){ + report.setStatus(Report.PASS); + report.setMessage(""); + break; + } + } + + if (report.getStatus().equals(Report.PASS)){ + long nest_start=records[0][1]; + long nest_end=records[LOOPS-1][1]; + + for(int i=0;i<LOOPS;i++){ + + if ((records[i][0]>nest_start)&&(records[i][0]<nest_end)){ + report.setStatus(Report.FAIL); + report.setMessage("Nested control is not single-threaded"); + break; + } + + } + } + return report; + } + +} Added: incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/threading/CompositeTest.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/threading/CompositeTest.java?view=auto&rev=126311 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/threading/CompositeTest.java Mon Jan 24 12:45:50 2005 @@ -0,0 +1,58 @@ +package org.apache.beehive.controls.test.java.threading; + + + +import java.lang.Thread; +import java.lang.InterruptedException; +import java.beans.Beans; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.apache.beehive.controls.api.bean.ControlBean; +import org.apache.beehive.controls.test.controls.threading.nested.CompositeMultiThreadControl; +import org.apache.beehive.controls.test.controls.threading.nested.CompositeMultiThreadControlBean; +import org.apache.beehive.controls.test.driver.threading.DriveComposite; + +import org.apache.beehive.test.tools.milton.common.Report; +import org.apache.beehive.test.tools.mantis.annotations.tch.Freq; +import org.apache.beehive.test.tools.mantis.annotations.tch.Status; + + + + [EMAIL PROTECTED]("detailed") +public class CompositeTest extends TestCase +{ + public CompositeTest( String s ) { super( s ); } + + public void setUp() { } + + @Freq("detailed") + public void testDefaultThread() throws Exception + { + + CompositeMultiThreadControlBean sBean=(CompositeMultiThreadControlBean)java.beans.Beans.instantiate( + Thread.currentThread().getContextClassLoader() , + "org.apache.beehive.controls.test.controls.threading.nested.CompositeMultiThreadControlBean"); + + DriveComposite driver1=new DriveComposite("driver_thread_set"); + driver1.setControl(sBean); + driver1.setMethod(DriveComposite.ACTION_SET); + DriveComposite driver2=new DriveComposite("driver_thread_read"); + driver2.setControl(sBean); + driver2.setMethod(DriveComposite.ACTION_READ); + + driver1.start(); + driver2.start(); + + try{Thread.sleep(200);} + catch(InterruptedException e){} + + //Report report1=driver1.analyseRecord(); + Report report2=driver2.analyseRecord(); + + Assert.assertEquals(Report.PASS, report2.getStatus()); + } + +}
