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}