[jboss-svn-commits] JBL Code SVN: r14592 - labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Sun Aug 26 08:55:37 EDT 2007


Author: tirelli
Date: 2007-08-26 08:55:36 -0400 (Sun, 26 Aug 2007)
New Revision: 14592

Added:
   labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/PackageBuilderThreadSafetyTest.java
Log:
JBRULES-1114: adding test case for compilation thread-safety

Added: labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/PackageBuilderThreadSafetyTest.java
===================================================================
--- labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/PackageBuilderThreadSafetyTest.java	                        (rev 0)
+++ labs/jbossrules/trunk/drools-compiler/src/test/java/org/drools/integrationtests/PackageBuilderThreadSafetyTest.java	2007-08-26 12:55:36 UTC (rev 14592)
@@ -0,0 +1,107 @@
+package org.drools.integrationtests;
+import java.util.ArrayList;
+import java.util.List;
+
+import junit.framework.TestCase;
+
+import org.drools.compiler.PackageBuilderConfiguration;
+import org.drools.lang.descr.FunctionDescr;
+import org.drools.lang.descr.ImportDescr;
+import org.drools.lang.descr.PackageDescr;
+
+public class PackageBuilderThreadSafetyTest extends TestCase {
+
+	private static final int _NUMBER_OF_THREADS = 100;
+	private static final int _SLEEP_TIME_MS = 100;
+    
+    protected void setUp() throws Exception {
+        super.setUp();
+    }
+    
+    public void testDummy() {
+    }
+	
+	public void FIXME_testThreadSafety() {
+		final List errors = new ArrayList();
+		final List exceptions= new ArrayList();
+    Thread[] threads = new Thread[_NUMBER_OF_THREADS];
+    for (int i = 0; i < _NUMBER_OF_THREADS; i++) {
+      final int ID = i;
+      Thread testThread = new Thread() {
+          public void run() {
+          	try {
+                this.setName( "Thread["+ID+"]" );
+	            PackageBuilderConfiguration packageBuilderConfig = new PackageBuilderConfiguration();
+                //((JavaDialectConfiguration) packageBuilderConfig.getDialectConfiguration( "java" )).setCompiler( JavaDialectConfiguration.JANINO );
+	            org.drools.compiler.PackageBuilder builder = null;
+	            try {
+	            	builder = new org.drools.compiler.PackageBuilder(packageBuilderConfig);
+	            } catch (Throwable t) {
+	            	t.printStackTrace();
+	            	throw new RuntimeException(t);
+	            }
+	            PackageDescr packageDescr = new PackageDescr("MyRulebase");
+	        		addImports(packageDescr);
+	        		addFunctions(packageDescr);
+	        		// added some arbitrary sleep statements to encourage 
+	        		// context switching and hope this provokes exceptions 
+	        		sleep(_SLEEP_TIME_MS);
+	        		builder.addPackage(packageDescr);
+	        		sleep(_SLEEP_TIME_MS);
+	         		builder.getPackage();
+	         		sleep(_SLEEP_TIME_MS);
+	         		if (builder.hasErrors()) {
+                        System.out.println("ERROR in thread: "+ID);
+	         			errors.add(builder.getErrors());
+	         		}
+          	} catch (Exception e) {
+          		e.printStackTrace();
+          		exceptions.add(e);
+          	}
+          }
+      };
+      threads[i] = testThread;
+      try {
+      	testThread.start();
+      } catch (Exception e) {
+      	assertTrue(false); 
+      }
+    }
+    for (int i = 0; i < _NUMBER_OF_THREADS; i++) {
+    	try {
+	      threads[i].join();
+      } catch (InterruptedException e) {
+      	threads[i].interrupt();
+      }
+    }
+    assertTrue("Exceptions during package compilation (number=" + exceptions.size() + ")" , exceptions.isEmpty());
+    assertTrue("PackageBuilderErrors during package compilation (number=" + errors.size() + ")", errors.isEmpty());
+	}
+	
+	private static void addImports(PackageDescr packageDescr) {
+		packageDescr.addImport(new ImportDescr("java.util.List"));
+		packageDescr.addImport(new ImportDescr("java.util.ArrayList"));
+		packageDescr.addImport(new ImportDescr("java.util.LinkedList"));
+		packageDescr.addImport(new ImportDescr("java.util.Set"));
+		packageDescr.addImport(new ImportDescr("java.util.HashSet"));
+		packageDescr.addImport(new ImportDescr("java.util.SortedSet"));
+		packageDescr.addImport(new ImportDescr("java.util.TreeSet"));
+	}
+	
+	private static void addFunctions(PackageDescr packageDescr) {
+		FunctionDescr functionDescr = new FunctionDescr("foo", "void");
+		functionDescr.addParameter("String", "arg1");
+		String body = 
+			"Set myHashSet = new HashSet();" +
+			"myHashSet.add(arg1);" + 
+			"List myArrayList = new ArrayList();" +
+			"myArrayList.add(arg1);" +
+		  "List myLinkedList = new LinkedList();" +
+		  "myLinkedList.add(arg1);" +
+		  "Set myTreeSet = new TreeSet();" +
+			"myTreeSet.add(arg1);";
+		functionDescr.setText(body);
+		packageDescr.addFunction(functionDescr);
+	}
+    
+}




More information about the jboss-svn-commits mailing list