lucene-java-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From rm...@apache.org
Subject svn commit: r932795 - in /lucene/dev/trunk/lucene: contrib/remote/src/test/org/apache/lucene/search/ src/test/org/apache/lucene/util/
Date Sat, 10 Apr 2010 21:44:06 GMT
Author: rmuir
Date: Sat Apr 10 21:44:06 2010
New Revision: 932795

URL: http://svn.apache.org/viewvc?rev=932795&view=rev
Log:
LUCENE-2390: fix random remote test failures and refactor tests

Added:
    lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/RemoteTestCaseJ4.java
  (with props)
Modified:
    lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteCachingWrapperFilter.java
    lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSearchable.java
    lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSort.java
    lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java

Added: lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/RemoteTestCaseJ4.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/RemoteTestCaseJ4.java?rev=932795&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/RemoteTestCaseJ4.java
(added)
+++ lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/RemoteTestCaseJ4.java
Sat Apr 10 21:44:06 2010
@@ -0,0 +1,79 @@
+package org.apache.lucene.search;
+
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.ServerSocket;
+import java.net.Socket;
+import java.rmi.Naming;
+import java.rmi.NotBoundException;
+import java.rmi.RemoteException;
+import java.rmi.registry.LocateRegistry;
+import java.rmi.server.RMIClientSocketFactory;
+import java.rmi.server.RMIServerSocketFactory;
+
+import org.apache.lucene.util.LuceneTestCaseJ4;
+import org.junit.AfterClass;
+
+/**
+ * Base class for remote tests.
+ * <p>
+ * Call {@link #startServer(Searchable)} in a {@link #BeforeClass} annotated method
+ * to start the server.
+ * Call {@link #lookupRemote} to get a RemoteSearchable.
+ */
+public abstract class RemoteTestCaseJ4 extends LuceneTestCaseJ4 {
+  private static int port;
+
+  public static void startServer(Searchable searchable) throws Exception {
+    // publish it
+    // use our own factories for testing, so we can bind to an ephemeral port.
+    RMIClientSocketFactory clientFactory = new RMIClientSocketFactory() {
+      public Socket createSocket(String host, int port) throws IOException {
+        return new Socket(host, port);
+      }};
+
+    class TestRMIServerSocketFactory implements RMIServerSocketFactory {
+      ServerSocket socket;
+      public ServerSocket createServerSocket(int port) throws IOException {
+        return (socket = new ServerSocket(port));
+      }
+    };
+    TestRMIServerSocketFactory serverFactory = new TestRMIServerSocketFactory();
+    
+    LocateRegistry.createRegistry(0, clientFactory, serverFactory);
+    RemoteSearchable impl = new RemoteSearchable(searchable);
+    port = serverFactory.socket.getLocalPort();
+    Naming.rebind("//localhost:" + port + "/Searchable", impl);
+  }
+  
+  @AfterClass
+  public static void stopServer() {
+    try {
+      Naming.unbind("//localhost:" + port + "/Searchable");
+    } catch (RemoteException e) {
+    } catch (MalformedURLException e) {
+    } catch (NotBoundException e) {
+    }
+  }
+  
+  public static Searchable lookupRemote() throws Exception {
+    return (Searchable)Naming.lookup("//localhost:" + port + "/Searchable");
+  }
+}

Propchange: lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/RemoteTestCaseJ4.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteCachingWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteCachingWrapperFilter.java?rev=932795&r1=932794&r2=932795&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteCachingWrapperFilter.java
(original)
+++ lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteCachingWrapperFilter.java
Sat Apr 10 21:44:06 2010
@@ -17,12 +17,6 @@ package org.apache.lucene.search;
  * limitations under the License.
  */
 
-import java.rmi.Naming;
-import java.rmi.registry.LocateRegistry;
-
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util._TestUtil;
-
 import org.apache.lucene.analysis.SimpleAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
@@ -30,32 +24,17 @@ import org.apache.lucene.index.IndexWrit
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.store.RAMDirectory;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
 /**
  * Tests that the index is cached on the searcher side of things.
- * NOTE: This is copied from TestRemoteSearchable since it already had a remote index set
up.
  */
