Skip to content
Snippets Groups Projects
Commit a0022461 authored by Jeff Burke's avatar Jeff Burke
Browse files

s1890: added isConsistent method to User

parent 91cfb5b4
No related branches found
No related tags found
No related merge requests found
......@@ -4,6 +4,7 @@
# is installed in your Java Keystore:
# scp gimli2.cadc.dao.nrc.ca:~miscsw/ca.crt /tmp/ca.crt
# ${JAVA_HOME}/bin/keytool -importcert -keystore ${JAVA_HOME}/jre/lib/security/cacerts -file /tmp/ca.crt
# Default keystore password is: changeit
readOnly.servers = proc5-03.cadc.dao.nrc.ca
readOnly.poolInitSize = 1
readOnly.poolMaxSize = 1
......
......@@ -68,6 +68,8 @@
*/
package ca.nrc.cadc.ac;
import ca.nrc.cadc.auth.HttpPrincipal;
import java.security.Principal;
import java.util.Comparator;
import java.util.Date;
......@@ -75,8 +77,6 @@ import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
import ca.nrc.cadc.auth.HttpPrincipal;
public class User
{
private InternalID id;
......@@ -141,6 +141,39 @@ public class User
return null;
}
/**
* A User is considered consistent if the User's set of identities are a superset
* of this Users set of identities.
*
* @param other
* @return
*/
public boolean isConsistent(final User other)
{
if (other == null)
{
return false;
}
for (Principal identity: getIdentities())
{
boolean found = false;
for (Principal op: other.getIdentities())
{
if (op == identity)
{
found = true;
break;
}
}
if (!found)
{
return false;
}
}
return true;
}
/* (non-Javadoc)
* @see java.lang.Object#hashCode()
*/
......@@ -153,6 +186,13 @@ public class User
{
result = prime * result + id.hashCode();
}
else
{
for (Principal principal : getIdentities())
{
result = prime * result + principal.hashCode();
}
}
return result;
}
......@@ -175,6 +215,15 @@ public class User
return false;
}
User other = (User) obj;
if (this.id == null && other.id == null)
{
return isConsistent(other);
}
if ((this.id == null && other.id != null) ||
(this.id != null && other.id == null))
{
return false;
}
if (id.equals(other.id))
{
return true;
......@@ -201,18 +250,31 @@ public class User
@Override
public int compare(Principal o1, Principal o2)
{
if (o1 instanceof HttpPrincipal && o2 instanceof HttpPrincipal)
int ret = -1;
if (o1 == null && o2 == null)
{
ret = 0;
}
else if (o1 == null && o2 != null)
{
ret = 1;
}
else if (o1 != null && o2 == null)
{
ret = -1;
}
else if (o1 instanceof HttpPrincipal && o2 instanceof HttpPrincipal)
{
return 0;
ret = 0;
}
else if (o1.getClass() == o2.getClass())
{
if (o1.getName().equals(o2.getName()))
{
return 0;
ret = 0;
}
}
return -1;
return ret;
}
}
......
......@@ -88,18 +88,102 @@ public class UserTest
private static Logger log = Logger.getLogger(UserTest.class);
@Test
public void simpleEqualityTests() throws Exception
public void isConsistentTest() throws Exception
{
User user1 = new User();
User user2 = null;
assertFalse(user1.isConsistent(user2));
user2 = new User();
assertTrue(user1.isConsistent(user2));
HttpPrincipal httpPrincipal = new HttpPrincipal("foo");
user1.getIdentities().add(httpPrincipal);
assertFalse(user1.isConsistent(user2));
assertTrue(user2.isConsistent(user1));
user2.getIdentities().add(httpPrincipal);
assertTrue(user1.isConsistent(user2));
assertTrue(user2.isConsistent(user1));
X500Principal x500Principal1 = new X500Principal("cn=foo,c=bar");
X500Principal x500Principal2 = new X500Principal("cn=bar,c=foo");
user1.getIdentities().add(x500Principal1);
assertFalse(user1.isConsistent(user2));
assertTrue(user2.isConsistent(user1));
user2.getIdentities().add(x500Principal2);
assertFalse(user1.isConsistent(user2));
assertFalse(user2.isConsistent(user1));
user2.getIdentities().add(x500Principal1);
assertTrue(user1.isConsistent(user2));
assertFalse(user2.isConsistent(user1));
user1.getIdentities().add(x500Principal2);
assertTrue(user1.isConsistent(user2));
assertTrue(user2.isConsistent(user1));
}
@Test
public void simpleEqualityTests() throws Exception
{
User user1 = new User();
User user2 = new User();
assertEquals(user1, user2);
assertEquals(user1.hashCode(), user2.hashCode());
// set InternalID
URI uri = new URI("ivo://cadc.nrc.ca/user?" + UUID.randomUUID());
InternalID internalID = new InternalID(uri);
TestUtil.setInternalID(user1, internalID);
assertEquals(user1.getID(), internalID);
URI uri1 = new URI("ivo://cadc.nrc.ca/user?" + UUID.randomUUID());
InternalID internalID1 = new InternalID(uri1);
TestUtil.setInternalID(user1, internalID1);
assertFalse(user1.equals(user2));
URI uri2 = new URI("ivo://cadc.nrc.ca/user?" + UUID.randomUUID());
InternalID internalID2 = new InternalID(uri2);
TestUtil.setInternalID(user2, internalID2);
assertFalse(user1.equals(user2));
assertFalse(user1.hashCode() == user2.hashCode());
user1 = new User();
user2 = new User();
HttpPrincipal httpPrincipal1 = new HttpPrincipal("foo");
user1.getIdentities().add(httpPrincipal1);
assertFalse(user1.equals(user2));
assertFalse(user1.hashCode() == user2.hashCode());
user2.getIdentities().add(httpPrincipal1);
assertTrue(user1.equals(user2));
assertEquals(user1.hashCode(), user2.hashCode());
HttpPrincipal httpPrincipal2 = new HttpPrincipal("bar");
user1.getIdentities().add(httpPrincipal2);
assertTrue(user1.equals(user2));
assertEquals(user1.hashCode(), user2.hashCode());
X500Principal x500Principal1 = new X500Principal("cn=foo,c=bar");
X500Principal x500Principal2 = new X500Principal("cn=bart,c=foo");
user1.getIdentities().add(x500Principal1);
assertFalse(user1.equals(user2));
assertFalse(user1.hashCode() == user2.hashCode());
user2.getIdentities().add(x500Principal1);
assertTrue(user1.equals(user2));
assertEquals(user1.hashCode(), user2.hashCode());
user1.getIdentities().add(x500Principal2);
assertFalse(user1.equals(user2));
assertFalse(user1.hashCode() == user2.hashCode());
user2.getIdentities().add(x500Principal2);
assertTrue(user1.equals(user2));
assertEquals(user1.hashCode(), user2.hashCode());
User user2 = user1;
assertEquals(user1, user2);
assertEquals(user1.hashCode(), user2.hashCode());
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment