PageRenderTime 62ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/query/src/test/java/org/infinispan/query/blackbox/LocalCacheTest.java

https://gitlab.com/Guy1394/infinispan
Java | 738 lines | 572 code | 152 blank | 14 comment | 29 complexity | e0c7727d6f95815e302acb9b6ad09445 MD5 | raw file
  1. package org.infinispan.query.blackbox;
  2. import java.util.List;
  3. import static org.junit.Assert.assertEquals;
  4. import static org.junit.Assert.assertTrue;
  5. import org.apache.lucene.index.Term;
  6. import org.apache.lucene.queryparser.classic.ParseException;
  7. import org.apache.lucene.queryparser.classic.QueryParser;
  8. import org.apache.lucene.search.BooleanQuery;
  9. import org.apache.lucene.search.Explanation;
  10. import org.apache.lucene.search.PrefixQuery;
  11. import org.apache.lucene.search.Query;
  12. import org.apache.lucene.search.QueryWrapperFilter;
  13. import org.apache.lucene.search.Sort;
  14. import org.apache.lucene.search.SortField;
  15. import org.apache.lucene.search.TermQuery;
  16. import org.apache.lucene.search.BooleanClause.Occur;
  17. import org.hibernate.search.filter.FullTextFilter;
  18. import org.infinispan.Cache;
  19. import org.infinispan.cache.impl.CacheImpl;
  20. import org.infinispan.configuration.cache.ConfigurationBuilder;
  21. import org.infinispan.configuration.cache.Index;
  22. import org.infinispan.manager.EmbeddedCacheManager;
  23. import org.infinispan.query.CacheQuery;
  24. import org.infinispan.query.FetchOptions;
  25. import org.infinispan.query.ResultIterator;
  26. import org.infinispan.query.Search;
  27. import org.infinispan.query.SearchManager;
  28. import org.infinispan.query.helper.StaticTestingErrorHandler;
  29. import org.infinispan.query.spi.SearchManagerImplementor;
  30. import org.infinispan.query.test.AnotherGrassEater;
  31. import org.infinispan.query.test.CustomKey3;
  32. import org.infinispan.query.test.CustomKey3Transformer;
  33. import org.infinispan.query.test.Person;
  34. import org.infinispan.test.SingleCacheManagerTest;
  35. import org.infinispan.test.fwk.TestCacheManagerFactory;
  36. import org.testng.annotations.Test;
  37. import java.util.NoSuchElementException;
  38. import static java.util.Arrays.asList;
  39. import static org.infinispan.query.helper.TestQueryHelperFactory.createCacheQuery;
  40. import static org.infinispan.query.helper.TestQueryHelperFactory.createQueryParser;
  41. import static org.mockito.Mockito.mock;
  42. import static org.mockito.Mockito.when;
  43. @Test(groups = {"functional", "smoke"}, testName = "query.blackbox.LocalCacheTest")
  44. public class LocalCacheTest extends SingleCacheManagerTest {
  45. protected Person person1;
  46. protected Person person2;
  47. protected Person person3;
  48. protected Person person4;
  49. protected AnotherGrassEater anotherGrassEater;
  50. protected QueryParser queryParser;
  51. protected String key1 = "Navin";
  52. protected String key2 = "BigGoat";
  53. protected String key3 = "MiniGoat";
  54. protected String anotherGrassEaterKey = "anotherGrassEaterKey";
  55. public LocalCacheTest() {
  56. cleanup = CleanupPhase.AFTER_METHOD;
  57. }
  58. public void testSimple() throws ParseException {
  59. loadTestingData();
  60. CacheQuery cacheQuery = createCacheQuery(cache, "blurb", "playing" );
  61. List<Object> found = cacheQuery.list();
  62. int elems = found.size();
  63. assert elems == 1 : "Expected 1 but was " + elems;
  64. Object val = found.get(0);
  65. assert val.equals(person1) : "Expected " + person1 + " but was " + val;
  66. StaticTestingErrorHandler.assertAllGood(cache);
  67. }
  68. public void testSimpleForNonField() throws ParseException {
  69. loadTestingData();
  70. CacheQuery cacheQuery = createCacheQuery(cache, "nonSearchableField", "test1" );
  71. List<Object> found = cacheQuery.list();
  72. int elems = found.size();
  73. assert elems == 0 : "Expected 0 but was " + elems;
  74. StaticTestingErrorHandler.assertAllGood(cache);
  75. }
  76. public void testEagerIterator() throws ParseException {
  77. loadTestingData();
  78. CacheQuery cacheQuery = createCacheQuery(cache, "blurb", "playing" );
  79. ResultIterator found = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.EAGER));
  80. try {
  81. assert found.hasNext();
  82. found.next();
  83. assert !found.hasNext();
  84. } finally {
  85. found.close();
  86. }
  87. StaticTestingErrorHandler.assertAllGood(cache);
  88. }
  89. @Test(expectedExceptions = UnsupportedOperationException.class)
  90. public void testEagerIteratorRemove() throws ParseException {
  91. loadTestingData();
  92. CacheQuery cacheQuery = createCacheQuery(cache, "blurb", "playing" );
  93. ResultIterator found = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.EAGER));
  94. try {
  95. assert found.hasNext();
  96. found.remove();
  97. } finally {
  98. found.close();
  99. }
  100. }
  101. @Test(expectedExceptions = NoSuchElementException.class)
  102. public void testEagerIteratorExCase() throws ParseException {
  103. loadTestingData();
  104. CacheQuery cacheQuery = createCacheQuery(cache, "blurb", "playing" );
  105. ResultIterator found = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.EAGER));
  106. try {
  107. assert found.hasNext();
  108. found.next();
  109. assert !found.hasNext();
  110. found.next();
  111. } finally {
  112. found.close();
  113. }
  114. }
  115. public void testMultipleResults() throws ParseException {
  116. loadTestingData();
  117. queryParser = createQueryParser("name");
  118. Query luceneQuery = queryParser.parse("goat");
  119. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  120. List<Object> found = cacheQuery.list();
  121. assert found.size() == 2;
  122. assertTrue(found.contains(person2));
  123. assertTrue(found.contains(person3));
  124. StaticTestingErrorHandler.assertAllGood(cache);
  125. }
  126. public void testModified() throws ParseException {
  127. loadTestingData();
  128. queryParser = createQueryParser("blurb");
  129. Query luceneQuery = queryParser.parse("playing");
  130. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  131. List<Object> found = cacheQuery.list();
  132. assert found.size() == 1;
  133. assert found.get(0).equals(person1);
  134. person1.setBlurb("Likes pizza");
  135. cache.put(key1, person1);
  136. queryParser = createQueryParser("blurb");
  137. luceneQuery = queryParser.parse("pizza");
  138. cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  139. found = cacheQuery.list();
  140. assert found.size() == 1;
  141. assert found.get(0).equals(person1);
  142. StaticTestingErrorHandler.assertAllGood(cache);
  143. }
  144. public void testAdded() throws ParseException {
  145. loadTestingData();
  146. queryParser = createQueryParser("name");
  147. Query luceneQuery = queryParser.parse("Goat");
  148. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  149. List<Object> found = cacheQuery.list();
  150. assert found.size() == 2 : "Size of list should be 2";
  151. assert found.contains(person2);
  152. assert found.contains(person3);
  153. assert !found.contains(person4) : "This should not contain object person4";
  154. person4 = new Person();
  155. person4.setName("Mighty Goat");
  156. person4.setBlurb("Also eats grass");
  157. cache.put("mighty", person4);
  158. luceneQuery = queryParser.parse("Goat");
  159. cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  160. found = cacheQuery.list();
  161. assert found.size() == 3 : "Size of list should be 3";
  162. assert found.contains(person2);
  163. assert found.contains(person3);
  164. assert found.contains(person4) : "This should now contain object person4";
  165. StaticTestingErrorHandler.assertAllGood(cache);
  166. }
  167. public void testRemoved() throws ParseException {
  168. loadTestingData();
  169. queryParser = createQueryParser("name");
  170. Query luceneQuery = queryParser.parse("Goat");
  171. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  172. List<Object> found = cacheQuery.list();
  173. assert found.size() == 2;
  174. assert found.contains(person2);
  175. assert found.contains(person3) : "This should still contain object person3";
  176. cache.remove(key3);
  177. luceneQuery = queryParser.parse("Goat");
  178. cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  179. found = cacheQuery.list();
  180. assert found.size() == 1;
  181. assert found.contains(person2);
  182. assert !found.contains(person3) : "The search should not return person3";
  183. StaticTestingErrorHandler.assertAllGood(cache);
  184. }
  185. public void testUpdated() throws ParseException {
  186. loadTestingData();
  187. queryParser = createQueryParser("name");
  188. Query luceneQuery = queryParser.parse("Goat");
  189. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  190. List<Object> found = cacheQuery.list();
  191. assert found.size() == 2 : "Size of list should be 2";
  192. assert found.contains(person2) : "The search should have person2";
  193. cache.put(key2, person1);
  194. luceneQuery = queryParser.parse("Goat");
  195. cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  196. found = cacheQuery.list();
  197. assert found.size() == 1 : "Size of list should be 1";
  198. assert !found.contains(person2) : "Person 2 should not be found now";
  199. assert !found.contains(person1) : "Person 1 should not be found because it does not meet the search criteria";
  200. StaticTestingErrorHandler.assertAllGood(cache);
  201. }
  202. public void testSetSort() throws ParseException {
  203. loadTestingData();
  204. Sort sort = new Sort( new SortField("age", SortField.Type.INT));
  205. queryParser = createQueryParser("name");
  206. Query luceneQuery = queryParser.parse("Goat");
  207. {
  208. CacheQuery cacheQuery = Search.getSearchManager( cache ).getQuery( luceneQuery );
  209. List<Object> found = cacheQuery.list();
  210. assert found.size() == 2;
  211. cacheQuery.sort( sort );
  212. found = cacheQuery.list();
  213. assert found.size() == 2;
  214. assert found.get( 0 ).equals( person3 ); // person3 is 25 and named Goat
  215. assert found.get( 1 ).equals( person2 ); // person2 is 30 and named Goat
  216. }
  217. StaticTestingErrorHandler.assertAllGood(cache);
  218. //Now change the stored values:
  219. person2.setAge(10);
  220. cache.put(key2, person2);
  221. {
  222. CacheQuery cacheQuery = Search.getSearchManager( cache ).getQuery( luceneQuery );
  223. List<Object> found = cacheQuery.list();
  224. assert found.size() == 2;
  225. cacheQuery.sort( sort );
  226. found = cacheQuery.list();
  227. assert found.size() == 2;
  228. assert found.get( 0 ).equals( person2 ); // person2 is 10 and named Goat
  229. assert found.get( 1 ).equals( person3 ); // person3 is 25 and named Goat
  230. }
  231. StaticTestingErrorHandler.assertAllGood(cache);
  232. }
  233. public void testSetFilter() throws ParseException {
  234. loadTestingData();
  235. queryParser = createQueryParser("name");
  236. Query luceneQuery = queryParser.parse("goat");
  237. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  238. List<Object> found = cacheQuery.list();
  239. assert found.size() == 2;
  240. BooleanQuery filter = new BooleanQuery.Builder().add(new PrefixQuery(new Term("blurb", "cheese")), Occur.FILTER).build();
  241. cacheQuery.filter(new QueryWrapperFilter(filter));
  242. found = cacheQuery.list();
  243. assert found.size() == 1;
  244. StaticTestingErrorHandler.assertAllGood(cache);
  245. }
  246. public void testLazyIterator() throws ParseException {
  247. loadTestingData();
  248. queryParser = createQueryParser("blurb");
  249. Query luceneQuery = queryParser.parse("playing");
  250. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  251. ResultIterator found = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.LAZY));
  252. try {
  253. assert found.hasNext();
  254. found.next();
  255. assert !found.hasNext();
  256. } finally {
  257. found.close();
  258. }
  259. StaticTestingErrorHandler.assertAllGood(cache);
  260. }
  261. @Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Unknown FetchMode null")
  262. public void testUnknownFetchModeIterator() throws ParseException {
  263. loadTestingData();
  264. queryParser = createQueryParser("blurb");
  265. Query luceneQuery = queryParser.parse("playing");
  266. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  267. ResultIterator found = cacheQuery.iterator(new FetchOptions(){
  268. public FetchOptions fetchMode(FetchMode fetchMode) {
  269. return null;
  270. }
  271. });
  272. try {
  273. assert found.hasNext();
  274. found.next();
  275. assert !found.hasNext();
  276. } finally {
  277. found.close();
  278. }
  279. }
  280. public void testIteratorWithDefaultOptions() throws ParseException {
  281. loadTestingData();
  282. queryParser = createQueryParser("blurb");
  283. Query luceneQuery = queryParser.parse("playing");
  284. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  285. ResultIterator found = cacheQuery.iterator();
  286. try {
  287. assert found.hasNext();
  288. found.next();
  289. assert !found.hasNext();
  290. } finally {
  291. found.close();
  292. }
  293. StaticTestingErrorHandler.assertAllGood(cache);
  294. }
  295. public void testExplain() throws ParseException {
  296. loadTestingData();
  297. queryParser = createQueryParser("blurb");
  298. Query luceneQuery = queryParser.parse("Eats");
  299. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  300. int matchCounter = 0;
  301. int i = 0;
  302. //The implementation is changed to this way as in case of NRT index manager the number of created documents may
  303. //differ comparing to the simple configuration.
  304. while (true) {
  305. try {
  306. Explanation found = cacheQuery.explain(i);
  307. if (found.isMatch())
  308. matchCounter++;
  309. i++;
  310. if (i >= 10 || matchCounter == 3)
  311. break;
  312. } catch(ArrayIndexOutOfBoundsException ex) {
  313. break;
  314. }
  315. }
  316. assertEquals(3, matchCounter);
  317. StaticTestingErrorHandler.assertAllGood(cache);
  318. }
  319. public void testFullTextFilterOnOff() throws ParseException {
  320. loadTestingData();
  321. queryParser = createQueryParser("blurb");
  322. Query luceneQuery = queryParser.parse("Eats");
  323. CacheQuery query = Search.getSearchManager(cache).getQuery(luceneQuery);
  324. FullTextFilter filter = query.enableFullTextFilter("personFilter");
  325. filter.setParameter("blurbText", "cheese");
  326. assertEquals(1, query.getResultSize());
  327. List result = query.list();
  328. Person person = (Person) result.get(0);
  329. assertEquals("Mini Goat", person.getName());
  330. assertEquals("Eats cheese", person.getBlurb());
  331. //Disabling the fullTextFilter.
  332. query.disableFullTextFilter("personFilter");
  333. assertEquals(3, query.getResultSize());
  334. StaticTestingErrorHandler.assertAllGood(cache);
  335. }
  336. @Test(expectedExceptions = UnsupportedOperationException.class)
  337. public void testIteratorRemove() throws ParseException {
  338. loadTestingData();
  339. queryParser = createQueryParser("blurb");
  340. Query luceneQuery = queryParser.parse("Eats");
  341. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  342. ResultIterator iterator = cacheQuery.iterator();
  343. try {
  344. if (iterator.hasNext()) {
  345. Object next = iterator.next();
  346. iterator.remove();
  347. }
  348. } finally {
  349. iterator.close();
  350. }
  351. StaticTestingErrorHandler.assertAllGood(cache);
  352. }
  353. public void testLazyIteratorWithOffset() throws ParseException {
  354. loadTestingData();
  355. queryParser = createQueryParser("blurb");
  356. Query luceneQuery = queryParser.parse("Eats");
  357. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery).firstResult(1);
  358. ResultIterator iterator = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.LAZY));
  359. try {
  360. assertEquals(2, countElements(iterator));
  361. } finally {
  362. iterator.close();
  363. }
  364. StaticTestingErrorHandler.assertAllGood(cache);
  365. }
  366. @Test(expectedExceptions = IllegalArgumentException.class)
  367. public void testSearchManagerWithNullCache() throws ParseException {
  368. loadTestingData();
  369. queryParser = createQueryParser("blurb");
  370. Query luceneQuery = queryParser.parse("fish");
  371. CacheQuery cacheQuery = Search.getSearchManager(null).getQuery(luceneQuery).firstResult(1);
  372. }
  373. @Test(expectedExceptions = IllegalArgumentException.class)
  374. public void testLazyIteratorWithInvalidFetchSize() throws ParseException {
  375. loadTestingData();
  376. queryParser = createQueryParser("blurb");
  377. Query luceneQuery = queryParser.parse("Eats");
  378. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery).firstResult(1);
  379. ResultIterator found = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.LAZY).fetchSize(0));
  380. }
  381. @Test(expectedExceptions = NoSuchElementException.class)
  382. public void testLazyIteratorWithNoElementsFound() throws ParseException {
  383. loadTestingData();
  384. queryParser = createQueryParser("blurb");
  385. Query luceneQuery = queryParser.parse("fish");
  386. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery).firstResult(1);
  387. ResultIterator found = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.LAZY));
  388. try {
  389. found.next();
  390. } finally {
  391. found.close();
  392. }
  393. }
  394. @Test(expectedExceptions = IllegalArgumentException.class)
  395. public void testIteratorWithNullFetchMode() throws ParseException {
  396. loadTestingData();
  397. queryParser = createQueryParser("blurb");
  398. Query luceneQuery = queryParser.parse("Eats");
  399. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery).firstResult(1);
  400. ResultIterator found = cacheQuery.iterator(new FetchOptions().fetchMode(null));
  401. try {
  402. found.next();
  403. } finally {
  404. found.close();
  405. }
  406. }
  407. public void testSearchKeyTransformer() throws ParseException {
  408. SearchManagerImplementor manager = (SearchManagerImplementor) Search.getSearchManager(cache);
  409. manager.registerKeyTransformer(CustomKey3.class, CustomKey3Transformer.class);
  410. loadTestingDataWithCustomKey();
  411. queryParser = createQueryParser("blurb");
  412. Query luceneQuery = queryParser.parse("Eats");
  413. CacheQuery cacheQuery = manager.getQuery(luceneQuery);
  414. ResultIterator iterator = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.LAZY));
  415. try {
  416. assertEquals(3, countElements(iterator));
  417. } finally {
  418. iterator.close();
  419. }
  420. StaticTestingErrorHandler.assertAllGood(cache);
  421. }
  422. @Test(expectedExceptions = IllegalArgumentException.class)
  423. public void testSearchWithWrongCache() throws ParseException {
  424. Cache cache = mock(CacheImpl.class);
  425. when(cache.getAdvancedCache()).thenReturn(null);
  426. SearchManager manager = Search.getSearchManager(cache);
  427. }
  428. //Another test just for covering Search.java instantiation, although it is unnecessary. As well as covering the
  429. //valueOf() method of FetchMode, again just for adding coverage.
  430. public void testSearchManagerWithInstantiation() throws ParseException {
  431. loadTestingData();
  432. queryParser = createQueryParser("blurb");
  433. Query luceneQuery = queryParser.parse("playing");
  434. Search search = new Search();
  435. CacheQuery cacheQuery = search.getSearchManager(cache).getQuery(luceneQuery);
  436. ResultIterator found = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.valueOf("LAZY")));
  437. try {
  438. assert found.hasNext();
  439. found.next();
  440. assert !found.hasNext();
  441. } finally {
  442. found.close();
  443. }
  444. }
  445. public void testGetResultSize() throws ParseException {
  446. loadTestingData();
  447. queryParser = createQueryParser("blurb");
  448. Query luceneQuery = queryParser.parse("playing");
  449. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  450. assert cacheQuery.getResultSize() == 1;
  451. StaticTestingErrorHandler.assertAllGood(cache);
  452. }
  453. public void testMaxResults() throws ParseException {
  454. loadTestingData();
  455. queryParser = createQueryParser("blurb");
  456. Query luceneQuery = queryParser.parse("eats");
  457. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery)
  458. .maxResults(1);
  459. assertEquals(3, cacheQuery.getResultSize()); // NOTE: getResultSize() ignores pagination (maxResults, firstResult)
  460. assertEquals(1, cacheQuery.list().size());
  461. ResultIterator eagerIterator = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.EAGER));
  462. try {
  463. assertEquals(1, countElements(eagerIterator));
  464. } finally {
  465. eagerIterator.close();
  466. }
  467. ResultIterator lazyIterator = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.LAZY));
  468. try {
  469. assertEquals(1, countElements(lazyIterator));
  470. } finally {
  471. lazyIterator.close();
  472. }
  473. ResultIterator defaultIterator = cacheQuery.iterator();
  474. try {
  475. assertEquals(1, countElements(defaultIterator));
  476. } finally {
  477. defaultIterator.close();
  478. }
  479. StaticTestingErrorHandler.assertAllGood(cache);
  480. }
  481. private int countElements(ResultIterator iterator) {
  482. int count = 0;
  483. while (iterator.hasNext()) {
  484. iterator.next();
  485. count++;
  486. }
  487. return count;
  488. }
  489. public void testClear() {
  490. loadTestingData();
  491. // Create a term that will return me everyone called Navin.
  492. Term navin = new Term("name", "navin");
  493. // Create a term that I know will return me everything with name goat.
  494. Term goat = new Term ("name", "goat");
  495. BooleanQuery luceneQuery = new BooleanQuery.Builder()
  496. .add(new TermQuery(goat), Occur.SHOULD)
  497. .add(new TermQuery(navin), Occur.SHOULD)
  498. .build();
  499. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  500. // We know that we've got all 3 hits.
  501. assert cacheQuery.getResultSize() == 3 : "Expected 3, got " + cacheQuery.getResultSize();
  502. cache.clear();
  503. cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  504. assert cacheQuery.getResultSize() == 0;
  505. StaticTestingErrorHandler.assertAllGood(cache);
  506. }
  507. public void testTypeFiltering() throws ParseException {
  508. loadTestingData();
  509. queryParser = createQueryParser("blurb");
  510. Query luceneQuery = queryParser.parse("grass");
  511. CacheQuery cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery);
  512. List<Object> found = cacheQuery.list();
  513. assert found.size() == 2;
  514. assert found.containsAll(asList(person2, anotherGrassEater));
  515. queryParser = createQueryParser("blurb");
  516. luceneQuery = queryParser.parse("grass");
  517. cacheQuery = Search.getSearchManager(cache).getQuery(luceneQuery, AnotherGrassEater.class);
  518. found = cacheQuery.list();
  519. assert found.size() == 1;
  520. assert found.get(0).equals(anotherGrassEater);
  521. StaticTestingErrorHandler.assertAllGood(cache);
  522. }
  523. @Override
  524. protected EmbeddedCacheManager createCacheManager() throws Exception {
  525. ConfigurationBuilder cfg = getDefaultStandaloneCacheConfig(true);
  526. cfg
  527. .indexing()
  528. .index(Index.ALL)
  529. .addIndexedEntity(Person.class)
  530. .addIndexedEntity(AnotherGrassEater.class)
  531. .addProperty("default.directory_provider", "ram")
  532. .addProperty("error_handler", "org.infinispan.query.helper.StaticTestingErrorHandler")
  533. .addProperty("lucene_version", "LUCENE_CURRENT");
  534. enhanceConfig(cfg);
  535. return TestCacheManagerFactory.createCacheManager(cfg);
  536. }
  537. protected void loadTestingData() {
  538. prepareTestingData();
  539. cache.put(key1, person1);
  540. // person2 is verified as number of matches in multiple tests,
  541. // so verify duplicate insertion doesn't affect result counts:
  542. cache.put(key2, person2);
  543. cache.put(key2, person2);
  544. cache.put(key2, person2);
  545. cache.put(key3, person3);
  546. cache.put(anotherGrassEaterKey, anotherGrassEater);
  547. StaticTestingErrorHandler.assertAllGood(cache);
  548. }
  549. protected void loadTestingDataWithCustomKey() {
  550. prepareTestingData();
  551. CustomKey3 customeKey1 = new CustomKey3(key1);
  552. CustomKey3 customeKey2 = new CustomKey3(key2);
  553. CustomKey3 customeKey3 = new CustomKey3(key3);
  554. cache.put(customeKey1, person1);
  555. // person2 is verified as number of matches in multiple tests,
  556. // so verify duplicate insertion doesn't affect result counts:
  557. cache.put(customeKey2, person2);
  558. cache.put(customeKey2, person2);
  559. cache.put(customeKey2, person2);
  560. cache.put(customeKey3, person3);
  561. cache.put(anotherGrassEaterKey, anotherGrassEater);
  562. StaticTestingErrorHandler.assertAllGood(cache);
  563. }
  564. protected void prepareTestingData() {
  565. person1 = new Person();
  566. person1.setName("Navin Surtani");
  567. person1.setAge(20);
  568. person1.setBlurb("Likes playing WoW");
  569. person1.setNonSearchableField("test1");
  570. person2 = new Person();
  571. person2.setName("Big Goat");
  572. person2.setAge(30);
  573. person2.setBlurb("Eats grass");
  574. person2.setNonSearchableField("test2");
  575. person3 = new Person();
  576. person3.setName("Mini Goat");
  577. person3.setAge(25);
  578. person3.setBlurb("Eats cheese");
  579. person3.setNonSearchableField("test3");
  580. anotherGrassEater = new AnotherGrassEater("Another grass-eater", "Eats grass");
  581. StaticTestingErrorHandler.assertAllGood(cache);
  582. }
  583. protected void enhanceConfig(ConfigurationBuilder c) {
  584. // no op, meant to be overridden
  585. }
  586. }