[hibernate-commits] Hibernate SVN: r14963 - in search/trunk: src/test/org/hibernate/search/test and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Tue Jul 22 06:24:20 EDT 2008


Author: navssurtani
Date: 2008-07-22 06:24:20 -0400 (Tue, 22 Jul 2008)
New Revision: 14963

Added:
   search/trunk/src/test/org/hibernate/search/test/LocalCacheTest.java
   search/trunk/src/test/org/hibernate/search/test/Person.java
Modified:
   search/trunk/ivy.xml
Log:
Wrote test for JBoss Cache Searchable.

Modified: search/trunk/ivy.xml
===================================================================
--- search/trunk/ivy.xml	2008-07-21 20:08:07 UTC (rev 14962)
+++ search/trunk/ivy.xml	2008-07-22 10:24:20 UTC (rev 14963)
@@ -2,42 +2,49 @@
 <ivy-module version="1.3"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:noNamespaceSchemaLocation=
-                  "http://www.jayasoft.org/misc/ivy/ivy.xsd">
-    <info organisation="org.hibernate" module="search"/>
-    <configurations>
-        <conf name="default" description="Core module dependencies"/>
-        <conf name="test" visibility="private" description="Dependencies needed for testing purposes"/>
-    </configurations>
-    <publications>
-        <artifact name="hibernate-search" conf="default"/>
-    </publications>
-    <dependencies>
-		
-        <!-- compile time dependencies -->
-        <dependency name="ejb3-persistence" rev="1.0.2.GA" conf="default->default"/>
-        <dependency name="commons-annotations" rev="3.1.0.CR1" conf="default->default"/>
-        <dependency org="org.slf4j" name="slf4j-api" rev="1.4.2" conf="default->default"/>        
-        <dependency org="org.hibernate" name="hibernate-core" rev="3.3.0.CR1" conf="default->default"/>
-        <dependency org="javax.transaction" name="jta" rev="1.1" conf="default->default"/>
-        <dependency org="org.apache.lucene" name="lucene-core" rev="2.3.2" conf="default->default"/>
-        <dependency org="javax.jms" name="jms" rev="1.1" conf="default->default"/> <!-- optional -->
-        <dependency org="javax.annotation" name="jsr250-api" rev="1.0" conf="default->default"/> <!-- optional -->
-        <dependency org="org.hibernate.apache.lucene.solr" name="apache-solr-analyzer" rev="1.2.0" conf="default->default"/> <!-- optional -->
+                    "http://www.jayasoft.org/misc/ivy/ivy.xsd">
+   <info organisation="org.hibernate" module="search"/>
+   <configurations>
+      <conf name="default" description="Core module dependencies"/>
+      <conf name="test" visibility="private" description="Dependencies needed for testing purposes"/>
+   </configurations>
+   <publications>
+      <artifact name="hibernate-search" conf="default"/>
+   </publications>
+   <dependencies>
 
-        <!-- transitive dependencies -->
-        <dependency org="antlr" name="antlr" rev="2.7.6" conf="test->default"/>
-        <dependency org="commons-collections" name="commons-collections" rev="3.1" conf="test->default"/>
-        <dependency org="dom4j" name="dom4j" rev="1.6.1" conf="test->default"/>
+      <!-- compile time dependencies -->
+      <dependency name="ejb3-persistence" rev="1.0.2.GA" conf="default->default"/>
+      <dependency name="commons-annotations" rev="3.1.0.CR1" conf="default->default"/>
+      <dependency org="org.slf4j" name="slf4j-api" rev="1.4.2" conf="default->default"/>
+      <dependency org="org.hibernate" name="hibernate-core" rev="3.3.0.CR1" conf="default->default"/>
+      <dependency org="javax.transaction" name="jta" rev="1.1" conf="default->default"/>
+      <dependency org="org.apache.lucene" name="lucene-core" rev="2.3.2" conf="default->default"/>
+      <dependency org="javax.jms" name="jms" rev="1.1" conf="default->default"/>
+      <!-- optional -->
+      <dependency org="javax.annotation" name="jsr250-api" rev="1.0" conf="default->default"/>
+      <!-- optional -->
+      <dependency org="org.hibernate.apache.lucene.solr" name="apache-solr-analyzer" rev="1.2.0"
+                  conf="default->default"/>
+      <!-- optional -->
 
