Skip to content

Commit

Permalink
implementing MID-4602 and MID-4603, test enhacements (cherry picked
Browse files Browse the repository at this point in the history
  • Loading branch information
katkav committed Jun 5, 2018
1 parent 88ec992 commit 6c913a3
Show file tree
Hide file tree
Showing 8 changed files with 78 additions and 48 deletions.
Expand Up @@ -77,7 +77,7 @@ public static LocalizableMessageType createLocalizableMessageType(LocalizableMes
@NotNull
private static LocalizableMessageListType createLocalizableMessageType(@NotNull LocalizableMessageList messageList, Function<LocalizableMessage, String> resolveKeys) {
LocalizableMessageListType rv = new LocalizableMessageListType();
messageList.getMessages().forEach(message -> rv.getMessage().add(createLocalizableMessageType(message, resolveKeys)));
messageList.getMessages().forEach(message -> {if (rv.getMessage() != null) rv.getMessage().add(createLocalizableMessageType(message, resolveKeys));});
rv.setSeparator(createLocalizableMessageType(messageList.getSeparator(), resolveKeys));
rv.setPrefix(createLocalizableMessageType(messageList.getPrefix(), resolveKeys));
rv.setPostfix(createLocalizableMessageType(messageList.getPostfix(), resolveKeys));
Expand Down Expand Up @@ -151,12 +151,23 @@ public static LocalizableMessage toLocalizableMessage(@NotNull SingleLocalizable

private static LocalizableMessage toLocalizableMessage(@NotNull LocalizableMessageListType messageList) {
LocalizableMessageListBuilder builder = new LocalizableMessageListBuilder();
messageList.getMessage().forEach(m -> builder.addMessage(toLocalizableMessage(m)));
return builder
.separator(toLocalizableMessage(messageList.getSeparator()))
.prefix(toLocalizableMessage(messageList.getPrefix()))
.postfix(toLocalizableMessage(messageList.getPostfix()))
.build();
for (LocalizableMessageType m : messageList.getMessage()) {
builder.addMessage(toLocalizableMessage(m));
}

if (messageList.getSeparator() != null) {
builder = builder.separator(toLocalizableMessage(messageList.getSeparator()));
}

if (messageList.getPostfix() != null) {
builder = builder.postfix(toLocalizableMessage(messageList.getPostfix()));
}

if (messageList.getPrefix() != null) {
builder = builder.postfix(toLocalizableMessage(messageList.getPostfix()));
}
return builder.build();

}

private static List<Object> convertLocalizableMessageArguments(List<LocalizableMessageArgumentType> arguments) {
Expand Down
Expand Up @@ -1321,10 +1321,10 @@ private <T, O extends ObjectType> boolean validateValue(PrismObject<O> object, V
OperationResult result = parentResult.createSubresult(OPERATION_VALIDATE_VALUE + ".value");
if (path != null ) result.addParam("path", path.toString());
result.addParam("valueToValidate", newValue);
if (stringPolicy == null) {
stringPolicy = new ValuePolicyType();
stringPolicy.setName(PolyString.toPolyStringType(new PolyString("Default policy")));
}
// if (stringPolicy == null) {
// stringPolicy = new ValuePolicyType();
// stringPolicy.setName(PolyString.toPolyStringType(new PolyString("Default policy")));
// }

ObjectValuePolicyEvaluator evaluator = new ObjectValuePolicyEvaluator();
evaluator.setValuePolicy(stringPolicy);
Expand All @@ -1345,16 +1345,11 @@ private <T, O extends ObjectType> boolean validateValue(PrismObject<O> object, V
evaluator.setOldCredentialType(passwordType);
}
evaluator.setNow(clock.currentTimeXMLGregorianCalendar());
try {
LOGGER.trace("Validating value started");
OperationResult subResult = evaluator.validateStringValue(newValue);
LOGGER.trace("Validating value finished");
result.addSubresult(subResult);
// result.recomputeStatus();
} catch(Exception e) {
result.recordFatalError("Cannot validate value. " + e.getMessage());
}

LOGGER.trace("Validating value started");
OperationResult subResult = evaluator.validateStringValue(newValue);
LOGGER.trace("Validating value finished");
result.addSubresult(subResult);
//
result.computeStatus();

// if (!policyProcessor.validateValue(newValue, stringPolicy, createOriginResolver(object, result), "validate value " + (path!= null ? "for " + path : "") + " for " + object + " value " + valueToValidate, task, result)) {
Expand Down
Expand Up @@ -36,6 +36,8 @@
import com.evolveum.midpoint.util.exception.*;

import com.evolveum.midpoint.xml.ns._public.common.api_types_3.ExecuteScriptResponseType;
import com.evolveum.midpoint.xml.ns._public.common.api_types_3.PolicyItemDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.api_types_3.PolicyItemsDefinitionType;
import com.evolveum.midpoint.xml.ns._public.common.common_3.*;
import com.evolveum.midpoint.xml.ns._public.model.scripting_3.PipelineItemType;
import com.evolveum.prism.xml.ns._public.types_3.RawType;
Expand Down Expand Up @@ -958,31 +960,42 @@ public void test506generateHonorificPrefixNameExecute() throws Exception {
//TODO assert changed items
}

private OperationResult traceResponse(Response response) { //throws SchemaException {
private OperationResult traceResponse(Response response) throws SchemaException {
return traceResponse(response, false);
}

private OperationResult traceResponse(Response response, boolean assertMessages) throws SchemaException {
if (response.getStatus() != 200 && response.getStatus() != 201 && response.getStatus() != 204) {
LOGGER.info("coverting result");
OperationResultType result = response.readEntity(OperationResultType.class);
<<<<<<< HEAD
LOGGER.info("####RESULT");
OperationResult opResult = OperationResult.createOperationResult(result);
LOGGER.info(opResult.debugDump());
=======
LOGGER.info("tracing result");
OperationResult opResult = null;
try {
opResult = OperationResult.createOperationResult(result);
} catch (Exception e) {
LOGGER.info("Failed to create operation result. Reason: " + e.getMessage(), e);
return null;
if (assertMessages) {
LocalizableMessageType localizableMessage = result.getUserFriendlyMessage();
assertLocalizableMessage(localizableMessage);
}
LOGGER.info("REST resutl {}", opResult.debugDump());
display("REST result", opResult);
>>>>>>> 9aeb9b6f9d... implementing MID-4603 and MID-4602
return opResult;
}

return null;
}

private void assertLocalizableMessage(LocalizableMessageType localizableMessage) {
if (localizableMessage instanceof LocalizableMessageListType) {
List<LocalizableMessageType> localizableMessages = ((LocalizableMessageListType) localizableMessage).getMessage();
for (LocalizableMessageType subLocalizableMessage : localizableMessages) {
assertLocalizableMessage(subLocalizableMessage);
}
} else if (localizableMessage instanceof SingleLocalizableMessageType) {
SingleLocalizableMessageType singelLocalizableMessage = (SingleLocalizableMessageType) localizableMessage;
assertNotNull("Expected localized message for single localizable message, but no one present", singelLocalizableMessage.getFallbackMessage());
assertNotNull("Expected key in single localizable message, but no one present", singelLocalizableMessage.getKey());
}

LOGGER.info("localizable message: " + localizableMessage);
}


@Test
public void test510validateValueExplicit() throws Exception {
Expand Down Expand Up @@ -1024,7 +1037,7 @@ public void test511validateValueExplicitConflict() throws Exception {

TestUtil.displayThen(TEST_NAME);
displayResponse(response);
traceResponse(response);
traceResponse(response, true);

assertEquals("Expected 409 but got " + response.getStatus(), 409, response.getStatus());

Expand Down Expand Up @@ -1142,14 +1155,32 @@ public void test516validatePasswordHistoryConflict() throws Exception {
getDummyAuditService().clear();

TestUtil.displayWhen(TEST_NAME);
Response response = client.post(getRepoFile(POLICY_ITEM_DEFINITION_VALIDATE_IMPLICIT_PASSWORD));
Response response = client.post(getRepoFile(POLICY_ITEM_DEFINITION_VALIDATE_PASSWORD_PASSWORD_HISTORY_CONFLICT));

TestUtil.displayThen(TEST_NAME);
displayResponse(response);

traceResponse(response, true);

assertEquals("Expected 200 but got " + response.getStatus(), 200, response.getStatus());

assertEquals("Expected 409 but got " + response.getStatus(), 409, response.getStatus());

//
//
// PolicyItemsDefinitionType policyItemsDefinitionType = response.readEntity(PolicyItemsDefinitionType.class);
// List<PolicyItemDefinitionType> policyItemDefinitions = policyItemsDefinitionType.getPolicyItemDefinition();
// for (PolicyItemDefinitionType policyItemDefinition : policyItemDefinitions) {
// OperationResultType result = policyItemDefinition.getResult();
// OperationResult opResult = OperationResult.createOperationResult(result);
// LOGGER.info("opresult: {}", opResult.debugDump());
// assertNotNull("Expected localized message, but no one present", result.getMessage());
// LocalizableMessageType localizableMessage = result.getUserFriendlyMessage();
// assertTrue("Not a single localiable message", localizableMessage instanceof SingleLocalizableMessageType);
// SingleLocalizableMessageType singelLocalizableMessage = (SingleLocalizableMessageType) localizableMessage;
// assertNotNull("Expected localized message for single localizable message, but no one present", singelLocalizableMessage.getFallbackMessage());
// assertNotNull("Expected key in single localizable message, but no one present", singelLocalizableMessage.getKey());
//
// }
//

display("Audit", getDummyAuditService());
getDummyAuditService().assertRecords(2);
Expand Down
Expand Up @@ -6,10 +6,6 @@
"target": {
"path": "credentials/password/value"
},
"valuePolicyRef": {
"type": "http://midpoint.evolveum.com/xml/ns/public/common/common-3#ValuePolicyType",
"oid": "81818181-76e0-0000-8888-3d4f02d3fffb"
},
"value": "iamyouruncle"
}
]
Expand Down
2 changes: 1 addition & 1 deletion testing/rest/src/test/resources/repo/security-policy.xml
Expand Up @@ -24,7 +24,7 @@
<lockoutMaxFailedAttempts>3</lockoutMaxFailedAttempts>
<lockoutFailedAttemptsDuration>PT3M</lockoutFailedAttemptsDuration>
<lockoutDuration>PT15M</lockoutDuration>
<passwordHistoryLength>3</passwordHistoryLength>
<historyLength>3</historyLength>
</password>
<nonce>
<maxAge>P30D</maxAge>
Expand Down
Expand Up @@ -25,7 +25,7 @@ with a lowercase letter and must be at least 6 characters long.</description>
<warnBeforeExpiration>9</warnBeforeExpiration>
<lockAfterExpiration>0</lockAfterExpiration>
<minPasswordAge>0</minPasswordAge>
<passwordHistoryLength>0</passwordHistoryLength>
<passwordHistoryLength>3</passwordHistoryLength>
</lifetime>
<stringPolicy>
<description>String validation policy</description>
Expand Down
Expand Up @@ -9,7 +9,7 @@
<target>
<path>credentials/password/value</path>
</target>
<valuePolicyRef oid="81818181-76e0-0000-8888-3d4f02d3fffb" type="c:ValuePolicyType"/>
<!-- <valuePolicyRef oid="81818181-76e0-0000-8888-3d4f02d3fffb" type="c:ValuePolicyType"/> -->
<value>iamyouruncle</value>
</policyItemDefinition>

Expand Down
Expand Up @@ -3,7 +3,4 @@ policyItemsDefinition:
policyItemDefinition:
- target:
path: "credentials/password/value"
valuePolicyRef:
type: "http://midpoint.evolveum.com/xml/ns/public/common/common-3#ValuePolicyType"
oid: "81818181-76e0-0000-8888-3d4f02d3fffb"
value: "iamyouruncle"

0 comments on commit 6c913a3

Please sign in to comment.