コード例 #1
0
    def testLoginExisting(self):
        first = UserData.onLogin("uid", "user name", "*****@*****.**", "test")
        self.assertSerialEquals(first, UserData.read(first.getId()))

        first.addRole("role1")
        first.save()
        self.assertSerialEquals(first, UserData.read(first.getId()))

        self.assertEquals(['role1'], first.getRoles())

        self.assertEquals(["*****@*****.**"], first.getAllEmails())

        import time
        time.sleep(1)

        last = UserData.onLogin("uid", "user name", "*****@*****.**", "test")
        self.assertEquals(first.getUserID(), last.getUserID())
        self.assertEquals(first.getUserName(), last.getUserName())
        self.assertEquals(first.getEmail(), last.getEmail())
        self.assertEquals(first.getRoles(), last.getRoles())

        self.assertEquals(["*****@*****.**"], last.getAllEmails())
        self.assertEquals([":uid", "test:uid"], last.getAllUserIDs())

        #Check stats

        def stat(name):
            return last.getPrefValue(UserData.PREFS_STATS, name, "")

        self.assertTrue(len(stat("LastLoginTime")) > 1)
        self.assertEquals("test", stat("LastLoginAuth"))
        self.assertEquals("uid", stat("LastLoginID"))
        self.assertEquals("*****@*****.**", stat("LastLoginEmail"))

        #Check auth prefs

        #Only one auth section - our "test" from above
        self.assertEquals(1, len(last.getPrefs(UserData.PREFS_AUTH)))

        def auth(name):
            prefs = last.getPrefValue(UserData.PREFS_AUTH, "test", {})
            return prefs.get(name, "")

        self.assertTrue(len(auth("LastLogin")) > 1)
        self.assertEquals("uid", auth("LastID"))
        self.assertEquals("*****@*****.**", auth("LastEmail"))
        self.assertEquals("user name", auth("UserName"))

        self.assertEquals(["*****@*****.**"], auth("Emails"))
        self.assertEquals(["uid"], auth("UserIDs"))
コード例 #2
0
 def testLoginExisting(self):
     first = UserData.onLogin("uid", "user name", "*****@*****.**", "test")
     self.assertSerialEquals(first, UserData.read(first.getId()))
     
     first.addRole("role1")
     first.save()
     self.assertSerialEquals(first, UserData.read(first.getId()))
     
     self.assertEquals(['role1'], first.getRoles())
     
     self.assertEquals(["*****@*****.**"], first.getAllEmails())
     
     import time
     time.sleep(1)
     
     last = UserData.onLogin("uid", "user name", "*****@*****.**", "test")
     self.assertEquals(first.getUserID(), last.getUserID())
     self.assertEquals(first.getUserName(), last.getUserName())
     self.assertEquals(first.getEmail(), last.getEmail())
     self.assertEquals(first.getRoles(), last.getRoles())
     
     self.assertEquals(["*****@*****.**"], last.getAllEmails())
     self.assertEquals([":uid", "test:uid"], last.getAllUserIDs())
     
     #Check stats
     
     def stat(name):
         return last.getPrefValue(UserData.PREFS_STATS, name, "")
     
     self.assertTrue(len(stat("LastLoginTime")) > 1)
     self.assertEquals("test", stat("LastLoginAuth"))
     self.assertEquals("uid", stat("LastLoginID"))
     self.assertEquals("*****@*****.**", stat("LastLoginEmail"))
     
     #Check auth prefs
     
     #Only one auth section - our "test" from above
     self.assertEquals(1, len(last.getPrefs(UserData.PREFS_AUTH)))
     
     def auth(name):
         prefs = last.getPrefValue(UserData.PREFS_AUTH, "test", {})
         return prefs.get(name, "")
     
     self.assertTrue(len(auth("LastLogin")) > 1)
     self.assertEquals("uid", auth("LastID"))
     self.assertEquals("*****@*****.**", auth("LastEmail"))
     self.assertEquals("user name", auth("UserName"))
     
     self.assertEquals(["*****@*****.**"], auth("Emails"))
     self.assertEquals(["uid"], auth("UserIDs"))
