001/* 002 * The contents of this file are subject to the license and copyright 003 * detailed in the LICENSE and NOTICE files at the root of the source 004 * tree. 005 */ 006package org.fcrepo.auth.common; 007 008import static com.google.common.collect.Sets.newHashSet; 009import static org.junit.Assert.assertEquals; 010import static org.junit.Assert.assertNotEquals; 011import static org.junit.Assert.assertTrue; 012import static org.mockito.Mockito.mock; 013import static org.mockito.Mockito.when; 014 015import java.security.Principal; 016import java.util.Set; 017 018import javax.servlet.http.HttpServletRequest; 019 020import org.fcrepo.auth.common.ContainerRolesPrincipalProvider.ContainerRolesPrincipal; 021 022import org.junit.Before; 023import org.junit.Test; 024import org.mockito.Mock; 025import org.mockito.MockitoAnnotations; 026 027/** 028 * Tests for {@link ContainerRolesPrincipalProvider}. 029 * 030 * @author Kevin S. Clarke 031 */ 032public class ContainerRolesPrincipalProviderTest { 033 034 @Mock 035 private HttpServletRequest request; 036 037 private ContainerRolesPrincipalProvider provider; 038 039 /** 040 * Sets up ContainerRolesPrincipalProviderTest's tests. 041 */ 042 @Before 043 public void setUp() { 044 MockitoAnnotations.openMocks(this); 045 provider = new ContainerRolesPrincipalProvider(); 046 } 047 048 /** 049 * Test for {@link ContainerRolesPrincipalProvider#setRoleNames(Set)}. 050 */ 051 @Test 052 public void testSetRole() { 053 when(request.isUserInRole("a")).thenReturn(true); 054 provider.setRoleNames(newHashSet("a")); 055 056 final Set<Principal> principals = provider.getPrincipals(request); 057 058 assertEquals(1, principals.size()); 059 assertTrue("The principals should contain 'a'", principals.contains(new ContainerRolesPrincipal("a"))); 060 } 061 062 /** 063 * Test for {@link ContainerRolesPrincipalProvider#setRoleNames(Set)}. 064 */ 065 @Test 066 public void testSetRoles() { 067 when(request.isUserInRole("a")).thenReturn(true); 068 when(request.isUserInRole("b")).thenReturn(true); 069 provider.setRoleNames(newHashSet("a", "b")); 070 071 final Set<Principal> principals = provider.getPrincipals(request); 072 073 assertEquals(2, principals.size()); 074 assertTrue("The principals should contain 'a'", principals.contains(new ContainerRolesPrincipal("a"))); 075 assertTrue("The principals should contain 'b'", principals.contains(new ContainerRolesPrincipal("b"))); 076 } 077 078 /** 079 * Test for {@link ContainerRolesPrincipalProvider#setRoleNames(Set)}. 080 */ 081 @Test 082 public void testTrimSetRoles() { 083 when(request.isUserInRole("a")).thenReturn(true); 084 when(request.isUserInRole("b")).thenReturn(true); 085 provider.setRoleNames(newHashSet(" a", "b ")); 086 087 final Set<Principal> principals = provider.getPrincipals(request); 088 089 assertEquals(2, principals.size()); 090 assertTrue("The principals should contain 'a'", principals.contains(new ContainerRolesPrincipal("a"))); 091 assertTrue("The principals should contain 'b'", principals.contains(new ContainerRolesPrincipal("b"))); 092 } 093 094 /** 095 * Test for {@link ContainerRolesPrincipalProvider#setRoleNames(Set)}. 096 */ 097 @Test 098 public void testNoConfigedRoleNames() { 099 final Set<Principal> principals = provider.getPrincipals(request); 100 assertTrue("Empty set expected when no role names configured", principals.isEmpty()); 101 } 102 103 /** 104 * Test for {@link ContainerRolesPrincipalProvider#getPrincipals(javax.servlet.http.HttpServletRequest)}. 105 */ 106 @Test 107 public void testNoRequest() { 108 provider.setRoleNames(newHashSet("a")); 109 110 final Set<Principal> principals = provider.getPrincipals(null); 111 assertTrue("Empty set expected when no request supplied", principals.isEmpty()); 112 113 } 114 115 /** 116 * Test for {@link ContainerRolesPrincipalProvider#getPrincipals(javax.servlet.http.HttpServletRequest)}. 117 */ 118 @Test 119 public void testPrincipalEqualsDifferentClass() { 120 when(request.isUserInRole("a")).thenReturn(true); 121 provider.setRoleNames(newHashSet("a")); 122 123 final Set<Principal> principals = provider.getPrincipals(request); 124 final Principal principal = principals.iterator().next(); 125 126 assertNotEquals("Principals should not be equal if not the same class", principal, mock(Principal.class)); 127 } 128 129}