/**
* Licensed to Apereo under one or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information regarding copyright ownership. Apereo
* licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use
* this file except in compliance with the License. You may obtain a copy of the License at the
* following location:
*
* <p>http://www.apache.org/licenses/LICENSE-2.0
*
* <p>Unless required by applicable law or agreed to in writing, software distributed under the
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apereo.portal.groups.pags;
import java.util.Random;
import java.util.Vector;
import junit.framework.TestCase;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apereo.portal.groups.pags.testers.IntegerEQTester;
import org.apereo.portal.groups.pags.testers.IntegerGETester;
import org.apereo.portal.groups.pags.testers.IntegerGTTester;
import org.apereo.portal.groups.pags.testers.IntegerLETester;
import org.apereo.portal.groups.pags.testers.IntegerLTTester;
import org.apereo.portal.groups.pags.testers.RegexTester;
import org.apereo.portal.groups.pags.testers.StringEqualsIgnoreCaseTester;
import org.apereo.portal.groups.pags.testers.StringEqualsTester;
import org.apereo.portal.groups.pags.testers.ValueExistsTester;
import org.apereo.portal.groups.pags.testers.ValueMissingTester;
import org.apereo.portal.security.IPerson;
import org.apereo.portal.security.provider.PersonImpl;
/**
* Tests the PAGS testers.
*/
public class PAGSTest extends TestCase {
private static final Log LOG = LogFactory.getLog(PAGSTest.class);
private static Class IPERSON_CLASS;
private static String CR = "\n";
private Random random = new Random();
private String[] attributeNames = {
"one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten"
};
private String[] randomStrings;
private String[] randomIntStrings;
private String INTEGER_MAX = Integer.MAX_VALUE + "";
private String INTEGER_MIN = Integer.MIN_VALUE + "";
private String key1 = null;
private String key2 = null;
private String key3 = null;
private String missingKey = null;
private Vector intStringVector = null;
private Vector stringVector = null;
private int testVectorSize = 10;
/** PAGSTester constructor. */
public PAGSTest(String name) {
super(name);
}
/** @return org.apereo.portal.groups.IEntity */
private IPerson getIPerson(String key) {
IPerson ip = new PersonImpl();
ip.setAttribute(IPerson.USERNAME, key);
return ip;
}
/**
* @return java.lang.String
* @param length int
*/
private String getRandomString(java.util.Random r, int length) {
char[] chars = new char[length];
for (int i = 0; i < length; i++) {
int diff = (r.nextInt(25));
int charValue = (int) 'A' + diff;
chars[i] = (char) charValue;
}
return new String(chars);
}
/** @param msg java.lang.String */
private static void print(String msg) {
LOG.debug(msg);
}
protected void setUp() {
try {
if (IPERSON_CLASS == null) {
IPERSON_CLASS = Class.forName("org.apereo.portal.security.IPerson");
}
randomStrings = new String[100];
for (int idx = 0; idx < 100; idx++) {
int length = random.nextInt(10) + 1; // between 1 and 11.
randomStrings[idx] = getRandomString(random, length);
}
randomIntStrings = new String[100];
for (int idx = 0; idx < 100; idx++) {
int randomInt = random.nextInt(99999) + 1; // between 1 and 100000.
randomIntStrings[idx] = randomInt + "";
}
intStringVector = new Vector();
for (int idx = 2; idx < testVectorSize; idx++) {
intStringVector.add(randomIntStrings[idx]);
}
stringVector = new Vector();
for (int idx = 2; idx < testVectorSize; idx++) {
stringVector.add(randomStrings[idx]);
}
key1 = attributeNames[0];
key2 = attributeNames[1];
key3 = attributeNames[2];
missingKey = attributeNames[3];
} catch (Exception ex) {
print("GroupsTester.setUp(): " + ex.getMessage());
}
}
protected void tearDown() {}
public void testStringEqualsTester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testStringEqualsTester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomStrings[0]);
newPerson.setAttribute(key2, randomStrings[1]);
newPerson.setAttribute(key3, stringVector);
msg = "Testing IPerson " + newPerson;
print(msg);
IPersonTester tester1 = new StringEqualsTester(new TestPersonAttributesGroupTestDefinition(key1, randomStrings[0]));
IPersonTester tester2 = new StringEqualsTester(new TestPersonAttributesGroupTestDefinition(key2, randomStrings[1]));
IPersonTester tester3 = new StringEqualsTester(new TestPersonAttributesGroupTestDefinition(key3, randomStrings[testVectorSize - 1]));
IPersonTester tester4 = new StringEqualsTester(new TestPersonAttributesGroupTestDefinition(key3, randomStrings[0] + "x"));
IPersonTester tester5 = new StringEqualsTester(new TestPersonAttributesGroupTestDefinition(missingKey, randomStrings[0]));
msg = "Testing " + tester1;
assertTrue(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertTrue(msg, tester2.test(newPerson));
msg = "Testing " + tester3;
assertTrue(msg, tester3.test(newPerson));
msg = "Testing " + tester4;
assertFalse(msg, tester4.test(newPerson));
msg = "Testing " + tester5;
assertFalse(msg, tester5.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testStringEqualsTester() *****" + CR);
}
public void testStringEqualsIgnoreCaseTester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testStringEqualsIgnoreCaseTester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomStrings[0]);
newPerson.setAttribute(key2, randomStrings[1].toLowerCase());
msg = "Testing IPerson " + newPerson;
print(msg);
String testKey = randomStrings[0].toLowerCase();
IPersonTester tester1 = new StringEqualsIgnoreCaseTester(new TestPersonAttributesGroupTestDefinition(key1, testKey));
IPersonTester tester2 = new StringEqualsIgnoreCaseTester(new TestPersonAttributesGroupTestDefinition(key2, randomStrings[1]));
msg = "Testing " + tester1;
assertTrue(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertTrue(msg, tester2.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testStringEqualsIgnoreCaseTester() *****" + CR);
}
public void testIntegerEQTester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testIntegerEQTester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomIntStrings[0]);
newPerson.setAttribute(key2, randomIntStrings[1]);
newPerson.setAttribute(key3, intStringVector);
msg = "Testing IPerson " + newPerson;
print(msg);
IPersonTester tester1 = new IntegerEQTester(new TestPersonAttributesGroupTestDefinition(key1, randomIntStrings[0]));
IPersonTester tester2 = new IntegerEQTester(new TestPersonAttributesGroupTestDefinition(key2, randomIntStrings[1]));
IPersonTester tester3 = new IntegerEQTester(new TestPersonAttributesGroupTestDefinition(key3, randomIntStrings[testVectorSize - 1]));
IPersonTester tester4 = new IntegerEQTester(new TestPersonAttributesGroupTestDefinition(key3, "0"));
msg = "Testing " + tester1;
assertTrue(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertTrue(msg, tester2.test(newPerson));
msg = "Testing " + tester3;
assertTrue(msg, tester3.test(newPerson));
msg = "Testing " + tester4;
assertFalse(msg, tester4.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testIntegerEQTester() *****" + CR);
}
public void testIntegerGTTester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testIntegerGTTester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomIntStrings[0]);
newPerson.setAttribute(key2, randomIntStrings[1]);
newPerson.setAttribute(key3, intStringVector);
msg = "Testing IPerson " + newPerson;
print(msg);
// test value == attribute value. Should answer false.
IPersonTester tester1 = new IntegerGTTester(new TestPersonAttributesGroupTestDefinition(key1, randomIntStrings[0]));
// test value < attribute value. Should answer true.
IPersonTester tester2 = new IntegerGTTester(new TestPersonAttributesGroupTestDefinition(key2, "0"));
// test value > any attribute value. Should answer false.
IPersonTester tester3 = new IntegerGTTester(new TestPersonAttributesGroupTestDefinition(key3, INTEGER_MAX));
// test value < any attribute value. Should answer true.
IPersonTester tester4 = new IntegerGTTester(new TestPersonAttributesGroupTestDefinition(key3, "" + INTEGER_MIN));
// attribute value not present. Should answer false.
IPersonTester tester5 = new IntegerGTTester(new TestPersonAttributesGroupTestDefinition(missingKey, "0"));
msg = "Testing " + tester1;
assertFalse(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertTrue(msg, tester2.test(newPerson));
msg = "Testing " + tester3;
assertFalse(msg, tester3.test(newPerson));
msg = "Testing " + tester4;
assertTrue(msg, tester4.test(newPerson));
msg = "Testing " + tester5;
assertFalse(msg, tester5.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testIntegerGTTester() *****" + CR);
}
public void testIntegerLTTester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testIntegerLTTester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomIntStrings[0]);
newPerson.setAttribute(key2, randomIntStrings[1]);
newPerson.setAttribute(key3, intStringVector);
msg = "Testing IPerson " + newPerson;
print(msg);
// test value == attribute value. Should answer false.
IPersonTester tester1 = new IntegerLTTester(new TestPersonAttributesGroupTestDefinition(key1, randomIntStrings[0]));
// test value < attribute value. Should answer false.
IPersonTester tester2 = new IntegerLTTester(new TestPersonAttributesGroupTestDefinition(key2, "0"));
// test value > any attribute value. Should answer true.
IPersonTester tester3 = new IntegerLTTester(new TestPersonAttributesGroupTestDefinition(key3, "" + INTEGER_MAX));
// test value < any attribute value. Should answer false.
IPersonTester tester4 = new IntegerLTTester(new TestPersonAttributesGroupTestDefinition(key3, "" + INTEGER_MIN));
// test value > attribute value. Should answer true.
IPersonTester tester5 = new IntegerLTTester(new TestPersonAttributesGroupTestDefinition(key1, "" + INTEGER_MAX));
msg = "Testing " + tester1;
assertFalse(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertFalse(msg, tester2.test(newPerson));
msg = "Testing " + tester3;
assertTrue(msg, tester3.test(newPerson));
msg = "Testing " + tester4;
assertFalse(msg, tester4.test(newPerson));
msg = "Testing " + tester5;
assertTrue(msg, tester5.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testIntegerLTTester() *****" + CR);
}
public void testIntegerGETester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testIntegerGETester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomIntStrings[0]);
newPerson.setAttribute(key2, randomIntStrings[1]);
newPerson.setAttribute(key3, intStringVector);
msg = "Testing IPerson " + newPerson;
print(msg);
// test value == attribute value. Should answer true.
IPersonTester tester1 = new IntegerGETester(new TestPersonAttributesGroupTestDefinition(key1, randomIntStrings[0]));
// test value < attribute value. Should answer true.
IPersonTester tester2 = new IntegerGETester(new TestPersonAttributesGroupTestDefinition(key2, "0"));
// test value > any attribute value. Should answer false.
IPersonTester tester3 = new IntegerGETester(new TestPersonAttributesGroupTestDefinition(key3, "" + INTEGER_MAX));
// test value < any attribute value. Should answer true.
IPersonTester tester4 = new IntegerGETester(new TestPersonAttributesGroupTestDefinition(key3, "" + INTEGER_MIN));
// test value > attribute value. Should answer false.
IPersonTester tester5 = new IntegerGETester(new TestPersonAttributesGroupTestDefinition(key1, "" + INTEGER_MAX));
msg = "Testing " + tester1;
assertTrue(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertTrue(msg, tester2.test(newPerson));
msg = "Testing " + tester3;
assertFalse(msg, tester3.test(newPerson));
msg = "Testing " + tester4;
assertTrue(msg, tester4.test(newPerson));
msg = "Testing " + tester5;
assertFalse(msg, tester5.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testIntegerGETester() *****" + CR);
}
public void testIntegerLETester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testIntegerLETester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomIntStrings[0]);
newPerson.setAttribute(key2, randomIntStrings[1]);
newPerson.setAttribute(key3, intStringVector);
// test value == attribute value. Should answer true.
IPersonTester tester1 = new IntegerLETester(new TestPersonAttributesGroupTestDefinition(key1, randomIntStrings[0]));
// test value < attribute value. Should answer false.
IPersonTester tester2 = new IntegerLETester(new TestPersonAttributesGroupTestDefinition(key2, "0"));
// test value > any attribute value. Should answer true.
IPersonTester tester3 = new IntegerLETester(new TestPersonAttributesGroupTestDefinition(key3, "" + INTEGER_MAX));
// test value < any attribute value. Should answer false.
IPersonTester tester4 = new IntegerLETester(new TestPersonAttributesGroupTestDefinition(key3, "" + INTEGER_MIN));
// test value > attribute value. Should answer true.
IPersonTester tester5 = new IntegerLETester(new TestPersonAttributesGroupTestDefinition(key1, "" + INTEGER_MAX));
msg = "Testing IPerson " + newPerson;
print(msg);
msg = "Testing " + tester1;
assertTrue(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertFalse(msg, tester2.test(newPerson));
msg = "Testing " + tester3;
assertTrue(msg, tester3.test(newPerson));
msg = "Testing " + tester4;
assertFalse(msg, tester4.test(newPerson));
msg = "Testing " + tester5;
assertTrue(msg, tester5.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testIntegerLETester() *****" + CR);
}
public void testRegexTester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testRegexTester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomStrings[0]);
newPerson.setAttribute(key2, randomStrings[1]);
newPerson.setAttribute(key3, stringVector);
msg = "Testing IPerson " + newPerson;
print(msg);
// test equals attribute. Should return true.
IPersonTester tester1 = new RegexTester(new TestPersonAttributesGroupTestDefinition(key1, randomStrings[0]));
// test and attribute begin with same String. Should return true.
String testValue2 = randomStrings[0].substring(0, 1) + ".*";
IPersonTester tester2 = new RegexTester(new TestPersonAttributesGroupTestDefinition(key1, testValue2));
// test and attribute begin with different String. Should return false.
String testValue3 = "^[0]";
IPersonTester tester3 = new RegexTester(new TestPersonAttributesGroupTestDefinition(key1, testValue3));
// test and attribute end with same String. Should return true.
String testValue4 = ".*" + randomStrings[1].substring(randomStrings[1].length() - 1) + "$";
IPersonTester tester4 = new RegexTester(new TestPersonAttributesGroupTestDefinition(key2, testValue4));
// test and attribute end with different String. Should return false.
String testValue5 = ".*9$";
IPersonTester tester5 = new RegexTester(new TestPersonAttributesGroupTestDefinition(key2, testValue5));
// test value is same as last String in Vector. Should return true.
String testValue6 = "^" + ((String) stringVector.lastElement()) + "$";
IPersonTester tester6 = new RegexTester(new TestPersonAttributesGroupTestDefinition(key3, testValue6));
msg = "Testing " + tester1;
assertTrue(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertTrue(msg, tester2.test(newPerson));
msg = "Testing " + tester3;
assertFalse(msg, tester3.test(newPerson));
msg = "Testing " + tester4;
assertTrue(msg, tester4.test(newPerson));
msg = "Testing " + tester5;
assertFalse(msg, tester5.test(newPerson));
msg = "Testing " + tester6;
assertTrue(msg, tester6.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testRegexTester() *****" + CR);
}
public void testValueExistsTester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testValueExistsTester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomStrings[0]);
newPerson.setAttribute(key2, randomStrings[1].toLowerCase());
msg = "Testing IPerson " + newPerson;
print(msg);
String testKey = randomStrings[0].toLowerCase();
// These tests should pass since the IPerson attribute exists.
IPersonTester tester1 = new ValueExistsTester(new TestPersonAttributesGroupTestDefinition(key1, testKey));
IPersonTester tester2 = new ValueExistsTester(new TestPersonAttributesGroupTestDefinition(key2, null));
// This test should fail; the IPerson does not have a value for key3.
IPersonTester tester3 = new ValueExistsTester(new TestPersonAttributesGroupTestDefinition(key3, new String()));
msg = "Testing " + tester1;
assertTrue(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertTrue(msg, tester2.test(newPerson));
msg = "Testing " + tester3;
assertFalse(msg, tester3.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testValueExistsTester() *****" + CR);
}
public void testValueMissingTester() throws Exception {
print(CR + "***** ENTERING PAGSTester.testValueMissingTester() *****" + CR);
String msg = null;
msg = "Creating a new IPerson";
print(msg);
IPerson newPerson = getIPerson("de3");
assertNotNull(msg, newPerson);
print("Adding attributes to IPerson.");
newPerson.setAttribute(key1, randomStrings[0]);
newPerson.setAttribute(key2, new String());
msg = "Testing IPerson " + newPerson;
print(msg);
String testKey = randomStrings[0].toLowerCase();
// This test should fail since the IPerson attribute exists.
IPersonTester tester1 = new ValueMissingTester(new TestPersonAttributesGroupTestDefinition(key1, randomStrings[0]));
// This test should pass; the attribute is blank.
IPersonTester tester2 = new ValueMissingTester(new TestPersonAttributesGroupTestDefinition(key2, testKey));
// This test should pass; the IPerson does not have a value for key3.
IPersonTester tester3 = new ValueMissingTester(new TestPersonAttributesGroupTestDefinition(key3, testKey));
msg = "Testing " + tester1;
assertFalse(msg, tester1.test(newPerson));
msg = "Testing " + tester2;
assertTrue(msg, tester2.test(newPerson));
msg = "Testing " + tester3;
assertTrue(msg, tester3.test(newPerson));
print("Success!");
print(CR + "***** LEAVING PAGSTester.testValueMissingTester() *****" + CR);
}
/*
* Nested Types
*/
}