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.membership;
34  import java.util.Date;
35  import java.util.Set;
36  
37  import org.apache.commons.logging.Log;
38  
39  import edu.internet2.middleware.grouper.Group;
40  import edu.internet2.middleware.grouper.Membership;
41  import edu.internet2.middleware.grouper.MembershipFinder;
42  import edu.internet2.middleware.grouper.helper.DateHelper;
43  import edu.internet2.middleware.grouper.helper.GrouperTest;
44  import edu.internet2.middleware.grouper.helper.MembershipTestHelper;
45  import edu.internet2.middleware.grouper.helper.R;
46  import edu.internet2.middleware.grouper.helper.T;
47  import edu.internet2.middleware.grouper.misc.CompositeType;
48  import edu.internet2.middleware.grouper.util.GrouperUtil;
49  import edu.internet2.middleware.subject.Subject;
50  
51  /**
52   * @author Shilen Patel.
53   */
54  public class TestMembershipDeletes0 extends GrouperTest {
55  
56    private static final Log LOG = GrouperUtil.getLog(TestMembershipDeletes0.class);
57  
58    R       r;
59    Date    before;
60  
61    Group   gA;
62    Group   gB;
63    Group   gC;
64    Group   gD;
65    Group   gE;
66    Group   gF;
67    Group   gG;
68    Group   gH;
69    Group   gI;
70    Group   gJ;
71    Group   gK;
72    Group   gL;
73    Group   gM;
74    Group   gN;
75    Group   gO;
76    Group   gP;
77    Group   gQ;
78    Group   gR;
79    Group   gS;
80    Group   gT;
81    Group   gUDel;
82    Group   gVDel;
83    Group   gWDel;
84    Group   gXDel;
85    Group   gYDel;
86    Group   gZDel;
87    Subject subjA;
88    Subject subjB;
89    Subject subjC;
90    Subject subjD;
91    Subject subjEDel;
92  
93    public TestMembershipDeletes0(String name) {
94      super(name);
95    }
96  
97    public void testMembershipDeletes0() {
98      LOG.info("testMembershipDeletes0");
99      runCompositeMembershipChangeLogConsumer();
100 
101     try {
102       GrouperUtil.sleep(100);
103       before  = new Date();
104       GrouperUtil.sleep(100);
105 
106       r     = R.populateRegistry(1, 26, 5);
107       gA    = r.getGroup("a", "a");
108       gB    = r.getGroup("a", "b");
109       gC    = r.getGroup("a", "c");
110       gD    = r.getGroup("a", "d");
111       gE    = r.getGroup("a", "e");
112       gF    = r.getGroup("a", "f");
113       gG    = r.getGroup("a", "g");
114       gH    = r.getGroup("a", "h");
115       gI    = r.getGroup("a", "i");
116       gJ    = r.getGroup("a", "j");
117       gK    = r.getGroup("a", "k");
118       gL    = r.getGroup("a", "l");
119       gM    = r.getGroup("a", "m");
120       gN    = r.getGroup("a", "n");
121       gO    = r.getGroup("a", "o");
122       gP    = r.getGroup("a", "p");
123       gQ    = r.getGroup("a", "q");
124       gR    = r.getGroup("a", "r");
125       gS    = r.getGroup("a", "s");
126       gT    = r.getGroup("a", "t");
127       gUDel = r.getGroup("a", "u");
128       gVDel = r.getGroup("a", "v");
129       gWDel = r.getGroup("a", "w");
130       gXDel = r.getGroup("a", "x");
131       gYDel = r.getGroup("a", "y");
132       gZDel = r.getGroup("a", "z");
133       subjA = r.getSubject("a");
134       subjB = r.getSubject("b");
135       subjC = r.getSubject("c");
136       subjD = r.getSubject("d");
137       subjEDel = r.getSubject("e");
138 
139       // Add initial data
140       gA.addMember(subjB);
141       gT.addMember(gP.toSubject());
142       gD.addCompositeMember(CompositeType.UNION, gB, gC);
143       gP.addCompositeMember(CompositeType.UNION, gD, gO);
144       gB.addMember(gA.toSubject());
145       gN.addMember(gG.toSubject());
146       gG.addMember(gD.toSubject());
147       gF.addMember(gH.toSubject());
148       gH.addMember(subjA);
149       gI.addCompositeMember(CompositeType.UNION, gJ, gK);
150       gJ.addMember(gE.toSubject());
151       gK.addMember(subjC);
152       gL.addMember(gI.toSubject());
153       gM.addMember(gJ.toSubject());
154       gE.addCompositeMember(CompositeType.UNION, gF, gG);
155       gQ.addMember(subjD);
156       gH.addMember(gQ.toSubject());
157       gR.addMember(gS.toSubject());
158       gF.addMember(gR.toSubject());
159       gR.addMember(gQ.toSubject());
160 
161       gUDel.addCompositeMember(CompositeType.UNION, gVDel, gWDel);
162       gXDel.addCompositeMember(CompositeType.UNION, gWDel, gYDel);
163       gVDel.addMember(gXDel.toSubject());
164       gWDel.addMember(gZDel.toSubject());
165       gZDel.addMember(subjEDel);
166       runCompositeMembershipChangeLogConsumer();
167 
168       verifyMembershipAddAndDelete(gA, subjEDel);
169       verifyMembershipAddAndDelete(gB, subjEDel);
170       verifyMembershipAddAndDelete(gC, subjEDel);
171       verifyMembershipAddAndDelete(gF, subjEDel);
172       verifyMembershipAddAndDelete(gG, subjEDel);
173       verifyMembershipAddAndDelete(gH, subjEDel);
174       verifyMembershipAddAndDelete(gJ, subjEDel);
175       verifyMembershipAddAndDelete(gK, subjEDel);
176       verifyMembershipAddAndDelete(gL, subjEDel);
177       verifyMembershipAddAndDelete(gM, subjEDel);
178       verifyMembershipAddAndDelete(gN, subjEDel);
179       verifyMembershipAddAndDelete(gO, subjEDel);
180       verifyMembershipAddAndDelete(gQ, subjEDel);
181       verifyMembershipAddAndDelete(gR, subjEDel);
182       verifyMembershipAddAndDelete(gS, subjEDel);
183       verifyMembershipAddAndDelete(gT, subjEDel);
184 
185       verifyMembershipAddAndDelete(gA, gUDel.toSubject());
186       verifyMembershipAddAndDelete(gB, gUDel.toSubject());
187       verifyMembershipAddAndDelete(gC, gUDel.toSubject());
188       verifyMembershipAddAndDelete(gF, gUDel.toSubject());
189       verifyMembershipAddAndDelete(gG, gUDel.toSubject());
190       verifyMembershipAddAndDelete(gH, gUDel.toSubject());
191       verifyMembershipAddAndDelete(gJ, gUDel.toSubject());
192       verifyMembershipAddAndDelete(gK, gUDel.toSubject());
193       verifyMembershipAddAndDelete(gL, gUDel.toSubject());
194       verifyMembershipAddAndDelete(gM, gUDel.toSubject());
195       verifyMembershipAddAndDelete(gN, gUDel.toSubject());
196       verifyMembershipAddAndDelete(gO, gUDel.toSubject());
197       verifyMembershipAddAndDelete(gQ, gUDel.toSubject());
198       verifyMembershipAddAndDelete(gR, gUDel.toSubject());
199       verifyMembershipAddAndDelete(gS, gUDel.toSubject());
200       verifyMembershipAddAndDelete(gT, gUDel.toSubject());
201 
202       verifyMembershipAddAndDelete(gA, gVDel.toSubject());
203       verifyMembershipAddAndDelete(gB, gVDel.toSubject());
204       verifyMembershipAddAndDelete(gC, gVDel.toSubject());
205       verifyMembershipAddAndDelete(gF, gVDel.toSubject());
206       verifyMembershipAddAndDelete(gG, gVDel.toSubject());
207       verifyMembershipAddAndDelete(gH, gVDel.toSubject());
208       verifyMembershipAddAndDelete(gJ, gVDel.toSubject());
209       verifyMembershipAddAndDelete(gK, gVDel.toSubject());
210       verifyMembershipAddAndDelete(gL, gVDel.toSubject());
211       verifyMembershipAddAndDelete(gM, gVDel.toSubject());
212       verifyMembershipAddAndDelete(gN, gVDel.toSubject());
213       verifyMembershipAddAndDelete(gO, gVDel.toSubject());
214       verifyMembershipAddAndDelete(gQ, gVDel.toSubject());
215       verifyMembershipAddAndDelete(gR, gVDel.toSubject());
216       verifyMembershipAddAndDelete(gS, gVDel.toSubject());
217       verifyMembershipAddAndDelete(gT, gVDel.toSubject());
218 
219 
220       r.rs.stop();
221     }
222     catch (Exception e) {
223       T.e(e);
224     }
225   }
226 
227   public void verifyMembershipAddAndDelete(Group g, Subject s) throws Exception {
228     g.addMember(s);
229     g.deleteMember(s);
230     runCompositeMembershipChangeLogConsumer();
231     verifyMemberships();
232   }
233 
234   public void verifyMemberships() throws Exception {
235 
236     // SB -> gA
237     MembershipTestHelper.verifyImmediateMembership(r.rs, "SB -> gA", gA, subjB);
238 
239     // gA -> gB
240     MembershipTestHelper.verifyImmediateMembership(r.rs, "gA -> gB", gB, gA.toSubject());
241 
242     // SB -> gB (parent: gA -> gB) (depth: 1)
243     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SB -> gB", gB, subjB, gA, 1, gB, gA.toSubject(), null, 0);
244 
245     // SB -> gD
246     MembershipTestHelper.verifyCompositeMembership(r.rs, "SB -> gD", gD, subjB);
247 
248     // SA -> gE
249     MembershipTestHelper.verifyCompositeMembership(r.rs, "SA -> gE", gE, subjA);
250 
251     // SB -> gE
252     MembershipTestHelper.verifyCompositeMembership(r.rs, "SB -> gE", gE, subjB);
253 
254     // SD -> gE
255     MembershipTestHelper.verifyCompositeMembership(r.rs, "SD -> gE", gE, subjD);
256 
257     // gH -> gF
258     Membership gHgF = MembershipTestHelper.verifyImmediateMembership(r.rs, "gH -> gF", gF, gH.toSubject());
259 
260     // gR -> gF
261     Membership gRgF = MembershipTestHelper.verifyImmediateMembership(r.rs, "gR -> gF", gF, gR.toSubject());
262 
263     // SA -> gF (parent: gH -> gF) (depth: 1)
264     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SA -> gF", gF, subjA, gH, 1, gF, gH.toSubject(), null, 0);
265 
266     // gQ -> gF (parent: gH -> gF) (depth: 1)
267     Membership gQgFThroughgH = MembershipTestHelper.verifyEffectiveMembership(r.rs, "gQ -> gF", gF, gQ.toSubject(), gH, 1, gHgF);
268 
269     // SD -> gF (parent: gQ -> gF) (depth: 2)
270     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SD -> gF", gF, subjD, gQ, 2, gQgFThroughgH);
271 
272     // gS -> gF (parent: gR -> gF) (depth: 1)
273     MembershipTestHelper.verifyEffectiveMembership(r.rs, "gS -> gF", gF, gS.toSubject(), gR, 1, gF, gR.toSubject(), null, 0);
274 
275     // gQ -> gF (parent: gR -> gF) (depth: 1)
276     Membership gQgFThroughgR = MembershipTestHelper.verifyEffectiveMembership(r.rs, "gQ -> gF", gF, gQ.toSubject(), gR, 1, gRgF);
277 
278     // SD -> gF (parent: gQ -> gF) (depth: 2)
279     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SD -> gF", gF, subjD, gQ, 2, gQgFThroughgR);
280 
281     // gD -> gG
282     MembershipTestHelper.verifyImmediateMembership(r.rs, "gD -> gG", gG, gD.toSubject());
283 
284     // SB -> gG (parent: gD -> gG) (depth: 1)
285     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SB -> gG", gG, subjB, gD, 1, gG, gD.toSubject(), null, 0);
286 
287     // SA -> gH
288     MembershipTestHelper.verifyImmediateMembership(r.rs, "SA -> gH", gH, subjA);
289 
290     // gQ -> gH
291     MembershipTestHelper.verifyImmediateMembership(r.rs, "gQ -> gH", gH, gQ.toSubject());
292 
293     // SD -> gH (parent: gQ -> gH) (depth: 1)
294     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SD -> gH", gH, subjD, gQ, 1, gH, gQ.toSubject(), null, 0);
295 
296     // SA -> gI
297     MembershipTestHelper.verifyCompositeMembership(r.rs, "SA -> gI", gI, subjA);
298 
299     // SB -> gI
300     MembershipTestHelper.verifyCompositeMembership(r.rs, "SB -> gI", gI, subjB);
301 
302     // SC -> gI
303     MembershipTestHelper.verifyCompositeMembership(r.rs, "SC -> gI", gI, subjC);
304 
305     // SD -> gI
306     MembershipTestHelper.verifyCompositeMembership(r.rs, "SD -> gI", gI, subjD);
307 
308     // gE -> gJ
309     MembershipTestHelper.verifyImmediateMembership(r.rs, "gE -> gJ", gJ, gE.toSubject());
310 
311     // SA -> gJ (parent: gE -> gJ) (depth: 1)
312     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SA -> gJ", gJ, subjA, gE, 1, gJ, gE.toSubject(), null, 0);
313 
314     // SB -> gJ (parent: gE -> gJ) (depth: 1)
315     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SB -> gJ", gJ, subjB, gE, 1, gJ, gE.toSubject(), null, 0);
316 
317     // SD -> gJ (parent: gE -> gJ) (depth: 1)
318     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SD -> gJ", gJ, subjD, gE, 1, gJ, gE.toSubject(), null, 0);
319 
320     // SC -> gK
321     MembershipTestHelper.verifyImmediateMembership(r.rs, "SC -> gK", gK, subjC);
322 
323     // gI -> gL
324     MembershipTestHelper.verifyImmediateMembership(r.rs, "gI -> gL", gL, gI.toSubject());
325 
326     // SA -> gL (parent: gI -> gL) (depth: 1)
327     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SA -> gL", gL, subjA, gI, 1, gL, gI.toSubject(), null, 0);
328 
329     // SB -> gL (parent: gI -> gL) (depth: 1)
330     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SB -> gL", gL, subjB, gI, 1, gL, gI.toSubject(), null, 0);
331 
332     // SC -> gL (parent: gI -> gL) (depth: 1)
333     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SC -> gL", gL, subjC, gI, 1, gL, gI.toSubject(), null, 0);
334 
335     // SD -> gL (parent: gI -> gL) (depth: 1)
336     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SD -> gL", gL, subjD, gI, 1, gL, gI.toSubject(), null, 0);
337 
338     // gJ -> gM
339     MembershipTestHelper.verifyImmediateMembership(r.rs, "gJ -> gM", gM, gJ.toSubject());
340 
341     // SA -> gM (parent: gE -> gM) (depth: 2)
342     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SA -> gM", gM, subjA, gE, 2, gM, gE.toSubject(), gJ, 1);
343 
344     // SB -> gM (parent: gE -> gM) (depth: 2)
345     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SB -> gM", gM, subjB, gE, 2, gM, gE.toSubject(), gJ, 1);
346 
347     // SD -> gM (parent: gE -> gM) (depth: 2)
348     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SD -> gM", gM, subjD, gE, 2, gM, gE.toSubject(), gJ, 1);
349 
350     // gE -> gM (parent: gJ -> gM) (depth: 1)
351     MembershipTestHelper.verifyEffectiveMembership(r.rs, "gE -> gM", gM, gE.toSubject(), gJ, 1, gM, gJ.toSubject(), null, 0);
352     
353     // gG -> gN
354     MembershipTestHelper.verifyImmediateMembership(r.rs, "gG -> gN", gN, gG.toSubject());
355 
356     // SB -> gN (parent: gD -> gN) (depth: 2)
357     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SB -> gN", gN, subjB, gD, 2, gN, gD.toSubject(), gG, 1);
358 
359     // gD -> gN (parent: gG -> gN) (depth: 1)
360     MembershipTestHelper.verifyEffectiveMembership(r.rs, "gD -> gN", gN, gD.toSubject(), gG, 1, gN, gG.toSubject(), null, 0);
361 
362     // SB -> gP
363     MembershipTestHelper.verifyCompositeMembership(r.rs, "SB -> gP", gP, subjB);
364 
365     // SD -> gQ
366     MembershipTestHelper.verifyImmediateMembership(r.rs, "SD -> gQ", gQ, subjD);
367 
368     // gS -> gR
369     MembershipTestHelper.verifyImmediateMembership(r.rs, "gS -> gR", gR, gS.toSubject());
370 
371     // gQ -> gR
372     MembershipTestHelper.verifyImmediateMembership(r.rs, "gQ -> gR", gR, gQ.toSubject());
373 
374     // SD -> gR (parent: gQ -> gR) (depth: 1)
375     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SD -> gR", gR, subjD, gQ, 1, gR, gQ.toSubject(), null, 0);
376 
377     // gP -> gT
378     MembershipTestHelper.verifyImmediateMembership(r.rs, "gP -> gT", gT, gP.toSubject());
379 
380     // SB -> gT (parent: gP -> gT) (depth: 1)
381     MembershipTestHelper.verifyEffectiveMembership(r.rs, "SB -> gT", gT, subjB, gP, 1, gT, gP.toSubject(), null, 0);
382 
383 
384     // verify the total number of memberships
385     Set<Membership> allMemberships = MembershipFinder.internal_findAllByCreatedAfter(r.rs, before, Group.getDefaultList());
386 
387     T.amount("Number of memberships", 56, allMemberships.size());
388   }
389 }
390