package de.groothues.mysaml.assertion.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.w3c.dom.Document;
import de.groothues.mysaml.assertion.AssertionType;
import de.groothues.mysaml.assertion.AudienceRestrictionType;
import de.groothues.mysaml.assertion.ConditionAbstractType;
import de.groothues.mysaml.assertion.PropertyKeys;
import de.groothues.mysaml.assertion.SignedAssertionBuilder;
import de.groothues.mysaml.assertion.SubjectConfirmationType;
import de.groothues.mysaml.impl.SamlContextImpl;
public class SignedAssertionBuilderImplTest {
private static final String TEST_ISSUER = "http://issuer.test";
private static final String TEST_SUBJECT = "testSubjectName";
private static final String TEST_AUDIENCE = "http://audience.test";
private static final String TEST_RECIPIENT = "http://recipient.test";
private SignedAssertionBuilder signedAssertionBuilder;
@Before
public void setUp() throws Exception {
signedAssertionBuilder = new SamlContextImpl().getSignedAssertionBuilder();
}
@Test
public void testBuildWithoutRuntimeProperties() {
Document signedAssertionDoc = signedAssertionBuilder.build(null);
assertNotNull(signedAssertionDoc);
AssertionType signedAssertion = signedAssertionBuilder.unmarshal(signedAssertionDoc);
assertNotNull(signedAssertion.getSignature());
}
@Test
public void testBuild() {
Map<String, String> runtimeProperties = new HashMap<String, String>();
runtimeProperties.put(PropertyKeys.ISSUER_VALUE_KEY, TEST_ISSUER);
runtimeProperties.put(PropertyKeys.SUBJECT_NAMEID_VALUE_KEY, TEST_SUBJECT);
runtimeProperties.put(
createIndexedKey(PropertyKeys.CONDITIONS_AUDIENCERESTRICTION_AUDIENCE_KEY, 1),
TEST_AUDIENCE);
runtimeProperties.put(
createIndexedKey(PropertyKeys.SUBJECT_CONFIRMATION_DATA_RECIPIENT_KEY, 1),
TEST_RECIPIENT);
Document signedAssertionDoc = signedAssertionBuilder.build(runtimeProperties);
assertNotNull(signedAssertionDoc);
AssertionType signedAssertion = signedAssertionBuilder.unmarshal(signedAssertionDoc);
assertNotNull(signedAssertion.getSignature());
assertEquals(TEST_ISSUER, signedAssertion.getIssuer().getValue());
assertEquals(TEST_SUBJECT, signedAssertion.getSubject().getNameID().getValue());
List<ConditionAbstractType> audienceRestrictions = signedAssertion.getConditions().
getConditionOrAudienceRestrictionOrOneTimeUse();
assertEquals(1, audienceRestrictions.size());
AudienceRestrictionType audienceRestriction =
(AudienceRestrictionType) audienceRestrictions.iterator().next();
List<String> audiences = audienceRestriction.getAudience();
assertEquals(1, audiences.size());
assertEquals(TEST_AUDIENCE, audiences.iterator().next());
List<SubjectConfirmationType> subjectConfirmations = signedAssertion.getSubject().
getNameIdSubjectConfirmation();
assertEquals(1, subjectConfirmations.size());
assertEquals(TEST_RECIPIENT, subjectConfirmations.iterator().next().
getSubjectConfirmationData().getRecipient());
}
private String createIndexedKey(String key, int index) {
return key + "." + index;
}
}