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