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());
+    }
+
+}

Reply via email to