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 org.junit.Assert.assertEquals; 009import static org.junit.Assert.assertNotEquals; 010import static org.junit.Assert.assertTrue; 011import static org.mockito.Mockito.mock; 012import static org.mockito.Mockito.when; 013 014import java.security.Principal; 015import java.util.Set; 016 017import javax.servlet.http.HttpServletRequest; 018 019import org.fcrepo.auth.common.HttpHeaderPrincipalProvider.HttpHeaderPrincipal; 020 021import org.junit.Before; 022import org.junit.Test; 023import org.mockito.Mock; 024import org.mockito.MockitoAnnotations; 025 026/** 027 * @author daines 028 * @author bbpennel 029 * @since Mar 6, 2014 030 */ 031public class HttpHeaderPrincipalProviderTest { 032 033 @Mock 034 private HttpServletRequest request; 035 036 private HttpHeaderPrincipalProvider provider; 037 038 @Before 039 public void setUp() { 040 MockitoAnnotations.openMocks(this); 041 042 provider = new HttpHeaderPrincipalProvider(); 043 } 044 045 @Test 046 public void testPrincipalsExtractedFromHeaders() { 047 048 when(request.getHeader("Groups")).thenReturn("a,b"); 049 050 provider.setHeaderName("Groups"); 051 provider.setSeparator(","); 052 053 final Set<Principal> principals = provider.getPrincipals(request); 054 055 assertEquals(2, principals.size()); 056 assertTrue("The principals should contain 'a'", principals 057 .contains(new HttpHeaderPrincipal("a"))); 058 assertTrue("The principals should contain 'b'", principals 059 .contains(new HttpHeaderPrincipal("b"))); 060 061 } 062 063 @Test 064 public void testShouldTrimPrincipalNames() { 065 066 when(request.getHeader("Groups")).thenReturn(" a ,b"); 067 068 provider.setHeaderName("Groups"); 069 provider.setSeparator(","); 070 071 final Set<Principal> principals = provider.getPrincipals(request); 072 073 assertEquals(2, principals.size()); 074 assertTrue("The principals should contain 'a'", principals 075 .contains(new HttpHeaderPrincipal("a"))); 076 assertTrue("The principals should contain 'b'", principals 077 .contains(new HttpHeaderPrincipal("b"))); 078 079 } 080 081 @Test 082 public void testNoHeaderName() { 083 084 final Set<Principal> principals = provider.getPrincipals(request); 085 086 assertTrue("Empty set expected when no header name configured", principals.isEmpty()); 087 088 } 089 090 @Test 091 public void testNoSeparator() { 092 093 provider.setHeaderName("Groups"); 094 095 final Set<Principal> principals = provider.getPrincipals(request); 096 097 assertTrue("Empty set expected when no separator name configured", principals.isEmpty()); 098 099 } 100 101 @Test 102 public void testNoRequest() { 103 104 provider.setHeaderName("Groups"); 105 provider.setSeparator(","); 106 107 final Set<Principal> principals = provider.getPrincipals(null); 108 109 assertTrue("Empty set expected when no request supplied", principals.isEmpty()); 110 111 } 112 113 @Test 114 public void testPrincipalEqualsDifferentClass() { 115 116 when(request.getHeader("Groups")).thenReturn("a"); 117 118 provider.setHeaderName("Groups"); 119 provider.setSeparator(","); 120 121 final Set<Principal> principals = provider.getPrincipals(request); 122 123 final Principal principal = principals.iterator().next(); 124 125 assertNotEquals("Principals should not be equal if not the same class", 126 principal, mock(Principal.class)); 127 128 } 129 130}