c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden/*
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden * The contents of this file are subject to the terms of the Common Development and
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden * Distribution License (the License). You may not use this file except in compliance with the
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden * License.
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden *
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden * You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden * specific language governing permission and limitations under the License.
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden *
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden * When distributing Covered Software, include this CDDL Header Notice in each file and include
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden * the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden * Header, with the fields enclosed by brackets [] replaced by your own identifying
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden * information: "Portions copyright [year] [name of copyright owner]".
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden *
2dd75eff92ef66e22cca286b6f4fe5a9c929af9dPhill Cunnington * Copyright 2014-2015 ForgeRock AS.
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden */
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddenpackage com.sun.identity.entitlement;
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddenimport org.forgerock.openam.utils.CollectionUtils;
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddenimport org.testng.annotations.BeforeMethod;
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddenimport org.testng.annotations.Test;
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddenimport javax.security.auth.Subject;
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddenimport java.util.Collections;
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddenimport static org.assertj.core.api.Assertions.assertThat;
2dd75eff92ef66e22cca286b6f4fe5a9c929af9dPhill Cunningtonimport static org.forgerock.json.JsonValue.*;
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Maddenpublic class JwtClaimSubjectTest {
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden private static final String CLAIM = "testClaim";
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden private static final String VALUE = "testValue";
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden private JwtClaimSubject testSubject;
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden @BeforeMethod
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden public void createSubjectCondition() {
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden testSubject = new JwtClaimSubject();
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden testSubject.setClaimName(CLAIM);
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden testSubject.setClaimValue(VALUE);
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden }
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden @Test
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden public void shouldSaveCorrectly() {
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Given
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final JwtClaimSubject newSubject = new JwtClaimSubject();
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // When
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden newSubject.setState(testSubject.getState());
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Then
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden assertThat(newSubject.getClaimName()).isEqualTo(testSubject.getClaimName());
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden assertThat(newSubject.getClaimValue()).isEqualTo(testSubject.getClaimValue());
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden }
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden @Test
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden public void shouldDenyIfJwtPrincipalNotPresent() throws Exception {
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Given
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final Subject subject = new Subject();
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // When
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final SubjectDecision result = testSubject.evaluate(null, null, subject, null, null);
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Then
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden assertThat(result.isSatisfied()).isFalse();
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden }
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden @Test
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden public void shouldDenyIfClaimIsMissing() throws Exception {
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Given
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final Subject subject = getTestSubject("wibble", "badger");
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // When
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final SubjectDecision result = testSubject.evaluate(null, null, subject, null, null);
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Then
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden assertThat(result.isSatisfied()).isFalse();
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden }
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden @Test
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden public void shouldDenyIfClaimDoesNotMatch() throws Exception {
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Given
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final Subject subject = getTestSubject(CLAIM, "badger");
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // When
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final SubjectDecision result = testSubject.evaluate(null, null, subject, null, null);
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Then
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden assertThat(result.isSatisfied()).isFalse();
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden }
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden @Test
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden public void shouldAllowIfClaimDoesMatch() throws Exception {
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Given
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final Subject subject = getTestSubject(CLAIM, VALUE);
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // When
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final SubjectDecision result = testSubject.evaluate(null, null, subject, null, null);
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden // Then
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden assertThat(result.isSatisfied()).isTrue();
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden }
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden private Subject getTestSubject(final String claimName, final String claimValue) {
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden final JwtPrincipal principal = new JwtPrincipal(json(object(
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden field("sub", "test"),
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden field(claimName, claimValue))));
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden return new Subject(false, CollectionUtils.asSet(principal), Collections.emptySet(), Collections.emptySet());
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden }
c8ab19d28fde5eda3b2daab4b1124887681fedf9Neil Madden}