コード例 #3
0
 def readContextUser(self, msg):
     ctx = self._findContext(msg)
     userId = self.extractUserId(msg)
     if userId == '':
         userData = {
             'id': '',
             'userId': '',
             'userName': '',
             'userEmail': '',
             'prefs': {}
         }
     else:
         user = UserData.read(userId)
         if not user:
             ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
             user = UserData.readByLogin(userId, None, ctxId)
         if user is None:
             raise ProcessingExcept("No user found found in context")
         userData = {
             'id': user.getId(),
             'userId': user.getUserID(),
             'userName': user.getUserName(),
             'userEmail': user.getEmail(),
             'prefs': user.getPrefs(ctx.getName())
         }
     return self.makeResponse(msg, userData, INFORM_ACT)
コード例 #4
0
    def testLoginSameUserMultEmail(self):
        UserData.onLogin("uid", "user name", "*****@*****.**", "test")
        user = UserData.onLogin("uid", "user name", "*****@*****.**", "test")
        
        self.assertSerialEquals(user, UserData.read(user.getId()))

        self.assertEquals(["*****@*****.**", "*****@*****.**"], user.getAllEmails())
        self.assertEquals([":uid", "test:uid"], user.getAllUserIDs())
        
        #Check stats
        
        def stat(name):
            return user.getPrefValue(UserData.PREFS_STATS, name, "")
        
        self.assertEquals("test", stat("LastLoginAuth"))
        self.assertEquals("uid", stat("LastLoginID"))
        self.assertEquals("*****@*****.**", stat("LastLoginEmail"))
        
        #Check auth prefs
        
        def auth(name):
            prefs = user.getPrefValue(UserData.PREFS_AUTH, "test", {})
            return prefs.get(name, "")
        
        self.assertEquals("uid", auth("LastID"))
        self.assertEquals("*****@*****.**", auth("LastEmail"))
        self.assertEquals("user name", auth("UserName"))
        
        self.assertEquals(["*****@*****.**", "*****@*****.**"], auth("Emails"))
        self.assertEquals(["uid"], auth("UserIDs"))        
コード例 #5
0
    def testLoginSameUserMultEmail(self):
        UserData.onLogin("uid", "user name", "*****@*****.**", "test")
        user = UserData.onLogin("uid", "user name", "*****@*****.**", "test")

        self.assertSerialEquals(user, UserData.read(user.getId()))

        self.assertEquals(["*****@*****.**", "*****@*****.**"],
                          user.getAllEmails())
        self.assertEquals([":uid", "test:uid"], user.getAllUserIDs())

        #Check stats

        def stat(name):
            return user.getPrefValue(UserData.PREFS_STATS, name, "")

        self.assertEquals("test", stat("LastLoginAuth"))
        self.assertEquals("uid", stat("LastLoginID"))
        self.assertEquals("*****@*****.**", stat("LastLoginEmail"))

        #Check auth prefs

        def auth(name):
            prefs = user.getPrefValue(UserData.PREFS_AUTH, "test", {})
            return prefs.get(name, "")

        self.assertEquals("uid", auth("LastID"))
        self.assertEquals("*****@*****.**", auth("LastEmail"))
        self.assertEquals("user name", auth("UserName"))

        self.assertEquals(["*****@*****.**", "*****@*****.**"], auth("Emails"))
        self.assertEquals(["uid"], auth("UserIDs"))
コード例 #6
0
 def testAnon(self):
     anon1 = UserData.onLogin(None, None, None, None)
     
     anon2 = UserData()
     
     anon3 = UserData("bob")
     anon3.becomeAnon()
     
     self.assertSerialEquals(anon1, anon2)
     self.assertSerialEquals(anon2, anon3)
     self.assertSerialEquals(anon1, anon3)
     
     print anon1.getId(), anon1
     anon1.save()
     print UserData.read(anon1.getId())
     
     self.assertReadWrite(anon1)
     self.assertReadWrite(anon2)
     self.assertReadWrite(anon3)
コード例 #7
0
    def testAnon(self):
        anon1 = UserData.onLogin(None, None, None, None)

        anon2 = UserData()

        anon3 = UserData("bob")
        anon3.becomeAnon()

        self.assertSerialEquals(anon1, anon2)
        self.assertSerialEquals(anon2, anon3)
        self.assertSerialEquals(anon1, anon3)

        print anon1.getId(), anon1
        anon1.save()
        print UserData.read(anon1.getId())

        self.assertReadWrite(anon1)
        self.assertReadWrite(anon2)
        self.assertReadWrite(anon3)
コード例 #8
0
 def readContextUserKeys(self, msg):
     ctx = self._findContext(msg)
     userId = self.extractUserId(msg)
     if userId == '':
         return self.makeResponse(msg, [], INFORM_ACT) #Anonymous
     else:
         usr = UserData.read(userId)
         if not usr:
             ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
             usr = UserData.readByLogin(userId, None, ctxId)
         if not usr:
             raise ProcessingExcept("Could not find user " + userId)
         return self.makeResponse(msg, usr.getPrefs(ctx.getName()), INFORM_ACT)
