Author: degenaro
Date: Sun Nov  2 12:33:54 2014
New Revision: 1636121

URL: http://svn.apache.org/r1636121
Log:
UIMA-4069 Redesign of JD toward the main goal of classpath separation for 
container (system) code.

Provide JUnit tests for preemption events.

Modified:
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
    
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java?rev=1636121&r1=1636120&r2=1636121&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestDispatcher.java
 Sun Nov  2 12:33:54 2014
@@ -23,10 +23,13 @@ import static org.junit.Assert.fail;
 
 import java.io.File;
 import java.net.URL;
+import java.util.Random;
 
 import org.apache.uima.ducc.container.jd.JobDriverCommon;
 import org.apache.uima.ducc.container.jd.dispatch.Dispatcher;
 import org.apache.uima.ducc.container.jd.mh.iface.IOperatingInfo;
+import org.apache.uima.ducc.container.jd.mh.iface.IProcessInfo;
+import org.apache.uima.ducc.container.jd.mh.impl.ProcessInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfo;
 import org.apache.uima.ducc.container.jd.test.helper.ThreadInfoFactory;
 import org.apache.uima.ducc.container.net.iface.IMetaCas;
@@ -99,13 +102,15 @@ public class TestDispatcher {
                dispatcher.handleMetaCasTransation(trans);
                IMetaCas metaCas = trans.getMetaCas();
                if(metaCas != null) {
-                       String seqNo = ""+reqNo;
-                       debug("system key:"+metaCas.getSystemKey());
-                       assertTrue(metaCas.getSystemKey().equals(seqNo));
-                       asExpected("system key == "+seqNo);
-                       debug("user key:"+metaCas.getUserKey());
-                       assertTrue(metaCas.getUserKey().equals(seqNo));
-                       asExpected("user key == "+seqNo);
+                       if(reqNo > 0) {
+                               String seqNo = ""+reqNo;
+                               debug("system key:"+metaCas.getSystemKey());
+                               
assertTrue(metaCas.getSystemKey().equals(seqNo));
+                               asExpected("system key == "+seqNo);
+                               debug("user key:"+metaCas.getUserKey());
+                               assertTrue(metaCas.getUserKey().equals(seqNo));
+                               asExpected("user key == "+seqNo);
+                       }
                }
                else {
                        debug("metaCas is null");
@@ -142,6 +147,8 @@ public class TestDispatcher {
                        "/xstream-1.3.1.jar"
        };
        
+       // single node:pid:tid
+       
        @Test
        public void test_01() {
                try {
@@ -180,6 +187,8 @@ public class TestDispatcher {
                }
        }
        
+       // multiple node:pid:tid
+       
        @Test
        public void test_02() {
                try {
@@ -219,4 +228,66 @@ public class TestDispatcher {
                        fail("Exception");
                }
        }
+       
+       // multiple node:pid:tid with preemptions
+       
+       @Test
+       public void test_03() {
+               try {
+                       URL urlXml = this.getClass().getResource("/CR100.xml");
+                       File file = new File(urlXml.getFile());
+                       String crXml = file.getAbsolutePath();
+                       String crCfg = null;
+                       JobDriverCommon.setInstance(jarList260, crXml, crCfg);
+                       int size = 
JobDriverCommon.getInstance().getMap().size();
+                       debug("map size:"+size);
+                       Dispatcher dispatcher = new Dispatcher();
+                       ThreadInfoFactory tif = new ThreadInfoFactory(2,2,2);
+                       ThreadInfo ti = tif.getRandom();
+                       debug("random:"+ti.toKey());
+                       int casNo = -1;
+                       IMetaCas metaCasPrevious = null;
+                       IMetaCas metaCas = 
transGet(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
+                       assertTrue(metaCas != null);
+                       while(metaCas != null) {
+                               randomPreempt(dispatcher,ti);
+                               
transAck(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
+                               randomPreempt(dispatcher,ti);
+                               
transEnd(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
+                               randomPreempt(dispatcher,ti);
+                               casNo--;
+                               metaCasPrevious = metaCas;
+                               assertTrue(metaCasPrevious != null);
+                               ti = tif.getRandom();
+                               debug("random:"+ti.toKey());
+                               metaCas = 
transGet(dispatcher,ti.getNode(),ti.getPid(),ti.getTid(),casNo);
+                       }
+                       
assertTrue(metaCasPrevious.getSystemKey().equals("100"));
+                       asExpected("CASes processed count == 100");
+                       IOperatingInfo oi = dispatcher.handleGetOperatingInfo();
+                       assertTrue(oi.getWorkItemCrFetches() == 100);
+                       asExpected("CASes fetched count == 100");
+                       assertTrue(oi.getWorkItemPreemptions() == 
expectedPremptionsTest03);
+                       asExpected("CASes preempted count == 
"+expectedPremptionsTest03);
+               }
+               catch(Exception e) {
+                       e.printStackTrace();
+                       fail("Exception");
+               }
+       }
+       
+       private long seedTest03 = 1;
+       private Random randomTest03 = new Random(seedTest03);
+       private long pctTest03 = 15;
+       
+       private long expectedPremptionsTest03 = 52;
+       
+       private void randomPreempt(Dispatcher dispatcher, ThreadInfo ti) {
+               int n = randomTest03.nextInt(100);
+               if(n < pctTest03) {
+                       IProcessInfo processInfo = new 
ProcessInfo(ti.getNode(),ti.getPid());
+                       dispatcher.handlePreemptProcess(processInfo);
+               }
+               
+       }
 }

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java?rev=1636121&r1=1636120&r2=1636121&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestSuite.java
 Sun Nov  2 12:33:54 2014
@@ -24,11 +24,13 @@ import static org.junit.Assert.fail;
 import java.io.File;
 import java.net.URL;
 
+import org.apache.uima.ducc.container.jd.CasManagerStats.RetryReason;
 import org.apache.uima.ducc.container.jd.JobDriverCasManager;
 import org.apache.uima.ducc.container.jd.JobDriverException;
 import org.apache.uima.ducc.container.jd.classload.JobDriverCollectionReader;
 import org.apache.uima.ducc.container.jd.dispatch.RemoteWorkerIdentity;
 import org.apache.uima.ducc.container.jd.mh.impl.OperatingInfo;
+import org.apache.uima.ducc.container.net.iface.IMetaCas;
 import org.apache.uima.ducc.container.net.impl.MetaCas;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -348,11 +350,11 @@ public class TestSuite {
                        JobDriverCasManager jdcm = new 
JobDriverCasManager(jarList, crXml, crCfg);
                        int total = jdcm.getCasManagerStats().getCrTotal();
                        assertTrue(total == 100);
-                       MetaCas metaCas = jdcm.getMetaCas();
+                       IMetaCas metaCas = jdcm.getMetaCas();
                        int retrys = 3;
                        while(metaCas != null) {
                                
if(jdcm.getCasManagerStats().getRetryQueuePuts() < retrys) {
-                                       jdcm.putMetaCas(metaCas);
+                                       jdcm.putMetaCas(metaCas, 
RetryReason.ProcessPreempt);
                                }
                                metaCas = jdcm.getMetaCas();
                        }

Modified: 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java?rev=1636121&r1=1636120&r2=1636121&view=diff
==============================================================================
--- 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java
 (original)
+++ 
uima/sandbox/uima-ducc/trunk/uima-ducc-container/src/test/java/org/apache/uima/ducc/container/jd/test/TestWiFsm.java
 Sun Nov  2 12:33:54 2014
@@ -225,4 +225,64 @@ public class TestWiFsm {
                        fail("Exception");
                }
        }
+       
+       
+       @Test
+       public void test_06() {
+               try {
+                       WiFsm wiFsm = new WiFsm();
+                       Object actionData = null;
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+                       asExpected("state == "+WiFsm.Start.getName());
+                       wiFsm.transition(WiFsm.Process_Preempt, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+                       //
+                       wiFsm.transition(WiFsm.Get_Request, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Get_Pending.getName()));
+                       wiFsm.transition(WiFsm.Process_Preempt, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+                       //
+                       wiFsm.transition(WiFsm.Get_Request, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Get_Pending.getName()));
+                       asExpected("state == "+WiFsm.Get_Pending.getName());
+                       wiFsm.transition(WiFsm.CAS_Available, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Send.getName()));
+                       asExpected("state == "+WiFsm.CAS_Send.getName());
+                       wiFsm.transition(WiFsm.Process_Preempt, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+                       //
+                       wiFsm.transition(WiFsm.Get_Request, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Get_Pending.getName()));
+                       asExpected("state == "+WiFsm.Get_Pending.getName());
+                       wiFsm.transition(WiFsm.CAS_Available, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Send.getName()));
+                       asExpected("state == "+WiFsm.CAS_Send.getName());
+                       wiFsm.transition(WiFsm.Ack_Request, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Active.getName()));
+                       asExpected("state == "+WiFsm.CAS_Active.getName());
+                       wiFsm.transition(WiFsm.Process_Preempt, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+                       //
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+                       asExpected("state == "+WiFsm.Start.getName());
+                       wiFsm.transition(WiFsm.Get_Request, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Get_Pending.getName()));
+                       asExpected("state == "+WiFsm.Get_Pending.getName());
+                       wiFsm.transition(WiFsm.CAS_Available, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Send.getName()));
+                       asExpected("state == "+WiFsm.CAS_Send.getName());
+                       wiFsm.transition(WiFsm.Ack_Request, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.CAS_Active.getName()));
+                       asExpected("state == "+WiFsm.CAS_Active.getName());
+                       wiFsm.transition(WiFsm.End_Request, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+                       asExpected("state == "+WiFsm.Start.getName());
+                       wiFsm.transition(WiFsm.Process_Preempt, actionData);
+                       
assertTrue(wiFsm.getStateCurrent().getName().equals(WiFsm.Start.getName()));
+               }
+               catch(Exception e) {
+                       e.printStackTrace();
+                       fail("Exception");
+               }
+       }
 }


Reply via email to