def testAvatarStoreState(self): """ You can only pass an 'avatars' argument if it doesn't already have an account in it. Some accounts want to have their stores in slightly odd places (like offering.py) but you can't have two accounts added which both point to the same store. """ dbdir = FilePath(self.mktemp()) s = Store(dbdir) ls = userbase.LoginSystem(store=s) dependency.installOn(ls, s) acc = ls.addAccount('alice', 'dom.ain', 'password') # this is allowed, if weird unrelatedAccount = ls.addAccount( 'elseice', 'dom.ain', 'password', avatars=SubStore.createNew(s, ('crazy', 'what'))) # this is not allowed. self.assertRaises(errors.DuplicateUniqueItem, ls.addAccount, 'bob', 'ain.dom', 'xpassword', avatars=acc.avatars) # Make sure that our stupid call to addAccount did not corrupt # anything, because we are stupid self.assertEqual(acc.avatars.open().query(userbase.LoginAccount).count(), 1)
def testGetLoginMethods(self): """ Test L{userbase.getLoginMethods} """ dbdir = FilePath(self.mktemp()) s = Store(dbdir) ls = userbase.LoginSystem(store=s) dependency.installOn(ls, s) acc = ls.addAccount('username', 'dom.ain', 'password', protocol='speech') ss = acc.avatars.open() for protocol in (None, 'speech'): self.assertEqual(list(userbase.getAccountNames(ss, protocol)), [('username', 'dom.ain')]) # defaults to ANY_PROTOCOL acc.addLoginMethod('username2', 'dom.ain') # check that searching for protocol=speech also gives us the # ANY_PROTOCOL LoginMethod for protocol in (None, 'speech'): self.assertEqual(sorted(userbase.getAccountNames(ss, protocol)), [('username', 'dom.ain'), ('username2', 'dom.ain')])
def testPolicy(self): """ Test that only internal or verified L{userbase.LoginMethod}s with protocol=email are considered candidates for from addresses """ s = store.Store(self.mktemp()) ls = userbase.LoginSystem(store=s) installOn(ls, s) acc = ls.addAccount('username', 'dom.ain', 'password', protocol=u'not email') ss = acc.avatars.open() # not verified or internal, should explode self.assertRaises(RuntimeError, lambda: smtpout._getFromAddressFromStore(ss)) # ANY_PROTOCOL acc.addLoginMethod(u'yeah', u'x.z', internal=True) # should work self.assertEquals('[email protected]', smtpout._getFromAddressFromStore(ss)) ss.findUnique( userbase.LoginMethod, userbase.LoginMethod.localpart == u'yeah').deleteFromStore() # external, verified acc.addLoginMethod(u'yeah', u'z.a', internal=False, verified=True) # should work self.assertEquals('[email protected]', smtpout._getFromAddressFromStore(ss))
def testUserLoginMethodCreator(self): dbdir = FilePath(self.mktemp()) s = Store(dbdir) ls = userbase.LoginSystem(store=s) acc = ls.addAccount('username', 'example.com', 'password') ss = acc.avatars.open() subStoreLoginAccount = ss.findUnique(userbase.LoginAccount) # Do everything twice to make sure repeated calls don't corrupt state # somehow for i in [0, 1]: subStoreLoginAccount.addLoginMethod( localpart='anothername', domain='example.org', verified=True, protocol='test', internal=False) loginMethods = s.query( userbase.LoginMethod, sort=userbase.LoginMethod.storeID.ascending) subStoreLoginMethods = ss.query( userbase.LoginMethod, sort=userbase.LoginMethod.storeID.ascending) self.assertEqual(loginMethods.count(), 2) self.assertEqual( [pvals(m) for m in loginMethods], [pvals(m) for m in subStoreLoginMethods])
def setUp(self): self.clock = sip.clock = task.Clock() self.dbdir = self.mktemp() self.store = store.Store(self.dbdir) self.login = userbase.LoginSystem(store=self.store) installOn(self.login, self.store) account = self.login.addAccount('bob', 'proxy2.org', None) account2 = self.login.addAccount('alice', 'proxy1.org', None) us = self.us = account.avatars.open() installOn(FakeAvatar(store=us), us) us2 = self.us2 = account2.avatars.open() installOn(FakeAvatar(store=us2), us2) self.tq = TaskQueue(self.clock) self.uas = useragent.UserAgent.server(sip.IVoiceSystem(us), "10.0.0.2", FakeMediaController()) self.uas2 = useragent.UserAgent.server(sip.IVoiceSystem(us2), "10.0.0.1", FakeMediaController()) self.sip1 = sip.SIPTransport(self.uas, ["server.com"], 5060) self.sip1.startProtocol() self.sip2 = sip.SIPTransport(self.uas2, ["client.com"], 5060) self.sip2.startProtocol() self.svc = sipserver.SIPServer(store=self.store) self.svc.mediaController = FakeMediaController() portal = Portal(self.login, [self.login]) self.svc.dispatcher = sip.SIPDispatcher(portal, sip.Proxy(portal)) self.svc.transport = sip.SIPTransport(self.svc.dispatcher, sipserver.getHostnames(self.store), 5060) self.svc.dispatcher.start(self.svc.transport) dests = {('10.0.0.2', 5060): self.uas, ('10.0.0.1', 5060): self.uas2, ('127.0.0.1', 5060): self.svc} self.messages = [] self.sip1.sendMessage = lambda msg, dest: self.tq.addTask(dests[dest].transport.datagramReceived, str(msg.toString()), ("10.0.0.2", 5060)) self.sip2.sendMessage = lambda msg, dest: self.tq.addTask(dests[dest].transport.datagramReceived, str(msg.toString()), ("10.0.0.1", 5060)) self.svc.transport.sendMessage = lambda msg, dest: self.messages.append(msg) or self.tq.addTask(dests[dest].transport.datagramReceived, str(msg.toString()), ("127.0.0.1", 5060)) useragent.Dialog.genTag = lambda self: "314159"
def setUp(self): dbdir = self.mktemp() self.store = s = store.Store(dbdir) ls = userbase.LoginSystem(store=s) installOn(ls, s) acc = ls.addAccount('username', 'dom.ain', 'password') ss = acc.avatars.open() self.f = spam.Filter(store=ss)
def installOn(self, other): # XXX check installation on other, not store for ls in self.store.query(userbase.LoginSystem): raise usage.UsageError("UserBase already installed") else: ls = userbase.LoginSystem(store=self.store) dependency.installOn(ls, other) return ls
def setUp(self): """ Create a store with a LoginSystem and a portal wrapped around it. """ self.store = store.Store() installOn(userbase.LoginSystem(store=self.store), self.store) realm = portal.IRealm(self.store) checker = checkers.ICredentialsChecker(self.store) self.portal = portal.Portal(realm, [checker])
def setUp(self): self.store = store.Store() self.ls = userbase.LoginSystem(store=self.store) self.admin = self.ls.addAccount(u'admin', u'localhost', None, internal=True, verified=True) self.substore = self.admin.avatars.open() self.sc = signup.SignupConfiguration(store=self.substore)
def _speedup(): l = userbase.LoginSystem(store=s) l.installOn(s) s.checkpoint() p = Portal(IRealm(s), [ICredentialsChecker(s)]) a = l.addAccount(username, 'localhost', SECRET) gph = GarbageProtocolHandler(store=a.avatars.open(), garbage=0) gph.installOn(gph.store) return p, gph
def testParallelLoginMethods(self): dbdir = self.mktemp() s = Store(dbdir) ls = userbase.LoginSystem(store=s) acc = ls.addAccount(u'username', u'example.com', u'password') ss = acc.avatars.open() loginMethods = s.query(userbase.LoginMethod) subStoreLoginMethods = ss.query(userbase.LoginMethod) self.assertEquals(loginMethods.count(), 1) self.assertEquals([pvals(m) for m in loginMethods], [pvals(m) for m in subStoreLoginMethods])
def testSystemAddress(self): """ Test L{smtpout.FromAddress.findSystemAddress} """ s = store.Store(self.mktemp()) ls = userbase.LoginSystem(store=s) installOn(ls, s) acc = ls.addAccount('foo', 'host', 'password', protocol=u'email') ss = acc.avatars.open() fa = smtpout.FromAddress(store=ss) self.assertIdentical(smtpout.FromAddress.findSystemAddress(ss), fa) self.assertEquals(fa.address, 'foo@host')
def setUp(self): self.dbdir = FilePath(self.mktemp()) self.store = Store(self.dbdir) self.ls = userbase.LoginSystem(store=self.store) self.scheduler = IScheduler(self.store) self.account = self.ls.addAccount( self.localpart, self.domain, 'PASSWORD') self.accountStore = self.account.avatars.open() self.ss = IScheduler(self.accountStore) self.origdir = self.accountStore.dbdir self.destdir = FilePath(self.mktemp())
def setUp(self): self.dbdir = self.mktemp() self.store = Store(self.dbdir) self.ls = userbase.LoginSystem(store=self.store) self.account = self.ls.addAccount(u'testuser', u'localhost', u'PASSWORD') accountStore = self.account.avatars.open() ThingThatMovesAround(store=accountStore, superValue=self.IMPORTANT_VALUE) self.origdir = accountStore.dbdir self.destdir = FilePath(self.mktemp())
def createStore(testCase): """ Create a new Store in a temporary directory retrieved from C{testCase}. Give it a LoginSystem and create an SSL certificate in its files directory. @param testCase: The L{unittest.TestCase} by which the returned Store will be used. @rtype: L{Store} """ dbdir = testCase.mktemp() store = Store(dbdir) login = userbase.LoginSystem(store=store) installOn(login, store) certPath = store.newFilePath('server.pem') certcreate.main(['--filename', certPath.path, '--quiet']) return store
def testAccountNames(self): dbdir = self.mktemp() s = Store(dbdir) ls = userbase.LoginSystem(store=s) ls.installOn(s) acc = ls.addAccount('username', 'dom.ain', 'password') ss = acc.avatars.open() self.assertEquals(list(userbase.getAccountNames(ss)), [('username', 'dom.ain')]) acc.addLoginMethod(u'nameuser', u'ain.dom') names = list(userbase.getAccountNames(ss)) names.sort() self.assertEquals(names, [('nameuser', 'ain.dom'), ('username', 'dom.ain')])
def setUp(self): self.dbdir = FilePath(self.mktemp()) self.store = Store(self.dbdir) self.ls = userbase.LoginSystem(store=self.store) self.scheduler = Scheduler(store=self.store) dependency.installOn(self.scheduler, self.store) self.account = self.ls.addAccount( self.localpart, self.domain, u'PASSWORD') self.accountStore = self.account.avatars.open() self.ss = self.accountStore.findOrCreate(SubScheduler) dependency.installOn(self.ss, self.accountStore) self.origdir = self.accountStore.dbdir self.destdir = FilePath(self.mktemp())
def setUp(self): self.dbdir = self.mktemp() self.store = store.Store(self.dbdir) self.login = userbase.LoginSystem(store=self.store) installOn(self.login, self.store) account = self.login.addAccount('bob', 'proxy2.org', None) us = account.avatars.open() installOn(FakeAvatar(store=us), us) self.uas = useragent.UserAgent.server(sip.IVoiceSystem(us), "127.0.0.2", FakeMediaController()) self.sent = [] self.sip = sip.SIPTransport(self.uas, ["server.com"], 5060) self.sip.startProtocol() self.sip.sendMessage = lambda dest, msg: self.sent.append((dest, msg)) self.testMessages = [] self.parser = sip.MessagesParser(self.testMessages.append) self.clock = sip.clock = task.Clock() #XXX this is probably not good useragent.Dialog.genTag = lambda self: "314159"
def initializeStore(): """ Install site requirements for the MTA tests and create several users which will be used as the origin and destination of various test messages. """ login = userbase.LoginSystem(store=s) installOn(login, s) for (localpart, domain, internal) in [ ('testuser', 'localhost', True), ('testuser', 'example.com', False), ('administrator', 'localhost', True)]: account = login.addAccount(localpart, domain, None, internal=internal) subStore = account.avatars.open() def endow(): installOn(Inbox(store=subStore), subStore) installOn(Composer(store=subStore), subStore) subStore.transact(endow)
def setUp(self): self.store = Store() self.realm = userbase.LoginSystem(store=self.store) dependency.installOn(self.realm, self.store)
def account(): ls = userbase.LoginSystem(store=s) installOn(ls, s) acc = ls.addAccount('username', 'dom.ain', 'password') return acc.avatars.open()
def setUp(self): self.store = Store() self.realm = userbase.LoginSystem(store=self.store) self.realm.installOn(self.store)