001/** 002 * Copyright 2015 DuraSpace, Inc. 003 * 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package org.fcrepo.auth.webac; 017 018import static org.fcrepo.auth.webac.URIConstants.WEBAC_MODE_CONTROL_VALUE; 019import static org.fcrepo.auth.webac.URIConstants.WEBAC_MODE_READ_VALUE; 020import static org.fcrepo.auth.webac.URIConstants.WEBAC_MODE_WRITE_VALUE; 021import static org.modeshape.jcr.ModeShapePermissions.ADD_NODE; 022import static org.modeshape.jcr.ModeShapePermissions.MODIFY_ACCESS_CONTROL; 023import static org.modeshape.jcr.ModeShapePermissions.READ; 024import static org.modeshape.jcr.ModeShapePermissions.READ_ACCESS_CONTROL; 025import static org.modeshape.jcr.ModeShapePermissions.REGISTER_NAMESPACE; 026import static org.modeshape.jcr.ModeShapePermissions.REMOVE; 027import static org.modeshape.jcr.ModeShapePermissions.REMOVE_CHILD_NODES; 028import static org.modeshape.jcr.ModeShapePermissions.SET_PROPERTY; 029 030import static org.junit.Assert.assertFalse; 031import static org.junit.Assert.assertTrue; 032 033import java.util.HashSet; 034import java.util.Set; 035 036import org.junit.Before; 037import org.junit.Test; 038import org.junit.runner.RunWith; 039import org.mockito.Mock; 040import org.mockito.runners.MockitoJUnitRunner; 041import org.modeshape.jcr.api.Session; 042 043/** 044 * Unit test for the WebAC Authorization Delegate. 045 * 046 * @author Peter Eichman 047 * @since Aug 24, 2015 048 */ 049@RunWith(MockitoJUnitRunner.class) 050public class WebACAuthorizationDelegateTest { 051 052 private WebACAuthorizationDelegate webacAD; 053 054 @Mock 055 private Session mockSession; 056 057 @Before 058 public void setUp() { 059 webacAD = new WebACAuthorizationDelegate(); 060 } 061 062 @Test 063 public void testCanRead1() { 064 final String[] actions = {READ}; 065 final Set<String> roles = new HashSet<>(); 066 roles.add(WEBAC_MODE_READ_VALUE); 067 068 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 069 } 070 071 @Test 072 public void testCanRead2() { 073 final String[] actions = {READ}; 074 final Set<String> roles = new HashSet<>(); 075 roles.add(WEBAC_MODE_READ_VALUE); 076 roles.add(WEBAC_MODE_WRITE_VALUE); 077 078 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 079 } 080 081 @Test 082 public void testCannotRead1() { 083 final String[] actions = {READ, SET_PROPERTY}; 084 final Set<String> roles = new HashSet<>(); 085 roles.add(WEBAC_MODE_WRITE_VALUE); 086 087 assertFalse(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 088 } 089 090 @Test 091 public void testCannotRead2() { 092 final String[] actions = {READ}; 093 final Set<String> roles = new HashSet<>(); 094 095 assertFalse(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 096 } 097 098 @Test 099 public void testCanWrite1() { 100 final String[] actions = {ADD_NODE}; 101 final Set<String> roles = new HashSet<>(); 102 roles.add(WEBAC_MODE_WRITE_VALUE); 103 104 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 105 } 106 107 @Test 108 public void testCanWrite2() { 109 final String[] actions = {REGISTER_NAMESPACE}; 110 final Set<String> roles = new HashSet<>(); 111 roles.add(WEBAC_MODE_WRITE_VALUE); 112 113 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 114 } 115 116 @Test 117 public void testCanWrite3() { 118 final String[] actions = {REMOVE}; 119 final Set<String> roles = new HashSet<>(); 120 roles.add(WEBAC_MODE_WRITE_VALUE); 121 122 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 123 } 124 125 @Test 126 public void testCanWrite4() { 127 final String[] actions = {REMOVE_CHILD_NODES}; 128 final Set<String> roles = new HashSet<>(); 129 roles.add(WEBAC_MODE_WRITE_VALUE); 130 131 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 132 } 133 134 @Test 135 public void testCanWrite5() { 136 final String[] actions = {SET_PROPERTY}; 137 final Set<String> roles = new HashSet<>(); 138 roles.add(WEBAC_MODE_WRITE_VALUE); 139 140 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 141 } 142 143 @Test 144 public void testCanWrite6() { 145 final String[] actions = {SET_PROPERTY, ADD_NODE, REGISTER_NAMESPACE, REMOVE, REMOVE_CHILD_NODES}; 146 final Set<String> roles = new HashSet<>(); 147 roles.add(WEBAC_MODE_WRITE_VALUE); 148 149 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 150 } 151 152 @Test 153 public void testCannotWrite1() { 154 final String[] actions = {READ, SET_PROPERTY, ADD_NODE, REGISTER_NAMESPACE, REMOVE, REMOVE_CHILD_NODES}; 155 final Set<String> roles = new HashSet<>(); 156 roles.add(WEBAC_MODE_WRITE_VALUE); 157 158 assertFalse(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 159 } 160 161 @Test 162 public void testCannotWrite2() { 163 final String[] actions = {SET_PROPERTY}; 164 final Set<String> roles = new HashSet<>(); 165 166 assertFalse(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 167 } 168 169 @Test 170 public void testCanReadAcl1() { 171 final String[] actions = {READ_ACCESS_CONTROL}; 172 final Set<String> roles = new HashSet<>(); 173 roles.add(WEBAC_MODE_CONTROL_VALUE); 174 175 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 176 } 177 178 @Test 179 public void testCannotReadAcl1() { 180 final String[] actions = {READ_ACCESS_CONTROL}; 181 final Set<String> roles = new HashSet<>(); 182 roles.add(WEBAC_MODE_READ_VALUE); 183 184 assertFalse(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 185 } 186 187 @Test 188 public void testCanWriteAcl1() { 189 final String[] actions = {MODIFY_ACCESS_CONTROL}; 190 final Set<String> roles = new HashSet<>(); 191 roles.add(WEBAC_MODE_CONTROL_VALUE); 192 193 assertTrue(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 194 } 195 196 @Test 197 public void testCannotWriteAcl1() { 198 final String[] actions = {MODIFY_ACCESS_CONTROL}; 199 final Set<String> roles = new HashSet<>(); 200 roles.add(WEBAC_MODE_WRITE_VALUE); 201 202 assertFalse(webacAD.rolesHavePermission(mockSession, "/fake/path", actions, roles)); 203 } 204}