@Test(expectedExceptions = IllegalArgumentException.class) public void nullResult() throws Exception { ObjectPaging paging = prismContext.queryFactory().createPaging(0, Integer.MAX_VALUE, (ItemPath) null, null); controller.listResourceObjects("1", new QName("local name"), paging, null, null); } }
private ObjectPaging getOrCreatePaging() { checkRelationalValueSearchQuery(); if (relationalValueSearchQuery.getPaging() == null) { relationalValueSearchQuery.setPaging(prismContext.queryFactory().createPaging()); } return relationalValueSearchQuery.getPaging(); }
@Test(expectedExceptions = IllegalArgumentException.class) public void nullResult() throws Exception { ObjectPaging paging = prismContext.queryFactory().createPaging(0, Integer.MAX_VALUE, (ItemPath) null, null); ObjectQuery query = prismContext.queryFactory().createQuery(paging); controller.searchObjects(null, query, null, null, null); } }
public static ObjectPaging createObjectPaging(PagingType pagingType, PrismContext prismContext) { if (pagingType == null) { return null; } if (pagingType.getOrderBy() != null && pagingType.getGroupBy() != null) { return prismContext.queryFactory().createPaging(pagingType.getOffset(), pagingType.getMaxSize(), pagingType.getOrderBy().getItemPath(), toOrderDirection(pagingType.getOrderDirection()), pagingType.getGroupBy().getItemPath()); } if (pagingType.getOrderBy() != null) { return prismContext.queryFactory().createPaging(pagingType.getOffset(), pagingType.getMaxSize(), pagingType.getOrderBy().getItemPath(), toOrderDirection(pagingType.getOrderDirection())); } if (pagingType.getGroupBy() != null) { return prismContext.queryFactory().createPaging(pagingType.getGroupBy().getItemPath()); } else { return prismContext.queryFactory().createPaging(pagingType.getOffset(), pagingType.getMaxSize()); } }
@Test public void test104SimpleSequentialIterationWithCustomPagingSmall() throws Exception { OperationResult result = new OperationResult("test104SimpleSequentialIterationWithCustomPagingSmall"); final List<PrismObject<UserType>> objects = new ArrayList<>(); ResultHandler<UserType> handler = (object, parentResult) -> { objects.add(object); return true; }; ObjectQuery query = prismContext.queryFactory().createQuery(prismContext.queryFactory().createPaging(1, 200)); repositoryService.searchObjectsIterative(UserType.class, query, handler, null, true, result); result.recomputeStatus(); assertTrue(result.isSuccess()); assertObjects(objects, 200); }
@Test public void test102SimpleSequentialIterationWithMaxSize() throws Exception { OperationResult result = new OperationResult("test102SimpleSequentialIterationWithMaxSize"); final List<PrismObject<UserType>> objects = new ArrayList<>(); ResultHandler<UserType> handler = (object, parentResult) -> { objects.add(object); return true; }; ObjectQuery query = prismContext.queryFactory().createQuery(prismContext.queryFactory().createPaging(null, 70)); repositoryService.searchObjectsIterative(UserType.class, query, handler, null, true, result); result.recomputeStatus(); assertTrue(result.isSuccess()); assertObjects(objects, 70); }
@Test public void test103SimpleSequentialIterationWithCustomPagingLarge() throws Exception { OperationResult result = new OperationResult("test103SimpleSequentialIterationWithCustomPagingLarge"); final List<PrismObject<UserType>> objects = new ArrayList<>(); ResultHandler<UserType> handler = (object, parentResult) -> { objects.add(object); return true; }; ObjectQuery query = prismContext.queryFactory().createQuery(prismContext.queryFactory().createPaging(1, null)); repositoryService.searchObjectsIterative(UserType.class, query, handler, null, true, result); result.recomputeStatus(); assertTrue(result.isSuccess()); assertObjects(objects, COUNT - 1); }
@Test public void test183SearchNullPagingOffset2Size3Desc() throws Exception { final String TEST_NAME = "test183SearchNullPagingOffset1Size3Desc"; displayTestTitle(TEST_NAME); ObjectPaging paging = prismContext.queryFactory().createPaging(2,3); paging.setOrdering(createAttributeOrdering(SchemaConstants.ICFS_NAME, OrderDirection.DESCENDING)); SearchResultMetadata searchMetadata = testSeachIterativePaging(TEST_NAME, null, paging, null, getSortedUsernames18xDesc(2,3)); assertApproxNumberOfAllResults(searchMetadata, getTest18xApproxNumberOfSearchResults()); }
@Test public void test180SearchNullPagingOffset0Size3() throws Exception { final String TEST_NAME = "test180SearchNullPagingSize5"; displayTestTitle(TEST_NAME); ObjectPaging paging = prismContext.queryFactory().createPaging(0,3); paging.setOrdering(createAttributeOrdering(SchemaConstants.ICFS_NAME)); SearchResultMetadata searchMetadata = testSeachIterativePaging(TEST_NAME, null, paging, null, getSortedUsernames18x(0,3)); assertApproxNumberOfAllResults(searchMetadata, getTest18xApproxNumberOfSearchResults()); }
@Test public void test0310CountObjectOrderByNameWithoutFilter() throws Exception { Session session = open(); try { ObjectPaging paging = prismContext.queryFactory().createPaging(null, null, F_NAME, ASCENDING); ObjectQuery query = prismContext.queryFactory().createQuery(null, paging); String real = getInterpretedQuery2(session, ObjectType.class, query, true); String expected = "select\n" + " count(o.oid)\n" + "from\n" + " RObject o\n"; // ordering does not make sense here assertEqualsIgnoreWhitespace(expected, real); } finally { close(session); } }
@Test public void test182SearchNullPagingOffset1Size2() throws Exception { final String TEST_NAME = "test182SearchNullPagingOffset1Size2"; displayTestTitle(TEST_NAME); ObjectPaging paging = prismContext.queryFactory().createPaging(1,2); paging.setOrdering(createAttributeOrdering(SchemaConstants.ICFS_NAME)); SearchResultMetadata searchMetadata = testSeachIterativePaging(TEST_NAME, null, paging, null, getSortedUsernames18x(1,2)); assertApproxNumberOfAllResults(searchMetadata, getTest18xApproxNumberOfSearchResults()); }
/** * Reverse sort order, so we are sure that this thing is really sorting * and not just returning data in alphabetical order by default. */ @Test public void test181SearchNullPagingOffset0Size3Desc() throws Exception { final String TEST_NAME = "test181SearchNullPagingOffset0Size3Desc"; displayTestTitle(TEST_NAME); ObjectPaging paging = prismContext.queryFactory().createPaging(0,3); paging.setOrdering(createAttributeOrdering(SchemaConstants.ICFS_NAME, OrderDirection.DESCENDING)); SearchResultMetadata searchMetadata = testSeachIterativePaging(TEST_NAME, null, paging, null, getSortedUsernames18xDesc(0,3)); assertApproxNumberOfAllResults(searchMetadata, getTest18xApproxNumberOfSearchResults()); }
@Test public void testConvertQueryNullFilter() throws Exception { ObjectQuery query = getQueryFactory().createQuery(getQueryFactory().createPaging(0, 10)); QueryType queryType = getQueryConverter().createQueryType(query); assertNotNull(queryType); assertNull(queryType.getFilter()); PagingType paging = queryType.getPaging(); assertNotNull(paging); assertEquals(new Integer(0), paging.getOffset()); assertEquals(new Integer(10), paging.getMaxSize()); }
@Test public void test0820OrderByTargetName() throws Exception { Session session = open(); try { /* * ### AccessCertificationCaseType: (all), order by targetRef/@/name */ ObjectQuery query = prismContext.queryFactory().createQuery( prismContext.queryFactory().createPaging(ItemPath.create( AccessCertificationCaseType.F_TARGET_REF, PrismConstants.T_OBJECT_REFERENCE, F_NAME), ASCENDING)); String real = getInterpretedQuery2(session, AccessCertificationCaseType.class, query); String expected = "select\n" + " a.ownerOid, a.id, a.fullObject\n" + "from\n" + " RAccessCertificationCase a\n" + " left join a.targetRef.target t\n" + "order by t.name.orig asc\n"; assertEqualsIgnoreWhitespace(expected, real); } finally { close(session); } }
@Test public void test0810OrderByParentCampaignName() throws Exception { Session session = open(); try { /* * ### AccessCertificationCaseType: (all), order by ../name desc */ ObjectQuery query = prismContext.queryFactory().createQuery( prismContext.queryFactory().createPaging(ItemPath.create(T_PARENT, F_NAME), DESCENDING)); String real = getInterpretedQuery2(session, AccessCertificationCaseType.class, query); String expected = "select\n" + " a.ownerOid, a.id, a.fullObject\n" + "from\n" + " RAccessCertificationCase a\n" + " left join a.owner o\n" + "order by o.nameCopy.orig desc\n"; assertEqualsIgnoreWhitespace(expected, real); } finally { close(session); } }
private void iterateGeneral(int offset, int size, int batch, final String... names) throws Exception { OperationResult result = new OperationResult("search general"); final List<PrismObject> objects = new ArrayList<>(); ResultHandler handler = new ResultHandler() { int index = 0; @Override public boolean handle(PrismObject object, OperationResult parentResult) { objects.add(object); assertEquals("Incorrect object name was read", names[index++], object.asObjectable().getName().getOrig()); return true; } }; SqlRepositoryConfiguration config = ((SqlRepositoryServiceImpl) repositoryService).getConfiguration(); int oldbatch = config.getIterativeSearchByPagingBatchSize(); config.setIterativeSearchByPagingBatchSize(batch); LOGGER.trace(">>>>>> iterateGeneral: offset = " + offset + ", size = " + size + ", batch = " + batch + " <<<<<<"); ObjectQuery query = prismContext.queryFactory().createQuery(); query.setPaging(prismContext.queryFactory().createPaging(offset, size, ObjectType.F_NAME, OrderDirection.ASCENDING)); repositoryService.searchObjectsIterative(UserType.class, query, handler, null, false, result); result.recomputeStatus(); config.setIterativeSearchByPagingBatchSize(oldbatch); assertTrue(result.isSuccess()); assertEquals(size, objects.size()); }
@Test public void test234SearchObjectsPagedOffsetSortSn() throws Exception { final String TEST_NAME = "test234SearchObjectsPagedOffsetSortSn"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_ALL_ACCOUNTS_FILE, QueryType.COMPLEX_TYPE); ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType); ObjectPaging paging = prismContext.queryFactory().createPaging(2, 4); paging.setOrdering(prismContext.queryFactory().createOrdering( ItemPath.create(ShadowType.F_ATTRIBUTES, new QName(RESOURCE_NS, "sn")), OrderDirection.ASCENDING)); query.setPaging(paging); rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT); rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT); // WHEN displayWhen(TEST_NAME); List<PrismObject<ShadowType>> searchResults = provisioningService.searchObjects(ShadowType.class, query, null, task, result); // THEN displayThen(TEST_NAME); result.computeStatus(); assertSuccess(result); display("Search resutls", searchResults); assertSearchResults(searchResults, "jbeckett", "jbond", "cook", "drake" ); assertConnectorOperationIncrement(1, 9); assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0); }
@Test public void test230SearchObjectsPagedNoOffset() throws Exception { final String TEST_NAME = "test230SearchObjectsPagedNoOffset"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_ALL_ACCOUNTS_FILE, QueryType.COMPLEX_TYPE); ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType); ObjectPaging paging = prismContext.queryFactory().createPaging(null, 3); query.setPaging(paging); rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT); rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT); // WHEN displayWhen(TEST_NAME); SearchResultList<PrismObject<ShadowType>> searchResults = provisioningService.searchObjects(ShadowType.class, query, null, task, result); // THEN displayThen(TEST_NAME); assertSuccess(result); display("Search resutls", searchResults); assertSearchResults(searchResults, "cook", "drake", "hbarbossa" ); assertConnectorOperationIncrement(1, 7); assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0); // null offset, SPR, no estimate. assertApproxNumberOfAllResults(searchResults.getMetadata(), null); }
@Test public void test231SearchObjectsPagedOffsetZero() throws Exception { final String TEST_NAME = "test231SearchObjectsPagedOffsetZero"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_ALL_ACCOUNTS_FILE, QueryType.COMPLEX_TYPE); ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType); ObjectPaging paging = prismContext.queryFactory().createPaging(0, 4); query.setPaging(paging); rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT); rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT); // WHEN displayWhen(TEST_NAME); SearchResultList<PrismObject<ShadowType>> searchResults = provisioningService.searchObjects(ShadowType.class, query, null, task, result); // THEN displayThen(TEST_NAME); assertSuccess(result); display("Search resutls", searchResults); assertSearchResults(searchResults, "cook", "drake", "hbarbossa", "idm"); assertConnectorOperationIncrement(1, 9); assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0); // VLV search if forced by using offset. So we have result number estimate. assertApproxNumberOfAllResults(searchResults.getMetadata(), 14); }
@Test public void test232SearchObjectsPagedOffset() throws Exception { final String TEST_NAME = "test232SearchObjectsPagedOffset"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); QueryType queryType = PrismTestUtil.parseAtomicValue(QUERY_ALL_ACCOUNTS_FILE, QueryType.COMPLEX_TYPE); ObjectQuery query = getQueryConverter().createObjectQuery(ShadowType.class, queryType); ObjectPaging paging = prismContext.queryFactory().createPaging(2, 5); query.setPaging(paging); rememberCounter(InternalCounters.CONNECTOR_OPERATION_COUNT); rememberCounter(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT); // WHEN displayWhen(TEST_NAME); SearchResultList<PrismObject<ShadowType>> searchResults = provisioningService.searchObjects(ShadowType.class, query, null, task, result); // THEN displayThen(TEST_NAME); result.computeStatus(); assertSuccess(result); display("Search resutls", searchResults); // The results should be this: assertSearchResults(searchResults, "hbarbossa", "idm", "jbeckett", "jbond", "jgibbs" ); assertConnectorOperationIncrement(1, 11); assertCounterIncrement(InternalCounters.CONNECTOR_SIMULATED_PAGING_SEARCH_COUNT, 0); // VLV search if forced by using offset. So we have result number estimate. assertApproxNumberOfAllResults(searchResults.getMetadata(), 14); }