コード例 #9
0
 def hasUserInContext(self, msg):
     ctx = self._findContext(msg, False)
     userId = self.extractUserId(msg)
     user = UserData.read(userId)
     if not user:
         ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
         user = UserData.readByLogin(userId, None, ctxId)
     if user is None:
         return False
     elif ctx is not None and (user.getId() not in ctx.getUsers()):
         return False
     else:
         return True
コード例 #10
0
 def hasUserInContext(self, msg):
     ctx = self._findContext(msg, False)
     userId = self.extractUserId(msg)
     user = UserData.read(userId)
     if not user:
         ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
         user = UserData.readByLogin(userId, None, ctxId)
     if user is None:
         return False
     elif ctx is not None and (user.getId() not in ctx.getUsers()):
         return False
     else:
         return True
コード例 #11
0
 def readContextUserKeys(self, msg):
     ctx = self._findContext(msg)
     userId = self.extractUserId(msg)
     if userId == '':
         return self.makeResponse(msg, [], INFORM_ACT) #Anonymous
     else:
         usr = UserData.read(userId)
         if not usr:
             ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
             usr = UserData.readByLogin(userId, None, ctxId)
         if not usr:
             raise ProcessingExcept("Could not find user " + userId)
         return self.makeResponse(msg, usr.getPrefs(ctx.getName()), INFORM_ACT)
コード例 #12
0
    def testSnarfMissingUserData(self):
        #Login/create user, then update with no name or email
        user = UserData.onLogin("uid", "user name 1", "*****@*****.**", "test")
        user.setUserName("")
        user.setEmail("")
        user.save()

        #Should grab the new stuff on login
        user = UserData.onLogin("uid", "user name 2", "*****@*****.**", "test")
        self.assertSerialEquals(user, UserData.read(user.getId()))

        self.assertEquals("user name 2", user.getUserName())
        self.assertEquals("*****@*****.**", user.getEmail())
コード例 #13
0
 def testSnarfMissingUserData(self):
     #Login/create user, then update with no name or email
     user = UserData.onLogin("uid", "user name 1", "*****@*****.**", "test")
     user.setUserName("")
     user.setEmail("")
     user.save()
     
     #Should grab the new stuff on login
     user = UserData.onLogin("uid", "user name 2", "*****@*****.**", "test")
     self.assertSerialEquals(user, UserData.read(user.getId()))
     
     self.assertEquals("user name 2", user.getUserName())
     self.assertEquals("*****@*****.**", user.getEmail())
コード例 #14
0
 def readContextUserVal(self, msg):
     ctx = self._findContext(msg)
     key = msg.getObject()
     if not key:
         raise ProcessingExcept("No user context pref key found")
     userId = self.extractUserId(msg)
     if userId == '':
         return self.makeResponse(msg, '', INFORM_ACT)  #Anonymous
     usr = UserData.read(userId)
     if not usr:
         ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
         usr = UserData.readByLogin(userId, None, ctxId)
     if not usr:
         raise ProcessingExcept("Could not find user " + userId)
     value = usr.getPrefValue(ctx.getName(), key)
     return self.makeResponse(msg, value, INFORM_ACT)
コード例 #15
0
 def readContextUserVal(self, msg):
     ctx = self._findContext(msg)
     key = msg.getObject()
     if not key:
         raise ProcessingExcept("No user context pref key found")
     userId = self.extractUserId(msg)
     if userId == '':
         return self.makeResponse(msg, '', INFORM_ACT) #Anonymous  
     usr = UserData.read(userId)
     if not usr:
         ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
         usr = UserData.readByLogin(userId, None, ctxId)
     if not usr:
         raise ProcessingExcept("Could not find user " + userId)
     value = usr.getPrefValue(ctx.getName(), key)
     return self.makeResponse(msg, value, INFORM_ACT)
