lucene-java-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rm...@apache.org
Subject svn commit: r928069 - in /lucene/dev/trunk: lucene/ lucene/backwards/src/test/org/apache/lucene/util/ lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/ lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/quality/ lucene/src/test/...
Date Fri, 26 Mar 2010 21:55:58 GMT
Author: rmuir
Date: Fri Mar 26 21:55:57 2010
New Revision: 928069

URL: http://svn.apache.org/viewvc?rev=928069&view=rev
Log:
LUCENE-1709: Parallelize Tests

Added:
    lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java
      - copied, changed from r927697, lucene/dev/trunk/solr/src/test/org/apache/solr/SolrJUnitResultFormatter.java
    lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java
      - copied, changed from r927697, lucene/dev/trunk/solr/src/test/org/apache/solr/SolrJUnitResultFormatter.java
Removed:
    lucene/dev/trunk/solr/src/test/org/apache/solr/SolrJUnitResultFormatter.java
Modified:
    lucene/dev/trunk/lucene/build.xml
    lucene/dev/trunk/lucene/common-build.xml
    lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/BenchmarkTestCase.java
    lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/quality/TestQualityRun.java
    lucene/dev/trunk/solr/build.xml
    lucene/dev/trunk/solr/common-build.xml

Copied: lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java
(from r927697, lucene/dev/trunk/solr/src/test/org/apache/solr/SolrJUnitResultFormatter.java)
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java?p2=lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java&p1=lucene/dev/trunk/solr/src/test/org/apache/solr/SolrJUnitResultFormatter.java&r1=927697&r2=928069&rev=928069&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/SolrJUnitResultFormatter.java (original)
+++ lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java
Fri Mar 26 21:55:57 2010
@@ -16,8 +16,9 @@
  *
  */
 
-package org.apache.solr;
+package org.apache.lucene.util;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.text.NumberFormat;
@@ -25,6 +26,8 @@ import java.text.NumberFormat;
 import junit.framework.AssertionFailedError;
 import junit.framework.Test;
 
+import org.apache.lucene.store.LockReleaseFailedException;
+import org.apache.lucene.store.NativeFSLockFactory;
 import org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter;
 import org.apache.tools.ant.taskdefs.optional.junit.JUnitTest;
 import org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner;
@@ -37,9 +40,11 @@ import org.apache.tools.ant.util.StringU
  * At this point, the output is written at once in synchronized fashion.
  * This way tests can run in parallel without interleaving output.
  */
