/* * 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.backend.lucene; import org.hibernate.search.backend.spi.Work; import org.hibernate.search.backend.spi.WorkType; import org.hibernate.search.engine.integration.impl.ExtendedSearchIntegrator; import org.hibernate.search.query.engine.spi.HSQuery; import org.hibernate.search.testsupport.junit.SearchFactoryHolder; import org.hibernate.search.testsupport.setup.TransactionContextForTest; import org.junit.Rule; import org.junit.Test; import org.apache.lucene.search.MatchAllDocsQuery; import static org.junit.Assert.assertEquals; /** * Tests for flushing a backend in async mode. * * @author gustavonalle */ public class AsyncBackendFlushTest { private static final int ENTITIES = 100; @Rule public SearchFactoryHolder sfHolder = new SearchFactoryHolder( Quote.class ) .withProperty( "hibernate.search.default.worker.execution", "async" ); @Test public void testFlush() throws Exception { writeData( sfHolder, 0, ENTITIES / 2 ); flushIndex(); assertDocumentsIndexed( ENTITIES / 2 ); writeData( sfHolder, ENTITIES / 2, ENTITIES ); flushIndex(); assertDocumentsIndexed( ENTITIES ); } private void flushIndex() { sfHolder.extractIndexManager( Quote.class ).flushAndReleaseResources(); } private void assertDocumentsIndexed(int number) { ExtendedSearchIntegrator searchFactory = sfHolder.getSearchFactory(); HSQuery hsQuery = searchFactory.createHSQuery( new MatchAllDocsQuery(), Quote.class ); assertEquals( number, hsQuery.queryResultSize() ); } private void writeData(SearchFactoryHolder sfHolder, int fromId, int toId) { for ( int i = fromId; i < toId; i++ ) { Quote quote = new Quote( i, Quote.class.getName() ); Work work = new Work( quote, i, WorkType.ADD, false ); TransactionContextForTest tc = new TransactionContextForTest(); sfHolder.getSearchFactory().getWorker().performWork( work, tc ); tc.end(); } } }