use of com.yahoo.elide.core.Path.PathElement in project elide by yahoo.
the class VerifyFieldAccessFilterExpressionVisitorTest method testAccept.
@Test
public void testAccept() throws Exception {
Path p1Path = new Path(Arrays.asList(new PathElement(Book.class, Author.class, AUTHORS), new PathElement(Author.class, String.class, NAME)));
FilterPredicate p1 = new InPredicate(p1Path, "foo", "bar");
Path p2Path = new Path(Arrays.asList(new PathElement(Book.class, String.class, NAME)));
FilterPredicate p2 = new InPredicate(p2Path, "blah");
Path p3Path = new Path(Arrays.asList(new PathElement(Book.class, String.class, GENRE)));
FilterPredicate p3 = new InPredicate(p3Path, SCIFI);
// P4 is a duplicate of P3
Path p4Path = new Path(Arrays.asList(new PathElement(Book.class, String.class, GENRE)));
FilterPredicate p4 = new InPredicate(p4Path, SCIFI);
OrFilterExpression or = new OrFilterExpression(p2, p3);
AndFilterExpression and1 = new AndFilterExpression(or, p1);
AndFilterExpression and2 = new AndFilterExpression(and1, p4);
NotFilterExpression not = new NotFilterExpression(and2);
Book book = new Book();
Author author = new Author();
book.setAuthors(Collections.singleton(author));
author.setBooks(Collections.singleton(book));
PersistentResource<Book> resource = new PersistentResource<>(book, "", scope);
VerifyFieldAccessFilterExpressionVisitor visitor = new VerifyFieldAccessFilterExpressionVisitor(resource);
// unrestricted fields
assertTrue(not.accept(visitor));
assertTrue(and1.accept(visitor));
assertTrue(and2.accept(visitor));
assertTrue(or.accept(visitor));
assertTrue(p1.accept(visitor));
assertTrue(p2.accept(visitor));
assertTrue(p3.accept(visitor));
assertTrue(p4.accept(visitor));
PermissionExecutor permissionExecutor = scope.getPermissionExecutor();
verify(permissionExecutor, times(17)).evaluateFilterJoinUserChecks(any(), any());
verify(permissionExecutor, times(5)).checkSpecificFieldPermissions(resource, null, ReadPermission.class, NAME);
verify(permissionExecutor, times(21)).checkUserPermissions(any(), any(), isA(String.class));
verify(permissionExecutor, never()).handleFilterJoinReject(any(), any(), any());
}
use of com.yahoo.elide.core.Path.PathElement in project elide by yahoo.
the class ExpressionScopingVisitorTest method testExpressionCopy.
@Test
public void testExpressionCopy() throws Exception {
Path p1Path = new Path(Arrays.asList(new PathElement(Book.class, Author.class, "authors"), new PathElement(Author.class, String.class, NAME)));
FilterPredicate p1 = new InPredicate(p1Path, "foo", "bar");
FilterPredicate p2 = new InPredicate(new PathElement(Book.class, String.class, NAME), "blah%");
FilterPredicate p3 = new InPredicate(new PathElement(Book.class, String.class, GENRE), SCIFI);
// P4 is a duplicate of P3
FilterPredicate p4 = new InPredicate(new PathElement(Book.class, String.class, GENRE), SCIFI);
OrFilterExpression or = new OrFilterExpression(p2, p3);
AndFilterExpression and1 = new AndFilterExpression(or, p1);
AndFilterExpression and2 = new AndFilterExpression(and1, p4);
NotFilterExpression not = new NotFilterExpression(and2);
PathElement scope = new PathElement(Author.class, String.class, NAME);
ExpressionScopingVisitor scopingVisitor = new ExpressionScopingVisitor(scope);
FilterExpression copy = not.accept(scopingVisitor);
assertNotEquals(not, copy);
List<FilterPredicate> predicates = (List) copy.accept(new PredicateExtractionVisitor(new ArrayList<>()));
List<FilterPredicate> toCompare = Arrays.asList(p2.scopedBy(scope), p3.scopedBy(scope), p1.scopedBy(scope), p4.scopedBy(scope));
for (int i = 0; i < predicates.size(); i++) {
FilterPredicate predicateOriginal = toCompare.get(i);
FilterPredicate predicateCopy = predicates.get(i);
assertEquals(predicateOriginal, predicateCopy);
assertTrue(predicateCopy != predicateOriginal);
}
assertEquals("example_Author_name", predicates.get(0).getPath().getAlias());
assertTrue(predicates.get(0).getParameters().get(0).getPlaceholder().startsWith(":name_name_"));
assertEquals("blah\\%", predicates.get(0).getParameters().get(0).escapeMatching());
}
use of com.yahoo.elide.core.Path.PathElement in project elide by yahoo.
the class FilterPredicatePushdownExtractorTest method testPath.
@Test
public void testPath() {
Path path = new Path(Book.class, dictionary, "genre");
ImmutableList<PathElement> pathElements = ImmutableList.of(new PathElement(Book.class, String.class, "genre"));
assertEquals("example_Book", path.getAlias());
assertEquals("genre", path.getFieldPath());
assertEquals(pathElements, path.getPathElements());
assertEquals(Optional.of(pathElements.get(0)), path.lastElement());
assertEquals("[Book].genre", path.toString());
path = new Path(Book.class, dictionary, "this.editor.firstName");
pathElements = ImmutableList.of(new PathElement(Book.class, null, "this"), new PathElement(Book.class, Editor.class, "editor"), new PathElement(Editor.class, String.class, "firstName"));
assertEquals("example_Book_editor", path.getAlias());
assertEquals("this.editor.firstName", path.getFieldPath());
assertEquals(pathElements, path.getPathElements());
assertEquals(Optional.of(pathElements.get(2)), path.lastElement());
assertEquals("[Book].this/[Book].editor/[Editor].firstName", path.toString());
}
use of com.yahoo.elide.core.Path.PathElement in project elide by yahoo.
the class AsyncAPICleanerRunnable method deleteAsyncAPI.
/**
* This method deletes the historical queries based on threshold.
* @param type AsyncAPI Type Implementation.
*/
protected <T extends AsyncAPI> void deleteAsyncAPI(Class<T> type) {
try {
Date cleanupDate = dateUtil.calculateFilterDate(Calendar.DATE, queryCleanupDays);
PathElement createdOnPathElement = new PathElement(type, Long.class, "createdOn");
FilterExpression fltDeleteExp = new LEPredicate(createdOnPathElement, cleanupDate);
asyncAPIDao.deleteAsyncAPIAndResultByFilter(fltDeleteExp, type);
} catch (Exception e) {
log.error("Exception in scheduled cleanup: {}", e.toString());
}
}
use of com.yahoo.elide.core.Path.PathElement in project elide by yahoo.
the class AsyncAPICleanerRunnable method timeoutAsyncAPI.
/**
* This method updates the status of long running async query which
* were interrupted due to host crash/app shutdown to TIMEDOUT.
* @param type AsyncAPI Type Implementation.
*/
protected <T extends AsyncAPI> void timeoutAsyncAPI(Class<T> type) {
try {
Date filterDate = dateUtil.calculateFilterDate(Calendar.MINUTE, maxRunTimeMinutes);
PathElement createdOnPathElement = new PathElement(type, Long.class, "createdOn");
PathElement statusPathElement = new PathElement(type, String.class, "status");
FilterPredicate inPredicate = new InPredicate(statusPathElement, QueryStatus.PROCESSING, QueryStatus.QUEUED);
FilterPredicate lePredicate = new LEPredicate(createdOnPathElement, filterDate);
AndFilterExpression fltTimeoutExp = new AndFilterExpression(inPredicate, lePredicate);
asyncAPIDao.updateStatusAsyncAPIByFilter(fltTimeoutExp, QueryStatus.TIMEDOUT, type);
} catch (Exception e) {
log.error("Exception in scheduled cleanup: {}", e.toString());
}
}
Aggregations