From: <die...@us...> - 2010-09-10 09:11:53
|
Revision: 3018 http://openutils.svn.sourceforge.net/openutils/?rev=3018&view=rev Author: diego_schivo Date: 2010-09-10 09:11:46 +0000 (Fri, 10 Sep 2010) Log Message: ----------- CRIT-26 unit test failing + fix Modified Paths: -------------- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java Modified: trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java =================================================================== --- trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java 2010-09-10 08:41:52 UTC (rev 3017) +++ trunk/openutils-mgnlcriteria/src/main/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclQueryDecorator.java 2010-09-10 09:11:46 UTC (rev 3018) @@ -91,9 +91,11 @@ } } q = descendantSelfAxisQuery(booleanQuery(q), new MatchAllDocsQuery()); - Occur o = (permission.getPermissions() & Permission.READ) != 0 - ? Occur.MUST - : Occur.MUST_NOT; + if ((permission.getPermissions() & Permission.READ) == 0) + { + q = notQuery(q); + } + Occur o = Occur.SHOULD; aclQueries.add(new Object[]{q, o }); } } @@ -120,17 +122,15 @@ // combines the original lucene query with the acl ones if (!aclQueries.isEmpty()) { - Query[] qs = new Query[1 + aclQueries.size()]; + Query[] qs = new Query[aclQueries.size()]; Occur[] os = new Occur[qs.length]; - qs[0] = query; - os[0] = Occur.MUST; - for (int i = 1; i < qs.length; i++) + for (int i = 0; i < qs.length; i++) { - Object[] qo = aclQueries.get(i - 1); + Object[] qo = aclQueries.get(i); qs[i] = (Query) qo[0]; os[i] = (Occur) qo[1]; } - query = booleanQuery(qs, os); + query = booleanQuery(query, booleanQuery(qs, os)); } return query; Modified: trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java =================================================================== --- trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java 2010-09-10 08:41:52 UTC (rev 3017) +++ trunk/openutils-mgnlcriteria/src/main/java/org/apache/jackrabbit/core/query/lucene/QueryDecoratorSupport.java 2010-09-10 09:11:46 UTC (rev 3018) @@ -86,4 +86,9 @@ { return new DescendantSelfAxisQuery(cq, sq, 1); } + + protected Query notQuery(Query cq) + { + return new NotQuery(cq); + } } Modified: trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java =================================================================== --- trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java 2010-09-10 08:41:52 UTC (rev 3017) +++ trunk/openutils-mgnlcriteria/src/test/java/net/sourceforge/openutils/mgnlcriteria/jcr/query/lucene/AclSearchIndexTest.java 2010-09-10 09:11:46 UTC (rev 3018) @@ -34,8 +34,10 @@ import it.openutils.mgnlutils.test.TestNgRepositoryTestcase; import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.Calendar; import java.util.Collections; +import java.util.List; import java.util.Map; import net.sourceforge.openutils.mgnlcriteria.jcr.query.AdvancedResult; @@ -50,181 +52,184 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; + /** - * Tests that this custom search index modifies the lucene query according to - * ACL rules. - * + * Tests that this custom search index modifies the lucene query according to ACL rules. * @author dschivo */ @RepositoryTestConfiguration(jackrabbitRepositoryConfig = "/crit-repository/jackrabbit-acl-search-index-test-configuration.xml", repositoryConfig = "/crit-repository/test-repositories.xml", bootstrapFiles = "/crit-bootstrap/website.pets.xml") -public class AclSearchIndexTest extends TestNgRepositoryTestcase { +public class AclSearchIndexTest extends TestNgRepositoryTestcase +{ - /** - * {@inheritDoc} - */ - @Override - @BeforeClass - public void setUp() throws Exception { - super.setUp(); + /** + * {@inheritDoc} + */ + @Override + @BeforeClass + public void setUp() throws Exception + { + super.setUp(); - // Nodes in this workspace: - // - pets (title=Pets) - // --- cats (title=Cats) - // ----- 1 (title=Leo, petType=cat, birthDate=2000-09-07) - // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04) - // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04) - // ----- 13 (title=Sly, petType=cat, birthDate=2002-06-08) - // --- dogs (title=Dogs) - // ----- 3 (title=Rosy, petType=dog, birthDate=2001-04-17) - // ----- 4 (title=Jewel, petType=dog, birthDate=2000-03-07) - // ----- 10 (title=Mulligan, petType=dog, birthDate=1997-02-24) - // ----- 12 (title=Lucky, petType=dog, birthDate=2000-06-24) - // --- lizards (title=Lizards) - // ----- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30) - // --- snakes (title=Snakes) - // ----- 6 (title=George, petType=snake, birthDate=2000-01-20) - // --- birds (title=Birds) - // ----- 9 (title=Lucky, petType=bird, birthDate=1999-08-06) - // ----- 11 (title=Freddy, petType=bird, birthDate=2000-03-09) - // --- hamsters (title=Hamsters) - // ----- 2 (title=Basil, petType=hamster, birthDate=2002-08-06) + // Nodes in this workspace: + // - pets (title=Pets) + // --- cats (title=Cats) + // ----- 1 (title=Leo, petType=cat, birthDate=2000-09-07) + // ----- 7 (title=Samantha, petType=cat, birthDate=1995-09-04) + // ----- 8 (title=Max, petType=cat, birthDate=1995-09-04) + // ----- 13 (title=Sly, petType=cat, birthDate=2002-06-08) + // --- dogs (title=Dogs) + // ----- 3 (title=Rosy, petType=dog, birthDate=2001-04-17) + // ----- 4 (title=Jewel, petType=dog, birthDate=2000-03-07) + // ----- 10 (title=Mulligan, petType=dog, birthDate=1997-02-24) + // ----- 12 (title=Lucky, petType=dog, birthDate=2000-06-24) + // --- lizards (title=Lizards) + // ----- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30) + // --- snakes (title=Snakes) + // ----- 6 (title=George, petType=snake, birthDate=2000-01-20) + // --- birds (title=Birds) + // ----- 9 (title=Lucky, petType=bird, birthDate=1999-08-06) + // ----- 11 (title=Freddy, petType=bird, birthDate=2000-03-09) + // --- hamsters (title=Hamsters) + // ----- 2 (title=Basil, petType=hamster, birthDate=2002-08-06) - HierarchyManager hm = MgnlContext - .getHierarchyManager(ContentRepository.WEBSITE); - hm.save(); - } + HierarchyManager hm = MgnlContext.getHierarchyManager(ContentRepository.WEBSITE); + hm.save(); + } - /** - * {@inheritDoc} - */ - @SuppressWarnings("unchecked") - @Override - protected void modifyContextesToUseRealRepository() { - super.modifyContextesToUseRealRepository(); + /** + * {@inheritDoc} + */ + @SuppressWarnings("unchecked") + @Override + protected void modifyContextesToUseRealRepository() + { + super.modifyContextesToUseRealRepository(); - MockWebContext mwc = (MockWebContext) MgnlContext.getInstance(); - DefaultRepositoryStrategy drs = new DefaultRepositoryStrategy(mwc); - try { - Field hmsField = AbstractRepositoryStrategy.class - .getDeclaredField("hierarchyManagers"); - hmsField.setAccessible(true); - Map hms = (Map) hmsField.get(drs); - hms.put("website_website", MgnlContext - .getHierarchyManager(ContentRepository.WEBSITE)); - } catch (Exception e) { - throw new RuntimeException(e); - } + MockWebContext mwc = (MockWebContext) MgnlContext.getInstance(); + DefaultRepositoryStrategy drs = new DefaultRepositoryStrategy(mwc); + try + { + Field hmsField = AbstractRepositoryStrategy.class.getDeclaredField("hierarchyManagers"); + hmsField.setAccessible(true); + Map hms = (Map) hmsField.get(drs); + hms.put("website_website", MgnlContext.getHierarchyManager(ContentRepository.WEBSITE)); + } + catch (Exception e) + { + throw new RuntimeException(e); + } - AccessManager am = new AccessManagerImpl(); - try { - Field amsField = DefaultRepositoryStrategy.class - .getDeclaredField("accessManagers"); - amsField.setAccessible(true); - Map ams = (Map) amsField.get(drs); - ams.put("website_website", am); - } catch (Exception e) { - throw new RuntimeException(e); - } - mwc.setRepositoryStrategy(drs); - } + AccessManager am = new AccessManagerImpl(); + try + { + Field amsField = DefaultRepositoryStrategy.class.getDeclaredField("accessManagers"); + amsField.setAccessible(true); + Map ams = (Map) amsField.get(drs); + ams.put("website_website", am); + } + catch (Exception e) + { + throw new RuntimeException(e); + } + mwc.setRepositoryStrategy(drs); + } - /** - * Tests that the execution of a query on all pets returns dogs only, - * because of an ACL rule. - * - * @throws Exception - */ - @Test - public void testDogsOnly() throws Exception { - // ACL rule: read permission on dogs subtree - Permission p = new PermissionImpl(); - p.setPattern(new SimpleUrlPattern("/pets/dogs/*")); - p.setPermissions(Permission.READ); - MgnlContext.getAccessManager(ContentRepository.WEBSITE) - .setPermissionList(Collections.singletonList(p)); + /** + * Tests that the execution of a query on all pets returns dogs only, because of an ACL rule. + * @throws Exception + */ + @Test + public void testDogsOnly() throws Exception + { + // ACL rule: read permission on dogs subtree + List<Permission> pList = new ArrayList<Permission>(); + Permission p; + p = new PermissionImpl(); + p.setPattern(new SimpleUrlPattern("/pets/*")); + p.setPermissions(Permission.NONE); + pList.add(p); + p = new PermissionImpl(); + p.setPattern(new SimpleUrlPattern("/pets/dogs/*")); + p.setPermissions(Permission.READ); + pList.add(p); + MgnlContext.getAccessManager(ContentRepository.WEBSITE).setPermissionList(pList); - Calendar begin = Calendar.getInstance(); - begin.set(1999, Calendar.JANUARY, 1); - Calendar end = Calendar.getInstance(); - end.set(2001, Calendar.DECEMBER, 31); + Calendar begin = Calendar.getInstance(); + begin.set(1999, Calendar.JANUARY, 1); + Calendar end = Calendar.getInstance(); + end.set(2001, Calendar.DECEMBER, 31); - Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace( - ContentRepository.WEBSITE).setBasePath("/pets").add( - Restrictions.between("@birthDate", begin, end)).addOrder( - Order.asc("@birthDate")); + Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE).setBasePath( + "/pets").add(Restrictions.between("@birthDate", begin, end)).addOrder(Order.asc("@birthDate")); - // Query results: - // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06) - // --- 6 (title=George, petType=snake, birthDate=2000-01-20) - // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07) - // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09) - // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24) - // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07) - // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30) - // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17) - AdvancedResult result = criteria.execute(); + // Query results: + // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06) + // --- 6 (title=George, petType=snake, birthDate=2000-01-20) + // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07) + // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09) + // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24) + // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07) + // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30) + // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17) + AdvancedResult result = criteria.execute(); - // Accessible results (dogs only): - // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07) - // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24) - // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17) - ResultIterator<AdvancedResultItem> iterator = result.getItems(); + // Accessible results (dogs only): + // --- 4 (title=Jewel, petType=dog, birthDate=2000-03-07) + // --- 12 (title=Lucky, petType=dog, birthDate=2000-06-24) + // --- 3 (title=Rosy, petType=dog, birthDate=2001-04-17) + ResultIterator<AdvancedResultItem> iterator = result.getItems(); - Assert.assertTrue(iterator.hasNext()); - Assert.assertEquals(iterator.next().getName(), "4"); - Assert.assertTrue(iterator.hasNext()); - Assert.assertEquals(iterator.next().getName(), "12"); - Assert.assertTrue(iterator.hasNext()); - Assert.assertEquals(iterator.next().getName(), "3"); - Assert.assertFalse(iterator.hasNext()); - } + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals(iterator.next().getName(), "4"); + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals(iterator.next().getName(), "12"); + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals(iterator.next().getName(), "3"); + Assert.assertFalse(iterator.hasNext()); + } - /** - * Tests that the execution of a query on all pets does not return any dog, - * because of an ACL rule. - * - * @throws Exception - */ - @Test - public void testDogsExcluded() throws Exception { - // ACL rule: dogs subtree is denied - Permission p = new PermissionImpl(); - p.setPattern(new SimpleUrlPattern("/pets/dogs/*")); - p.setPermissions(Permission.NONE); - MgnlContext.getAccessManager(ContentRepository.WEBSITE) - .setPermissionList(Collections.singletonList(p)); + /** + * Tests that the execution of a query on all pets does not return any dog, because of an ACL rule. + * @throws Exception + */ + @Test + public void testDogsExcluded() throws Exception + { + // ACL rule: dogs subtree is denied + Permission p = new PermissionImpl(); + p.setPattern(new SimpleUrlPattern("/pets/dogs/*")); + p.setPermissions(Permission.NONE); + MgnlContext.getAccessManager(ContentRepository.WEBSITE).setPermissionList(Collections.singletonList(p)); - Calendar begin = Calendar.getInstance(); - begin.set(1999, Calendar.JANUARY, 1); - Calendar end = Calendar.getInstance(); - end.set(2001, Calendar.DECEMBER, 31); + Calendar begin = Calendar.getInstance(); + begin.set(1999, Calendar.JANUARY, 1); + Calendar end = Calendar.getInstance(); + end.set(2001, Calendar.DECEMBER, 31); - Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace( - ContentRepository.WEBSITE).setBasePath("/pets").add( - Restrictions.between("@birthDate", begin, end)).addOrder( - Order.asc("@birthDate")); + Criteria criteria = JCRCriteriaFactory.createCriteria().setWorkspace(ContentRepository.WEBSITE).setBasePath( + "/pets").add(Restrictions.between("@birthDate", begin, end)).addOrder(Order.asc("@birthDate")); - AdvancedResult result = criteria.execute(); + AdvancedResult result = criteria.execute(); - // Accessible results (dogs excluded): - // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06) - // --- 6 (title=George, petType=snake, birthDate=2000-01-20) - // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09) - // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07) - // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30) - ResultIterator<AdvancedResultItem> iterator = result.getItems(); + // Accessible results (dogs excluded): + // --- 9 (title=Lucky, petType=bird, birthDate=1999-08-06) + // --- 6 (title=George, petType=snake, birthDate=2000-01-20) + // --- 11 (title=Freddy, petType=bird, birthDate=2000-03-09) + // --- 1 (title=Leo, petType=cat, birthDate=2000-09-07) + // --- 5 (title=Iggy, petType=lizard, birthDate=2000-11-30) + ResultIterator<AdvancedResultItem> iterator = result.getItems(); - Assert.assertTrue(iterator.hasNext()); - Assert.assertEquals(iterator.next().getName(), "9"); - Assert.assertTrue(iterator.hasNext()); - Assert.assertEquals(iterator.next().getName(), "6"); - Assert.assertTrue(iterator.hasNext()); - Assert.assertEquals(iterator.next().getName(), "11"); - Assert.assertTrue(iterator.hasNext()); - Assert.assertEquals(iterator.next().getName(), "1"); - Assert.assertTrue(iterator.hasNext()); - Assert.assertEquals(iterator.next().getName(), "5"); - Assert.assertFalse(iterator.hasNext()); - } + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals(iterator.next().getName(), "9"); + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals(iterator.next().getName(), "6"); + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals(iterator.next().getName(), "11"); + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals(iterator.next().getName(), "1"); + Assert.assertTrue(iterator.hasNext()); + Assert.assertEquals(iterator.next().getName(), "5"); + Assert.assertFalse(iterator.hasNext()); + } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |