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}