Пример #1
0
    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
    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
    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
 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
    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
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
    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
 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)