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}