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}