001: /* Copyright 2004 The JA-SIG Collaborative. All rights reserved.
002: * See license distributed with this file and
003: * available online at http://www.uportal.org/license.html
004: */
005:
006: package org.jasig.portal.groups.pags;
007:
008: import java.util.Random;
009: import java.util.Vector;
010:
011: import junit.framework.TestCase;
012: import junit.framework.TestSuite;
013:
014: import org.jasig.portal.groups.pags.testers.IntegerEQTester;
015: import org.jasig.portal.groups.pags.testers.IntegerGETester;
016: import org.jasig.portal.groups.pags.testers.IntegerGTTester;
017: import org.jasig.portal.groups.pags.testers.IntegerLETester;
018: import org.jasig.portal.groups.pags.testers.IntegerLTTester;
019: import org.jasig.portal.groups.pags.testers.RegexTester;
020: import org.jasig.portal.groups.pags.testers.StringEqualsIgnoreCaseTester;
021: import org.jasig.portal.groups.pags.testers.StringEqualsTester;
022: import org.jasig.portal.groups.pags.testers.ValueExistsTester;
023: import org.jasig.portal.groups.pags.testers.ValueMissingTester;
024: import org.jasig.portal.security.IPerson;
025: import org.jasig.portal.security.provider.PersonImpl;
026:
027: /**
028: * Tests the PAGS testers.
029: * @author: Dan Ellentuck
030: */
031: public class PAGSTest extends TestCase {
032: private static Class IPERSON_CLASS;
033: private static String CR = "\n";
034: private Random random = new Random();
035: private String[] attributeNames = { "one", "two", "three", "four",
036: "five", "six", "seven", "eight", "nine", "ten" };
037: private String[] randomStrings;
038: private String[] randomIntStrings;
039: private String INTEGER_MAX = Integer.MAX_VALUE + "";
040: private String INTEGER_MIN = Integer.MIN_VALUE + "";
041: private String key1 = null;
042: private String key2 = null;
043: private String key3 = null;
044: private String missingKey = null;
045: private Vector intStringVector = null;
046: private Vector stringVector = null;
047: private int testVectorSize = 10;
048:
049: /**
050: * PAGSTester constructor.
051: */
052: public PAGSTest(String name) {
053: super (name);
054: }
055:
056: /**
057: * @return org.jasig.portal.groups.IEntity
058: */
059: private IPerson getIPerson(String key) {
060: IPerson ip = new PersonImpl();
061: ip.setAttribute(IPerson.USERNAME, key);
062: return ip;
063: }
064:
065: /**
066: * @return java.lang.String
067: * @param length int
068: */
069: private String getRandomString(java.util.Random r, int length) {
070:
071: char[] chars = new char[length];
072:
073: for (int i = 0; i < length; i++) {
074: int diff = (r.nextInt(25));
075: int charValue = (int) 'A' + diff;
076: chars[i] = (char) charValue;
077: }
078: return new String(chars);
079: }
080:
081: /**
082: * @param msg java.lang.String
083: */
084: private static void print(String msg) {
085: java.sql.Timestamp ts = new java.sql.Timestamp(System
086: .currentTimeMillis());
087: System.out.println(ts + " : " + msg);
088: }
089:
090: private static void printBlankLine() {
091: System.out.println("");
092: }
093:
094: /**
095: */
096: protected void setUp() {
097: try {
098: if (IPERSON_CLASS == null) {
099: IPERSON_CLASS = Class
100: .forName("org.jasig.portal.security.IPerson");
101: }
102:
103: randomStrings = new String[100];
104: for (int idx = 0; idx < 100; idx++) {
105: int length = random.nextInt(10) + 1; // between 1 and 11.
106: randomStrings[idx] = getRandomString(random, length);
107: }
108:
109: randomIntStrings = new String[100];
110: for (int idx = 0; idx < 100; idx++) {
111: int randomInt = random.nextInt(99999) + 1; // between 1 and 100000.
112: randomIntStrings[idx] = randomInt + "";
113: }
114:
115: intStringVector = new Vector();
116: for (int idx = 2; idx < testVectorSize; idx++) {
117: intStringVector.add(randomIntStrings[idx]);
118: }
119:
120: stringVector = new Vector();
121: for (int idx = 2; idx < testVectorSize; idx++) {
122: stringVector.add(randomStrings[idx]);
123: }
124:
125: key1 = attributeNames[0];
126: key2 = attributeNames[1];
127: key3 = attributeNames[2];
128: missingKey = attributeNames[3];
129:
130: } catch (Exception ex) {
131: print("GroupsTester.setUp(): " + ex.getMessage());
132: }
133: }
134:
135: /**
136: * @return junit.framework.Test
137: */
138: public static junit.framework.Test suite() {
139: TestSuite suite = new TestSuite();
140:
141: suite.addTest(new PAGSTest("testStringEqualsTester"));
142: suite.addTest(new PAGSTest("testStringEqualsIgnoreCaseTester"));
143: suite.addTest(new PAGSTest("testIntegerEQTester"));
144: suite.addTest(new PAGSTest("testIntegerGTTester"));
145: suite.addTest(new PAGSTest("testIntegerLTTester"));
146: suite.addTest(new PAGSTest("testIntegerGETester"));
147: suite.addTest(new PAGSTest("testIntegerLETester"));
148: suite.addTest(new PAGSTest("testRegexTester"));
149: suite.addTest(new PAGSTest("testValueExistsTester"));
150: suite.addTest(new PAGSTest("testValueMissingTester"));
151:
152: // Add more tests here.
153: // NB: Order of tests is not guaranteed.
154:
155: return suite;
156: }
157:
158: /**
159: */
160: protected void tearDown() {
161: }
162:
163: /**
164: */
165: public void testStringEqualsTester() throws Exception {
166: print(CR
167: + "***** ENTERING PAGSTester.testStringEqualsTester() *****"
168: + CR);
169: String msg = null;
170:
171: msg = "Creating a new IPerson";
172: print(msg);
173: IPerson newPerson = getIPerson("de3");
174: assertNotNull(msg, newPerson);
175:
176: print("Adding attributes to IPerson.");
177: newPerson.setAttribute(key1, randomStrings[0]);
178: newPerson.setAttribute(key2, randomStrings[1]);
179: newPerson.setAttribute(key3, stringVector);
180:
181: msg = "Testing IPerson " + newPerson;
182: print(msg);
183:
184: IPersonTester tester1 = new StringEqualsTester(key1,
185: randomStrings[0]);
186: IPersonTester tester2 = new StringEqualsTester(key2,
187: randomStrings[1]);
188: IPersonTester tester3 = new StringEqualsTester(key3,
189: randomStrings[testVectorSize - 1]);
190: IPersonTester tester4 = new StringEqualsTester(key3,
191: randomStrings[0] + "x");
192: IPersonTester tester5 = new StringEqualsTester(missingKey,
193: randomStrings[0]);
194:
195: msg = "Testing " + tester1;
196: assertTrue(msg, tester1.test(newPerson));
197: msg = "Testing " + tester2;
198: assertTrue(msg, tester2.test(newPerson));
199: msg = "Testing " + tester3;
200: assertTrue(msg, tester3.test(newPerson));
201: msg = "Testing " + tester4;
202: assertFalse(msg, tester4.test(newPerson));
203: msg = "Testing " + tester5;
204: assertFalse(msg, tester5.test(newPerson));
205:
206: print("Success!");
207: print(CR
208: + "***** LEAVING PAGSTester.testStringEqualsTester() *****"
209: + CR);
210:
211: }
212:
213: public void testStringEqualsIgnoreCaseTester() throws Exception {
214: print(CR
215: + "***** ENTERING PAGSTester.testStringEqualsIgnoreCaseTester() *****"
216: + CR);
217: String msg = null;
218:
219: msg = "Creating a new IPerson";
220: print(msg);
221: IPerson newPerson = getIPerson("de3");
222: assertNotNull(msg, newPerson);
223:
224: print("Adding attributes to IPerson.");
225: newPerson.setAttribute(key1, randomStrings[0]);
226: newPerson.setAttribute(key2, randomStrings[1].toLowerCase());
227:
228: msg = "Testing IPerson " + newPerson;
229: print(msg);
230:
231: String testKey = randomStrings[0].toLowerCase();
232: IPersonTester tester1 = new StringEqualsIgnoreCaseTester(key1,
233: testKey);
234: IPersonTester tester2 = new StringEqualsIgnoreCaseTester(key2,
235: randomStrings[1]);
236:
237: msg = "Testing " + tester1;
238: assertTrue(msg, tester1.test(newPerson));
239: msg = "Testing " + tester2;
240: assertTrue(msg, tester2.test(newPerson));
241:
242: print("Success!");
243: print(CR
244: + "***** LEAVING PAGSTester.testStringEqualsIgnoreCaseTester() *****"
245: + CR);
246:
247: }
248:
249: /**
250: */
251: public void testIntegerEQTester() throws Exception {
252: print(CR
253: + "***** ENTERING PAGSTester.testIntegerEQTester() *****"
254: + CR);
255: String msg = null;
256: msg = "Creating a new IPerson";
257: print(msg);
258: IPerson newPerson = getIPerson("de3");
259: assertNotNull(msg, newPerson);
260:
261: print("Adding attributes to IPerson.");
262: newPerson.setAttribute(key1, randomIntStrings[0]);
263: newPerson.setAttribute(key2, randomIntStrings[1]);
264: newPerson.setAttribute(key3, intStringVector);
265:
266: msg = "Testing IPerson " + newPerson;
267: print(msg);
268:
269: IPersonTester tester1 = new IntegerEQTester(key1,
270: randomIntStrings[0]);
271: IPersonTester tester2 = new IntegerEQTester(key2,
272: randomIntStrings[1]);
273: IPersonTester tester3 = new IntegerEQTester(key3,
274: randomIntStrings[testVectorSize - 1]);
275: IPersonTester tester4 = new IntegerEQTester(key3, "0");
276:
277: msg = "Testing " + tester1;
278: assertTrue(msg, tester1.test(newPerson));
279: msg = "Testing " + tester2;
280: assertTrue(msg, tester2.test(newPerson));
281: msg = "Testing " + tester3;
282: assertTrue(msg, tester3.test(newPerson));
283: msg = "Testing " + tester4;
284: assertFalse(msg, tester4.test(newPerson));
285:
286: print("Success!");
287: print(CR
288: + "***** LEAVING PAGSTester.testIntegerEQTester() *****"
289: + CR);
290:
291: }
292:
293: /**
294: */
295: public void testIntegerGTTester() throws Exception {
296: print(CR
297: + "***** ENTERING PAGSTester.testIntegerGTTester() *****"
298: + CR);
299: String msg = null;
300:
301: msg = "Creating a new IPerson";
302: print(msg);
303: IPerson newPerson = getIPerson("de3");
304: assertNotNull(msg, newPerson);
305:
306: print("Adding attributes to IPerson.");
307: newPerson.setAttribute(key1, randomIntStrings[0]);
308: newPerson.setAttribute(key2, randomIntStrings[1]);
309: newPerson.setAttribute(key3, intStringVector);
310:
311: msg = "Testing IPerson " + newPerson;
312: print(msg);
313:
314: // test value == attribute value. Should answer false.
315: IPersonTester tester1 = new IntegerGTTester(key1,
316: randomIntStrings[0]);
317: // test value < attribute value. Should answer true.
318: IPersonTester tester2 = new IntegerGTTester(key2, "0");
319: // test value > any attribute value. Should answer false.
320: IPersonTester tester3 = new IntegerGTTester(key3, INTEGER_MAX);
321: // test value < any attribute value. Should answer true.
322: IPersonTester tester4 = new IntegerGTTester(key3, ""
323: + INTEGER_MIN);
324: // attribute value not present. Should answer false.
325: IPersonTester tester5 = new IntegerGTTester(missingKey, "0");
326:
327: msg = "Testing " + tester1;
328: assertFalse(msg, tester1.test(newPerson));
329: msg = "Testing " + tester2;
330: assertTrue(msg, tester2.test(newPerson));
331: msg = "Testing " + tester3;
332: assertFalse(msg, tester3.test(newPerson));
333: msg = "Testing " + tester4;
334: assertTrue(msg, tester4.test(newPerson));
335: msg = "Testing " + tester5;
336: assertFalse(msg, tester5.test(newPerson));
337:
338: print("Success!");
339: print(CR
340: + "***** LEAVING PAGSTester.testIntegerGTTester() *****"
341: + CR);
342:
343: }
344:
345: public void testIntegerLTTester() throws Exception {
346: print(CR
347: + "***** ENTERING PAGSTester.testIntegerLTTester() *****"
348: + CR);
349: String msg = null;
350:
351: msg = "Creating a new IPerson";
352: print(msg);
353: IPerson newPerson = getIPerson("de3");
354: assertNotNull(msg, newPerson);
355:
356: print("Adding attributes to IPerson.");
357: newPerson.setAttribute(key1, randomIntStrings[0]);
358: newPerson.setAttribute(key2, randomIntStrings[1]);
359: newPerson.setAttribute(key3, intStringVector);
360:
361: msg = "Testing IPerson " + newPerson;
362: print(msg);
363:
364: // test value == attribute value. Should answer false.
365: IPersonTester tester1 = new IntegerLTTester(key1,
366: randomIntStrings[0]);
367: // test value < attribute value. Should answer false.
368: IPersonTester tester2 = new IntegerLTTester(key2, "0");
369: // test value > any attribute value. Should answer true.
370: IPersonTester tester3 = new IntegerLTTester(key3, ""
371: + INTEGER_MAX);
372: // test value < any attribute value. Should answer false.
373: IPersonTester tester4 = new IntegerLTTester(key3, ""
374: + INTEGER_MIN);
375: // test value > attribute value. Should answer true.
376: IPersonTester tester5 = new IntegerLTTester(key1, ""
377: + INTEGER_MAX);
378:
379: msg = "Testing " + tester1;
380: assertFalse(msg, tester1.test(newPerson));
381: msg = "Testing " + tester2;
382: assertFalse(msg, tester2.test(newPerson));
383: msg = "Testing " + tester3;
384: assertTrue(msg, tester3.test(newPerson));
385: msg = "Testing " + tester4;
386: assertFalse(msg, tester4.test(newPerson));
387: msg = "Testing " + tester5;
388: assertTrue(msg, tester5.test(newPerson));
389:
390: print("Success!");
391: print(CR
392: + "***** LEAVING PAGSTester.testIntegerLTTester() *****"
393: + CR);
394:
395: }
396:
397: public void testIntegerGETester() throws Exception {
398: print(CR
399: + "***** ENTERING PAGSTester.testIntegerGETester() *****"
400: + CR);
401: String msg = null;
402:
403: msg = "Creating a new IPerson";
404: print(msg);
405: IPerson newPerson = getIPerson("de3");
406: assertNotNull(msg, newPerson);
407:
408: print("Adding attributes to IPerson.");
409: newPerson.setAttribute(key1, randomIntStrings[0]);
410: newPerson.setAttribute(key2, randomIntStrings[1]);
411: newPerson.setAttribute(key3, intStringVector);
412:
413: msg = "Testing IPerson " + newPerson;
414: print(msg);
415:
416: // test value == attribute value. Should answer true.
417: IPersonTester tester1 = new IntegerGETester(key1,
418: randomIntStrings[0]);
419: // test value < attribute value. Should answer true.
420: IPersonTester tester2 = new IntegerGETester(key2, "0");
421: // test value > any attribute value. Should answer false.
422: IPersonTester tester3 = new IntegerGETester(key3, ""
423: + INTEGER_MAX);
424: // test value < any attribute value. Should answer true.
425: IPersonTester tester4 = new IntegerGETester(key3, ""
426: + INTEGER_MIN);
427: // test value > attribute value. Should answer false.
428: IPersonTester tester5 = new IntegerGETester(key1, ""
429: + INTEGER_MAX);
430:
431: msg = "Testing " + tester1;
432: assertTrue(msg, tester1.test(newPerson));
433: msg = "Testing " + tester2;
434: assertTrue(msg, tester2.test(newPerson));
435: msg = "Testing " + tester3;
436: assertFalse(msg, tester3.test(newPerson));
437: msg = "Testing " + tester4;
438: assertTrue(msg, tester4.test(newPerson));
439: msg = "Testing " + tester5;
440: assertFalse(msg, tester5.test(newPerson));
441:
442: print("Success!");
443: print(CR
444: + "***** LEAVING PAGSTester.testIntegerGETester() *****"
445: + CR);
446:
447: }
448:
449: public void testIntegerLETester() throws Exception {
450: print(CR
451: + "***** ENTERING PAGSTester.testIntegerLETester() *****"
452: + CR);
453: String msg = null;
454:
455: msg = "Creating a new IPerson";
456: print(msg);
457: IPerson newPerson = getIPerson("de3");
458: assertNotNull(msg, newPerson);
459:
460: print("Adding attributes to IPerson.");
461: newPerson.setAttribute(key1, randomIntStrings[0]);
462: newPerson.setAttribute(key2, randomIntStrings[1]);
463: newPerson.setAttribute(key3, intStringVector);
464:
465: // test value == attribute value. Should answer true.
466: IPersonTester tester1 = new IntegerLETester(key1,
467: randomIntStrings[0]);
468: // test value < attribute value. Should answer false.
469: IPersonTester tester2 = new IntegerLETester(key2, "0");
470: // test value > any attribute value. Should answer true.
471: IPersonTester tester3 = new IntegerLETester(key3, ""
472: + INTEGER_MAX);
473: // test value < any attribute value. Should answer false.
474: IPersonTester tester4 = new IntegerLETester(key3, ""
475: + INTEGER_MIN);
476: // test value > attribute value. Should answer true.
477: IPersonTester tester5 = new IntegerLETester(key1, ""
478: + INTEGER_MAX);
479:
480: msg = "Testing IPerson " + newPerson;
481: print(msg);
482:
483: msg = "Testing " + tester1;
484: assertTrue(msg, tester1.test(newPerson));
485: msg = "Testing " + tester2;
486: assertFalse(msg, tester2.test(newPerson));
487: msg = "Testing " + tester3;
488: assertTrue(msg, tester3.test(newPerson));
489: msg = "Testing " + tester4;
490: assertFalse(msg, tester4.test(newPerson));
491: msg = "Testing " + tester5;
492: assertTrue(msg, tester5.test(newPerson));
493:
494: print("Success!");
495: print(CR
496: + "***** LEAVING PAGSTester.testIntegerLETester() *****"
497: + CR);
498:
499: }
500:
501: public void testRegexTester() throws Exception {
502: print(CR + "***** ENTERING PAGSTester.testRegexTester() *****"
503: + CR);
504: String msg = null;
505:
506: msg = "Creating a new IPerson";
507: print(msg);
508: IPerson newPerson = getIPerson("de3");
509: assertNotNull(msg, newPerson);
510:
511: print("Adding attributes to IPerson.");
512: newPerson.setAttribute(key1, randomStrings[0]);
513: newPerson.setAttribute(key2, randomStrings[1]);
514: newPerson.setAttribute(key3, stringVector);
515:
516: msg = "Testing IPerson " + newPerson;
517: print(msg);
518:
519: // test equals attribute. Should return true.
520: IPersonTester tester1 = new RegexTester(key1, randomStrings[0]);
521:
522: // test and attribute begin with same String. Should return true.
523: String testValue2 = randomStrings[0].substring(0, 1) + ".*";
524: IPersonTester tester2 = new RegexTester(key1, testValue2);
525:
526: // test and attribute begin with different String. Should return false.
527: String testValue3 = "^[0]";
528: IPersonTester tester3 = new RegexTester(key1, testValue3);
529:
530: // test and attribute end with same String. Should return true.
531: String testValue4 = ".*"
532: + randomStrings[1]
533: .substring(randomStrings[1].length() - 1) + "$";
534: IPersonTester tester4 = new RegexTester(key2, testValue4);
535:
536: // test and attribute end with different String. Should return false.
537: String testValue5 = ".*9$";
538: IPersonTester tester5 = new RegexTester(key2, testValue5);
539:
540: // test value is same as last String in Vector. Should return true.
541: String testValue6 = "^" + ((String) stringVector.lastElement())
542: + "$";
543: IPersonTester tester6 = new RegexTester(key3, testValue6);
544:
545: msg = "Testing " + tester1;
546: assertTrue(msg, tester1.test(newPerson));
547: msg = "Testing " + tester2;
548: assertTrue(msg, tester2.test(newPerson));
549: msg = "Testing " + tester3;
550: assertFalse(msg, tester3.test(newPerson));
551: msg = "Testing " + tester4;
552: assertTrue(msg, tester4.test(newPerson));
553: msg = "Testing " + tester5;
554: assertFalse(msg, tester5.test(newPerson));
555: msg = "Testing " + tester6;
556: assertTrue(msg, tester6.test(newPerson));
557:
558: print("Success!");
559: print(CR + "***** LEAVING PAGSTester.testRegexTester() *****"
560: + CR);
561:
562: }
563:
564: public void testValueExistsTester() throws Exception {
565: print(CR
566: + "***** ENTERING PAGSTester.testValueExistsTester() *****"
567: + CR);
568: String msg = null;
569:
570: msg = "Creating a new IPerson";
571: print(msg);
572: IPerson newPerson = getIPerson("de3");
573: assertNotNull(msg, newPerson);
574:
575: print("Adding attributes to IPerson.");
576: newPerson.setAttribute(key1, randomStrings[0]);
577: newPerson.setAttribute(key2, randomStrings[1].toLowerCase());
578:
579: msg = "Testing IPerson " + newPerson;
580: print(msg);
581:
582: String testKey = randomStrings[0].toLowerCase();
583: // These tests should pass since the IPerson attribute exists.
584: IPersonTester tester1 = new ValueExistsTester(key1, testKey);
585: IPersonTester tester2 = new ValueExistsTester(key2, null);
586: // This test should fail; the IPerson does not have a value for key3.
587: IPersonTester tester3 = new ValueExistsTester(key3,
588: new String());
589:
590: msg = "Testing " + tester1;
591: assertTrue(msg, tester1.test(newPerson));
592: msg = "Testing " + tester2;
593: assertTrue(msg, tester2.test(newPerson));
594: msg = "Testing " + tester3;
595: assertFalse(msg, tester3.test(newPerson));
596:
597: print("Success!");
598: print(CR
599: + "***** LEAVING PAGSTester.testValueExistsTester() *****"
600: + CR);
601: }
602:
603: public void testValueMissingTester() throws Exception {
604: print(CR
605: + "***** ENTERING PAGSTester.testValueMissingTester() *****"
606: + CR);
607: String msg = null;
608:
609: msg = "Creating a new IPerson";
610: print(msg);
611: IPerson newPerson = getIPerson("de3");
612: assertNotNull(msg, newPerson);
613:
614: print("Adding attributes to IPerson.");
615: newPerson.setAttribute(key1, randomStrings[0]);
616: newPerson.setAttribute(key2, new String());
617:
618: msg = "Testing IPerson " + newPerson;
619: print(msg);
620:
621: String testKey = randomStrings[0].toLowerCase();
622: // This test should fail since the IPerson attribute exists.
623: IPersonTester tester1 = new ValueMissingTester(key1,
624: randomStrings[0]);
625: // This test should pass; the attribute is blank.
626: IPersonTester tester2 = new ValueMissingTester(key2, testKey);
627: // This test should pass; the IPerson does not have a value for key3.
628: IPersonTester tester3 = new ValueMissingTester(key3, testKey);
629:
630: msg = "Testing " + tester1;
631: assertFalse(msg, tester1.test(newPerson));
632: msg = "Testing " + tester2;
633: assertTrue(msg, tester2.test(newPerson));
634: msg = "Testing " + tester3;
635: assertTrue(msg, tester3.test(newPerson));
636:
637: print("Success!");
638: print(CR
639: + "***** LEAVING PAGSTester.testValueMissingTester() *****"
640: + CR);
641:
642: }
643:
644: }
|