-public class TestRemoteCachingWrapperFilter extends LuceneTestCase {
-  public TestRemoteCachingWrapperFilter(String name) {
-    super(name);
-  }
-
-  private static Searchable getRemote() throws Exception {
-    try {
-      return lookupRemote();
-    } catch (Throwable e) {
-      startServer();
-      return lookupRemote();
-    }
-  }
-
-  private static Searchable lookupRemote() throws Exception {
-    return (Searchable)Naming.lookup("//localhost:" + port + "/Searchable");
-  }
-
-  private static int port;
-
-  private static void startServer() throws Exception {
+public class TestRemoteCachingWrapperFilter extends RemoteTestCaseJ4 {
+  @BeforeClass
+  public static void beforeClass() throws Exception {
     // construct an index
     RAMDirectory indexStore = new RAMDirectory();
     IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(
@@ -74,17 +53,12 @@ public class TestRemoteCachingWrapperFil
     writer.addDocument(doc);
     writer.optimize();
     writer.close();
-
-    // publish it
-    port = _TestUtil.getRandomSocketPort();
-    LocateRegistry.createRegistry(port);
     Searchable local = new IndexSearcher(indexStore, true);
-    RemoteSearchable impl = new RemoteSearchable(local);
-    Naming.rebind("//localhost:" + port + "/Searchable", impl);
+    startServer(local);
   }
 
   private static void search(Query query, Filter filter, int hitNumber, String typeValue)
throws Exception {
-    Searchable[] searchables = { getRemote() };
+    Searchable[] searchables = { lookupRemote() };
     Searcher searcher = new MultiSearcher(searchables);
     ScoreDoc[] result = searcher.search(query,filter, 1000).scoreDocs;
     assertEquals(1, result.length);
@@ -94,7 +68,7 @@ public class TestRemoteCachingWrapperFil
     assertTrue("document.getFields() Size: " + document.getFields().size() + " is not: "
+ 3, document.getFields().size() == 3);
   }
 
-
+  @Test
   public void testTermRemoteFilter() throws Exception {
     CachingWrapperFilterHelper cwfh = new CachingWrapperFilterHelper(new QueryWrapperFilter(new
TermQuery(new Term("type", "a"))));
     

Modified: lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSearchable.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSearchable.java?rev=932795&r1=932794&r2=932795&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSearchable.java
(original)
+++ lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSearchable.java
Sat Apr 10 21:44:06 2010
@@ -17,46 +17,25 @@ package org.apache.lucene.search;
  * limitations under the License.
  */
 
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util._TestUtil;
 import org.apache.lucene.analysis.SimpleAnalyzer;
 import org.apache.lucene.document.*;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.Term;
 import org.apache.lucene.store.RAMDirectory;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
 
-import java.rmi.Naming;
-import java.rmi.registry.LocateRegistry;
 import java.util.Collections;
 import java.util.Set;
 import java.util.HashSet;
 
-public class TestRemoteSearchable extends LuceneTestCase {
-  public TestRemoteSearchable(String name) {
-    super(name);
-  }
-
-  private static int port = -1;
+public class TestRemoteSearchable extends RemoteTestCaseJ4 {
 
-  private static Searchable getRemote() throws Exception {
-    if (port == -1) {
-      startServer();
-    }
-
-    try {
-      return lookupRemote();
-    } catch (Throwable e) {
-      startServer();
-      return lookupRemote();
-    }
-  }
-
-  private static Searchable lookupRemote() throws Exception {
-    return (Searchable)Naming.lookup("//localhost:" + port + "/Searchable");
-  }
-
-  private static void startServer() throws Exception {
+  @BeforeClass
+  public static void beforeClass() throws Exception {
     // construct an index
     RAMDirectory indexStore = new RAMDirectory();
     IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(
@@ -67,18 +46,13 @@ public class TestRemoteSearchable extend
     writer.addDocument(doc);
     writer.optimize();
     writer.close();
-
-    // publish it
-    port = _TestUtil.getRandomSocketPort();
-    LocateRegistry.createRegistry(port);
     Searchable local = new IndexSearcher(indexStore, true);
-    RemoteSearchable impl = new RemoteSearchable(local);
-    Naming.rebind("//localhost:" + port + "/Searchable", impl);
+    startServer(local);
   }
 
   private static void search(Query query) throws Exception {
     // try to search the published index
-    Searchable[] searchables = { getRemote() };
+    Searchable[] searchables = { lookupRemote() };
     Searcher searcher = new MultiSearcher(searchables);
     ScoreDoc[] result = searcher.search(query, null, 1000).scoreDocs;
 
@@ -99,16 +73,19 @@ public class TestRemoteSearchable extend
     assertTrue("document.getFields() Size: " + document.getFields().size() + " is not: "
+ 1, document.getFields().size() == 1);
   }
 
+  @Test
   public void testTermQuery() throws Exception {
     search(new TermQuery(new Term("test", "test")));
   }
 
+  @Test
   public void testBooleanQuery() throws Exception {
     BooleanQuery query = new BooleanQuery();
     query.add(new TermQuery(new Term("test", "test")), BooleanClause.Occur.MUST);
     search(query);
   }
 
+  @Test
   public void testPhraseQuery() throws Exception {
     PhraseQuery query = new PhraseQuery();
     query.add(new Term("test", "test"));
@@ -117,9 +94,10 @@ public class TestRemoteSearchable extend
   }
 
   // Tests bug fix at http://nagoya.apache.org/bugzilla/show_bug.cgi?id=20290
+  @Test
   public void testQueryFilter() throws Exception {
     // try to search the published index
-    Searchable[] searchables = { getRemote() };
+    Searchable[] searchables = { lookupRemote() };
     Searcher searcher = new MultiSearcher(searchables);
     ScoreDoc[] hits = searcher.search(
           new TermQuery(new Term("test", "text")),
@@ -131,9 +109,10 @@ public class TestRemoteSearchable extend
     assertEquals(0, nohits.length);
   }
 
+  @Test
   public void testConstantScoreQuery() throws Exception {
     // try to search the published index
-    Searchable[] searchables = { getRemote() };
+    Searchable[] searchables = { lookupRemote() };
     Searcher searcher = new MultiSearcher(searchables);
     ScoreDoc[] hits = searcher.search(
           new ConstantScoreQuery(new QueryWrapperFilter(

Modified: lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSort.java?rev=932795&r1=932794&r2=932795&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSort.java
(original)
+++ lucene/dev/trunk/lucene/contrib/remote/src/test/org/apache/lucene/search/TestRemoteSort.java
Sat Apr 10 21:44:06 2010
@@ -17,19 +17,14 @@ package org.apache.lucene.search;
  * limitations under the License.
  */
 
+import static org.junit.Assert.assertEquals;
+
 import java.io.IOException;
-import java.io.Serializable;
-import java.rmi.Naming;
-import java.rmi.registry.LocateRegistry;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Locale;
 import java.util.Random;
 
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-
 import org.apache.lucene.analysis.SimpleAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
@@ -38,10 +33,11 @@ import org.apache.lucene.index.IndexWrit
 import org.apache.lucene.index.IndexWriterConfig;
 import org.apache.lucene.index.LogMergePolicy;
 import org.apache.lucene.index.Term;
-import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.store.RAMDirectory;
-import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util._TestUtil;
+import org.apache.lucene.util.BytesRef;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
 
 /**
  * Unit tests for remote sorting code.
@@ -49,40 +45,15 @@ import org.apache.lucene.util._TestUtil;
  * methods and therefore unused members and methodes. 
  */
 
-public class TestRemoteSort extends LuceneTestCase implements Serializable {
+public class TestRemoteSort extends RemoteTestCaseJ4 {
 
-  private Searcher full;
+  private static IndexSearcher full;
   private Query queryX;
   private Query queryY;
   private Query queryA;
   private Query queryF;
   private Sort sort;
 
-
-  public TestRemoteSort (String name) {
-    super (name);
-  }
-
-  public static void main (String[] argv) {
-    if (argv == null || argv.length < 1)
-      TestRunner.run (suite());
-    else if ("server".equals (argv[0])) {
-      TestRemoteSort test = new TestRemoteSort (null);
-      try {
-        test.startServer();
-        Thread.sleep (500000);
-      } catch (Exception e) {
-        System.out.println (e);
-        e.printStackTrace();
-      }
-    }
-  }
-
-  public static Test suite() {
-    return new TestSuite (TestRemoteSort.class);
-  }
-
-
   // document data:
   // the tracer field is used to determine which document was hit
   // the contents field is used to search and sort by relevance
@@ -90,7 +61,7 @@ public class TestRemoteSort extends Luce
   // the float field to sort by float
   // the string field to sort by string
     // the i18n field includes accented characters for testing locale-specific sorting
-  private String[][] data = new String[][] {
+  private static final String[][] data = new String[][] {
   // tracer  contents         int            float           string   custom   i18n     
         long            double, 'short', byte, 'custom parser encoding'
   {   "A",   "x a",           "5",           "4f",           "c",     "A-3",   "p\u00EAche",
     "10",           "-4.0", "3", "126", "J"},//A, x
   {   "B",   "y a",           "5",           "3.4028235E38", "i",     "B-10",  "HAT",   
         "1000000000", "40.0", "24", "1", "I"},//B, y
@@ -109,15 +80,14 @@ public class TestRemoteSort extends Luce
   };
   
   // create an index of all the documents, or just the x, or just the y documents
-  private Searcher getIndex (boolean even, boolean odd)
-  throws IOException {
+  @BeforeClass
+  public static void beforeClass() throws Exception {
     RAMDirectory indexStore = new RAMDirectory ();
     IndexWriter writer = new IndexWriter(indexStore, new IndexWriterConfig(
         TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT))
         .setMaxBufferedDocs(2));
     ((LogMergePolicy) writer.getConfig().getMergePolicy()).setMergeFactor(1000);
     for (int i=0; i<data.length; ++i) {
-      if (((i%2)==0 && even) || ((i%2)==1 && odd)) {
         Document doc = new Document();
         doc.add (new Field ("tracer",   data[i][0], Field.Store.YES, Field.Index.NO));
         doc.add (new Field ("contents", data[i][1], Field.Store.NO, Field.Index.ANALYZED));
@@ -133,18 +103,12 @@ public class TestRemoteSort extends Luce
         if (data[i][11] != null) doc.add (new Field ("parser",     data[i][11], Field.Store.NO,
Field.Index.NOT_ANALYZED));
         doc.setBoost(2);  // produce some scores above 1.0
         writer.addDocument (doc);
-      }
     }
     //writer.optimize ();
     writer.close ();
-    IndexSearcher s = new IndexSearcher (indexStore, false);
-    s.setDefaultFieldSortScoring(true, true);
-    return s;
-  }
-
-  private Searcher getFullIndex()
-  throws IOException {
-    return getIndex (true, true);
+    full = new IndexSearcher (indexStore, false);
+    full.setDefaultFieldSortScoring(true, true);
+    startServer(full);
   }
   
   public String getRandomNumberString(int num, int low, int high) {
@@ -177,9 +141,9 @@ public class TestRemoteSort extends Luce
   }
 
   @Override
-  protected void setUp() throws Exception {
+  @Before
+  public void setUp() throws Exception {
     super.setUp();
-    full = getFullIndex();
     queryX = new TermQuery (new Term ("contents", "x"));
     queryY = new TermQuery (new Term ("contents", "y"));
     queryA = new TermQuery (new Term ("contents", "a"));
@@ -240,8 +204,9 @@ public class TestRemoteSort extends Luce
   }
 
   // test a variety of sorts using a remote searcher
+  @Test
   public void testRemoteSort() throws Exception {
-    Searchable searcher = getRemote();
+    Searchable searcher = lookupRemote();
     MultiSearcher multi = new MultiSearcher (new Searchable[] { searcher });
     runMultiSorts(multi, true); // this runs on the full index
   }
@@ -271,6 +236,7 @@ public class TestRemoteSort extends Luce
 
   // test that the relevancy scores are the same even if
   // hits are sorted
+  @Test
   public void testNormalizedScores() throws Exception {
 
     // capture relevancy scores
@@ -279,7 +245,7 @@ public class TestRemoteSort extends Luce
     HashMap<String,Float> scoresA = getScores (full.search (queryA, null, 1000).scoreDocs,
full);
 
     // we'll test searching locally, remote and multi
-    MultiSearcher remote = new MultiSearcher (new Searchable[] { getRemote() });
+    MultiSearcher remote = new MultiSearcher (new Searchable[] { lookupRemote() });
 
     // change sorting and make sure relevancy stays the same
 
@@ -447,32 +413,4 @@ public class TestRemoteSort extends Luce
       }
     }
   }
-
-  private Searchable getRemote () throws Exception {
-    try {
-      return lookupRemote ();
-    } catch (Throwable e) {
-      startServer ();
-      return lookupRemote ();
-    }
-  }
-
-  private Searchable lookupRemote () throws Exception {
-    return (Searchable) Naming.lookup ("//localhost:" + port + "/SortedSearchable");
-  }
-
-  private int port = -1;
-
-  private void startServer () throws Exception {
-    // construct an index
-    port = _TestUtil.getRandomSocketPort();
-    Searcher local = getFullIndex();
-    // local.search (queryA, new Sort());
-
-    // publish it
-    LocateRegistry.createRegistry (port);
-    RemoteSearchable impl = new RemoteSearchable (local);
-    Naming.rebind ("//localhost:" + port + "/SortedSearchable", impl);
-  }
-
 }

Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java?rev=932795&r1=932794&r2=932795&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/util/_TestUtil.java Sat Apr 10 21:44:06
2010
@@ -111,9 +111,4 @@ public class _TestUtil {
     buf.append("]");
     return buf.toString();
   }
-
-  public static int getRandomSocketPort() {
-    return 1024 + new Random().nextInt(64512);
-  }
-
 }



Mime
View raw message