Search in sources :

Example 76 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class TestMiscellaneous method test100RequesterComment.

@Test
public void test100RequesterComment() throws Exception {
    login(userAdministrator);
    Task task = getTestTask();
    OperationResult result = getTestOperationResult();
    given();
    dummyAuditService.clear();
    OperationBusinessContextType businessContext = new OperationBusinessContextType();
    final String REQUESTER_COMMENT = "req.comment";
    businessContext.setComment(REQUESTER_COMMENT);
    ObjectDelta<UserType> userDelta = createAssignmentUserDelta(userJackOid, ROLE_SAILOR.oid, RoleType.COMPLEX_TYPE, null, null, null, true);
    Collection<ObjectDelta<? extends ObjectType>> deltas = MiscSchemaUtil.createCollection(userDelta);
    modelService.executeChanges(deltas, executeOptions().requestBusinessContext(businessContext), task, result);
    assertNotAssignedRole(userJackOid, ROLE_SAILOR.oid, result);
    CaseWorkItemType workItem = getWorkItem(task, result);
    display("Work item", workItem);
    when();
    caseManager.completeWorkItem(WorkItemId.of(workItem), ApprovalUtils.createApproveOutput(prismContext).comment("OK"), null, task, result);
    then();
    CaseType aCase = getCase(CaseWorkItemUtil.getCaseRequired(workItem).getOid());
    display("workflow context", aCase.getApprovalContext());
    List<? extends CaseEventType> events = aCase.getEvent();
    assertEquals("Wrong # of events", 2, events.size());
    CaseCreationEventType event1 = (CaseCreationEventType) events.get(0);
    display("Event 1", event1);
    assertEquals("Wrong requester comment", REQUESTER_COMMENT, ApprovalContextUtil.getBusinessContext(aCase).getComment());
    WorkItemEventType event2 = (WorkItemEventType) events.get(1);
    display("Event 2", event2);
    assertNotNull("Original assignee is null", event2.getOriginalAssigneeRef());
    assertEquals("Wrong original assignee OID", USER_SCOTT.oid, event2.getOriginalAssigneeRef().getOid());
    displayDumpable("audit", dummyAuditService);
    List<AuditEventRecord> records = dummyAuditService.getRecordsOfType(AuditEventType.WORKFLOW_PROCESS_INSTANCE);
    assertEquals("Wrong # of process instance audit records", 2, records.size());
    for (int i = 0; i < records.size(); i++) {
        AuditEventRecord record = records.get(i);
        assertEquals("Wrong requester comment in audit record #" + i, Collections.singleton(REQUESTER_COMMENT), record.getPropertyValues(AuditingConstants.AUDIT_REQUESTER_COMMENT));
    }
    CaseType parentCase = getCase(aCase.getParentRef().getOid());
    waitForCaseClose(parentCase);
    AssignmentType assignment = assertAssignedRole(userJackOid, ROLE_SAILOR.oid, result);
    display("assignment after creation", assignment);
    MetadataType metadata = assignment.getMetadata();
    assertNotNull("Null request timestamp in metadata", metadata.getRequestTimestamp());
    assertRefEquals("Wrong requestorRef in metadata", ObjectTypeUtil.createObjectRef(userAdministrator, prismContext), metadata.getRequestorRef());
    assertEquals("Wrong requestorComment in metadata", REQUESTER_COMMENT, metadata.getRequestorComment());
}
Also used : Task(com.evolveum.midpoint.task.api.Task) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) Test(org.testng.annotations.Test)

Example 77 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class PendingAuditRecords method addWorkItemClosure.

