/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.interceptor;
import org.apache.lucene.search.MatchAllDocsQuery;
import org.apache.lucene.search.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.search.FullTextQuery;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.hibernate.search.test.SearchTestBase;
import org.hibernate.search.testsupport.TestForIssue;
import org.junit.Assert;
import org.junit.Test;
/**
* @author Sanne Grinovero (C) 2012 Red Hat Inc.
*/
@TestForIssue(jiraKey = "HSEARCH-1190")
public class InterceptedMassIndexerTest extends SearchTestBase {
@Test
public void testMassIndexerSkips() throws InterruptedException {
storeSomeBlogs();
assertIndexedBooks( 2 );
rebuildIndexes();
assertIndexedBooks( 2 );
}
/**
* Rebuild the index using a MassIndexer
*
* @throws InterruptedException
*/
private void rebuildIndexes() throws InterruptedException {
Session session = openSession();
try {
FullTextSession fullTextSession = Search.getFullTextSession( session );
fullTextSession.createIndexer( Blog.class ).startAndWait();
}
finally {
session.close();
}
}
/**
* Verify how many blogs we have in the index
*
* @param expectedBooks
*/
private void assertIndexedBooks(int expectedBooks) {
Session session = openSession();
try {
Transaction transaction = session.beginTransaction();
try {
FullTextSession fullTextSession = Search.getFullTextSession( session );
Query allQuery = new MatchAllDocsQuery();
FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery( allQuery, Blog.class );
int resultSize = fullTextQuery.getResultSize();
Assert.assertEquals( expectedBooks, resultSize );
}
finally {
transaction.commit();
}
}
finally {
session.close();
}
}
/**
* Stores some test blogs: 2 published and a draft
*/
private void storeSomeBlogs() {
Session session = openSession();
try {
Transaction transaction = session.beginTransaction();
try {
Blog beta1 = new Blog();
beta1.setTitle( "Hibernate Search 4.2.0.Beta1 is ready!!" );
beta1.setStatus( BlogStatus.PUBLISHED );
session.save( beta1 );
Blog lucene4 = new Blog();
lucene4.setTitle( "Apache Lucene 4 is ready. Now you can rewrite all your code from scratch!" );
lucene4.setStatus( BlogStatus.PUBLISHED );
session.save( lucene4 );
Blog beta2 = new Blog();
beta2.setTitle( "More Spatial, easy clustering, and JMX improvements" );
beta2.setStatus( BlogStatus.DRAFT );
session.save( beta2 );
}
finally {
transaction.commit();
}
}
finally {
session.close();
}
}
@Override
public Class<?>[] getAnnotatedClasses() {
return new Class<?>[] { Blog.class };
}
}