コード例 #16
0
 def testUpdateMissingAuth(self):
     orig = UserData.onLogin("uid", "user name", "*****@*****.**", None)
     self.assertSerialEquals(orig, UserData.read(orig.getId()))
     
     UA = UserData.UNKNOWN_AUTH #Make the code a little more concise
     
     self.assertEquals("uid", orig.getUserID())
     self.assertEquals("user name", orig.getUserName())
     self.assertEquals("*****@*****.**", orig.getEmail())
     self.assertEquals([], orig.getRoles())
     
     self.assertEquals(["*****@*****.**"], orig.getAllEmails())
     self.assertEquals([":uid", UA+":uid"], orig.getAllUserIDs())
     
     #Check stats
     
     def stat(name):
         return orig.getPrefValue(UserData.PREFS_STATS, name, "")
     
     self.assertTrue(len(stat("LastLoginTime")) > 1)
     self.assertEquals(UA, stat("LastLoginAuth"))
     self.assertEquals("uid", stat("LastLoginID"))
     self.assertEquals("*****@*****.**", stat("LastLoginEmail"))
     
     #Check auth prefs
     
     #Only one auth section - our "test" from above
     self.assertEquals(1, len(orig.getPrefs(UserData.PREFS_AUTH)))
     
     def auth(name):
         prefs = orig.getPrefValue(UserData.PREFS_AUTH, UA, {})
         return prefs.get(name, "")
     
     self.assertTrue(len(auth("LastLogin")) > 1)
     self.assertEquals("uid", auth("LastID"))
     self.assertEquals("*****@*****.**", auth("LastEmail"))
     self.assertEquals("user name", auth("UserName"))
     
     self.assertEquals(["*****@*****.**"], auth("Emails"))
     self.assertEquals(["uid"], auth("UserIDs"))
コード例 #17
0
    def testUpdateMissingAuth(self):
        orig = UserData.onLogin("uid", "user name", "*****@*****.**", None)
        self.assertSerialEquals(orig, UserData.read(orig.getId()))

        UA = UserData.UNKNOWN_AUTH  #Make the code a little more concise

        self.assertEquals("uid", orig.getUserID())
        self.assertEquals("user name", orig.getUserName())
        self.assertEquals("*****@*****.**", orig.getEmail())
        self.assertEquals([], orig.getRoles())

        self.assertEquals(["*****@*****.**"], orig.getAllEmails())
        self.assertEquals([":uid", UA + ":uid"], orig.getAllUserIDs())

        #Check stats

        def stat(name):
            return orig.getPrefValue(UserData.PREFS_STATS, name, "")

        self.assertTrue(len(stat("LastLoginTime")) > 1)
        self.assertEquals(UA, stat("LastLoginAuth"))
        self.assertEquals("uid", stat("LastLoginID"))
        self.assertEquals("*****@*****.**", stat("LastLoginEmail"))

        #Check auth prefs

        #Only one auth section - our "test" from above
        self.assertEquals(1, len(orig.getPrefs(UserData.PREFS_AUTH)))

        def auth(name):
            prefs = orig.getPrefValue(UserData.PREFS_AUTH, UA, {})
            return prefs.get(name, "")

        self.assertTrue(len(auth("LastLogin")) > 1)
        self.assertEquals("uid", auth("LastID"))
        self.assertEquals("*****@*****.**", auth("LastEmail"))
        self.assertEquals("user name", auth("UserName"))

        self.assertEquals(["*****@*****.**"], auth("Emails"))
        self.assertEquals(["uid"], auth("UserIDs"))
コード例 #18
0
 def writeContextUserVal(self, msg):
     ctx = self._findContext(msg)
     key = msg.getObject()
     if not key:
         raise ProcessingExcept("No user context pref key found")
     userId = self.extractUserId(msg)
     #NOPE - writing for an anonymous user is an error
     if not userId or len(userId) == 0:
         raise ProcessingExcept("No user ID specified")
     usr = UserData.read(userId)
     if not usr:
         ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
         usr = UserData.readByLogin(userId, None, ctxId)
     if not usr:
         raise ProcessingExcept("Could not find user " + userId)
         #usr = UserData.onLogin(userId)
         #ctx.addUser(userId)
         #ctx.save()
     value = msg.getResult()
     usr.setPrefValue(ctx.getName(), key, value)
     usr.save()
     return self.makeResponse(msg, True, CONFIRM_ACT)
コード例 #19
0
 def readContextUser(self, msg):
     ctx = self._findContext(msg)
     userId = self.extractUserId(msg)
     if userId == '':
         userData = {'id': '',
                     'userId': '',
                     'userName': '',
                     'userEmail': '',
                     'prefs': {}}
     else:
         user = UserData.read(userId)
         if not user:
             ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
             user = UserData.readByLogin(userId, None, ctxId)
         if user is None:
             raise ProcessingExcept("No user found found in context")
         userData = {'id': user.getId(),
                     'userId': user.getUserID(),
                     'userName': user.getUserName(),
                     'userEmail': user.getEmail(),
                     'prefs': user.getPrefs(ctx.getName())}
     return self.makeResponse(msg, userData, INFORM_ACT)