-        <!-- test deps -->
-        <dependency name="annotations" rev="3.4.0.CR1" conf="test->default"/>
-        <dependency name="entitymanager" rev="3.4.0.CR1" conf="test->default"/>
-        <dependency org="cglib" name="cglib" rev="2.1_3" conf="test->default"/>
-        <dependency org="asm" name="asm" rev="1.5.3" conf="test->default"/>
-        <dependency org="asm" name="asm-attrs" rev="1.5.3" conf="test->default"/>
-        <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.4.2" conf="test->default"/>
-        <dependency org="log4j" name="log4j" rev="1.2.14" conf="test->default"/>
-        <dependency org="junit" name="junit" rev="3.8.1" conf="test->default"/>
+      <!-- transitive dependencies -->
+      <dependency org="antlr" name="antlr" rev="2.7.6" conf="test->default"/>
+      <dependency org="commons-collections" name="commons-collections" rev="3.1" conf="test->default"/>
+      <dependency org="dom4j" name="dom4j" rev="1.6.1" conf="test->default"/>
 
-    </dependencies>
+      <!-- test deps -->
+      <dependency name="annotations" rev="3.4.0.CR1" conf="test->default"/>
+      <dependency name="entitymanager" rev="3.4.0.CR1" conf="test->default"/>
+      <dependency org="cglib" name="cglib" rev="2.1_3" conf="test->default"/>
+      <dependency org="asm" name="asm" rev="1.5.3" conf="test->default"/>
+      <dependency org="asm" name="asm-attrs" rev="1.5.3" conf="test->default"/>
+      <dependency org="org.slf4j" name="slf4j-log4j12" rev="1.4.2" conf="test->default"/>
+      <dependency org="log4j" name="log4j" rev="1.2.14" conf="test->default"/>
+      <dependency org="junit" name="junit" rev="3.8.1" conf="test->default"/>
+      <dependency org="org.jboss.cache" name="jbosscache-searchable" rev="0.1-Beta1" conf="test->default"/>
+      <dependency org="org.jboss.cache" name="jbosscache-core" rev="2.2.0.CR5" conf="test->default"/>
+      <dependency org="jgroups" name="jgroups" rev="2.6.3.GA" conf="test->default"/>
+
+   </dependencies>
 </ivy-module>
\ No newline at end of file

