/* * Copyright (c) 2010-2017 Evolveum * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.evolveum.midpoint.provisioning.impl.dummy; import static com.evolveum.midpoint.test.IntegrationTestTools.display; import static org.testng.AssertJUnit.assertNotNull; import java.io.File; import org.apache.commons.lang.StringUtils; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; import com.evolveum.icf.dummy.resource.DummyAccount; import com.evolveum.icf.dummy.resource.DummyGroup; import com.evolveum.midpoint.prism.PrismObject; import com.evolveum.midpoint.prism.delta.ObjectDelta; import com.evolveum.midpoint.prism.match.MatchingRule; import com.evolveum.midpoint.prism.match.StringIgnoreCaseMatchingRule; import com.evolveum.midpoint.schema.GetOperationOptions; import com.evolveum.midpoint.schema.constants.SchemaConstants; import com.evolveum.midpoint.schema.result.OperationResult; import com.evolveum.midpoint.task.api.Task; import com.evolveum.midpoint.test.DummyResourceContoller; import com.evolveum.midpoint.test.IntegrationTestTools; import com.evolveum.midpoint.test.util.TestUtil; import com.evolveum.midpoint.util.DOMUtil; import com.evolveum.midpoint.xml.ns._public.common.common_3.OperationProvisioningScriptsType; import com.evolveum.midpoint.xml.ns._public.common.common_3.ShadowType; /** * Almost the same as TestDummy but this is using a caseIgnore resource version. * * @author Radovan Semancik * */ @ContextConfiguration(locations = "classpath:ctx-provisioning-test-main.xml") @DirtiesContext public class TestDummyCaseIgnore extends TestDummy { public static final File TEST_DIR = new File("src/test/resources/impl/dummy-case-ignore/"); public static final File RESOURCE_DUMMY_FILE = new File(TEST_DIR, "resource-dummy.xml"); private MatchingRule<String> uidMatchingRule; @Override public void initSystem(Task initTask, OperationResult initResult) throws Exception { super.initSystem(initTask, initResult); uidMatchingRule = matchingRuleRegistry.getMatchingRule(StringIgnoreCaseMatchingRule.NAME, DOMUtil.XSD_STRING); } @Override protected File getResourceDummyFilename() { return RESOURCE_DUMMY_FILE; } @Override protected String getWillRepoIcfName() { return "will"; } @Override protected String getMurrayRepoIcfName() { return StringUtils.lowerCase(super.getMurrayRepoIcfName()); } @Override protected String getBlackbeardRepoIcfName() { return StringUtils.lowerCase(super.getBlackbeardRepoIcfName()); } @Override protected String getDrakeRepoIcfName() { return StringUtils.lowerCase(super.getDrakeRepoIcfName()); } @Override protected MatchingRule<String> getUidMatchingRule() { return uidMatchingRule; } @Override protected boolean isAvoidDuplicateValues() { return true; } @Test public void test175SearchUidCase() throws Exception { final String TEST_NAME = "test175SearchUidCase"; TestUtil.displayTestTile(TEST_NAME); testSeachIterativeSingleAttrFilter(TEST_NAME, SchemaConstants.ICFS_UID, "wIlL", null, true, transformNameFromResource("Will")); } @Test public void test176SearchUidCaseNoFetch() throws Exception { final String TEST_NAME = "test176SearchUidCaseNoFetch"; TestUtil.displayTestTile(TEST_NAME); testSeachIterativeSingleAttrFilter(TEST_NAME, SchemaConstants.ICFS_UID, "wIlL", GetOperationOptions.createNoFetch(), false, transformNameFromResource("Will")); } /** * Add will to the group pirates. But he is already there. */ @Test public void test280EntitleAccountWillPiratesAlreadyThere() throws Exception { final String TEST_NAME = "test280EntitleAccountWillPiratesAlreadyThere"; TestUtil.displayTestTile(TEST_NAME); Task task = taskManager.createTaskInstance(TestDummy.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); DummyGroup groupPirates = getDummyGroup(GROUP_PIRATES_NAME, piratesIcfUid); groupPirates.addMember(getWillRepoIcfName()); syncServiceMock.reset(); ObjectDelta<ShadowType> delta = IntegrationTestTools.createEntitleDelta(ACCOUNT_WILL_OID, dummyResourceCtl.getAttributeQName(DummyResourceContoller.DUMMY_ENTITLEMENT_GROUP_NAME), GROUP_PIRATES_OID, prismContext); display("ObjectDelta", delta); delta.checkConsistence(); // WHEN provisioningService.modifyObject(ShadowType.class, delta.getOid(), delta.getModifications(), new OperationProvisioningScriptsType(), null, task, result); // THEN result.computeStatus(); display("modifyObject result", result); TestUtil.assertSuccess(result); delta.checkConsistence(); DummyGroup group = getDummyGroupAssert(GROUP_PIRATES_NAME, piratesIcfUid); assertMember(group, getWillRepoIcfName()); syncServiceMock.assertNotifySuccessOnly(); PrismObject<ShadowType> shadow = provisioningService.getObject(ShadowType.class, ACCOUNT_WILL_OID, null, task, result); display("Shadow after", shadow); assertEntitlementGroup(shadow, GROUP_PIRATES_OID); assertSteadyResource(); } @Test public void test282DetitleAccountWillPirates() throws Exception { final String TEST_NAME = "test282DetitleAccountWillPirates"; TestUtil.displayTestTile(TEST_NAME); Task task = taskManager.createTaskInstance(TestDummy.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); syncServiceMock.reset(); ObjectDelta<ShadowType> delta = IntegrationTestTools.createDetitleDelta(ACCOUNT_WILL_OID, dummyResourceCtl.getAttributeQName(DummyResourceContoller.DUMMY_ENTITLEMENT_GROUP_NAME), GROUP_PIRATES_OID, prismContext); display("ObjectDelta", delta); delta.checkConsistence(); // WHEN provisioningService.modifyObject(ShadowType.class, delta.getOid(), delta.getModifications(), new OperationProvisioningScriptsType(), null, task, result); // THEN result.computeStatus(); display("modifyObject result", result); TestUtil.assertSuccess(result); delta.checkConsistence(); DummyGroup group = getDummyGroupAssert(GROUP_PIRATES_NAME, piratesIcfUid); assertNoMember(group, getWillRepoIcfName()); // Make sure that account is still there and it has the privilege DummyAccount dummyAccount = getDummyAccountAssert(ACCOUNT_WILL_USERNAME, willIcfUid); assertNotNull("Account will is gone!", dummyAccount); syncServiceMock.assertNotifySuccessOnly(); assertSteadyResource(); } /** * Add will to the group pirates. But he is already there - and the capitalization is wrong. */ @Test public void test285EntitleAccountWillPiratesAlreadyThereCaseIgnore() throws Exception { final String TEST_NAME = "test285EntitleAccountWillPiratesAlreadyThereCaseIgnore"; TestUtil.displayTestTile(TEST_NAME); Task task = taskManager.createTaskInstance(TestDummy.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); DummyGroup groupPirates = getDummyGroup(GROUP_PIRATES_NAME, piratesIcfUid); groupPirates.addMember(getWillRepoIcfName().toUpperCase()); syncServiceMock.reset(); ObjectDelta<ShadowType> delta = IntegrationTestTools.createEntitleDelta(ACCOUNT_WILL_OID, dummyResourceCtl.getAttributeQName(DummyResourceContoller.DUMMY_ENTITLEMENT_GROUP_NAME), GROUP_PIRATES_OID, prismContext); display("ObjectDelta", delta); delta.checkConsistence(); // WHEN provisioningService.modifyObject(ShadowType.class, delta.getOid(), delta.getModifications(), new OperationProvisioningScriptsType(), null, task, result); // THEN result.computeStatus(); display("modifyObject result", result); TestUtil.assertSuccess(result); delta.checkConsistence(); DummyGroup group = getDummyGroupAssert(GROUP_PIRATES_NAME, piratesIcfUid); IntegrationTestTools.assertGroupMember(group, getWillRepoIcfName(),true); syncServiceMock.assertNotifySuccessOnly(); PrismObject<ShadowType> shadow = provisioningService.getObject(ShadowType.class, ACCOUNT_WILL_OID, null, task, result); display("Shadow after", shadow); assertEntitlementGroup(shadow, GROUP_PIRATES_OID); assertSteadyResource(); } @Test public void test289DetitleAccountWillPirates() throws Exception { final String TEST_NAME = "test289DetitleAccountWillPirates"; TestUtil.displayTestTile(TEST_NAME); Task task = taskManager.createTaskInstance(TestDummy.class.getName() + "." + TEST_NAME); OperationResult result = task.getResult(); syncServiceMock.reset(); ObjectDelta<ShadowType> delta = IntegrationTestTools.createDetitleDelta(ACCOUNT_WILL_OID, dummyResourceCtl.getAttributeQName(DummyResourceContoller.DUMMY_ENTITLEMENT_GROUP_NAME), GROUP_PIRATES_OID, prismContext); display("ObjectDelta", delta); delta.checkConsistence(); // WHEN provisioningService.modifyObject(ShadowType.class, delta.getOid(), delta.getModifications(), new OperationProvisioningScriptsType(), null, task, result); // THEN result.computeStatus(); display("modifyObject result", result); TestUtil.assertSuccess(result); delta.checkConsistence(); DummyGroup group = getDummyGroupAssert(GROUP_PIRATES_NAME, piratesIcfUid); assertNoMember(group, getWillRepoIcfName()); assertNoMember(group, getWillRepoIcfName().toUpperCase()); assertNoMember(group, getWillRepoIcfName().toLowerCase()); // Make sure that account is still there and it has the privilege DummyAccount dummyAccount = getDummyAccountAssert(ACCOUNT_WILL_USERNAME, willIcfUid); assertNotNull("Account will is gone!", dummyAccount); syncServiceMock.assertNotifySuccessOnly(); assertSteadyResource(); } @Test public void test511AddProtectedAccountCaseIgnore() throws Exception { final String TEST_NAME = "test511AddProtectedAccountCaseIgnore"; TestUtil.displayTestTile(TEST_NAME); // GIVEN testAddProtectedAccount(TEST_NAME, "xaxa"); testAddProtectedAccount(TEST_NAME, "somebody-ADM"); testAddProtectedAccount(TEST_NAME, "everybody-AdM"); } }