]> source.dussan.org Git - archiva.git/blob
63b027246c44847c4bbf967d1bba417ba9ea1986
[archiva.git] /
1 package org.apache.archiva.redback.role;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import junit.framework.TestCase;
23 import org.apache.archiva.redback.rbac.RBACManager;
24 import org.apache.archiva.redback.rbac.Permission;
25 import org.apache.archiva.redback.rbac.Resource;
26 import org.apache.archiva.redback.rbac.Role;
27 import org.apache.archiva.redback.rbac.UserAssignment;
28 import org.apache.archiva.redback.role.model.ModelPermission;
29 import org.apache.archiva.redback.role.model.ModelTemplate;
30 import org.apache.archiva.redback.role.util.RoleModelUtils;
31 import org.junit.Test;
32 import org.junit.runner.RunWith;
33 import org.springframework.test.context.ContextConfiguration;
34 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
35
36 import java.util.List;
37
38 /**
39  * AbstractRoleManagerTest:
40  * 
41  * @author: Jesse McConnell <jesse@codehaus.org>
42  *
43  */
44 @RunWith( SpringJUnit4ClassRunner.class )
45 @ContextConfiguration( locations = { "classpath*:/META-INF/spring-context.xml", "classpath*:/spring-context.xml" } )
46 public abstract class AbstractRoleManagerTest
47     extends TestCase
48 {
49
50     protected RBACManager rbacManager;
51
52     protected RoleManager roleManager;
53
54     public AbstractRoleManagerTest()
55     {
56         super();
57     }
58
59     @Test
60     public void testLoading()
61         throws Exception
62     {
63
64         List<Resource> all = rbacManager.getAllResources();
65
66
67         assertTrue( rbacManager.resourceExists( "*" ) );
68         assertTrue( rbacManager.operationExists( "Test Operation" ) );
69         assertTrue( rbacManager.roleExists( "Test Role" ) );
70         assertTrue( rbacManager.roleExists( "Test Role 1" ) );
71         assertTrue( rbacManager.roleExists( "Test Role 2" ) );
72
73         assertTrue( rbacManager.roleExists( "Role for cornflake eaters drinking milk in the bowl" ) );
74
75         roleManager.createTemplatedRole( "test-template-2", "foo" );
76
77         assertTrue( roleManager.templatedRoleExists( "test-template-2", "foo" ) );
78         assertTrue( roleManager.templatedRoleExists( "test-template", "foo" ) );
79
80         roleManager.updateRole( "test-template-2", "foo", "bar" );
81
82         assertFalse( roleManager.templatedRoleExists( "test-template-2", "foo" ) );
83         // TODO: bug - assertFalse( roleManager.templatedRoleExists( "test-template", "foo" ) );
84         assertTrue( roleManager.templatedRoleExists( "test-template-2", "bar" ) );
85         assertTrue( roleManager.templatedRoleExists( "test-template", "bar" ) );
86
87         roleManager.createTemplatedRole( "test-template-2", "hot" );
88
89         assertTrue( roleManager.templatedRoleExists( "test-template-2", "hot" ) );
90     }
91
92     @Test
93     public void testUserAssignmentUpdate()
94         throws Exception
95     {
96         String principal = "joe";
97
98         roleManager.assignRole( "test-role", principal );
99         roleManager.assignRoleByName( "Test Role 1", principal );
100         roleManager.createTemplatedRole( "test-template-2", "cold" );
101         roleManager.assignTemplatedRole( "test-template-2", "cold", principal );
102
103         roleManager.updateRole( "test-template-2", "cold", "frigid" );
104
105         assertTrue( roleManager.templatedRoleExists( "test-template-2", "frigid" ) );
106
107         UserAssignment assignment = rbacManager.getUserAssignment( principal );
108
109         List<String> assignments = assignment.getRoleNames();
110
111         assertEquals( 3, assignments.size() );
112
113         for ( String roleName : assignments )
114         {
115             System.out.println( roleName );
116             assertTrue( "Test Role".equals( roleName ) || "Foo 2 - frigid".equals( roleName ) || "Test Role 1".equals( roleName ) );
117         }
118     }
119
120     @Test
121     public void testVerifyTemplatedRole()
122         throws Exception
123     {
124         roleManager.createTemplatedRole( "test-template-2", "first" );
125
126         assertTrue( roleManager.templatedRoleExists( "test-template-2", "first" ) );
127         Role role = rbacManager.getRole( "Foo 2 - first" );
128         assertNotNull( role );
129         assertTrue( hasPermissionOnOperation( role, "Eat Cornflakes", "first" ) );
130         assertFalse( hasPermissionOnOperation( role, "Drink Milk" ) );
131      
132         ModelTemplate template = RoleModelUtils.getModelTemplate( roleManager.getModel(), "test-template-2" );
133         ModelPermission p = new ModelPermission();
134         p.setId( "new-permission" );
135         p.setName( "New Permission" );
136         p.setOperation( "drink-milk" );
137         p.setResource( "${resource}" );
138         template.addPermission( p );
139         p = new ModelPermission();
140         p.setId( "eat-cornflakes-permission-3" );
141         p.setName( "Eat 3 Cornflakes" );
142         p.setOperation( "eat-cornflakes" );
143         p.setResource( "${resource}" );
144         template.removePermission( p );
145         
146         roleManager.verifyTemplatedRole( "test-template-2", "first" );
147         
148         assertTrue( roleManager.templatedRoleExists( "test-template-2", "first" ) );
149         role = rbacManager.getRole( "Foo 2 - first" );
150         assertNotNull( role );
151         assertFalse( hasPermissionOnOperation( role, "Eat Cornflakes", "first" ) );
152         assertTrue( hasPermissionOnOperation( role, "Drink Milk", "first" ) );
153     }
154
155     private boolean hasPermissionOnOperation( Role role, String operation )
156     {
157         for ( Permission p : role.getPermissions() )
158         {
159             if ( p.getOperation().getName().equals( operation ) )
160             {
161                 return true;
162             }
163         }
164         return false;
165     }
166
167     private boolean hasPermissionOnOperation( Role role, String operation, String resource )
168     {
169         for ( Permission p : role.getPermissions() )
170         {
171             if ( p.getOperation().getName().equals( operation ) && p.getResource().getIdentifier().equals( resource ) )
172             {
173                 return true;
174             }
175         }
176         return false;
177     }
178
179     public void setRbacManager( RBACManager rbacManager )
180     {
181         this.rbacManager = rbacManager;
182     }
183
184     public void setRoleManager( RoleManager roleManager )
185     {
186         this.roleManager = roleManager;
187     }
188 }