Added: search/trunk/src/test/org/hibernate/search/test/LocalCacheTest.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/LocalCacheTest.java	                        (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/LocalCacheTest.java	2008-07-22 10:24:20 UTC (rev 14963)
@@ -0,0 +1,266 @@
+package org.hibernate.search.test;
+
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.Sort;
+import org.apache.lucene.search.Filter;
+import org.apache.lucene.search.QueryWrapperFilter;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import java.util.List;
+import org.jboss.cache.Cache;
+import org.jboss.cache.DefaultCacheFactory;
+import org.jboss.cache.Fqn;
+import org.jboss.cache.search.CacheQuery;
+import org.jboss.cache.search.QueryResultIterator;
+import org.jboss.cache.search.SearchableCache;
+import org.jboss.cache.search.SearchableCacheFactory;
+
+import java.io.File;
+
+/**
+ * @author Navin Surtani  - navin at surtani.org
+ *
+ *
+ * Creates an instance of JBoss Cache Searchable and then searches through it. Creates instances of org.hibernate.search.test.Person.
+ *
+ */
+
+public class LocalCacheTest extends junit.framework.TestCase
+{
+   SearchableCache searchableCache;
+   Person person1;
+   Person person2;
+   Person person3;
+   Person person4;
+   Person person5;
+   QueryParser queryParser;
+   Query luceneQuery;
+   CacheQuery cacheQuery;
+   List found;
+   String key1 = "Navin";
+   String key2 = "BigGoat";
+   String key3 = "MiniGoat";
+
+   public void setUp()
+   {
+
+      //Create a searchable cache instance.
+      Cache coreCache = new DefaultCacheFactory().createCache();
+      searchableCache = new SearchableCacheFactory().createSearchableCache(coreCache, Person.class);
+
+      //Creates 3 person objects.
+      person1 = new Person();
+      person1.setName("Navin Surtani");
+      person1.setBlurb("Likes playing WoW");
+
+      person2 = new Person();
+      person2.setName("Big Goat");
+      person2.setBlurb("Eats grass");
+
+      person3 = new Person();
+      person3.setName("Mini Goat");
+      person3.setBlurb("Eats cheese");
+
+      person5 = new Person();
+      person5.setName("Smelly Cat");
+      person5.setBlurb("Eats fish");
+
+      //Put the 3 created objects in the searchableCache.
+      searchableCache.put(Fqn.fromString("/a/b/c"), key1, person1);
+      searchableCache.put(Fqn.fromString("/a/b/d"), key2, person2);
+      searchableCache.put(Fqn.fromString("/a/b/c"), key3, person3);
+
+   }
+
+   public void tearDown()
+   {
+      if (searchableCache != null) searchableCache.stop();
+       cleanUpIndexes();
+   }
+
+   public void testSimple() throws ParseException
+   {
+      queryParser = new QueryParser("blurb", new StandardAnalyzer());
+      luceneQuery = queryParser.parse("playing");
+
+      // As with JBoss Cache Searchable, we create a CacheQuery instance as opposed to a FullTextQuery.
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+
+      found = cacheQuery.list();
+
+      assert found.size() == 1;
+      assert found.get(0).equals(person1);
+   }
+
+   public void testSimpleIterator() throws ParseException
+   {
+      queryParser = new QueryParser("blurb", new StandardAnalyzer());
+      luceneQuery = queryParser.parse("playing");
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+
+      QueryResultIterator found = cacheQuery.iterator();
+
+      assert found.isFirst();
+      assert found.isLast();
+   }
+
+
+   public void testMultipleResults() throws ParseException
+   {
+
+      queryParser = new QueryParser("name", new StandardAnalyzer());
+
+      luceneQuery = queryParser.parse("goat");
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+      found = cacheQuery.list();
+
+      assert found.size() == 2;
+      assert found.get(0) == person2;
+      assert found.get(1) == person3;
+
+   }
+
+   public void testModified() throws ParseException
+   {
+      queryParser = new QueryParser("blurb", new StandardAnalyzer());
+      luceneQuery = queryParser.parse("playing");
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+
+      found = cacheQuery.list();
+
+      assert found.size() == 1;
+      assert found.get(0).equals(person1);
+
+      person1.setBlurb("Likes pizza");
+      searchableCache.put(Fqn.fromString("/a/b/c/"), key1, person1);
+
+      queryParser = new QueryParser("blurb", new StandardAnalyzer());
+      luceneQuery = queryParser.parse("pizza");
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+
+      found = cacheQuery.list();
+
+      assert found.size() == 1;
+      assert found.get(0).equals(person1);
+   }
+
+   public void testAdded() throws ParseException
+   {
+      queryParser = new QueryParser("name", new StandardAnalyzer());
+
+      luceneQuery = queryParser.parse("Goat");
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+      found = cacheQuery.list();
+
+      assert found.size() == 2 : "Size of list should be 2";
+      assert found.contains(person2);
+      assert found.contains(person3);
+      assert !found.contains(person4) : "This should not contain object person4";
+
+      person4 = new Person();
+      person4.setName("Mighty Goat");
+      person4.setBlurb("Also eats grass");
+
+      searchableCache.put(Fqn.fromString("/r/a/m/"), "Ram", person4);
+
+      luceneQuery = queryParser.parse("Goat");
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+      found = cacheQuery.list();
+
+      assert found.size() == 3 : "Size of list should be 3";
+      assert found.contains(person2);
+      assert found.contains(person3);
+      assert found.contains(person4) : "This should now contain object person4";
+   }
+
+   public void testRemoved() throws ParseException
+   {
+      queryParser = new QueryParser("name", new StandardAnalyzer());
+
+      luceneQuery = queryParser.parse("Goat");
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+      found = cacheQuery.list();
+
+      assert found.size() == 2;
+      assert found.contains(person2);
+      assert found.contains(person3) : "This should still contain object person3";
+
+      searchableCache.remove(Fqn.fromString("/a/b/c/"), key3);
+
+      luceneQuery = queryParser.parse("Goat");
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+      found = cacheQuery.list();
+
+      assert found.size() == 1;
+      assert found.contains(person2);
+      assert !found.contains(person3) : "The search should not return person3";
+
+
+   }
+
+   public void testSetSort() throws ParseException
+   {
+      person2.setAge(35);
+      person3.setAge(12);
+
+      Sort sort = new Sort ("age");
+
+      queryParser = new QueryParser("name", new StandardAnalyzer());
+
+      luceneQuery = queryParser.parse("Goat");
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+      found = cacheQuery.list();
+
+      assert found.size() == 2;
+
+      cacheQuery.setSort(sort);
+
+      found = cacheQuery.list();
+
+      assert found.size() == 2;
+      assert found.get(0).equals(person2);
+      assert found.get(1).equals(person3);
+   }
+
+   public void testSetFilter() throws ParseException
+   {
+      queryParser = new QueryParser("blurb", new StandardAnalyzer());
+      luceneQuery = queryParser.parse("goat");
+      Filter filter = new QueryWrapperFilter(luceneQuery);
+
+      cacheQuery = searchableCache.createQuery(luceneQuery);
+
+      cacheQuery.setFilter(filter);
+   }
+
+
+   private static void cleanUpIndexes()
+   {
+      Class[] knownClasses = {Person.class};
+      for (Class c : knownClasses)
+      {
+         String dirName = c.getName();
+         File file = new File(dirName);
+         if (file.exists())
+         {
+            recursiveDelete(file);
+         }
+      }
+   }
+
+   private static void recursiveDelete(File f)
+   {
+      if (f.isDirectory())
+      {
+         File[] files = f.listFiles();
+         for (File file : files) recursiveDelete(file);
+      }
+      else
+      {
+         f.delete();
+      }
+   }
+
+
+}

Added: search/trunk/src/test/org/hibernate/search/test/Person.java
===================================================================
--- search/trunk/src/test/org/hibernate/search/test/Person.java	                        (rev 0)
+++ search/trunk/src/test/org/hibernate/search/test/Person.java	2008-07-22 10:24:20 UTC (rev 14963)
@@ -0,0 +1,90 @@
+package org.hibernate.search.test;
+
+import org.hibernate.search.annotations.*;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import java.io.Serializable;
+
+import java.io.Serializable;
+
+/**
+ * @author Navin Surtani  - navin at surtani.org
+ *
+ * This is the class that the LocalCacheTest will use to populate a searchable cache instance and then search the cache.
+ *
+ */
+ at ProvidedId
+ at Indexed
+public class Person implements Serializable
+{
+   private static final Log log = LogFactory.getLog(Person.class);
+
+
+   @Field(store = Store.YES)
+   private String name;
+   @Field (store = Store.YES)
+   private String blurb;
+   @Field (store = Store.YES, index = Index.UN_TOKENIZED )
+   private int age;
+
+   public String getName()
+   {
+      return name;
+   }
+
+   public void setName(String name)
+   {
+      this.name = name;
+   }
+
+   public String getBlurb()
+   {
+      return blurb;
+   }
+
+   public void setBlurb(String blurb)
+   {
+      this.blurb = blurb;
+   }
+
+   public int getAge()
+   {
+      return age;
+   }
+
+   public void setAge(int age)
+   {
+      this.age = age;
+   }
+
+   public boolean equals(Object o)
+   {
+      if (this == o) return true;
+      if (o == null || getClass() != o.getClass()) return false;
+
+      Person person = (Person) o;
+
+      if (blurb != null ? !blurb.equals(person.blurb) : person.blurb != null) return false;
+      if (name != null ? !name.equals(person.name) : person.name != null) return false;
+
+      return true;
+   }
+
+   public int hashCode()
+   {
+      int result;
+      result = (name != null ? name.hashCode() : 0);
+      result = 31 * result + (blurb != null ? blurb.hashCode() : 0);
+      return result;
+   }
+
+
+   public String toString()
+   {
+      return "Person{" +
+              "name='" + name + '\'' +
+              ", blurb='" + blurb + '\'' +
+              '}';
+   }
+}




More information about the hibernate-commits mailing list