Commit a0022461 authored by Jeff Burke's avatar Jeff Burke
Browse files

s1890: added isConsistent method to User

parent 91cfb5b4
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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
Original line number Diff line number Diff line
@@ -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;
        }
    }

+90 −6
Original line number Diff line number Diff line
@@ -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());