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

Reply via email to