コード例 #20
0
 def writeContextUserVal(self, msg):
     ctx = self._findContext(msg)
     key = msg.getObject()
     if not key:
         raise ProcessingExcept("No user context pref key found")
     userId = self.extractUserId(msg)
     #NOPE - writing for an anonymous user is an error
     if not userId or len(userId) == 0:
         raise ProcessingExcept("No user ID specified")
     usr = UserData.read(userId)
     if not usr:
         ctxId = msg.getContextValue(CONTEXT_USER_CONTEXT, None)
         usr = UserData.readByLogin(userId, None, ctxId)
     if not usr:
         raise ProcessingExcept("Could not find user " + userId)
         #usr = UserData.onLogin(userId)
         #ctx.addUser(userId)
         #ctx.save()
     value = msg.getResult()
     usr.setPrefValue(ctx.getName(), key, value)
     usr.save()
     return self.makeResponse(msg, True, CONFIRM_ACT)
コード例 #21
0
 def testRoles(self):
     user = UserData.onLogin("uid", "user name", "*****@*****.**", "test")
     self.assertSerialEquals(user, UserData.read(user.getId()))
     
     #Add role
     user.addRole("role1")
     self.assertEquals(["role1"], user.getRoles())
     
     #Maintain alphabetical order
     user.addRole("role0")
     self.assertEquals(["role0", "role1"], user.getRoles())
     
     #Save/read with multiple roles
     self.assertReadWrite(user)
     
     #Ignore dups
     user.addRole("role0")
     user.addRole("role1")
     self.assertEquals(["role0", "role1"], user.getRoles())
     
     self.assertFalse(user.needRole("role0"))
     self.assertFalse(user.needRole("role1"))
     self.assertTrue(user.needRole("role2"))
     self.assertEquals(["role0", "role1", "role2"], user.getRoles())
コード例 #22
0
    def testRoles(self):
        user = UserData.onLogin("uid", "user name", "*****@*****.**", "test")
        self.assertSerialEquals(user, UserData.read(user.getId()))

        #Add role
        user.addRole("role1")
        self.assertEquals(["role1"], user.getRoles())

        #Maintain alphabetical order
        user.addRole("role0")
        self.assertEquals(["role0", "role1"], user.getRoles())

        #Save/read with multiple roles
        self.assertReadWrite(user)

        #Ignore dups
        user.addRole("role0")
        user.addRole("role1")
        self.assertEquals(["role0", "role1"], user.getRoles())

        self.assertFalse(user.needRole("role0"))
        self.assertFalse(user.needRole("role1"))
        self.assertTrue(user.needRole("role2"))
        self.assertEquals(["role0", "role1", "role2"], user.getRoles())
コード例 #23
0
 def testLoginMultiple(self):
     logins = [
         ("uidA1", "user name 1", "*****@*****.**", "testA"),
         ("uidA2", "user name 2", "*****@*****.**", "testA"), #Same email, different user
         ("uidA1", "user name 3", "*****@*****.**", "testA"), #Same UID, different email
         ("uidB1", "user name 4", "*****@*****.**", "testB"), #New auth provider - but should match with previous email
         ("uidB1", "user name 5", "*****@*****.**", "testB"), #Same UID, different email (from other auth)
         ("uidB2", "user name 6", "*****@*****.**", "testB"), #Same email, different UID
         ("uidB2", "user name 7", "*****@*****.**", "testB"), #Same UID, different email
     ]
     
     all_emails = []
     all_uids = []
     
     user = None
     for uid, uname, email, auth in logins:
         all_emails.append(email)
         all_uids.append(auth + ':' + uid)
         user = UserData.onLogin(uid, uname, email, auth)
     
     self.assertIsNotNone(user)
     
     #First login created the user - so that's the "main" ID
     self.assertSerialEquals(user, UserData.read(user.getId()))
     
     all_emails = sorted(set(all_emails))
     print "ALL EMAILS: %s" % str(all_emails)
     self.assertEquals(4, len(all_emails))
     self.assertEquals(all_emails, user.getAllEmails())
     
     all_uids.append(":uidA1")
     all_uids = sorted(set(all_uids))
     print "ALL UIDS: %s" % str(all_uids)
     self.assertEquals(5, len(all_uids)) #4 + top-level ID
     self.assertEquals(all_uids, user.getAllUserIDs())
     
     #Check stats
     
     def stat(name):
         return user.getPrefValue(UserData.PREFS_STATS, name, "")
     
     self.assertEquals("testB", stat("LastLoginAuth"))
     self.assertEquals("uidB2", stat("LastLoginID"))
     self.assertEquals("*****@*****.**", stat("LastLoginEmail"))
     
     #Check auth prefs
     
     def auth(auth, name):
         prefs = user.getPrefValue(UserData.PREFS_AUTH, auth, {})
         return prefs.get(name, "")
     
     self.assertEquals("uidA1", auth("testA", "LastID"))
     self.assertEquals("*****@*****.**", auth("testA", "LastEmail"))
     self.assertEquals("user name 3", auth("testA", "UserName"))
     self.assertEquals(["*****@*****.**", "*****@*****.**"], auth("testA", "Emails"))
     self.assertEquals(["uidA1", "uidA2"], auth("testA", "UserIDs"))
     
     self.assertEquals("uidB2", auth("testB", "LastID"))
     self.assertEquals("*****@*****.**", auth("testB", "LastEmail"))
     self.assertEquals("user name 7", auth("testB", "UserName"))
     self.assertEquals(["*****@*****.**", "*****@*****.**", "*****@*****.**"], auth("testB", "Emails"))
     self.assertEquals(["uidB1", "uidB2"], auth("testB", "UserIDs"))
