Author: jsong Date: Mon Jan 24 15:51:06 2005 New Revision: 126329 URL: http://svn.apache.org/viewcvs?view=rev&rev=126329 Log: Add more tests on nested control threading.
Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThread2Control.java incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThread2ControlImpl.jcs incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedMultiThreadControl.java incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedMultiThreadControlImpl.jcs incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite2.java Modified: 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/CompositeMultiThread2Control.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThread2Control.java?view=auto&rev=126329 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThread2Control.java Mon Jan 24 15:51:06 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 CompositeMultiThread2Control +{ + + public long[] doRead(); + public void doSet(); +} Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThread2ControlImpl.jcs Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThread2ControlImpl.jcs?view=auto&rev=126329 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/CompositeMultiThread2ControlImpl.jcs Mon Jan 24 15:51:06 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 CompositeMultiThread2Control. + * + * 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 CompositeMultiThread2ControlImpl implements CompositeMultiThread2Control +{ + public final static int LOOPS=30; + private long count=0; + + @Control + NestedMultiThreadControlBean 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/NestedMultiThreadControl.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedMultiThreadControl.java?view=auto&rev=126329 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedMultiThreadControl.java Mon Jan 24 15:51:06 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 NestedMultiThreadControl +{ + + public long doRead(); + public void doSet(); +} Added: incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedMultiThreadControlImpl.jcs Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedMultiThreadControlImpl.jcs?view=auto&rev=126329 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/threading/nested/NestedMultiThreadControlImpl.jcs Mon Jan 24 15:51:06 2005 @@ -0,0 +1,38 @@ +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 NestedMultiThreadControl. + * + * 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 NestedMultiThreadControlImpl implements NestedMultiThreadControl +{ + public final static int LOOPS=20; + 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(); + } + } +} Modified: 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=diff&rev=126329&p1=incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite.java&r1=126328&p2=incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite.java&r2=126329 ============================================================================== --- incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite.java (original) +++ incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite.java Mon Jan 24 15:51:06 2005 @@ -8,6 +8,10 @@ import org.apache.beehive.test.tools.milton.common.Report; + +/**Contains the logic to test a multi-threaded control containing + * a single-threaded control + */ public class DriveComposite extends Thread { public final static String ACTION_READ="read"; @@ -31,7 +35,7 @@ } 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++){ @@ -53,6 +57,7 @@ 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]; @@ -65,14 +70,14 @@ break; } } - + //Inspect single-threading of the nested control 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)){ + if ((records[i][1]>nest_start)&&(records[i][1]<nest_end)){ report.setStatus(Report.FAIL); report.setMessage("Nested control is not single-threaded"); break; Added: incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite2.java Url: http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite2.java?view=auto&rev=126329 ============================================================================== --- (empty file) +++ incubator/beehive/trunk/controls/test/src/drivers/org/apache/beehive/controls/test/driver/threading/DriveComposite2.java Mon Jan 24 15:51:06 2005 @@ -0,0 +1,92 @@ +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.CompositeMultiThread2Control; +import org.apache.beehive.controls.test.controls.threading.nested.CompositeMultiThread2ControlBean; + +import org.apache.beehive.test.tools.milton.common.Report; + + +/**Contains the logic to test a multi-threaded control containing + * a multi-threaded control + */ +public class DriveComposite2 extends Thread +{ + public final static String ACTION_READ="read"; + public final static String ACTION_SET="set"; + public final static int LOOPS=30; + private CompositeMultiThread2ControlBean myControl; + private String action=""; + private long[][] records=new long[LOOPS][2]; + + + public DriveComposite2(String name){ + super(name); + } + + public void setControl(CompositeMultiThread2ControlBean bean){ + myControl=bean; + } + + public void setMethod(String str){ + action=str; + } + + public void run() { + + 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; + } + } + + //Inspect multithreading of the nested control + if (report.getStatus().equals(Report.PASS)){ + report.setStatus(Report.FAIL); + report.setMessage("Nested control is single-threaded"); + long nest_start=records[0][1]; + long nest_end=records[LOOPS-1][1]; + + for(int i=0;i<LOOPS;i++){ + + if ((records[i][1]>nest_start)&&(records[i][1]<nest_end)){ + report.setStatus(Report.PASS); + report.setMessage(""); + break; + } + } + } + return report; + } +} Modified: 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=diff&rev=126329&p1=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/threading/CompositeTest.java&r1=126328&p2=incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/threading/CompositeTest.java&r2=126329 ============================================================================== --- incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/threading/CompositeTest.java (original) +++ incubator/beehive/trunk/controls/test/src/units/org/apache/beehive/controls/test/java/threading/CompositeTest.java Mon Jan 24 15:51:06 2005 @@ -12,7 +12,10 @@ 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.controls.threading.nested.CompositeMultiThread2Control; +import org.apache.beehive.controls.test.controls.threading.nested.CompositeMultiThread2ControlBean; import org.apache.beehive.controls.test.driver.threading.DriveComposite; +import org.apache.beehive.controls.test.driver.threading.DriveComposite2; import org.apache.beehive.test.tools.milton.common.Report; import org.apache.beehive.test.tools.mantis.annotations.tch.Freq; @@ -29,7 +32,7 @@ public void setUp() { } @Freq("detailed") - public void testDefaultThread() throws Exception + public void testNestedSingleThread() throws Exception { CompositeMultiThreadControlBean sBean=(CompositeMultiThreadControlBean)java.beans.Beans.instantiate( @@ -54,5 +57,33 @@ Assert.assertEquals(Report.PASS, report2.getStatus()); } + + @Freq("detailed") + public void testNestedMultiThread() throws Exception + { + + CompositeMultiThread2ControlBean sBean=(CompositeMultiThread2ControlBean)java.beans.Beans.instantiate( + Thread.currentThread().getContextClassLoader() , + "org.apache.beehive.controls.test.controls.threading.nested.CompositeMultiThread2ControlBean"); + + DriveComposite2 driver1=new DriveComposite2("driver_thread_set"); + driver1.setControl(sBean); + driver1.setMethod(DriveComposite.ACTION_SET); + DriveComposite2 driver2=new DriveComposite2("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()); + } + }
