public void testSortOrder1() throws RepositoryException { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setCondition(builder. exists("@color")); builder.setSortOrder("@color", Direction.DESCENDING); } }); assertTrue(result.hasNext()); String prev = null; while (result.hasNext()) { Authorizable authorizable = result.next(); Value[] color = authorizable.getProperty("color"); assertNotNull(color); assertEquals(1, color.length); assertTrue(prev == null || prev.compareToIgnoreCase(color[0].getString()) >= 0); prev = color[0].getString(); } }
public void testScopeWithOffset() throws RepositoryException { final int offset = 5; final int count = 10000; Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setScope("vertebrates", false); builder.setSortOrder("profile/@weight", Direction.ASCENDING); builder.setLimit(offset, count); } }); Iterator<Authorizable> expected = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setScope("vertebrates", false); builder.setSortOrder("profile/@weight", Direction.ASCENDING); } }); skip(expected, offset); assertSame(expected, result, count); assertFalse(result.hasNext()); }
public void testContains3() throws RepositoryException { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setCondition(builder. contains("profile/.", "grass")); } }); Iterator<User> expected = Iterators.singleton(kangaroo); assertTrue(result.hasNext()); assertSameElements(result, expected); }
private static <T> void assertSame(Iterator<? extends T> expected, Iterator<? extends T> actual, long count) { for (int k = 0; k < count && actual.hasNext(); k++) { assertTrue(expected.hasNext()); assertEquals(expected.next(), actual.next()); } }
private static <T> void assertSameElements(Iterator<? extends T> it1, Iterator<? extends T> it2) { Set<? extends T> set1 = toSet(it1); Set<? extends T> set2 = toSet(it2); Set<? super T> missing = new HashSet<T>(); missing.addAll(set2); missing.removeAll(set1); Set<? super T> excess = new HashSet<T>(); excess.addAll(set1); excess.removeAll(set2); if (!missing.isEmpty()) { fail("Missing elements in query result: " + missing); } if (!excess.isEmpty()) { fail("Excess elements in query result: " + excess); } }
animals = createGroup("animals"); invertebrates = createGroup("invertebrates"); arachnids = createGroup("arachnids"); insects = createGroup("insects"); vertebrates = createGroup("vertebrates"); mammals = createGroup("mammals"); apes = createGroup("apes"); reptiles = createGroup("reptiles"); birds = createGroup("birds"); amphibians = createGroup("amphibians"); blackWidow = createUser("black widow", "flies", 2, false); gardenSpider = createUser("garden spider", "flies", 2, false); jumpingSpider = createUser("jumping spider", "insects", 1, false); addMembers(arachnids, blackWidow, gardenSpider, jumpingSpider); ant = createUser("ant", "leaves", 0.5, false); bee = createUser("bee", "honey", 2.5, true); fly = createUser("fly", "dirt", 1.3, false); addMembers(insects, ant, bee, fly); jackrabbit = createUser("jackrabbit", "carrots", 2500, true); deer = createUser("deer", "leaves", 120000, true); opposum = createUser("opposum", "fruit", 1200, true); kangaroo = createUser("kangaroo", "grass", 90000, true); elephant = createUser("elephant", "leaves", 5000000, true); addMembers(mammals, jackrabbit, deer, opposum, kangaroo, elephant); lemur = createUser("lemur", "nectar", 1100, true);
public void testScopeWithMax() throws RepositoryException { final int offset = 0; final int count = 22; Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setScope("vertebrates", false); builder.setSortOrder("profile/@weight", Direction.ASCENDING); builder.setLimit(offset, count); } }); Iterator<Authorizable> expected = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setScope("vertebrates", false); builder.setSortOrder("profile/@weight", Direction.ASCENDING); } }); assertSameElements(expected, result); assertFalse(result.hasNext()); }
public void testAny() throws RepositoryException { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { /* any */ } }); assertSameElements(result, authorizables.iterator()); }
assertSame(expected, result, count); assertFalse(result.hasNext());
public void testSelector() throws RepositoryException { List<Class<? extends Authorizable>> selectors = new ArrayList<Class<? extends Authorizable>>(); selectors.add(Authorizable.class); selectors.add(Group.class); selectors.add(User.class); for (final Class<? extends Authorizable> s : selectors) { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setSelector(s); } }); if (User.class.isAssignableFrom(s)) { assertSameElements(result, users.iterator()); } else if (Group.class.isAssignableFrom(s)) { assertSameElements(result, groups.iterator()); } else { assertSameElements(result, authorizables.iterator()); } } }
public void testContains1() throws RepositoryException { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setCondition(builder. contains(".", "gold")); } }); Iterator<User> expected = Iterators.singleton(goldenToad); assertTrue(result.hasNext()); assertSameElements(result, expected); }
public void testSortOrder2() throws RepositoryException { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setCondition(builder. exists("profile/@weight")); builder.setSortOrder("profile/@weight", Direction.ASCENDING, true); } }); assertTrue(result.hasNext()); double prev = Double.MIN_VALUE; while (result.hasNext()) { Authorizable authorizable = result.next(); Value[] weight = authorizable.getProperty("profile/weight"); assertNotNull(weight); assertEquals(1, weight.length); assertTrue(prev <= weight[0].getDouble()); prev = weight[0].getDouble(); } }
public void testOffset() throws RepositoryException { long[] offsets = {2, 0, 3, 0, 100000}; long[] counts = {4, 4, 0, 100000, 100000}; for (int k = 0; k < offsets.length; k++) { final long offset = offsets[k]; final long count = counts[k]; Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setSortOrder("profile/@weight", Direction.ASCENDING); builder.setLimit(offset, count); } }); Iterator<Authorizable> expected = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setSortOrder("profile/@weight", Direction.ASCENDING); } }); skip(expected, offset); assertSame(expected, result, count); assertFalse(result.hasNext()); } }
public void testDirectScope() throws RepositoryException { Group[] groups = new Group[]{mammals, vertebrates, apes}; for (final Group g : groups) { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { try { builder.setScope(g.getID(), true); } catch (RepositoryException e) { fail(e.getMessage()); } } }); Iterator<Authorizable> members = g.getDeclaredMembers(); assertSameElements(result, members); } }
public void testContains4() throws RepositoryException { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setCondition(builder. contains("profile/@food", "grass")); } }); Iterator<User> expected = Iterators.singleton(kangaroo); assertTrue(result.hasNext()); assertSameElements(result, expected); }
public void testIndirectScope() throws RepositoryException { Group[] groups = new Group[]{mammals, vertebrates, apes}; for (final Group g : groups) { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { try { builder.setScope(g.getID(), false); } catch (RepositoryException e) { fail(e.getMessage()); } } }); Iterator<Authorizable> members = g.getMembers(); assertSameElements(result, members); } }
public void testImpersonation() throws RepositoryException { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setCondition(builder. impersonates("jackrabbit")); } }); Iterator<User> expected = Iterators.singleton(elephant); assertTrue(result.hasNext()); assertSameElements(result, expected); }
public void testFindUsersInGroup() throws RepositoryException { Group[] groups = new Group[]{mammals, vertebrates, apes}; for (final Group g : groups) { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { try { builder.setSelector(User.class); builder.setScope(g.getID(), false); } catch (RepositoryException e) { fail(e.getMessage()); } } }); Iterator<Authorizable> members = g.getMembers(); Iterator<Authorizable> users = Iterators.filterIterator(members, new Predicate<Authorizable>() { public boolean evaluate(Authorizable authorizable) { return !authorizable.isGroup(); } }); assertSameElements(result, users); } }
public void testContains2() throws RepositoryException { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { builder.setCondition(builder. contains("@color", "gold")); } }); Iterator<User> expected = Iterators.singleton(goldenToad); assertTrue(result.hasNext()); assertSameElements(result, expected); }
public void testFindGroupsInGroup() throws RepositoryException { Group[] groups = new Group[]{mammals, vertebrates, apes}; for (final Group g : groups) { Iterator<Authorizable> result = userMgr.findAuthorizables(new Query() { public <T> void build(QueryBuilder<T> builder) { try { builder.setSelector(Group.class); builder.setScope(g.getID(), true); } catch (RepositoryException e) { fail(e.getMessage()); } } }); Iterator<Authorizable> members = g.getDeclaredMembers(); Iterator<Authorizable> users = Iterators.filterIterator(members, new Predicate<Authorizable>() { public boolean evaluate(Authorizable authorizable) { return authorizable.isGroup(); } }); assertSameElements(result, users); } }