package org.infinispan.query.api; import static org.testng.AssertJUnit.assertEquals; import java.util.ArrayList; import java.util.List; import org.apache.lucene.search.Query; import org.infinispan.Cache; import org.infinispan.commons.api.BasicCacheContainer; import org.infinispan.manager.EmbeddedCacheManager; import org.infinispan.query.CacheQuery; import org.infinispan.query.Search; import org.infinispan.query.SearchManager; import org.infinispan.query.queries.faceting.Car; import org.infinispan.test.MultipleCacheManagersTest; import org.infinispan.test.fwk.TestCacheManagerFactory; import org.testng.annotations.Test; @Test(groups = "functional", testName = "query.api.ManualIndexingTest") public class ManualIndexingTest extends MultipleCacheManagersTest { protected static final int NUM_NODES = 4; protected List<Cache<String, Car>> caches = new ArrayList<>(NUM_NODES); protected static final String[] neededCacheNames = { BasicCacheContainer.DEFAULT_CACHE_NAME, "LuceneIndexesMetadata", "LuceneIndexesData", "LuceneIndexesLocking", }; @Override protected void createCacheManagers() throws Throwable { for (int i = 0; i < NUM_NODES; i++) { EmbeddedCacheManager cacheManager = TestCacheManagerFactory.fromXml("manual-indexing-distribution.xml"); registerCacheManager(cacheManager); Cache<String, Car> cache = cacheManager.getCache(); caches.add(cache); } waitForClusterToForm(neededCacheNames); } public void testManualIndexing() throws Exception { caches.get(0).put("car A", new Car("ford", "blue", 400)); caches.get(0).put("car B", new Car("megane", "white", 300)); caches.get(0).put("car C", new Car("megane", "red", 500)); assertNumberOfCars(0, "megane"); assertNumberOfCars(0, "ford"); // rebuild index Search.getSearchManager(caches.get(0)).getMassIndexer().start(); assertNumberOfCars(2, "megane"); assertNumberOfCars(1, "ford"); } private void assertNumberOfCars(int expectedCount, String carMake) { for (Cache cache : caches) { SearchManager sm = Search.getSearchManager(cache); Query query = sm.buildQueryBuilderForClass(Car.class).get().keyword().onField("make").matching(carMake).createQuery(); CacheQuery<Car> cacheQuery = sm.getQuery(query, Car.class); assertEquals("Expected count not met on cache " + cache, expectedCount, cacheQuery.getResultSize()); assertEquals("Expected count not met on cache " + cache, expectedCount, cacheQuery.list().size()); } } }