View Javadoc
1   /**
2    * Copyright 2014 Internet2
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *   http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  /*
17    Copyright (C) 2004-2007 University Corporation for Advanced Internet Development, Inc.
18    Copyright (C) 2004-2007 The University Of Chicago
19  
20    Licensed under the Apache License, Version 2.0 (the "License");
21    you may not use this file except in compliance with the License.
22    You may obtain a copy of the License at
23  
24      http://www.apache.org/licenses/LICENSE-2.0
25  
26    Unless required by applicable law or agreed to in writing, software
27    distributed under the License is distributed on an "AS IS" BASIS,
28    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
29    See the License for the specific language governing permissions and
30    limitations under the License.
31  */
32  
33  package edu.internet2.middleware.grouper.filter;
34  import junit.framework.Assert;
35  
36  import java.sql.Timestamp;
37  
38  import edu.internet2.middleware.grouper.Group;
39  import edu.internet2.middleware.grouper.GroupType;
40  import edu.internet2.middleware.grouper.GrouperSession;
41  import edu.internet2.middleware.grouper.Stem;
42  import edu.internet2.middleware.grouper.SubjectFinder;
43  import edu.internet2.middleware.grouper.exception.QueryException;
44  import edu.internet2.middleware.grouper.filter.GroupAttributeFilter;
45  import edu.internet2.middleware.grouper.filter.GrouperQuery;
46  import edu.internet2.middleware.grouper.helper.GroupHelper;
47  import edu.internet2.middleware.grouper.helper.GrouperTest;
48  import edu.internet2.middleware.grouper.helper.SessionHelper;
49  import edu.internet2.middleware.grouper.helper.StemHelper;
50  import edu.internet2.middleware.grouper.helper.SubjectTestHelper;
51  import edu.internet2.middleware.grouper.privs.AccessPrivilege;
52  import edu.internet2.middleware.grouper.privs.AttributeDefPrivilege;
53  import edu.internet2.middleware.grouper.registry.RegistryReset;
54  
55  /**
56   * Test {@link GroupAttributeFilter}.
57   * <p />
58   * @author  blair christensen.
59   * @version $Id: TestGQGroupAttribute.java,v 1.3 2009-03-24 17:12:08 mchyzer Exp $
60   */
61  public class TestGQGroupAttribute extends GrouperTest {
62  
63    public TestGQGroupAttribute(String name) {
64      super(name);
65    }
66  
67    protected void setUp () {
68      super.setUp();
69      RegistryReset.internal_resetRegistryAndAddTestSubjects();
70      GrouperTest.initGroupsAndAttributes();
71  
72    }
73  
74    protected void tearDown () {
75      super.tearDown();
76    }
77  
78    // Tests
79    /**
80     * 
81     */
82    public void testGroupAttributeFilterEnabled() {
83      GrouperSession s = SessionHelper.getRootSession();
84  
85      Stem root = StemHelper.findRootStem(s);
86      Stem edu = StemHelper.addChildStem(root, "edu", "education");
87      Group group1 = edu.addChildGroup("testenabledisablegroup1", "testenabledisablegroup1");
88      Group group2 = edu.addChildGroup("testenabledisablegroup2", "testenabledisablegroup2");
89      Group group3 = edu.addChildGroup("testenabledisablegroup3", "testenabledisablegroup3");
90      Group group4 = edu.addChildGroup("testenabledisablegroup4", "testenabledisablegroup4");
91      
92      group1.setEnabledTime(new Timestamp(System.currentTimeMillis() + 100000L));
93      group1.setDescription("testenabledisable");
94      group1.store();
95      
96      group2.setDescription("testenabledisable");
97      group2.store();
98      
99      group3.setDescription("testenabledisable");
100     group3.store();
101     
102     group4.setDescription("testenabledisable");
103     group4.store();
104     
105     
106     assertEquals(3, GrouperQuery.createQuery(s, new GroupAttributeFilter("description", "testenabledisable", root, true)).getGroups().size());
107     assertEquals(4, GrouperQuery.createQuery(s, new GroupAttributeFilter("description", "testenabledisable", root, null)).getGroups().size());
108     assertEquals(1, GrouperQuery.createQuery(s, new GroupAttributeFilter("description", "testenabledisable", root, false)).getGroups().size());
109     assertEquals(3, GrouperQuery.createQuery(s, new GroupAttributeFilter("description", "testenabledisable", root)).getGroups().size());
110     
111     assertEquals(3, GrouperQuery.createQuery(s, new GroupAttributeFilter("description", "testenabledisable", edu, true)).getGroups().size());
112     assertEquals(4, GrouperQuery.createQuery(s, new GroupAttributeFilter("description", "testenabledisable", edu, null)).getGroups().size());
113     assertEquals(1, GrouperQuery.createQuery(s, new GroupAttributeFilter("description", "testenabledisable", edu, false)).getGroups().size());
114     assertEquals(3, GrouperQuery.createQuery(s, new GroupAttributeFilter("description", "testenabledisable", edu)).getGroups().size());
115   }
116 
117   public void testGroupAttributeFilterNothing() {
118     GrouperSession  s     = SessionHelper.getRootSession();
119     Stem            root  = StemHelper.findRootStem(s);
120     Stem            edu   = StemHelper.addChildStem(root, "edu", "education");
121     Group           i2    = StemHelper.addChildGroup(edu, "i2", "internet2");
122     Group           uofc  = StemHelper.addChildGroup(edu, "uofc", "uchicago");
123     Stem            com   = StemHelper.addChildStem(root, "com", "commercial");
124     StemHelper.addChildGroup(com, "devclue", "devclue");
125     GroupHelper.addMember(i2, uofc);
126     try {
127       GrouperQuery gq = GrouperQuery.createQuery(
128         s, new GroupAttributeFilter("extension", "nothing", root)
129       );
130       Assert.assertTrue("groups",  gq.getGroups().size()      == 0);
131       Assert.assertTrue("members", gq.getMembers().size()     == 0);
132       Assert.assertTrue("mships",  gq.getMemberships().size() == 0);
133       Assert.assertTrue("stems",   gq.getStems().size()       == 0);
134     }
135     catch (QueryException eQ) {
136       Assert.fail("unable to query: " + eQ.getMessage());
137     }
138   } // public void testGroupAttributeFilterNothing()
139 
140   public void testGroupAttributeFilterSomething() {
141     GrouperSession  s     = SessionHelper.getRootSession();
142     Stem            root  = StemHelper.findRootStem(s);
143     Stem            edu   = StemHelper.addChildStem(root, "edu", "education");
144     Group           i2    = StemHelper.addChildGroup(edu, "i2", "internet2");
145     Group           uofc  = StemHelper.addChildGroup(edu, "uofc", "uchicago");
146     Stem            com   = StemHelper.addChildStem(root, "com", "commercial");
147     StemHelper.addChildGroup(com, "devclue", "devclue");
148     GroupHelper.addMember(i2, uofc);
149     try {
150       GrouperQuery gq = GrouperQuery.createQuery(
151         s, new GroupAttributeFilter("extension", "uofc", root)
152       );
153       Assert.assertTrue("groups",  gq.getGroups().size()      == 1);
154       Assert.assertTrue("members", gq.getMembers().size()     == 0);
155       Assert.assertTrue("mships",  gq.getMemberships().size() == 0);
156       Assert.assertTrue("stems",   gq.getStems().size()       == 0);
157     }
158     catch (QueryException eQ) {
159       Assert.fail("unable to query: " + eQ.getMessage());
160     }
161   } // public void testGroupAttributeFilterSomething()
162 
163   public void testGroupAttributeFilterSomethingScoped() throws Exception {
164     GrouperSession  s     = SessionHelper.getRootSession();
165     Stem            root  = StemHelper.findRootStem(s);
166     Stem            edu   = StemHelper.addChildStem(root, "edu", "education");
167     Group           i2    = StemHelper.addChildGroup(edu, "i2", "internet2");
168     Group           uofc  = StemHelper.addChildGroup(edu, "uofc", "uchicago");
169     Stem            com   = StemHelper.addChildStem(root, "com", "commercial");
170     Group           devclue = StemHelper.addChildGroup(com, "devclue", "devclue");
171     GroupHelper.addMember(i2, uofc);
172 
173     uofc.revokePriv(SubjectFinder.findAllSubject(), AccessPrivilege.READ, false);
174     uofc.revokePriv(SubjectFinder.findAllSubject(), AccessPrivilege.VIEW, false);
175     i2.revokePriv(SubjectFinder.findAllSubject(), AccessPrivilege.READ, false);
176     i2.revokePriv(SubjectFinder.findAllSubject(), AccessPrivilege.VIEW, false);
177     devclue.revokePriv(SubjectFinder.findAllSubject(), AccessPrivilege.READ, false);
178     devclue.revokePriv(SubjectFinder.findAllSubject(), AccessPrivilege.VIEW, false);
179     
180     GroupType custom = GroupType.createType(s, "customType");
181     custom.addAttribute(s, "customAttribute", false);
182 
183     try {
184       GrouperQuery gq = GrouperQuery.createQuery(
185         s, new GroupAttributeFilter("extension", "uofc", com)
186       );
187       Assert.assertTrue("groups",  gq.getGroups().size()      == 0);
188       Assert.assertTrue("members", gq.getMembers().size()     == 0);
189       Assert.assertTrue("mships",  gq.getMemberships().size() == 0);
190       Assert.assertTrue("stems",   gq.getStems().size()       == 0);
191     }
192     catch (QueryException eQ) {
193       Assert.fail("unable to query: " + eQ.getMessage());
194     }
195 
196     devclue.addType(custom);
197     uofc.addType(custom);
198     devclue.setAttribute("customAttribute", "String with i2 within");
199     uofc.setAttribute("customAttribute", "String with i2 within");
200 
201     try {
202       GrouperQuery gq = GrouperQuery.createQuery(
203         s, new GroupAttributeFilter("customAttribute", "i2", com)
204       );
205       Assert.assertTrue("groups",  gq.getGroups().size()      == 1);
206       Assert.assertTrue("members", gq.getMembers().size()     == 0);
207       Assert.assertTrue("mships",  gq.getMemberships().size() == 0);
208       Assert.assertTrue("stems",   gq.getStems().size()       == 0);
209     }
210     catch (QueryException eQ) {
211       Assert.fail("unable to query: " + eQ.getMessage());
212     }
213 
214     try {
215       GrouperQuery gq = GrouperQuery.createQuery(
216         s, new GroupAttributeFilter("customAttribute", "i2", edu)
217       );
218       Assert.assertTrue("groups",  gq.getGroups().size()      == 1);
219       Assert.assertTrue("members", gq.getMembers().size()     == 0);
220       Assert.assertTrue("mships",  gq.getMemberships().size() == 0);
221       Assert.assertTrue("stems",   gq.getStems().size()       == 0);
222     }
223     catch (QueryException eQ) {
224       Assert.fail("unable to query: " + eQ.getMessage());
225     }
226 
227     try {
228       GrouperQuery gq = GrouperQuery.createQuery(
229         s, new GroupAttributeFilter("extension", "i2", edu)
230       );
231       Assert.assertTrue("groups",  gq.getGroups().size()      == 1);
232       Assert.assertTrue("members", gq.getMembers().size()     == 1);
233       Assert.assertTrue("mships",  gq.getMemberships().size() == 1);
234       Assert.assertTrue("stems",   gq.getStems().size()       == 0);
235     }
236     catch (QueryException eQ) {
237       Assert.fail("unable to query: " + eQ.getMessage());
238     }
239     
240     // test security
241     devclue.grantPriv(SubjectTestHelper.SUBJ0, AccessPrivilege.GROUP_ATTR_READ);
242     custom.getAttributeDefName().getAttributeDef().getPrivilegeDelegate().grantPriv(SubjectTestHelper.SUBJ0, AttributeDefPrivilege.ATTR_READ, false);
243     custom.internal_getAttributeDefForAttributes().getPrivilegeDelegate().grantPriv(SubjectTestHelper.SUBJ0, AttributeDefPrivilege.ATTR_READ, false);
244     s.stop();
245     s = GrouperSession.start(SubjectTestHelper.SUBJ0);
246     GrouperQuery gq = GrouperQuery.createQuery(s, new GroupAttributeFilter("customAttribute", "i2", root));
247     Assert.assertEquals(1, gq.getGroups().size());
248     Assert.assertEquals(devclue.getName(), gq.getGroups().iterator().next().getName());
249     
250     s.stop();
251     s = GrouperSession.startRootSession();
252     devclue.revokePriv(SubjectTestHelper.SUBJ0, AccessPrivilege.GROUP_ATTR_READ);
253     s.stop();
254     s = GrouperSession.start(SubjectTestHelper.SUBJ0);
255     gq = GrouperQuery.createQuery(s, new GroupAttributeFilter("customAttribute", "i2", root));
256     Assert.assertEquals(0, gq.getGroups().size());
257     
258     s.stop();
259     s = GrouperSession.startRootSession();
260     devclue.grantPriv(SubjectTestHelper.SUBJ0, AccessPrivilege.GROUP_ATTR_READ);
261     custom.getAttributeDefName().getAttributeDef().getPrivilegeDelegate().revokePriv(SubjectTestHelper.SUBJ0, AttributeDefPrivilege.ATTR_READ, true);
262     s.stop();
263     s = GrouperSession.start(SubjectTestHelper.SUBJ0);
264     gq = GrouperQuery.createQuery(s, new GroupAttributeFilter("customAttribute", "i2", root));
265     Assert.assertEquals(0, gq.getGroups().size());
266     
267     s.stop();
268     s = GrouperSession.startRootSession();
269     custom.getAttributeDefName().getAttributeDef().getPrivilegeDelegate().grantPriv(SubjectTestHelper.SUBJ0, AttributeDefPrivilege.ATTR_READ, true);
270     custom.internal_getAttributeDefForAttributes().getPrivilegeDelegate().revokePriv(SubjectTestHelper.SUBJ0, AttributeDefPrivilege.ATTR_READ, true);
271     s.stop();
272     s = GrouperSession.start(SubjectTestHelper.SUBJ0);
273     gq = GrouperQuery.createQuery(s, new GroupAttributeFilter("customAttribute", "i2", root));
274     Assert.assertEquals(0, gq.getGroups().size());
275     
276     s.stop();
277     s = GrouperSession.startRootSession();
278     custom.internal_getAttributeDefForAttributes().getPrivilegeDelegate().grantPriv(SubjectTestHelper.SUBJ0, AttributeDefPrivilege.ATTR_READ, true);
279     s.stop();
280     s = GrouperSession.start(SubjectTestHelper.SUBJ0);
281     gq = GrouperQuery.createQuery(s, new GroupAttributeFilter("customAttribute", "i2", root));
282     Assert.assertEquals(1, gq.getGroups().size());
283     
284     // test using full attribute name
285     gq = GrouperQuery.createQuery(s, new GroupAttributeFilter("etc:legacy:attribute:legacyAttribute_customAttribute", "i2", root));
286     Assert.assertEquals(1, gq.getGroups().size());
287     
288   } // public void testGroupAttributeFilterSomethingDisplayExtensionScoped()
289 
290 }
291