public void addWorkItemClosure(@NotNull CaseWorkItemType workItem, @Nullable WorkItemEventCauseInformationType cause, @NotNull OperationResult result) {
    // workItem contains taskRef, assignee, candidates resolved (if possible)
    // We don't pass userRef (initiator) to the audit method. It does need the whole object (not only the reference),
    // so it fetches it directly from the security enforcer (logged-in user). This could change in the future.
    CaseType aCase = operation.getCurrentCase();
    AuditEventRecord record = prepareWorkItemAuditRecordCommon(workItem, AuditEventStage.EXECUTION, result);
    setInitiatorAndAttorneyFromPrincipal(record);
    if (cause != null) {
        if (cause.getType() != null) {
            record.addPropertyValue(AuditingConstants.AUDIT_CAUSE_TYPE, cause.getType().value());
        }
        if (cause.getName() != null) {
            record.addPropertyValue(AuditingConstants.AUDIT_CAUSE_NAME, cause.getName());
        }
        if (cause.getDisplayName() != null) {
            record.addPropertyValue(AuditingConstants.AUDIT_CAUSE_DISPLAY_NAME, cause.getDisplayName());
        }
    }
    // message + result
    StringBuilder message = new StringBuilder();
    String stageInfo = operation.doesUseStages() ? ApprovalContextUtil.getCompleteStageInfo(aCase) : null;
    if (stageInfo != null) {
        message.append(stageInfo).append(" : ");
    }
    AbstractWorkItemOutputType output = workItem.getOutput();
    if (output != null) {
        // FIXME
        String answer = ApprovalUtils.makeNiceFromUri(aCase, output);
        record.setResult(answer);
        message.append(answer);
        if (output.getComment() != null) {
            message.append(" : ").append(output.getComment());
            record.addPropertyValue(AuditingConstants.AUDIT_COMMENT, output.getComment());
        }
    } else {
        // TODO
        message.append("(no decision)");
    }
    record.setMessage(message.toString());
    extension.enrichWorkItemDeletedAuditRecord(record, workItem, operation, result);
    records.add(record);
}
Also used : AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord)

Example 78 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class TestScriptingBasicNew method test910DeleteShadowsMultinode.

/**
 * Deletes shadows while searching for them using noFetch option. (Tests for correct options application by tasks: MID-6717).
 *
 * Also check correct task OID in audit messages: MID-6713.
 */
@Test
public void test910DeleteShadowsMultinode() throws Exception {
    given();
    Task task = getTestTask();
    OperationResult result = task.getResult();
    UserType user = new UserType(prismContext).name("test910").beginAssignment().beginConstruction().resourceRef(RESOURCE_DUMMY_OID, ResourceType.COMPLEX_TYPE).<AssignmentType>end().end();
    addObject(user.asPrismObject(), task, result);
    String shadowOid = assertUser(user.getOid(), "after creation").display().links().singleLive().getOid();
    int before = countDummyAccountShadows(result);
    displayValue("account shadows before", before);
    assertThat(before).isGreaterThan(0);
    dummyAuditService.clear();
    when();
    addObject(TASK_DELETE_SHADOWS_MULTINODE, task, result);
    runTaskTreeAndWaitForFinish(TASK_DELETE_SHADOWS_MULTINODE.oid, 15000);
    then();
    dumpTaskTree(TASK_DELETE_SHADOWS_MULTINODE.oid, result);
    int after = countDummyAccountShadows(result);
    displayValue("account shadows after", after);
    assertThat(after).isEqualTo(0);
    displayDumpable("Audit", dummyAuditService);
    List<AuditEventRecord> records = dummyAuditService.getRecords().stream().filter(record -> record.getEventStage() == AuditEventStage.EXECUTION).filter(record -> record.getTargetRef() != null && shadowOid.equals(record.getTargetRef().getOid())).collect(Collectors.toList());
    assertThat(records).as("Shadow " + shadowOid + " deletion records").hasSize(1);
    AuditEventRecord record = records.get(0);
    assertThat(record.getTaskOid()).as("task OID in audit record").isEqualTo(TASK_DELETE_SHADOWS_MULTINODE.oid);
}
Also used : ObjectDelta(com.evolveum.midpoint.prism.delta.ObjectDelta) Listeners(org.testng.annotations.Listeners) com.evolveum.midpoint.xml.ns._public.common.common_3(com.evolveum.midpoint.xml.ns._public.common.common_3) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) SchemaException(com.evolveum.midpoint.util.exception.SchemaException) Test(org.testng.annotations.Test) DebugUtil(com.evolveum.midpoint.util.DebugUtil) ExecutionContext(com.evolveum.midpoint.model.impl.scripting.ExecutionContext) Task(com.evolveum.midpoint.task.api.Task) Collectors(java.util.stream.Collectors) AuditEventStage(com.evolveum.midpoint.audit.api.AuditEventStage) File(java.io.File) OperationResultStatus(com.evolveum.midpoint.schema.result.OperationResultStatus) TestResource(com.evolveum.midpoint.test.TestResource) List(java.util.List) ScriptingExpressionType(com.evolveum.midpoint.xml.ns._public.model.scripting_3.ScriptingExpressionType) VariablesMap(com.evolveum.midpoint.schema.expression.VariablesMap) ExecuteScriptType(com.evolveum.midpoint.xml.ns._public.model.scripting_3.ExecuteScriptType) ObjectQuery(com.evolveum.midpoint.prism.query.ObjectQuery) AssertJUnit.assertEquals(org.testng.AssertJUnit.assertEquals) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) Task(com.evolveum.midpoint.task.api.Task) OperationResult(com.evolveum.midpoint.schema.result.OperationResult) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) Test(org.testng.annotations.Test)

