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