public XMLGregorianCalendar currentDateTime() { return clock.currentTimeXMLGregorianCalendar(); }
public boolean isPast(long date) { return currentTimeMillis() > date; }
protected void clockForward(String duration) { XMLGregorianCalendar before = clock.currentTimeXMLGregorianCalendar(); clock.overrideDuration(duration); XMLGregorianCalendar after = clock.currentTimeXMLGregorianCalendar(); display("Clock going forward", before + " --[" + duration + "]--> " + after); }
/** * Extends offset on top of existing offset. */ public void overrideDuration(Duration duration) { long millis = currentTimeMillis(); XMLGregorianCalendar time = XmlTypeConverter.createXMLGregorianCalendar(millis); time.add(duration); long offset = XmlTypeConverter.toMillis(time) - millis; overrideDuration(offset); }
@Test public void test410ManualReiterationUnavailable() throws Exception { final String TEST_NAME = "test410ManualReiterationUnavailable"; TestUtil.displayTestTitle(this, TEST_NAME); login(getUserFromRepo(USER_ADMINISTRATOR_OID)); // GIVEN Task task = taskManager.createTaskInstance(TestEscalation.class.getName() + "." + TEST_NAME); task.setOwner(userAdministrator.asPrismObject()); OperationResult result = task.getResult(); dummyTransport.clearMessages(); // WHEN TestUtil.displayWhen(TEST_NAME); clock.resetOverride(); clock.overrideDuration("P22D"); // +1 day relative to previous test try { certificationManager.reiterateCampaign(campaignOid, task, result); fail("unexpected success"); } catch (IllegalStateException e) { // THEN System.err.println("got expected exception: " + e.getMessage()); e.printStackTrace(); assertTrue("wrong exception message", e.getMessage().contains("maximum number of iterations (3) was reached")); } }
/** * Move time a month ahead. The account that was disabled in a previous test should be * deleted now. */ @Test public void test215JackDummyAccountDeleteAfterMonth() throws Exception { final String TEST_NAME = "test215JackDummyAccountDeleteAfterMonth"; displayTestTitle(TEST_NAME); // GIVEN Task task = taskManager.createTaskInstance(TestMapping.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); XMLGregorianCalendar time = clock.currentTimeXMLGregorianCalendar(); // A month and a day, to make sure we move past the trigger time.add(XmlTypeConverter.createDuration(true, 0, 1, 1, 0, 0, 0)); // WHEN TestUtil.displayWhen(TEST_NAME); clock.override(time); waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // THEN TestUtil.displayThen(TEST_NAME); assertNoDummyAccount(RESOURCE_DUMMY_RED_NAME, ACCOUNT_JACK_DUMMY_USERNAME); }
/** * Extends offset on top of existing offset. */ public void overrideDuration(String durationString) { overrideDuration(XmlTypeConverter.createDuration(durationString)); }
@Test public void test100ImportValidityScannerTask() throws Exception { final String TEST_NAME = "test100ImportValidityScannerTask"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); // Pretend that the user was added a long time ago clock.override(LONG_LONG_TIME_AGO); addObject(USER_HERMAN_FILE); // Make sure that it is effectivelly disabled PrismObject<UserType> userHermanBefore = getUser(USER_HERMAN_OID); assertEffectiveActivation(userHermanBefore, ActivationStatusType.DISABLED); assertValidityStatus(userHermanBefore, TimeIntervalStatusType.BEFORE); clock.resetOverride(); XMLGregorianCalendar startCal = clock.currentTimeXMLGregorianCalendar(); /// WHEN TestUtil.displayWhen(TEST_NAME); importObjectFromFile(getValidityScannerTaskFileName()); waitForValidityTaskStart(); waitForValidityTaskFinish(); // THEN TestUtil.displayThen(TEST_NAME); XMLGregorianCalendar endCal = clock.currentTimeXMLGregorianCalendar(); assertLastScanTimestamp(TASK_VALIDITY_SCANNER_OID, startCal, endCal); PrismObject<UserType> userHermanAfter = getUser(USER_HERMAN_OID); assertEffectiveActivation(userHermanAfter, ActivationStatusType.ENABLED); assertValidityStatus(userHermanAfter, TimeIntervalStatusType.IN); }
clock.resetOverride(); clock.overrideDuration("P18D"); // campaign ends at P16D, reiteration scheduled to P17D waitForTaskNextRun(TASK_TRIGGER_SCANNER_OID, true, 20000, true); display("campaign in stage 1", campaign); assertSanityAfterCampaignStart(campaign, certificationDefinition, 7, 2, 2, new Date(clock.currentTimeMillis())); List<AccessCertificationCaseType> caseList = campaign.getCase();
public List<PrismContainerValue<WorkItemType>> searchApprovalWorkItems(int days, QName sortColumn) throws CommunicationException, ObjectNotFoundException, SchemaException, SecurityViolationException, ConfigurationException, ExpressionEvaluationException, DatatypeConfigurationException { Task task = taskManager.createTaskInstance(); OperationResult result = task.getResult(); ObjectQuery query = prismContext.queryFor(AbstractWorkItemType.class).build(); if (days > 0) { XMLGregorianCalendar since = (new Clock()).currentTimeXMLGregorianCalendar(); DatatypeFactory df = DatatypeFactory.newInstance(); since.add (df.newDuration(false, 0, 0, days, 0, 0, 0)); query.addFilter(prismContext.queryFor(AbstractWorkItemType.class) .item(AbstractWorkItemType.F_CREATE_TIMESTAMP).lt(since).buildFilter()); } if (sortColumn != null) { query.addFilter(prismContext.queryFor(AbstractWorkItemType.class) .asc(sortColumn) .buildFilter()); } Object[] itemsToResolve = { WorkItemType.F_ASSIGNEE_REF, ItemPath.create(PrismConstants.T_PARENT, WfContextType.F_OBJECT_REF), ItemPath.create(PrismConstants.T_PARENT, WfContextType.F_TARGET_REF), ItemPath.create(PrismConstants.T_PARENT, WfContextType.F_REQUESTER_REF) }; SearchResultList<WorkItemType> workItems = model.searchContainers(WorkItemType.class, query, schemaHelper.getOperationOptionsBuilder().items(itemsToResolve).resolve().build(), task, result); return PrismContainerValue.toPcvList(workItems); }
public void override(XMLGregorianCalendar overrideTimestamp) { override(XmlTypeConverter.toMillis(overrideTimestamp)); }
@BeforeClass public void setupFactory() { System.out.println("Setting up expression factory and evaluator"); PrismContext prismContext = getPrismContext(); ObjectResolver resolver = new DirectoryFileObjectResolver(OBJECTS_DIR); Protector protector = KeyStoreBasedProtectorBuilder.create(prismContext).buildOnly(); Clock clock = new Clock(); Collection<FunctionLibrary> functions = new ArrayList<>(); functions.add(FunctionLibraryUtil.createBasicFunctionLibrary(prismContext, protector, clock)); scriptExpressionfactory = new ScriptExpressionFactory(prismContext, protector, null); scriptExpressionfactory.setObjectResolver(resolver); scriptExpressionfactory.setFunctions(functions); evaluator = new Jsr223ScriptEvaluator("groovy", prismContext, protector, LocalizationTestUtil.getLocalizationService()); String languageUrl = evaluator.getLanguageUrl(); scriptExpressionfactory.registerEvaluator(languageUrl, evaluator); }
@Test public void test200CreateTaskE2() throws Exception { final String TEST_NAME = "test200CreateTaskE2"; TestUtil.displayTestTitle(this, TEST_NAME); login(userAdministrator); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); clock.resetOverride(); resetTriggerTask(TASK_TRIGGER_SCANNER_OID, TASK_TRIGGER_SCANNER_FILE, result); // WHEN assignRole(userJackOid, roleE2Oid, task, result); // should start approval process // THEN assertNotAssignedRole(userJackOid, roleE2Oid, task, result); List<WorkItemType> workItems = getWorkItems(task, result); displayWorkItems("Work items", workItems); approvalTaskOid = WfContextUtil.getTask(workItems.get(0)).getOid(); PrismObject<TaskType> wfTask = getTask(approvalTaskOid); display("workflow task", wfTask); // D-0 days: escalate (twice) assertEquals("Wrong # of triggers", 2, wfTask.asObjectable().getTrigger().size()); }
@Test public void test130Remediation() throws Exception { final String TEST_NAME = "test130Remediation"; TestUtil.displayTestTitle(this, TEST_NAME); login(getUserFromRepo(USER_ADMINISTRATOR_OID)); // GIVEN Task task = taskManager.createTaskInstance(TestEscalation.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); dummyTransport.clearMessages(); // WHEN TestUtil.displayWhen(TEST_NAME); clock.resetOverride(); clock.overrideDuration("P15D"); // stage ends at P14D waitForTaskNextRun(TASK_TRIGGER_SCANNER_OID, true, 20000, true); // THEN TestUtil.displayThen(TEST_NAME); result.computeStatus(); TestUtil.assertSuccess(result); AccessCertificationCampaignType campaign = getCampaignWithCases(campaignOid); display("campaign after remediation", campaign); assertStateAndStage(campaign, AccessCertificationCampaignStateType.IN_REMEDIATION, 2); }
/** * Move the time to the future. See if the time-based mapping in user template is properly recomputed. */ @Test public void test800Kaboom() throws Exception { final String TEST_NAME = "test800Kaboom"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); assumeAssignmentPolicy(AssignmentPolicyEnforcementType.RELATIVE); importObjectFromFile(TASK_TRIGGER_SCANNER_FILE); waitForTaskStart(TASK_TRIGGER_SCANNER_OID, false); XMLGregorianCalendar now = clock.currentTimeXMLGregorianCalendar(); now.add(XmlTypeConverter.createDuration("P1M1D")); clock.override(now); // WHEN waitForTaskNextRunAssertSuccess(TASK_TRIGGER_SCANNER_OID, true); // THEN PrismObject<UserType> userJack = modelService.getObject(UserType.class, USER_JACK_OID, null, task, result); PrismAsserts.assertPropertyValue(userJack, UserType.F_ADDITIONAL_NAME, PrismTestUtil.createPolyString("Kaboom!")); assertNoTrigger(userJack); }
@Test public void test156PasswordLoginNotValidAnyLongerGoodPassword() throws Exception { final String TEST_NAME = "test156PasswordLoginNotValidAnyLongerGoodPassword"; TestUtil.displayTestTitle(TEST_NAME); // GIVEN clock.overrideDuration("P2D"); Task task = createTask(TestAbstractAuthenticationEvaluator.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); loginJackGoodPasswordExpectDenied(TEST_NAME, task, result); }
@Test public void test315HermanAssignJudgeBecomesInValid() throws Exception { final String TEST_NAME = "test315HermanAssignJudgeBecomesInValid"; displayTestTitle(TEST_NAME); // GIVEN Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); XMLGregorianCalendar start = (XMLGregorianCalendar) judgeAssignmentValidTo.clone(); start.add(XmlTypeConverter.createDuration(1*60*1000)); clock.override(start); display("Start", start); // WHEN // just wait waitForValidityNextRunAssertSuccess(); assertRoleJudgeInValid(TEST_NAME, task, result); }
@BeforeClass public void setupFactory() { PrismContext prismContext = PrismTestUtil.getPrismContext(); ObjectResolver resolver = new DirectoryFileObjectResolver(OBJECTS_DIR); Protector protector = KeyStoreBasedProtectorBuilder.create(prismContext).buildOnly(); Clock clock = new Clock(); Collection<FunctionLibrary> functions = new ArrayList<>(); functions.add(FunctionLibraryUtil.createBasicFunctionLibrary(prismContext, protector, clock)); scriptExpressionfactory = new ScriptExpressionFactory(prismContext, protector, null); scriptExpressionfactory.setObjectResolver(resolver); scriptExpressionfactory.setFunctions(functions); localizationService = LocalizationTestUtil.getLocalizationService(); evaluator = createEvaluator(prismContext, protector); String languageUrl = evaluator.getLanguageUrl(); System.out.println("Expression test for "+evaluator.getLanguageName()+": registering "+evaluator+" with URL "+languageUrl); scriptExpressionfactory.registerEvaluator(languageUrl, evaluator); }
/** * Guybrush has an entitlement (swashbucklers), but after recomputation it should go away. */ @Test public void test700ReconcileGuybrush() throws Exception { final String TEST_NAME = "test700ReconcileGuybrush"; displayTestTitle(TEST_NAME); Task task = createTask(TEST_NAME); OperationResult result = task.getResult(); clock.resetOverride(); dumpUserAndAccounts(getUser(USER_GUYBRUSH_OID), task, result); dumpOrangeGroups(task, result); // GIVEN DummyGroup dummyGroup = getDummyResource().getGroupByName(GROUP_DUMMY_SWASHBUCKLERS_NAME); dummyGroup.addMember(USER_GUYBRUSH_USERNAME); assertGroupMember(getDummyGroup(null, GROUP_DUMMY_SWASHBUCKLERS_NAME), USER_GUYBRUSH_USERNAME); // WHEN displayWhen(TEST_NAME); reconcileUser(USER_GUYBRUSH_OID, task, result); // THEN displayThen(TEST_NAME); dumpUserAndAccounts(getUser(USER_GUYBRUSH_OID), task, result); assertNoGroupMember(getDummyGroup(null, GROUP_DUMMY_SWASHBUCKLERS_NAME), USER_GUYBRUSH_USERNAME); assertSteadyResources(); }