Example 79 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class AuditSearchTest method initSystem.

@Override
public void initSystem() throws Exception {
    OperationResult result = createOperationResult();
    PrismObject<UserType> initiator = createUser("initiator");
    initiatorOid = initiator.getOid();
    PrismObject<UserType> attorney = createUser("attorney");
    attorneyOid = attorney.getOid();
    PrismObject<UserType> target = createUser("target");
    targetOid = target.getOid();
    PrismObject<? extends FocusType> targetOwner = createUser("targetOwner");
    targetOwnerOid = targetOwner.getOid();
    AuditEventRecord record1 = new AuditEventRecord();
    // all tested records have parameter, it is used for assertions where practical
    record1.setParameter("1");
    record1.addPropertyValue("prop1", "val1");
    record1.setTimestamp(TIMESTAMP_1);
    record1.setEventType(AuditEventType.ADD_OBJECT);
    record1.setMessage("record1");
    record1.setOutcome(OperationResultStatus.SUCCESS);
    record1.setResult("result1");
    record1.setHostIdentifier("localhost");
    record1.setNodeIdentifier("node1");
    record1.setRemoteHostAddress("192.168.10.1");
    record1.setSessionIdentifier("session-1");
    record1.setTarget(target);
    record1.setTargetOwner(targetOwner);
    // values are not even necessary
    record1.addDelta(createDelta(UserType.F_FULL_NAME));
    record1.addDelta(createDelta(UserType.F_FAMILY_NAME, PolyString.fromOrig("familyNameVal")));
    record1.addDelta(createDelta(ItemPath.create(ObjectType.F_METADATA, MetadataType.F_REQUEST_TIMESTAMP), MiscUtil.asXMLGregorianCalendar(System.currentTimeMillis())));
    // just want to see two values, that's all
    record1.addReferenceValue("ref1", ObjectTypeUtil.createObjectRef(targetOid, ObjectTypes.USER).asReferenceValue());
    record1.addReferenceValue("ref2", ObjectTypeUtil.createObjectRef(targetOid, ObjectTypes.USER).asReferenceValue());
    record1.addResourceOid("res-oid-1");
    record1.addResourceOid("res-oid-2");
    record1.addResourceOid("res-oid-3");
    record1.getCustomColumnProperty().put("foo", "foo-val");
    auditService.audit(record1, NullTaskImpl.INSTANCE, result);
    record1EventIdentifier = record1.getEventIdentifier();
    AuditEventRecord record2 = new AuditEventRecord();
    record2.setParameter("2");
    record2.addPropertyValue("prop1", "val2");
    record2.setTimestamp(TIMESTAMP_2);
    record2.setEventType(AuditEventType.MODIFY_OBJECT);
    record2.setEventStage(AuditEventStage.EXECUTION);
    record2.setMessage("record2");
    record2.setOutcome(OperationResultStatus.UNKNOWN);
    record2.setInitiator(initiator);
    record2.setHostIdentifier("127.0.0.1");
    record2.setRemoteHostAddress("192.168.10.2");
    // session-1 on purpose
    record2.setSessionIdentifier("session-1");
    record2.setAttorney(attorney);
    record2.setRequestIdentifier("req-id");
    record2.addDelta(createDelta(UserType.F_FULL_NAME, PolyString.fromOrig("somePolyString")));
    record2.addDelta(createDelta(UserType.F_ADDITIONAL_NAME));
    // these two deltas should collapse into single no-op delta + no changed items for them
    record2.addDelta(createDeltaWithIgnoredPath(UserType.F_GIVEN_NAME));
    record2.addDelta(createDeltaWithIgnoredPath(UserType.F_FAMILY_NAME));
    record2.getCustomColumnProperty().put("foo", "foo-value-2");
    record2.getCustomColumnProperty().put("bar", "bar-val");
    record2.setTaskOid("task_oid2");
    auditService.audit(record2, NullTaskImpl.INSTANCE, result);
    AuditEventRecord record3 = new AuditEventRecord();
    record3.setParameter("3");
    record3.addPropertyValue("prop1", "val3-1");
    record3.addPropertyValue("prop1", "val3-2");
    record3.addPropertyValue("prop1", "val3-3");
    record3.addPropertyValue("prop2", null);
    record3.setTimestamp(TIMESTAMP_3);
    record3.setEventType(AuditEventType.MODIFY_OBJECT);
    record3.setEventStage(AuditEventStage.EXECUTION);
    record3.setMessage("RECORD THREE");
    // null outcome is kinda like "unknown", but not quite, filter/GUI must handle it
    record3.setChannel(CHANNEL_REST_URI);
    record3.setTaskIdentifier("task-identifier");
    record3.setTaskOid("task-oid");
    auditService.audit(record3, NullTaskImpl.INSTANCE, result);
}
Also used : OperationResult(com.evolveum.midpoint.schema.result.OperationResult) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord)