-public class SolrJUnitResultFormatter implements JUnitResultFormatter {
+public class LuceneJUnitResultFormatter implements JUnitResultFormatter {
   private static final double ONE_SECOND = 1000.0;
   
+  private NativeFSLockFactory lockFactory;
+  
   /** Where to write the log to. */
   private OutputStream out;
   
@@ -55,8 +60,21 @@ public class SolrJUnitResultFormatter im
   /** Buffer output until the end of the test */
   private StringBuilder sb;
 
+  private org.apache.lucene.store.Lock lock;
+
   /** Constructor for SolrJUnitResultFormatter. */
-  public SolrJUnitResultFormatter() {
+  public LuceneJUnitResultFormatter() {
+    File lockDir = new File(System.getProperty("java.io.tmpdir"), "lucene_junit_lock");
+    lockDir.mkdirs();
+    if(!lockDir.exists()) {
+      throw new RuntimeException("Could not make Lock directory:" + lockDir);
+    }
+    try {
+      lockFactory = new NativeFSLockFactory(lockDir);
+      lock = lockFactory.makeLock("junit_lock");
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
     sb = new StringBuilder();
   }
   
@@ -135,8 +153,17 @@ public class SolrJUnitResultFormatter im
     
     if (out != null) {
       try {
-        out.write(sb.toString().getBytes());
-        out.flush();
+        lock.obtain(5000);
+        try {
+          out.write(sb.toString().getBytes());
+          out.flush();
+        } finally {
+          try {
+            lock.release();
+          } catch(LockReleaseFailedException e) {
+            // well lets pretend its released anyway
+          }
+        }
       } catch (IOException e) {
         throw new RuntimeException("unable to write results", e);
       } finally {
@@ -227,3 +254,4 @@ public class SolrJUnitResultFormatter im
     sb.append(StringUtils.LINE_SEP);
   }
 }
+

Modified: lucene/dev/trunk/lucene/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/build.xml?rev=928069&r1=928068&r2=928069&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/build.xml (original)
+++ lucene/dev/trunk/lucene/build.xml Fri Mar 26 21:55:57 2010
@@ -102,7 +102,7 @@
 The source distribution does not contain sources of the previous Lucene Java version.</echo>
   </target>
 
-  <target name="test-backwards" depends="compile-core, jar-core, test-backwards-message"
+  <target name="compile-backwards" depends="compile-core, jar-core, test-backwards-message"
   	description="Runs tests of a previous Lucene version." if="backwards.available">
     <sequential>
       <mkdir dir="${build.dir.backwards}"/>	  
@@ -120,14 +120,64 @@ The source distribution does not contain
       <compile-test-macro srcdir="${backwards.dir}/src/test" destdir="${build.dir.backwards}/classes/test"
                   test.classpath="backwards.test.compile.classpath" javac.source="${javac.source.backwards}"
javac.target="${javac.target.backwards}"/>
       
-      <!-- run branch tests against trunk jar -->
-      <test-macro dataDir="${backwards.dir}/src/test" 
-              tempDir="${build.dir.backwards}/test"
-              junit.classpath="backwards.junit.classpath"
-              junit.output.dir="${junit.output.dir.backwards}" />
+
     </sequential>
   </target>	
-	
+
+  <target name="test-backwards" depends="compile-backwards, junit-backwards-mkdir, junit-backwards-sequential,
junit-backwards-parallel"/>
+
+  <target name="junit-backwards-mkdir">
+	<mkdir dir="${build.dir.backwards}/test"/>
+  </target>
+
+  <macrodef name="backwards-test-macro">
+  	<attribute name="pattern" default=""/>
+  	<sequential>
+  	  <!-- run branch tests against trunk jar -->
+      <test-macro 
+    	dataDir="${backwards.dir}/src/test" 
+    	tempDir="${build.dir.backwards}/test" 
+    	junit.classpath="backwards.junit.classpath" 
+    	junit.output.dir="${junit.output.dir.backwards}" 
+        pattern="@{pattern}" />
+  	</sequential>
+  </macrodef>
+
+  <target name="junit-backwards-sequential" if="runsequential">
+    <backwards-test-macro/>
+  </target>
+
+  <target name="junit-backwards-parallel" unless="runsequential">
+    <parallel threadsPerProcessor="2">
+     <backwards-test-macro pattern="A"/>
+     <backwards-test-macro pattern="B"/>
+     <backwards-test-macro pattern="C"/>
+     <backwards-test-macro pattern="D"/>
+     <backwards-test-macro pattern="E"/>
+     <backwards-test-macro pattern="F"/>
+     <backwards-test-macro pattern="G"/>
+     <backwards-test-macro pattern="H"/>
+     <backwards-test-macro pattern="I"/>
+     <backwards-test-macro pattern="J"/>
+     <backwards-test-macro pattern="K"/>
+     <backwards-test-macro pattern="L"/>
+     <backwards-test-macro pattern="M"/>
+     <backwards-test-macro pattern="N"/>
+     <backwards-test-macro pattern="O"/>
+     <backwards-test-macro pattern="P"/>
+     <backwards-test-macro pattern="Q"/>
+     <backwards-test-macro pattern="R"/>
+     <backwards-test-macro pattern="S"/>
+     <backwards-test-macro pattern="T"/>
+     <backwards-test-macro pattern="U"/>
+     <backwards-test-macro pattern="V"/>
+     <backwards-test-macro pattern="W"/>
+     <backwards-test-macro pattern="X"/>
+     <backwards-test-macro pattern="Y"/>
+     <backwards-test-macro pattern="Z"/>
+    </parallel>
+  </target>
+
   <!-- ================================================================== -->
   <!-- J A R                                                              -->
   <!-- ================================================================== -->
@@ -684,24 +734,7 @@ The source distribution does not contain
   </target>
 
   <target name="test-contrib" depends="build-contrib">
-    <!-- Don't fail on error, instead check for flag file so we run
-         all the tests possible and can "ant generate-test-reports"
-         for all of them.
-
-         Because of this, we depend on "build-contrib" even though the
-         Individual contrib "test" targets probably have the
-         neccessary dependencies.  If they fail to compile, we won't
-         know about it.
-     -->
-    <contrib-crawl target="test" failonerror="false"/>
-    <available property="contribs.failed" file="junitfailed.flag">
-      <filepath>
-        <dirset dir="${build.dir}/contrib/">
-          <include name="**/test/" />
-        </dirset>
-      </filepath>
-    </available>
-    <fail if="contribs.failed">Contrib tests failed!</fail>
+    <contrib-crawl target="test" failonerror="true"/>
   </target>
 
   <!-- Macro for building checksum files -->

Modified: lucene/dev/trunk/lucene/common-build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/common-build.xml?rev=928069&r1=928068&r2=928069&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/common-build.xml (original)
+++ lucene/dev/trunk/lucene/common-build.xml Fri Mar 26 21:55:57 2010
@@ -99,8 +99,14 @@
   <property name="junit.output.dir.backwards" location="${build.dir.backwards}/test"/>
   <property name="junit.reports" location="${build.dir}/test/reports"/>
   <property name="junit.reports.backwards" location="${build.dir.backwards}/test/reports"/>
-  <property name="junit.includes" value="**/Test*.java,**/*Test.java"/>
   <property name="junit.excludes" value=""/>
+  <property name="junit.details.formatter" value="org.apache.lucene.util.LuceneJUnitResultFormatter"/>
+  <condition property="runsequential">
+    <or>
+      <isset property="testcase"/>
+      <isset property="sequential-tests"/>
+    </or>
+  </condition>
 
   <property name="manifest.file" location="${common.dir}/build/MANIFEST.MF"/>
 
@@ -387,9 +393,9 @@
   <macrodef name="test-macro" description="Executes junit tests.">
   	<attribute name="junit.output.dir" default="${junit.output.dir}"/>
   	<attribute name="junit.classpath" default="junit.classpath"/>
-  	<attribute name="dataDir"/>
-  	<attribute name="tempDir"/>
-  	<element name="contrib-settings" optional="yes"/>
+  	<attribute name="dataDir" default="src/test"/>
+  	<attribute name="tempDir" default="${build.dir}/test"/>
+  	<attribute name="pattern" default=""/>
 
     <sequential>
 	    <condition property="runall">
@@ -399,7 +405,10 @@
 	      	<isset property="testpackageroot" />
 	      </or></not>
 	    </condition>
-	  	<mkdir dir="@{junit.output.dir}"/>
+	    <!-- <mkdir dir="@{tempDir}/@{pattern}"/> 
+	    This is very loud and obnoxious. abuse touch instead for a "quiet" mkdir
+	    -->
+    	<touch file="@{tempDir}/@{pattern}/quiet.ant" verbose="false" mkdirs="true"/>
 	    <junit printsummary="off" haltonfailure="no" maxmemory="512M"
 	      errorProperty="tests.failed" failureProperty="tests.failed" forkmode="perBatch" dir=".">
 	      <classpath refid="@{junit.classpath}"/>
@@ -413,56 +422,85 @@
 	      <sysproperty key="tests.verbose" value="${tests.verbose}"/>
 	
 	      <!-- TODO: create propertyset for test properties, so each project can have its
own set -->
-	      <sysproperty key="tempDir" file="@{tempDir}"/>
-	      <sysproperty key="java.io.tmpdir" file="@{tempDir}"/>
+	      <sysproperty key="tempDir" file="@{tempDir}/@{pattern}"/>
+
 	      <sysproperty key="lucene.version" value="${dev.version}"/>
 	
-		  <contrib-settings />
+          <!-- set as a system property so contrib tests can have a fixed root
+               to reference file paths from, and "ant test" can work from
+               anywhere.
+          -->
+          <sysproperty key="lucene.common.dir" file="${common.dir}" />
+
+          <!-- contrib/ant IndexTaskTest needs these two system properties -->
+          <sysproperty key="docs.dir" file="src/test"/>
+          <sysproperty key="index.dir" file="${build.dir}/test/index"/>
+	    		
+          <!-- contrib/benchmark uses this system property to locate docs data and defined
tasks -->
+          <sysproperty key="tasks.dir" file="${build.dir}/classes/java/org/apache/lucene/benchmark/byTask/tasks"/>
+          <sysproperty key="benchmark.work.dir" file="@{tempDir}/@{pattern}"/>
 	    	
 	      <formatter type="xml"/>
-	      <formatter type="brief" usefile="false"/>
+	      <formatter classname="${junit.details.formatter}" usefile="false"/>
 	      <batchtest fork="yes" todir="@{junit.output.dir}" if="runall">
-	        <fileset dir="@{dataDir}" includes="${junit.includes}" excludes="${junit.excludes}"/>
+	        <fileset dir="@{dataDir}" includes="**/Test@{pattern}*.java,**/@{pattern}*Test.java"
excludes="${junit.excludes}"/>
 	      </batchtest>
 	      <batchtest fork="yes" todir="@{junit.output.dir}" if="testpackage">
-	        <fileset dir="@{dataDir}" includes="**/${testpackage}/**/Test*.java,**/${testpackage}/**/*Test.java"
excludes="${junit.excludes}"/>
+	        <fileset dir="@{dataDir}" includes="**/${testpackage}/**/Test@{pattern}*.java,**/${testpackage}/**/@{pattern}*Test.java"
excludes="${junit.excludes}"/>
 	      </batchtest>
 	      <batchtest fork="yes" todir="@{junit.output.dir}" if="testpackageroot">
-	        <fileset dir="@{dataDir}" includes="**/${testpackageroot}/Test*.java,**/${testpackageroot}/*Test.java"
excludes="${junit.excludes}"/>
+	        <fileset dir="@{dataDir}" includes="**/${testpackageroot}/Test@{pattern}*.java,**/${testpackageroot}/@{pattern}*Test.java"
excludes="${junit.excludes}"/>
 	      </batchtest>
 	      <batchtest fork="yes" todir="@{junit.output.dir}" if="testcase">
 	        <fileset dir="@{dataDir}" includes="**/${testcase}.java"/>
 	      </batchtest>
 	    </junit>
-	    <!-- create this file, then if we don't fail, delete it -->
-	    <!-- this meme makes it easy to tell if contribs have failed later -->
-	    <echo file="@{junit.output.dir}/junitfailed.flag">MAYBE</echo>
 	    <fail if="tests.failed">Tests failed!</fail>
-	    <!-- life would be easier if echo had an 'if' attribute like fail -->
-	    <delete file="@{junit.output.dir}/junitfailed.flag" />
   	</sequential>
   </macrodef>
 	
-  <target name="test" depends="compile-test" description="Runs unit tests">
-    <test-macro dataDir="src/test" tempDir="${build.dir}/test">
-    	<contrib-settings>
-	      <!-- set as a system property so contrib tests can have a fixed root
-	           to reference file paths from, and "ant test" can work from
-	           anywhere.
-	       -->
-	      <sysproperty key="lucene.common.dir" file="${common.dir}" />
-	      
-	      <!-- contrib/ant IndexTaskTest needs these two system properties -->
-	      <sysproperty key="docs.dir" file="src/test"/>
-	      <sysproperty key="index.dir" file="${build.dir}/test/index"/>
-	
-	      <!-- contrib/benchmark uses this system property to locate docs data and defined
tasks -->
-	      <sysproperty key="tasks.dir" file="${build.dir}/classes/java/org/apache/lucene/benchmark/byTask/tasks"/>
-	      <sysproperty key="benchmark.work.dir" file="${common.dir}/contrib/benchmark/work"/>
-	  </contrib-settings>
-    </test-macro>
+  <target name="test" depends="compile-test,junit-mkdir,junit-sequential,junit-parallel"
description="Runs unit tests"/>
+
+  <target name="junit-mkdir">
+  	<mkdir dir="${junit.output.dir}"/>
   </target>
 
+  <target name="junit-sequential" if="runsequential">
+    <test-macro/>
+  </target>
+
+  <target name="junit-parallel" unless="runsequential">
+    <parallel threadsPerProcessor="2">
+     <test-macro pattern="A"/>
+     <test-macro pattern="B"/>
+     <test-macro pattern="C"/>
+     <test-macro pattern="D"/>
+     <test-macro pattern="E"/>
+     <test-macro pattern="F"/>
+     <test-macro pattern="G"/>
+     <test-macro pattern="H"/>
+     <test-macro pattern="I"/>
+     <test-macro pattern="J"/>
+     <test-macro pattern="K"/>
+     <test-macro pattern="L"/>
+     <test-macro pattern="M"/>
+     <test-macro pattern="N"/>
+     <test-macro pattern="O"/>
+     <test-macro pattern="P"/>
+     <test-macro pattern="Q"/>
+     <test-macro pattern="R"/>
+     <test-macro pattern="S"/>
+     <test-macro pattern="T"/>
+     <test-macro pattern="U"/>
+     <test-macro pattern="V"/>
+     <test-macro pattern="W"/>
+     <test-macro pattern="X"/>
+     <test-macro pattern="Y"/>
+     <test-macro pattern="Z"/>
+    </parallel>
+  </target>
+
+
     <!--
      If you want clover test code coverage, run this before the tests.  You need clover.jar
and the license in your ANT classspath and you need to specify -Drun.clover=true on the command
line.
 

Modified: lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/BenchmarkTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/BenchmarkTestCase.java?rev=928069&r1=928068&r2=928069&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/BenchmarkTestCase.java
(original)
+++ lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/BenchmarkTestCase.java
Fri Mar 26 21:55:57 2010
@@ -19,10 +19,10 @@ package org.apache.lucene.benchmark;
 
 import java.io.File;
 
-import junit.framework.TestCase;
+import org.apache.lucene.util.LuceneTestCase;
 
 /** Base class for all Benchmark unit tests. */
-public class BenchmarkTestCase extends TestCase {
+public class BenchmarkTestCase extends LuceneTestCase {
 
   private static final File workDir;
 

Modified: lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/quality/TestQualityRun.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/quality/TestQualityRun.java?rev=928069&r1=928068&r2=928069&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/quality/TestQualityRun.java
(original)
+++ lucene/dev/trunk/lucene/contrib/benchmark/src/test/org/apache/lucene/benchmark/quality/TestQualityRun.java
Fri Mar 26 21:55:57 2010
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.PrintWriter;
 
+import org.apache.lucene.benchmark.BenchmarkTestCase;
 import org.apache.lucene.benchmark.byTask.TestPerfTasksLogic;
 import org.apache.lucene.benchmark.quality.Judge;
 import org.apache.lucene.benchmark.quality.QualityQuery;
@@ -44,44 +45,30 @@ import org.apache.lucene.util.LuceneTest
  * this test will not work correctly, as it does not dynamically
  * generate its test trec topics/qrels!
  */
-public class TestQualityRun extends LuceneTestCase {
+public class TestQualityRun extends BenchmarkTestCase {
   
-  public TestQualityRun(String name) {
-    super(name);
-  }
-
   public void testTrecQuality() throws Exception {
     // first create the partial reuters index
     createReutersIndex();
     
-    File workDir = new File(System.getProperty("benchmark.work.dir","work"));
-    assertTrue("Bad workDir: "+workDir, workDir.exists()&& workDir.isDirectory());
-
     int maxResults = 1000;
     String docNameField = "doctitle"; // orig docID is in the linedoc format title 
     
     PrintWriter logger = VERBOSE ? new PrintWriter(System.out,true) : null;
-
-    // <tests src dir> for topics/qrels files - src/test/org/apache/lucene/benchmark/quality
-    File srcTestDir = new File(new File(new File(new File(new File(
-      new File(new File(workDir.getAbsoluteFile().getParentFile(),
-        "src"),"test"),"org"),"apache"),"lucene"),"benchmark"),"quality");
-    
+   
     // prepare topics
-    File topicsFile = new File(srcTestDir, "trecTopics.txt");
-    assertTrue("Bad topicsFile: "+topicsFile, topicsFile.exists()&& topicsFile.isFile());
+    InputStream topics = getClass().getResourceAsStream("trecTopics.txt");
     TrecTopicsReader qReader = new TrecTopicsReader();
-    QualityQuery qqs[] = qReader.readQueries(new BufferedReader(new FileReader(topicsFile)));
+    QualityQuery qqs[] = qReader.readQueries(new BufferedReader(new InputStreamReader(topics,
"UTF-8")));
     
     // prepare judge
-    File qrelsFile = new File(srcTestDir, "trecQRels.txt");
-    assertTrue("Bad qrelsFile: "+qrelsFile, qrelsFile.exists()&& qrelsFile.isFile());
-    Judge judge = new TrecJudge(new BufferedReader(new FileReader(qrelsFile)));
+    InputStream qrels = getClass().getResourceAsStream("trecQRels.txt");
+    Judge judge = new TrecJudge(new BufferedReader(new InputStreamReader(qrels, "UTF-8")));
     
     // validate topics & judgments match each other
     judge.validateData(qqs, logger);
     
-    IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File(workDir,"index")),
true);
+    IndexSearcher searcher = new IndexSearcher(FSDirectory.open(new File(getWorkDir(),"index")),
true);
 
     QualityQueryParser qqParser = new SimpleQQParser("title","body");
     QualityBenchmark qrun = new QualityBenchmark(qqs, qqParser, searcher, docNameField);

Copied: lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java
(from r927697, lucene/dev/trunk/solr/src/test/org/apache/solr/SolrJUnitResultFormatter.java)
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java?p2=lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java&p1=lucene/dev/trunk/solr/src/test/org/apache/solr/SolrJUnitResultFormatter.java&r1=927697&r2=928069&rev=928069&view=diff
==============================================================================
--- lucene/dev/trunk/solr/src/test/org/apache/solr/SolrJUnitResultFormatter.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/LuceneJUnitResultFormatter.java
Fri Mar 26 21:55:57 2010
@@ -16,8 +16,9 @@
  *
  */
 
-package org.apache.solr;
+package org.apache.lucene.util;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.text.NumberFormat;
@@ -25,6 +26,8 @@ import java.text.NumberFormat;
 import junit.framework.AssertionFailedError;
 import junit.framework.Test;
 
+import org.apache.lucene.store.LockReleaseFailedException;
+import org.apache.lucene.store.NativeFSLockFactory;
 import org.apache.tools.ant.taskdefs.optional.junit.JUnitResultFormatter;
 import org.apache.tools.ant.taskdefs.optional.junit.JUnitTest;
 import org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner;
@@ -37,9 +40,11 @@ import org.apache.tools.ant.util.StringU
  * At this point, the output is written at once in synchronized fashion.
  * This way tests can run in parallel without interleaving output.
  */
-public class SolrJUnitResultFormatter implements JUnitResultFormatter {
+public class LuceneJUnitResultFormatter implements JUnitResultFormatter {
   private static final double ONE_SECOND = 1000.0;
   
+  private NativeFSLockFactory lockFactory;
+  
   /** Where to write the log to. */
   private OutputStream out;
   
@@ -55,8 +60,21 @@ public class SolrJUnitResultFormatter im
   /** Buffer output until the end of the test */
   private StringBuilder sb;
 
+  private org.apache.lucene.store.Lock lock;
+
   /** Constructor for SolrJUnitResultFormatter. */
-  public SolrJUnitResultFormatter() {
+  public LuceneJUnitResultFormatter() {
+    File lockDir = new File(System.getProperty("java.io.tmpdir"), "lucene_junit_lock");
+    lockDir.mkdirs();
+    if(!lockDir.exists()) {
+      throw new RuntimeException("Could not make Lock directory:" + lockDir);
+    }
+    try {
+      lockFactory = new NativeFSLockFactory(lockDir);
+      lock = lockFactory.makeLock("junit_lock");
+    } catch (IOException e) {
+      throw new RuntimeException(e);
+    }
     sb = new StringBuilder();
   }
   
@@ -135,8 +153,17 @@ public class SolrJUnitResultFormatter im
     
     if (out != null) {
       try {
-        out.write(sb.toString().getBytes());
-        out.flush();
+        lock.obtain(5000);
+        try {
+          out.write(sb.toString().getBytes());
+          out.flush();
+        } finally {
+          try {
+            lock.release();
+          } catch(LockReleaseFailedException e) {
+            // well lets pretend its released anyway
+          }
+        }
       } catch (IOException e) {
         throw new RuntimeException("unable to write results", e);
       } finally {
@@ -227,3 +254,4 @@ public class SolrJUnitResultFormatter im
     sb.append(StringUtils.LINE_SEP);
   }
 }
+

Modified: lucene/dev/trunk/solr/build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/build.xml?rev=928069&r1=928068&r2=928069&view=diff
==============================================================================
--- lucene/dev/trunk/solr/build.xml (original)
+++ lucene/dev/trunk/solr/build.xml Fri Mar 26 21:55:57 2010
@@ -349,6 +349,7 @@
     <pathelement location="${dest}/tests"/>
     <!-- include the solrj classpath and jetty files included in example -->
     <path refid="compile.classpath.solrj" />
+    <pathelement location="${common-solr.dir}/../lucene/build/classes/test" />  <!--
include some lucene test code -->
     <pathelement path="${java.class.path}"/>
   </path>
 

Modified: lucene/dev/trunk/solr/common-build.xml
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/common-build.xml?rev=928069&r1=928068&r2=928069&view=diff
==============================================================================
--- lucene/dev/trunk/solr/common-build.xml (original)
+++ lucene/dev/trunk/solr/common-build.xml Fri Mar 26 21:55:57 2010
@@ -103,7 +103,7 @@
   <property name="junit.output.dir" location="${common-solr.dir}/${dest}/test-results"/>
   <property name="junit.reports" location="${common-solr.dir}/${dest}/test-results/reports"/>
   <property name="junit.formatter" value="plain"/>
-  <property name="junit.details.formatter" value="org.apache.solr.SolrJUnitResultFormatter"/>
+  <property name="junit.details.formatter" value="org.apache.lucene.util.LuceneJUnitResultFormatter"/>
 
   <!-- Maven properties -->
   <property name="maven.build.dir" value="${basedir}/build/maven"/>



Mime
View raw message