[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