コード例 #24
0
    def testLoginMultiple(self):
        logins = [
            ("uidA1", "user name 1", "*****@*****.**", "testA"),
            ("uidA2", "user name 2", "*****@*****.**",
             "testA"),  #Same email, different user
            ("uidA1", "user name 3", "*****@*****.**",
             "testA"),  #Same UID, different email
            ("uidB1", "user name 4", "*****@*****.**", "testB"
             ),  #New auth provider - but should match with previous email
            ("uidB1", "user name 5", "*****@*****.**",
             "testB"),  #Same UID, different email (from other auth)
            ("uidB2", "user name 6", "*****@*****.**",
             "testB"),  #Same email, different UID
            ("uidB2", "user name 7", "*****@*****.**",
             "testB"),  #Same UID, different email
        ]

        all_emails = []
        all_uids = []

        user = None
        for uid, uname, email, auth in logins:
            all_emails.append(email)
            all_uids.append(auth + ':' + uid)
            user = UserData.onLogin(uid, uname, email, auth)

        self.assertIsNotNone(user)

        #First login created the user - so that's the "main" ID
        self.assertSerialEquals(user, UserData.read(user.getId()))

        all_emails = sorted(set(all_emails))
        print "ALL EMAILS: %s" % str(all_emails)
        self.assertEquals(4, len(all_emails))
        self.assertEquals(all_emails, user.getAllEmails())

        all_uids.append(":uidA1")
        all_uids = sorted(set(all_uids))
        print "ALL UIDS: %s" % str(all_uids)
        self.assertEquals(5, len(all_uids))  #4 + top-level ID
        self.assertEquals(all_uids, user.getAllUserIDs())

        #Check stats

        def stat(name):
            return user.getPrefValue(UserData.PREFS_STATS, name, "")

        self.assertEquals("testB", stat("LastLoginAuth"))
        self.assertEquals("uidB2", stat("LastLoginID"))
        self.assertEquals("*****@*****.**", stat("LastLoginEmail"))

        #Check auth prefs

        def auth(auth, name):
            prefs = user.getPrefValue(UserData.PREFS_AUTH, auth, {})
            return prefs.get(name, "")

        self.assertEquals("uidA1", auth("testA", "LastID"))
        self.assertEquals("*****@*****.**", auth("testA", "LastEmail"))
        self.assertEquals("user name 3", auth("testA", "UserName"))
        self.assertEquals(["*****@*****.**", "*****@*****.**"],
                          auth("testA", "Emails"))
        self.assertEquals(["uidA1", "uidA2"], auth("testA", "UserIDs"))

        self.assertEquals("uidB2", auth("testB", "LastID"))
        self.assertEquals("*****@*****.**", auth("testB", "LastEmail"))
        self.assertEquals("user name 7", auth("testB", "UserName"))
        self.assertEquals(
            ["*****@*****.**", "*****@*****.**", "*****@*****.**"],
            auth("testB", "Emails"))
        self.assertEquals(["uidB1", "uidB2"], auth("testB", "UserIDs"))