Skip to content

Commit

Permalink
Merge branch 'post-3.7-fixes' into support-3.7
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Feb 16, 2018
2 parents 165319a + 7052f96 commit e10072a
Show file tree
Hide file tree
Showing 5 changed files with 79 additions and 74 deletions.
Expand Up @@ -260,6 +260,7 @@ public static void copyDirectory(File src, File dst) throws IOException {
}
}

@SafeVarargs
public static <T> Collection<T> createCollection(T... items) {
Collection<T> collection = new ArrayList<T>(items.length);
for (T item: items) {
Expand Down
Expand Up @@ -916,7 +916,9 @@ private <T extends ObjectType, F extends ObjectType> void executeDelta(ObjectDel

} finally {

LOGGER.info("RRRR1: {}", result);
result.computeStatus();
LOGGER.info("RRRR2: {}", result);
if (objectContext != null) {
if (!objectDelta.hasCompleteDefinition()) {
throw new SchemaException("object delta does not have complete definition");
Expand Down
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2010-2017 Evolveum
* Copyright (c) 2010-2018 Evolveum
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
Expand Down Expand Up @@ -225,6 +225,10 @@ public void test060AddRoleStupidAssignment() throws Exception {
assertObject(role);
}

/**
* Attempt to add account (red) that already exists, but it is not linked.
* Account is added using linkRef with account object.
*/
@Test
public void test100ModifyUserGuybrushAddAccountDummyRedNoAttributesConflict() throws Exception {
final String TEST_NAME = "test100ModifyUserGuybrushAddAccountDummyRedNoAttributesConflict";
Expand All @@ -234,34 +238,35 @@ public void test100ModifyUserGuybrushAddAccountDummyRedNoAttributesConflict() th
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();
assumeAssignmentPolicy(AssignmentPolicyEnforcementType.NONE);

PrismObject<UserType> userBefore = getUser(USER_GUYBRUSH_OID);
display("User before", userBefore);

PrismObject<ShadowType> account = PrismTestUtil.parseObject(ACCOUNT_GUYBRUSH_DUMMY_RED_FILE);
// Remove the attributes. This will allow outbound mapping to take place instead.
account.removeContainer(ShadowType.F_ATTRIBUTES);
display("New account", account);

ObjectDelta<UserType> userDelta = ObjectDelta.createEmptyModifyDelta(UserType.class, USER_GUYBRUSH_OID, prismContext);
PrismReferenceValue accountRefVal = new PrismReferenceValue();
accountRefVal.setObject(account);
ReferenceDelta accountDelta = ReferenceDelta.createModificationAdd(UserType.F_LINK_REF, getUserDefinition(), accountRefVal);
userDelta.addModification(accountDelta);
Collection<ObjectDelta<? extends ObjectType>> deltas = (Collection)MiscUtil.createCollection(userDelta);

dummyAuditService.clear();

try {

// WHEN
modelService.executeChanges(deltas, null, task, getCheckingProgressListenerCollection(), result);

AssertJUnit.fail("Unexpected executeChanges success");
} catch (ObjectAlreadyExistsException e) {
// This is expected
display("Expected exception", e);
}
// WHEN
displayWhen(TEST_NAME);
modelService.executeChanges(MiscUtil.createCollection(userDelta), null, task, getCheckingProgressListenerCollection(), result);

// THEN
displayThen(TEST_NAME);
assertPartialError(result);

// Check accountRef
PrismObject<UserType> userGuybrush = modelService.getObject(UserType.class, USER_GUYBRUSH_OID, null, task, result);
UserType userGuybrushType = userGuybrush.asObjectable();
PrismObject<UserType> userAfter = modelService.getObject(UserType.class, USER_GUYBRUSH_OID, null, task, result);
display("User after", userAfter);
UserType userGuybrushType = userAfter.asObjectable();
assertEquals("Unexpected number of accountRefs", 1, userGuybrushType.getLinkRef().size());
ObjectReferenceType accountRefType = userGuybrushType.getLinkRef().get(0);
String accountOid = accountRefType.getOid();
Expand All @@ -281,19 +286,23 @@ public void test100ModifyUserGuybrushAddAccountDummyRedNoAttributesConflict() th
// Check account in dummy resource
assertDefaultDummyAccount(ACCOUNT_GUYBRUSH_DUMMY_USERNAME, "Guybrush Threepwood", true);

result.computeStatus();
display("executeChanges result", result);
TestUtil.assertFailure("executeChanges result", result);

// Check audit
display("Audit", dummyAuditService);
dummyAuditService.assertRecords(2);
// Strictly speaking, there should be just 2 records, not 3.
// But this is a strange case, not a common one. Midpoint does two attempts.
// We do not really mind about extra provisioning attempts.
dummyAuditService.assertRecords(3);
dummyAuditService.assertSimpleRecordSanity();
dummyAuditService.assertAnyRequestDeltas();

Collection<ObjectDeltaOperation<? extends ObjectType>> auditExecution0Deltas = dummyAuditService.getExecutionDeltas(0);
assertEquals("Wrong number of execution deltas", 0, auditExecution0Deltas.size());
dummyAuditService.assertExecutionOutcome(OperationResultStatus.FATAL_ERROR);

assertEquals("Wrong number of execution deltas", 3, auditExecution0Deltas.size());
// SUCCESS because there is a handled error. Real error is in next audit record.
dummyAuditService.assertExecutionOutcome(0, OperationResultStatus.SUCCESS);

auditExecution0Deltas = dummyAuditService.getExecutionDeltas(1);
assertEquals("Wrong number of execution deltas", 2, auditExecution0Deltas.size());
dummyAuditService.assertExecutionOutcome(1, OperationResultStatus.PARTIAL_ERROR);
}

@Test
Expand Down
Expand Up @@ -175,10 +175,10 @@ public void test010RefinedSchemaWhite() throws Exception {
@Test
public void test100UserJackAssignBlankAccount() throws Exception {
final String TEST_NAME = "test100UserJackAssignBlankAccount";
TestUtil.displayTestTitle(this, TEST_NAME);
displayTestTitle(TEST_NAME);

// GIVEN
Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);

OperationResult result = task.getResult();
assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL);
Expand Down Expand Up @@ -218,10 +218,10 @@ public void test100UserJackAssignBlankAccount() throws Exception {
@Test
public void test101AddUserCharlesAssignBlankAccount() throws Exception {
final String TEST_NAME = "test101AddUserCharlesAssignBlankAccount";
TestUtil.displayTestTitle(this, TEST_NAME);
displayTestTitle(TEST_NAME);

// GIVEN
Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();
assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL);
dummyAuditService.clear();
Expand Down Expand Up @@ -260,10 +260,10 @@ public void test101AddUserCharlesAssignBlankAccount() throws Exception {
@Test
public void test200UserLemonheadAssignAccountBrokenNetwork() throws Exception {
final String TEST_NAME = "test200UserLemonheadAssignAccountBrokenNetwork";
TestUtil.displayTestTitle(this, TEST_NAME);
displayTestTitle(TEST_NAME);

// GIVEN
Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();
assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL);

Expand Down Expand Up @@ -307,7 +307,7 @@ public void test200UserLemonheadAssignAccountBrokenNetwork() throws Exception {
// TestUtil.displayTestTile(this, TEST_NAME);
//
// // GIVEN
// Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
// Task task = createTask(TEST_NAME);
// OperationResult result = task.getResult();
// assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL);
//
Expand Down Expand Up @@ -338,10 +338,10 @@ public void test200UserLemonheadAssignAccountBrokenNetwork() throws Exception {
@Test
public void test210UserSharptoothAssignAccountBrokenGeneric() throws Exception {
final String TEST_NAME = "test210UserSharptoothAssignAccountBrokenGeneric";
TestUtil.displayTestTitle(this, TEST_NAME);
displayTestTitle(TEST_NAME);

// GIVEN
Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();
assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL);

Expand Down Expand Up @@ -407,10 +407,10 @@ public void test210UserSharptoothAssignAccountBrokenGeneric() throws Exception {
@Test
public void test212UserSharptoothAssignAccountRecovery() throws Exception {
final String TEST_NAME = "test212UserSharptoothAssignAccountRecovery";
TestUtil.displayTestTitle(this, TEST_NAME);
displayTestTitle(TEST_NAME);

// GIVEN
Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();
assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL);

Expand Down Expand Up @@ -457,10 +457,10 @@ public void test215UserSharptoothChangePasswordGenericError() throws Exception {
}

public void testUserSharptoothChangePasswordError(final String TEST_NAME, BreakMode breakMode, String oldPassword, String newPassword, OperationResultStatus expectedResultStatus) throws Exception {
TestUtil.displayTestTitle(this, TEST_NAME);
displayTestTitle(TEST_NAME);

// GIVEN
Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();
assumeAssignmentPolicy(AssignmentPolicyEnforcementType.FULL);

Expand Down Expand Up @@ -495,13 +495,13 @@ public void testUserSharptoothChangePasswordError(final String TEST_NAME, BreakM
@Test
public void test220UserAssignAccountDeletedShadowRecomputeSync() throws Exception {
final String TEST_NAME = "test220UserAssignAccountDeletedShadowRecomputeSync";
TestUtil.displayTestTitle(this, TEST_NAME);
displayTestTitle(TEST_NAME);

//GIVEN
PrismObject<UserType> user = setupUserAssignAccountDeletedShadowRecompute(TEST_NAME, RESOURCE_DUMMY_OID, null,
USER_AFET_NAME, USER_AFET_FULLNAME);
String shadowOidBefore = getSingleLinkOid(user);
Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();

// WHEN
Expand All @@ -523,7 +523,7 @@ public void test220UserAssignAccountDeletedShadowRecomputeSync() throws Exceptio

// ... and again ...

task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
task = createTask(TEST_NAME);
result = task.getResult();

// WHEN
Expand All @@ -544,56 +544,49 @@ public void test220UserAssignAccountDeletedShadowRecomputeSync() throws Exceptio

/**
* Assign account to user, delete the account shadow (not the account), recompute the user.
* We expect ObjectAlreadyExistsException.
* We expect an error.
*
* This is tried on the red dummy resource where there is no synchronization.
*/
@Test
public void test222UserAssignAccountDeletedShadowRecomputeNoSync() throws Exception {
final String TEST_NAME = "test222UserAssignAccountDeletedShadowRecomputeNoSync";
TestUtil.displayTestTitle(this, TEST_NAME);
displayTestTitle(TEST_NAME);

//GIVEN
PrismObject<UserType> user = setupUserAssignAccountDeletedShadowRecompute(TEST_NAME, RESOURCE_DUMMY_RED_OID, RESOURCE_DUMMY_RED_NAME,
PrismObject<UserType> userBefore = setupUserAssignAccountDeletedShadowRecompute(TEST_NAME, RESOURCE_DUMMY_RED_OID, RESOURCE_DUMMY_RED_NAME,
USER_BFET_NAME, USER_BFET_FULLNAME);
Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();

try {
// WHEN
recomputeUser(user.getOid(), task, result);
// WHEN
displayWhen(TEST_NAME);
recomputeUser(userBefore.getOid(), task, result);

AssertJUnit.fail("Unexpected success");
} catch (ObjectAlreadyExistsException e) {
// this is expected
result.computeStatus();
TestUtil.assertFailure(result);
}
// THEN
displayThen(TEST_NAME);
assertPartialError(result);

user = getUser(user.getOid());
display("User after", user);
assertNoLinkedAccount(user);
PrismObject<UserType> userAfter = getUser(userBefore.getOid());
display("User after", userAfter);
assertNoLinkedAccount(userAfter);

// and again ...

task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
task = createTask(TEST_NAME);
result = task.getResult();

try {
// WHEN
recomputeUser(user.getOid(), task, result);

AssertJUnit.fail("Unexpected success");
} catch (ObjectAlreadyExistsException e) {
// this is expected
result.computeStatus();
TestUtil.assertFailure(result);
}

user = getUser(user.getOid());
display("User after", user);
assertNoLinkedAccount(user);

// WHEN
displayWhen(TEST_NAME);
recomputeUser(userAfter.getOid(), task, result);

// THEN
displayThen(TEST_NAME);
assertPartialError(result);

userAfter = getUser(userAfter.getOid());
display("User after", userAfter);
assertNoLinkedAccount(userAfter);
}

/**
Expand All @@ -605,14 +598,14 @@ public void test222UserAssignAccountDeletedShadowRecomputeNoSync() throws Except
@Test
public void test224UserAssignAccountDeletedShadowRecomputeReducedSync() throws Exception {
final String TEST_NAME = "test224UserAssignAccountDeletedShadowRecomputeReducedSync";
TestUtil.displayTestTitle(this, TEST_NAME);
displayTestTitle(TEST_NAME);

//GIVEN
PrismObject<UserType> user = setupUserAssignAccountDeletedShadowRecompute(TEST_NAME,
RESOURCE_DUMMY_YELLOW_OID, RESOURCE_DUMMY_YELLOW_NAME,
USER_CFET_NAME, USER_CFET_FULLNAME);
String shadowOidBefore = getSingleLinkOid(user);
Task task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
Task task = createTask(TEST_NAME);
OperationResult result = task.getResult();

// WHEN
Expand All @@ -634,7 +627,7 @@ public void test224UserAssignAccountDeletedShadowRecomputeReducedSync() throws E

// ... and again ...

task = taskManager.createTaskInstance(TestAssignmentErrors.class.getName() + "." + TEST_NAME);
task = createTask(TEST_NAME);
result = task.getResult();

// WHEN
Expand Down
2 changes: 1 addition & 1 deletion model/model-intest/src/test/resources/logback-test.xml
Expand Up @@ -68,7 +68,7 @@
<logger name="com.evolveum.midpoint.model.impl.lens.projector.credentials.CredentialsProcessor" level="DEBUG" />
<logger name="com.evolveum.midpoint.model.impl.lens.projector.credentials.ProjectionCredentialsProcessor" level="DEBUG" />
<logger name="com.evolveum.midpoint.model.impl.lens" level="DEBUG" />
<logger name="com.evolveum.midpoint.model.impl.lens.ChangeExecutor" level="DEBUG" />
<logger name="com.evolveum.midpoint.model.impl.lens.ChangeExecutor" level="TRACE" />
<logger name="com.evolveum.midpoint.model.impl.lens.ShadowConstraintsChecker" level="DEBUG" />
<logger name="com.evolveum.midpoint.model.impl.lens.LensUtil" level="DEBUG" />
<logger name="com.evolveum.midpoint.model.impl.lens.AssignmentEvaluator" level="DEBUG" />
Expand Down

0 comments on commit e10072a

Please sign in to comment.