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