コード例 #1
0
ファイル: test_userbase.py プロジェクト: perkinslr/axiom-py3
    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)
コード例 #2
0
ファイル: test_userbase.py プロジェクト: perkinslr/axiom-py3
    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')])
コード例 #3
0
    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))
コード例 #4
0
ファイル: test_userbase.py プロジェクト: perkinslr/axiom-py3
    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])
コード例 #5
0
    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"
コード例 #6
0
 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)
コード例 #7
0
 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
コード例 #8
0
 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])
コード例 #9
0
ファイル: test_signup.py プロジェクト: jonathanj/mantissa
 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)
コード例 #10
0
        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
コード例 #11
0
    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])
コード例 #12
0
    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')
コード例 #13
0
ファイル: test_userbase.py プロジェクト: perkinslr/axiom-py3
    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())
コード例 #14
0
    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())
コード例 #15
0
ファイル: test_view.py プロジェクト: DalavanCloud/hyperbola
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
コード例 #16
0
    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')])
コード例 #17
0
ファイル: test_userbase.py プロジェクト: calston/tums
    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())
コード例 #18
0
 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"
コード例 #19
0
    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)
コード例 #20
0
ファイル: test_userbase.py プロジェクト: perkinslr/axiom-py3
 def setUp(self):
     self.store = Store()
     self.realm = userbase.LoginSystem(store=self.store)
     dependency.installOn(self.realm, self.store)
コード例 #21
0
 def account():
     ls = userbase.LoginSystem(store=s)
     installOn(ls, s)
     acc = ls.addAccount('username', 'dom.ain', 'password')
     return acc.avatars.open()
コード例 #22
0
 def setUp(self):
     self.store = Store()
     self.realm = userbase.LoginSystem(store=self.store)
     self.realm.installOn(self.store)