Example 80 with AuditEventRecord

use of com.evolveum.midpoint.audit.api.AuditEventRecord in project midpoint by Evolveum.

the class CleanupTest method prepareAuditEventRecords.

private void prepareAuditEventRecords() throws Exception {
    Calendar calendar = create_2013_07_12_12_00_Calendar();
    for (int i = 0; i < 3; i++) {
        long timestamp = calendar.getTimeInMillis();
        AuditEventRecord record = new AuditEventRecord();
        record.addDelta(createObjectDeltaOperation(i));
        record.setTimestamp(timestamp);
        record.addPropertyValue("prop1", "val1");
        record.addReferenceValue("ref1", ObjectTypeUtil.createObjectRef("oid1", ObjectTypes.USER).asReferenceValue());
        logger.info("Adding audit record with timestamp {}", new Date(timestamp));
        auditService.audit(record, new NullTaskImpl(), createOperationResult());
        calendar.add(Calendar.HOUR_OF_DAY, 1);
    }
    assertAndReturnAuditEventRecord(3);
}
Also used : Calendar(java.util.Calendar) AuditEventRecord(com.evolveum.midpoint.audit.api.AuditEventRecord) MAuditEventRecord(com.evolveum.midpoint.repo.sql.audit.beans.MAuditEventRecord) Date(java.util.Date) NullTaskImpl(com.evolveum.midpoint.task.api.test.NullTaskImpl)

Aggregations

AuditEventRecord (com.evolveum.midpoint.audit.api.AuditEventRecord)83 OperationResult (com.evolveum.midpoint.schema.result.OperationResult)28 Task (com.evolveum.midpoint.task.api.Task)18 Test (org.testng.annotations.Test)18 ObjectDeltaOperation (com.evolveum.midpoint.schema.ObjectDeltaOperation)11 SchemaException (com.evolveum.midpoint.util.exception.SchemaException)9 ObjectDelta (com.evolveum.midpoint.prism.delta.ObjectDelta)8 PrismObject (com.evolveum.midpoint.prism.PrismObject)7 ObjectType (com.evolveum.midpoint.xml.ns._public.common.common_3.ObjectType)6 ArrayList (java.util.ArrayList)6 MidPointPrincipal (com.evolveum.midpoint.security.api.MidPointPrincipal)5 NullTaskImpl (com.evolveum.midpoint.task.api.test.NullTaskImpl)5 PolyString (com.evolveum.midpoint.prism.polystring.PolyString)4 MAuditEventRecord (com.evolveum.midpoint.repo.sql.audit.beans.MAuditEventRecord)4 AuditResultHandler (com.evolveum.midpoint.audit.api.AuditResultHandler)3 MidpointAuthentication (com.evolveum.midpoint.authentication.api.config.MidpointAuthentication)3 Message (com.evolveum.midpoint.notifications.api.transports.Message)3 QAuditEventRecord (com.evolveum.midpoint.repo.sql.audit.querymodel.QAuditEventRecord)3 ObjectNotFoundException (com.evolveum.midpoint.util.exception.ObjectNotFoundException)3 AuditEventRecordType (com.evolveum.midpoint.xml.ns._public.common.audit_3.AuditEventRecordType)3