PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

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

https://github.com/an1310/infinispan
Java | 281 lines | 217 code | 51 blank | 13 comment | 7 complexity | 9d11d0aef608dafafacb4b4909f09f58 MD5 | raw file
  1. package org.infinispan.query.blackbox;
  2. import static org.infinispan.query.helper.TestQueryHelperFactory.createQueryParser;
  3. import java.util.List;
  4. import java.util.NoSuchElementException;
  5. import org.apache.lucene.queryparser.classic.ParseException;
  6. import org.apache.lucene.queryparser.classic.QueryParser;
  7. import org.apache.lucene.search.BooleanQuery;
  8. import org.apache.lucene.search.MatchAllDocsQuery;
  9. import org.apache.lucene.search.Sort;
  10. import org.apache.lucene.search.SortField;
  11. import org.apache.lucene.search.BooleanClause.Occur;
  12. import org.infinispan.Cache;
  13. import org.infinispan.configuration.cache.CacheMode;
  14. import org.infinispan.configuration.cache.ConfigurationBuilder;
  15. import org.infinispan.configuration.cache.Index;
  16. import org.infinispan.query.CacheQuery;
  17. import org.infinispan.query.FetchOptions;
  18. import org.infinispan.query.ResultIterator;
  19. import org.infinispan.query.Search;
  20. import org.infinispan.query.SearchManager;
  21. import org.infinispan.query.helper.StaticTestingErrorHandler;
  22. import org.infinispan.query.test.Person;
  23. import org.infinispan.test.MultipleCacheManagersTest;
  24. import org.testng.annotations.Test;
  25. import static org.junit.Assert.assertEquals;
  26. /**
  27. * ClusteredQueryTest.
  28. *
  29. * @author Israel Lacerra <israeldl@gmail.com>
  30. * @since 5.1
  31. */
  32. @Test(groups = "functional", testName = "query.blackbox.ClusteredQueryTest")
  33. public class ClusteredQueryTest extends MultipleCacheManagersTest {
  34. private final QueryParser queryParser = createQueryParser("blurb");
  35. Cache<String, Person> cacheAMachine1, cacheAMachine2;
  36. CacheQuery cacheQuery;
  37. public ClusteredQueryTest() {
  38. // BasicConfigurator.configure();
  39. cleanup = CleanupPhase.AFTER_METHOD;
  40. }
  41. protected void enhanceConfig(ConfigurationBuilder cacheCfg) {
  42. // meant to be overridden
  43. }
  44. @Override
  45. protected void createCacheManagers() throws Throwable {
  46. ConfigurationBuilder cacheCfg = getDefaultClusteredCacheConfig(getCacheMode(), false);
  47. cacheCfg
  48. .indexing()
  49. .index(Index.LOCAL)
  50. .addProperty("default.directory_provider", "ram")
  51. .addProperty("error_handler", "org.infinispan.query.helper.StaticTestingErrorHandler")
  52. .addProperty("lucene_version", "LUCENE_CURRENT");
  53. enhanceConfig(cacheCfg);
  54. List<Cache<String, Person>> caches = createClusteredCaches(2, cacheCfg);
  55. cacheAMachine1 = caches.get(0);
  56. cacheAMachine2 = caches.get(1);
  57. }
  58. protected CacheMode getCacheMode() {
  59. return CacheMode.REPL_SYNC;
  60. }
  61. protected void prepareTestData() {
  62. Person person1 = new Person();
  63. person1.setName("NavinSurtani");
  64. person1.setBlurb("Likes playing WoW");
  65. person1.setAge(45);
  66. Person person2 = new Person();
  67. person2.setName("BigGoat");
  68. person2.setBlurb("Eats grass");
  69. person2.setAge(30);
  70. Person person3 = new Person();
  71. person3.setName("MiniGoat");
  72. person3.setBlurb("Eats cheese");
  73. person3.setAge(35);
  74. // Put the 3 created objects in the cache1.
  75. cacheAMachine2.put("Navin", person1);
  76. cacheAMachine1.put("BigGoat", person2);
  77. cacheAMachine1.put("MiniGoat", person3);
  78. Person person4 = new Person();
  79. person4.setName("MightyGoat");
  80. person4.setBlurb("Also eats grass");
  81. person4.setAge(66);
  82. cacheAMachine1.put("newOne", person4);
  83. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  84. }
  85. public void testLazyOrdered() throws ParseException {
  86. populateCache();
  87. // applying sort
  88. SortField sortField = new SortField("age", SortField.Type.INT);
  89. Sort sort = new Sort(sortField);
  90. cacheQuery.sort(sort);
  91. for (int i = 0; i < 2; i ++) {
  92. ResultIterator iterator = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.LAZY));
  93. try {
  94. assert cacheQuery.getResultSize() == 4 : cacheQuery.getResultSize();
  95. int previousAge = 0;
  96. while (iterator.hasNext()) {
  97. Person person = (Person) iterator.next();
  98. assert person.getAge() > previousAge;
  99. previousAge = person.getAge();
  100. }
  101. }
  102. finally {
  103. iterator.close();
  104. }
  105. }
  106. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  107. }
  108. public void testLazyNonOrdered() throws ParseException {
  109. populateCache();
  110. ResultIterator iterator = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.LAZY));
  111. try {
  112. assert cacheQuery.getResultSize() == 4 : cacheQuery.getResultSize();
  113. }
  114. finally {
  115. iterator.close();
  116. }
  117. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  118. }
  119. public void testLocalQuery() throws ParseException {
  120. populateCache();
  121. final SearchManager searchManager1 = Search.getSearchManager(cacheAMachine1);
  122. final CacheQuery localQuery1 = searchManager1.getQuery(createLuceneQuery());
  123. assertEquals(3, localQuery1.getResultSize());
  124. final SearchManager searchManager2 = Search.getSearchManager(cacheAMachine2);
  125. final CacheQuery localQuery2 = searchManager2.getQuery(createLuceneQuery());
  126. assertEquals(1, localQuery2.getResultSize());
  127. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  128. }
  129. public void testEagerOrdered() throws ParseException {
  130. populateCache();
  131. // applying sort
  132. SortField sortField = new SortField("age", SortField.Type.INT);
  133. Sort sort = new Sort(sortField);
  134. cacheQuery.sort(sort);
  135. ResultIterator iterator = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.EAGER));
  136. try {
  137. assertEquals(4, cacheQuery.getResultSize());
  138. int previousAge = 0;
  139. while (iterator.hasNext()) {
  140. Person person = (Person) iterator.next();
  141. assert person.getAge() > previousAge;
  142. previousAge = person.getAge();
  143. }
  144. } finally {
  145. iterator.close();
  146. }
  147. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  148. }
  149. @Test(expectedExceptions = NoSuchElementException.class, expectedExceptionsMessageRegExp = "Out of boundaries")
  150. public void testIteratorNextOutOfBounds() throws Exception {
  151. populateCache();
  152. cacheQuery.maxResults(1);
  153. ResultIterator iterator = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.EAGER));
  154. try {
  155. assert iterator.hasNext();
  156. iterator.next();
  157. assert !iterator.hasNext();
  158. iterator.next();
  159. } finally {
  160. iterator.close();
  161. }
  162. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  163. }
  164. @Test(expectedExceptions = UnsupportedOperationException.class)
  165. public void testIteratorRemove() throws Exception {
  166. populateCache();
  167. cacheQuery.maxResults(1);
  168. ResultIterator iterator = cacheQuery.iterator(new FetchOptions().fetchMode(FetchOptions.FetchMode.EAGER));
  169. try {
  170. assert iterator.hasNext();
  171. iterator.remove();
  172. } finally {
  173. iterator.close();
  174. }
  175. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  176. }
  177. public void testList() throws ParseException {
  178. populateCache();
  179. // applying sort
  180. SortField sortField = new SortField("age", SortField.Type.INT);
  181. Sort sort = new Sort(sortField);
  182. cacheQuery.sort(sort);
  183. List<Object> results = cacheQuery.list();
  184. assert results.size() == 4 : cacheQuery.getResultSize();
  185. int previousAge = 0;
  186. for (Object result : results) {
  187. Person person = (Person) result;
  188. assert person.getAge() > previousAge;
  189. previousAge = person.getAge();
  190. }
  191. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  192. }
  193. public void testGetResultSizeList() throws ParseException {
  194. populateCache();
  195. assertEquals(4, cacheQuery.getResultSize());
  196. }
  197. public void testPagination() throws ParseException {
  198. populateCache();
  199. cacheQuery.firstResult(2);
  200. cacheQuery.maxResults(1);
  201. // applying sort
  202. SortField sortField = new SortField("age", SortField.Type.INT);
  203. Sort sort = new Sort(sortField);
  204. cacheQuery.sort(sort);
  205. List<Object> results = cacheQuery.list();
  206. assertEquals(1, results.size());
  207. assertEquals(4, cacheQuery.getResultSize());
  208. Person result = (Person) results.get(0);
  209. assertEquals(45, result.getAge());
  210. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  211. }
  212. public void testQueryAll() throws ParseException {
  213. populateCache();
  214. CacheQuery clusteredQuery = Search.getSearchManager(cacheAMachine1)
  215. .getClusteredQuery(new MatchAllDocsQuery(), Person.class);
  216. assertEquals(4, clusteredQuery.list().size());
  217. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  218. }
  219. private void populateCache() throws ParseException {
  220. prepareTestData();
  221. cacheQuery = Search.getSearchManager(cacheAMachine1).getClusteredQuery(createLuceneQuery());
  222. StaticTestingErrorHandler.assertAllGood(cacheAMachine1, cacheAMachine2);
  223. }
  224. private BooleanQuery createLuceneQuery() throws ParseException {
  225. BooleanQuery luceneQuery = new BooleanQuery();
  226. luceneQuery.add(queryParser.parse("eats"), Occur.SHOULD);
  227. luceneQuery.add(queryParser.parse("playing"), Occur.SHOULD);
  228. return luceneQuery;
  229. }
  230. }