1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
57
58
59
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
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 }
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 }
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
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
285 gq = GrouperQuery.createQuery(s, new GroupAttributeFilter("etc:legacy:attribute:legacyAttribute_customAttribute", "i2", root));
286 Assert.assertEquals(1, gq.getGroups().size());
287
288 }
289
290 }
291