Skip to content

Commit

Permalink
Not replicating MID-2368 in TestOrgSync
Browse files Browse the repository at this point in the history
  • Loading branch information
semancik committed Jun 17, 2015
1 parent e99dde1 commit 508b845
Show file tree
Hide file tree
Showing 2 changed files with 159 additions and 0 deletions.
Expand Up @@ -893,4 +893,18 @@ public static void assertAssociation(PrismObject<ShadowType> shadow, QName assoc
}
AssertJUnit.fail("No association for entitlement "+entitlementOid+" in "+shadow);
}

public static void assertNoAssociation(PrismObject<ShadowType> shadow, QName associationName, String entitlementOid) {
ShadowType accountType = shadow.asObjectable();
List<ShadowAssociationType> associations = accountType.getAssociation();
if (associations == null) {
return;
}
for (ShadowAssociationType association: associations) {
if (associationName.equals(association.getName()) &&
entitlementOid.equals(association.getShadowRef().getOid())) {
AssertJUnit.fail("Unexpected association for entitlement "+entitlementOid+" in "+shadow);
}
}
}
}
Expand Up @@ -19,6 +19,7 @@
import static com.evolveum.midpoint.test.IntegrationTestTools.display;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertNotNull;
import static org.testng.AssertJUnit.assertNull;
import static org.testng.AssertJUnit.assertTrue;

import java.io.File;
Expand Down Expand Up @@ -134,6 +135,10 @@ public class TestOrgSync extends AbstractStoryTest {
private static final String ACCOUNT_SHARPTOOTH_USERNAME = "sharptooth";
private static final String ACCOUNT_SHARPTOOTH_FIST_NAME = "Sharptooth";
private static final String ACCOUNT_SHARPTOOTH_LAST_NAME = "Canibal";

private static final String ACCOUNT_REDSKULL_USERNAME = "redskull";
private static final String ACCOUNT_REDSKULL_FIST_NAME = "Redskull";
private static final String ACCOUNT_REDSKULL_LAST_NAME = "Canibal";

private static final String ACCOUNT_GUYBRUSH_USERNAME = "guybrush";
private static final String ACCOUNT_GUYBRUSH_FIST_NAME = "Guybrush";
Expand Down Expand Up @@ -424,6 +429,120 @@ public void test106AddHrAccountSharptooth() throws Exception {
assertAssignments(user, 3);
}

/**
* Yet another canibal to play with.
*/
@Test
public void test107AddHrAccountRedskull() throws Exception {
final String TEST_NAME = "test107AddHrAccountRedskull";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestTrafo.class.getName() + "." + TEST_NAME);

DummyAccount newAccount = new DummyAccount(ACCOUNT_REDSKULL_USERNAME);
newAccount.addAttributeValue(DUMMY_ACCOUNT_ATTRIBUTE_HR_FIRST_NAME, ACCOUNT_REDSKULL_FIST_NAME);
newAccount.addAttributeValue(DUMMY_ACCOUNT_ATTRIBUTE_HR_LAST_NAME, ACCOUNT_REDSKULL_LAST_NAME);
newAccount.addAttributeValue(DUMMY_ACCOUNT_ATTRIBUTE_HR_ORGPATH, ORGPATH_MONKEY_ISLAND);
newAccount.addAttributeValue(DUMMY_ACCOUNT_ATTRIBUTE_HR_RESPONSIBILITIES, RESP_CANIBALISM);

// WHEN
dummyResourceHr.addAccount(newAccount);
waitForTaskNextRun(TASK_LIVE_SYNC_DUMMY_HR_OID, true);

// THEN
PrismObject<UserType> user = findUserByUsername(ACCOUNT_REDSKULL_USERNAME);
assertNotNull("No redskull user", user);
display("User", user);
assertUser(user, ACCOUNT_REDSKULL_USERNAME, ACCOUNT_REDSKULL_FIST_NAME, ACCOUNT_REDSKULL_LAST_NAME);
assertAccount(user, RESOURCE_DUMMY_HR_OID);

dumpOrgTree();

PrismObject<OrgType> org = getAndAssertReplicatedOrg(ORGPATH_MONKEY_ISLAND);
assertAssignedOrg(user, org.getOid());
assertHasOrg(user, org.getOid());
assertHasOrg(org, ORG_TOP_OID);
assertEquals("Monkey island Org OID has changed", orgMonkeyIslandOid, org.getOid());

assertSubOrgs(org,0);
assertSubOrgs(ORG_TOP_OID,1);

assertBasicRoleAndResources(user);
String thisRoleCanibalismOid = assertResponsibility(user, RESP_CANIBALISM);
assertEquals("Canibalism role OID has changed", roleCanibalismOid, thisRoleCanibalismOid);
assertAssignments(user, 3);
}

/**
* Remove "canibalism" responsibility from redskull.
*/
@Test
public void test108RedskullGoesVegeratian() throws Exception {
final String TEST_NAME = "test108RedskullGoesVegeratian";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestTrafo.class.getName() + "." + TEST_NAME);

