001/* 002 * Licensed to DuraSpace under one or more contributor license agreements. 003 * See the NOTICE file distributed with this work for additional information 004 * regarding copyright ownership. 005 * 006 * DuraSpace licenses this file to you under the Apache License, 007 * Version 2.0 (the "License"); you may not use this file except in 008 * compliance with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.fcrepo.auth.common; 019 020import static com.google.common.collect.Sets.newHashSet; 021import static org.junit.Assert.assertEquals; 022import static org.junit.Assert.assertNotEquals; 023import static org.junit.Assert.assertTrue; 024import static org.mockito.Mockito.mock; 025import static org.mockito.Mockito.when; 026import static org.mockito.MockitoAnnotations.initMocks; 027 028import java.security.Principal; 029import java.util.Set; 030 031import javax.servlet.http.HttpServletRequest; 032 033import org.fcrepo.auth.common.ContainerRolesPrincipalProvider.ContainerRolesPrincipal; 034import org.junit.Before; 035import org.junit.Test; 036import org.mockito.Mock; 037 038/** 039 * Tests for {@link ContainerRolesPrincipalProvider}. 040 * 041 * @author Kevin S. Clarke 042 */ 043public class ContainerRolesPrincipalProviderTest { 044 045 @Mock 046 private HttpServletRequest request; 047 048 private ContainerRolesPrincipalProvider provider; 049 050 /** 051 * Sets up ContainerRolesPrincipalProviderTest's tests. 052 */ 053 @Before 054 public void setUp() { 055 initMocks(this); 056 provider = new ContainerRolesPrincipalProvider(); 057 } 058 059 /** 060 * Test for {@link ContainerRolesPrincipalProvider#setRoleNames(Set)}. 061 */ 062 @Test 063 public void testSetRole() { 064 when(request.isUserInRole("a")).thenReturn(true); 065 provider.setRoleNames(newHashSet("a")); 066 067 final Set<Principal> principals = provider.getPrincipals(request); 068 069 assertEquals(1, principals.size()); 070 assertTrue("The principals should contain 'a'", principals.contains(new ContainerRolesPrincipal("a"))); 071 } 072 073 /** 074 * Test for {@link ContainerRolesPrincipalProvider#setRoleNames(Set)}. 075 */ 076 @Test 077 public void testSetRoles() { 078 when(request.isUserInRole("a")).thenReturn(true); 079 when(request.isUserInRole("b")).thenReturn(true); 080 provider.setRoleNames(newHashSet("a", "b")); 081 082 final Set<Principal> principals = provider.getPrincipals(request); 083 084 assertEquals(2, principals.size()); 085 assertTrue("The principals should contain 'a'", principals.contains(new ContainerRolesPrincipal("a"))); 086 assertTrue("The principals should contain 'b'", principals.contains(new ContainerRolesPrincipal("b"))); 087 } 088 089 /** 090 * Test for {@link ContainerRolesPrincipalProvider#setRoleNames(Set)}. 091 */ 092 @Test 093 public void testTrimSetRoles() { 094 when(request.isUserInRole("a")).thenReturn(true); 095 when(request.isUserInRole("b")).thenReturn(true); 096 provider.setRoleNames(newHashSet(" a", "b ")); 097 098 final Set<Principal> principals = provider.getPrincipals(request); 099 100 assertEquals(2, principals.size()); 101 assertTrue("The principals should contain 'a'", principals.contains(new ContainerRolesPrincipal("a"))); 102 assertTrue("The principals should contain 'b'", principals.contains(new ContainerRolesPrincipal("b"))); 103 } 104 105 /** 106 * Test for {@link ContainerRolesPrincipalProvider#setRoleNames(Set)}. 107 */ 108 @Test 109 public void testNoConfigedRoleNames() { 110 final Set<Principal> principals = provider.getPrincipals(request); 111 assertTrue("Empty set expected when no role names configured", principals.isEmpty()); 112 } 113 114 /** 115 * Test for {@link ContainerRolesPrincipalProvider#getPrincipals(javax.servlet.http.HttpServletRequest)}. 116 */ 117 @Test 118 public void testNoRequest() { 119 provider.setRoleNames(newHashSet("a")); 120 121 final Set<Principal> principals = provider.getPrincipals(null); 122 assertTrue("Empty set expected when no request supplied", principals.isEmpty()); 123 124 } 125 126 /** 127 * Test for {@link ContainerRolesPrincipalProvider#getPrincipals(javax.servlet.http.HttpServletRequest)}. 128 */ 129 @Test 130 public void testPrincipalEqualsDifferentClass() { 131 when(request.isUserInRole("a")).thenReturn(true); 132 provider.setRoleNames(newHashSet("a")); 133 134 final Set<Principal> principals = provider.getPrincipals(request); 135 final Principal principal = principals.iterator().next(); 136 137 assertNotEquals("Principals should not be equal if not the same class", principal, mock(Principal.class)); 138 } 139 140}