def setUp(self): super(ProxyPrincipalDBPostgreSQL, self).setUp() self.db = ProxyPostgreSQLDB(host="localhost", database="proxies") yield self.db.clean()
class ProxyPrincipalDBPostgreSQL(twistedcaldav.test.util.TestCase): """ Directory service provisioned principals. """ @inlineCallbacks def setUp(self): super(ProxyPrincipalDBPostgreSQL, self).setUp() self.db = ProxyPostgreSQLDB(host="localhost", database="proxies") yield self.db.clean() @inlineCallbacks def tearDown(self): yield self.db.close() self.db = None @inlineCallbacks def test_normalDB(self): # Get the DB yield self.db.clean() calendaruserproxy.ProxyDBService = self.db loader = XMLCalendarUserProxyLoader( "/Volumes/Data/Users/cyrusdaboo/Documents/Development/Apple/eclipse/CalendarServer-3/conf/auth/proxies-test.xml" ) yield loader.updateProxyDB() yield self.db.setGroupMembers("A", ( "B", "C", "D", )) membersA = yield self.db.getMembers("A") membershipsB = yield self.db.getMemberships("B") self.assertEqual(membersA, set(( "B", "C", "D", ))) self.assertEqual(membershipsB, set(("A", ))) @inlineCallbacks def test_DBIndexed(self): # Get the DB yield self.db.clean() self.assertTrue((yield self.db.queryOne( "select hasindexes from pg_tables where tablename = 'groups'"))) @inlineCallbacks def test_cachingDBInsert(self): for processType in ( "Single", "Combined", ): config.ProcessType = processType # Get the DB yield self.db.clean() # Do one insert and check the result yield self.db.setGroupMembers("A", ( "B", "C", "D", )) membersA = yield self.db.getMembers("A") membershipsB = yield self.db.getMemberships("B") membershipsC = yield self.db.getMemberships("C") membershipsD = yield self.db.getMemberships("D") membershipsE = yield self.db.getMemberships("E") self.assertEqual(membersA, set(( "B", "C", "D", ))) self.assertEqual(membershipsB, set(("A", ))) self.assertEqual(membershipsC, set(("A", ))) self.assertEqual(membershipsD, set(("A", ))) self.assertEqual(membershipsE, set(())) # Change and check the result yield self.db.setGroupMembers("A", ( "B", "C", "E", )) membersA = yield self.db.getMembers("A") membershipsB = yield self.db.getMemberships("B") membershipsC = yield self.db.getMemberships("C") membershipsD = yield self.db.getMemberships("D") membershipsE = yield self.db.getMemberships("E") self.assertEqual(membersA, set(( "B", "C", "E", ))) self.assertEqual(membershipsB, set(("A", ))) self.assertEqual(membershipsC, set(("A", ))) self.assertEqual(membershipsD, set()) self.assertEqual(membershipsE, set(("A", ))) @inlineCallbacks def test_cachingDBRemove(self): for processType in ( "Single", "Combined", ): config.ProcessType = processType # Get the DB yield self.db.clean() # Do one insert and check the result yield self.db.setGroupMembers("A", ( "B", "C", "D", )) yield self.db.setGroupMembers("X", ( "B", "C", )) membersA = yield self.db.getMembers("A") membersX = yield self.db.getMembers("X") membershipsB = yield self.db.getMemberships("B") membershipsC = yield self.db.getMemberships("C") membershipsD = yield self.db.getMemberships("D") self.assertEqual(membersA, set(( "B", "C", "D", ))) self.assertEqual(membersX, set(( "B", "C", ))) self.assertEqual(membershipsB, set(( "A", "X", ))) self.assertEqual(membershipsC, set(( "A", "X", ))) self.assertEqual(membershipsD, set(("A", ))) # Remove and check the result yield self.db.removeGroup("A") membersA = yield self.db.getMembers("A") membersX = yield self.db.getMembers("X") membershipsB = yield self.db.getMemberships("B") membershipsC = yield self.db.getMemberships("C") membershipsD = yield self.db.getMemberships("D") self.assertEqual(membersA, set()) self.assertEqual(membersX, set(( "B", "C", ))) self.assertEqual(membershipsB, set("X", )) self.assertEqual(membershipsC, set("X", )) self.assertEqual(membershipsD, set()) @inlineCallbacks def test_cachingDBRemoveSpecial(self): for processType in ( "Single", "Combined", ): config.ProcessType = processType # Get the DB yield self.db.clean() # Do one insert and check the result yield self.db.setGroupMembers("A", ( "B", "C", "D", )) yield self.db.setGroupMembers("X", ( "B", "C", )) membershipsB = yield self.db.getMemberships("B") membershipsC = yield self.db.getMemberships("C") membershipsD = yield self.db.getMemberships("D") # Remove and check the result yield self.db.removeGroup("A") membersA = yield self.db.getMembers("A") membersX = yield self.db.getMembers("X") membershipsB = yield self.db.getMemberships("B") membershipsC = yield self.db.getMemberships("C") membershipsD = yield self.db.getMemberships("D") self.assertEqual(membersA, set()) self.assertEqual(membersX, set(( "B", "C", ))) self.assertEqual(membershipsB, set("X", )) self.assertEqual(membershipsC, set("X", )) self.assertEqual(membershipsD, set()) @inlineCallbacks def test_cachingDBRemovePrincipal(self): for processType in ( "Single", "Combined", ): config.ProcessType = processType # Get the DB yield self.db.clean() # Do one insert and check the result yield self.db.setGroupMembers("A", ( "B", "C", "D", )) yield self.db.setGroupMembers("X", ( "B", "C", )) membersA = yield self.db.getMembers("A") membersX = yield self.db.getMembers("X") membershipsB = yield self.db.getMemberships("B") membershipsC = yield self.db.getMemberships("C") membershipsD = yield self.db.getMemberships("D") self.assertEqual(membersA, set(( "B", "C", "D", ))) self.assertEqual(membersX, set(( "B", "C", ))) self.assertEqual(membershipsB, set(( "A", "X", ))) self.assertEqual(membershipsC, set(( "A", "X", ))) self.assertEqual(membershipsD, set(("A", ))) # Remove and check the result yield self.db.removePrincipal("B") membersA = yield self.db.getMembers("A") membersX = yield self.db.getMembers("X") membershipsB = yield self.db.getMemberships("B") membershipsC = yield self.db.getMemberships("C") membershipsD = yield self.db.getMemberships("D") self.assertEqual(membersA, set(( "C", "D", ))) self.assertEqual(membersX, set(("C", ))) self.assertEqual(membershipsB, set()) self.assertEqual(membershipsC, set(( "A", "X", ))) self.assertEqual(membershipsD, set(("A", ), )) @inlineCallbacks def test_cachingDBInsertUncached(self): for processType in ( "Single", "Combined", ): config.ProcessType = processType # Get the DB yield self.db.clean() # Do one insert and check the result for the one we will remove yield self.db.setGroupMembers("AA", ( "BB", "CC", "DD", )) yield self.db.getMemberships("DD") # Change and check the result yield self.db.setGroupMembers("AA", ( "BB", "CC", "EE", )) membersAA = yield self.db.getMembers("AA") membershipsBB = yield self.db.getMemberships("BB") membershipsCC = yield self.db.getMemberships("CC") membershipsDD = yield self.db.getMemberships("DD") membershipsEE = yield self.db.getMemberships("EE") self.assertEqual(membersAA, set(( "BB", "CC", "EE", ))) self.assertEqual(membershipsBB, set(("AA", ))) self.assertEqual(membershipsCC, set(("AA", ))) self.assertEqual(membershipsDD, set()) self.assertEqual(membershipsEE, set(("AA", )))