DummyAccount account = dummyResourceHr.getAccountByUsername(ACCOUNT_REDSKULL_USERNAME);

// WHEN
TestUtil.displayWhen(TEST_NAME);
account.removeAttributeValue(DUMMY_ACCOUNT_ATTRIBUTE_HR_RESPONSIBILITIES, RESP_CANIBALISM);
waitForTaskNextRun(TASK_LIVE_SYNC_DUMMY_HR_OID, true);

// THEN
TestUtil.displayThen(TEST_NAME);
PrismObject<UserType> user = findUserByUsername(ACCOUNT_REDSKULL_USERNAME);
assertNotNull("No redskull user", user);
display("User", user);
assertUser(user, ACCOUNT_REDSKULL_USERNAME, ACCOUNT_REDSKULL_FIST_NAME, ACCOUNT_REDSKULL_LAST_NAME);
assertAccount(user, RESOURCE_DUMMY_HR_OID);

dumpOrgTree();

PrismObject<OrgType> org = getAndAssertReplicatedOrg(ORGPATH_MONKEY_ISLAND);
assertAssignedOrg(user, org.getOid());
assertHasOrg(user, org.getOid());
assertHasOrg(org, ORG_TOP_OID);

assertSubOrgs(org,0);
assertSubOrgs(ORG_TOP_OID,1);

assertEquals("Monkey island Org OID has changed", orgMonkeyIslandOid, org.getOid());

assertBasicRoleAndResources(user);
roleCanibalismOid = assertNoResponsibility(user, RESP_CANIBALISM);
assertAssignments(user, 2);
}

/**
* Vegetarian cannibal? Not really!
*/
@Test
public void test109HrDeleteRedskull() throws Exception {
final String TEST_NAME = "test109HrDeleteRedskull";
TestUtil.displayTestTile(this, TEST_NAME);
Task task = taskManager.createTaskInstance(TestTrafo.class.getName() + "." + TEST_NAME);

// WHEN
TestUtil.displayWhen(TEST_NAME);
dummyResourceHr.deleteAccountByName(ACCOUNT_REDSKULL_USERNAME);
waitForTaskNextRun(TASK_LIVE_SYNC_DUMMY_HR_OID, true);

// THEN
TestUtil.displayThen(TEST_NAME);
PrismObject<UserType> user = findUserByUsername(ACCOUNT_REDSKULL_USERNAME);
display("User", user);
assertNull("Redskull user not gone", user);

dumpOrgTree();

PrismObject<OrgType> org = getAndAssertReplicatedOrg(ORGPATH_MONKEY_ISLAND);
assertHasOrg(org, ORG_TOP_OID);
assertSubOrgs(org,0);
assertSubOrgs(ORG_TOP_OID,1);

assertEquals("Monkey island Org OID has changed", orgMonkeyIslandOid, org.getOid());
}

/**
* Two-level orgpath. Both orgs should be created.
*/
Expand Down Expand Up @@ -1128,6 +1247,32 @@ private String assertResponsibility(PrismObject<UserType> user, String respName)

return respRole.getOid();
}

private String assertNoResponsibility(PrismObject<UserType> user, String respName) throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException, DirectoryException {
String respRoleName = "R_"+respName;
PrismObject<RoleType> respRole = searchObjectByName(RoleType.class, respRoleName);
assertNotNull("No role for responsibility "+respName);
display("Responsibility role for "+respName, respRole);
assertNotAssignedRole(user, respRole.getOid());

PrismReferenceValue linkRef = getSingleLinkRef(respRole);
PrismObject<ShadowType> shadow = getShadowModel(linkRef.getOid());
display("Role "+respRoleName+" shadow", shadow);
// TODO assert shadow content

String groupDn = "cn="+respRoleName+",ou=groups,"+openDJController.getSuffix();
SearchResultEntry groupEntry = openDJController.fetchAndAssertEntry(groupDn, "groupOfUniqueNames");
display("Group entry", groupEntry);

PrismReferenceValue accountLinkRef = getLinkRef(user, RESOURCE_OPENDJ_OID);
PrismObject<ShadowType> accountShadow = getShadowModel(accountLinkRef.getOid());
String accountDn = IntegrationTestTools.getSecondaryIdentifier(accountShadow);
openDJController.assertNoUniqueMember(groupEntry, accountDn);

IntegrationTestTools.assertNoAssociation(accountShadow, OPENDJ_ASSOCIATION_GROUP_NAME, shadow.getOid());

return respRole.getOid();
}

private void dumpOrgTree() throws SchemaException, ObjectNotFoundException, SecurityViolationException, CommunicationException, ConfigurationException {
display("Org tree", dumpOrgTree(ORG_TOP_OID));
Expand Down

0 comments on commit 508b845

Please sign in to comment.