Example #1
0
def connectedServerAndClient(ServerClass=lambda: SimpleSymmetricProtocol(True),
                             ClientClass=lambda: SimpleSymmetricProtocol(False),
                             *a, **kw):
    """Returns a 3-tuple: (client, server, pump)
    """
    return iosim.connectedServerAndClient(
        ServerClass, ClientClass,
        *a, **kw)
Example #2
0
def connectedServerAndClient(
        ServerClass=lambda: SimpleSymmetricProtocol(True),
        ClientClass=lambda: SimpleSymmetricProtocol(False),
        *a,
        **kw):
    """Returns a 3-tuple: (client, server, pump)
    """
    return iosim.connectedServerAndClient(ServerClass, ClientClass, *a, **kw)
Example #3
0
    def testFailedLogin(self):
        self.server.portal = NoPortal()
        c, s, pump = iosim.connectedServerAndClient(
            lambda : self.server,
            lambda : self.client)
        pump.flush()

        status = [evt[1] for evt in self.client.events if evt[0] == 'status'][-1]
        lastEvent = [evt[0] for evt in self.client.events if evt[0] != 'status'][-1]

        self.assertEquals(status, u'Login failed: Authentication failed')
        self.assertEquals(lastEvent, u'stopped')
Example #4
0
 def _disconnectTest(self, mbox, blocked):
     self.server.portal = Portal(mbox, lambda: None)
     c, s, pump = iosim.connectedServerAndClient(
         lambda: self.server,
         lambda: self.client)
     pump.flush()
     self.assertEquals(
         len(blocked), 1,
         "Expected a pending Deferred for listMessages, found %r" % (
             blocked,))
     s.transport.loseConnection()
     pump.flush()
     self.assertEquals(self.client.events[-1][0], 'stopped')
Example #5
0
 def testBasicGrabbing(self):
     self.server.portal = Portal(
         ListMailbox(self.testMessageStrings),
         lambda: None)
     c, s, pump = iosim.connectedServerAndClient(
         lambda: self.server,
         lambda: self.client)
     pump.flush()
     self.assertEquals(
         len([evt for evt in self.client.events if evt[0] == 'success']),
         3)
     self.assertEquals(
         [evt[0] for evt in self.client.events if evt[0] != 'status'][-1],
         'stopped')
Example #6
0
    def test_lostConnectionDuringLogin(self):
        """
        Make sure that if a connection drops while logging in, it is
        properly noticed and the status is updated correctly.
        """
        self.server.portal = DelayedPortal()
        c, s, pump = iosim.connectedServerAndClient(
            lambda: self.server,
            lambda: self.client)
        pump.flush()

        # Should have been one login attempt
        ([loginDeferred, credentials, mind, interface],) = self.server.portal.loginAttempts

        s.transport.loseConnection()
        pump.flush()
        self.assertEquals(self.client.events[-1][0], 'stopped')
Example #7
0
    def testConnectionTimeout(self):
        """
        Make sure that if we receive no bytes for a really long time after
        issuing a retrieve command, we give up and disassociate ourself from
        our grabber object.
        """
        sched = []
        self.client.callLater = lambda n, f: sched.append((n, f))

        mbox = DelayedListMailbox(self.testMessageStrings)
        self.server.portal = Portal(mbox, lambda: None)
        c, s, pump = iosim.connectedServerAndClient(
            lambda: self.server,
            lambda: self.client)
        self.assertEquals(len(sched), 1)
        sched.pop()[1]()
        self.assertEquals(self.client.events[-2][0], 'transient')
        self.client.events[-2][1].trap(error.TimeoutError)
        self.assertEquals(self.client.events[-1][0], 'stopped')
Example #8
0
 def testLineTooLong(self):
     """
     Make sure a message illegally served with a line longer than we will
     accept is handled and marked as a failure, but doesn't completely
     derail the grabber.
     """
     self.server.portal = Portal(
         ListMailbox(['X' * (2 ** 16)]),
         lambda: None)
     c, s, pump = iosim.connectedServerAndClient(
         lambda: self.server,
         lambda: self.client)
     pump.flush()
     for evt in self.client.events:
         if evt[0] == 'transient':
             evt[1].trap(pop3.LineTooLong)
             break
     else:
         self.fail("No transient failure recorded.")
Example #9
0
    def testInsecureLogin(self):
        """
        Test that if login isn't even attempted because there is no way to do
        it without revealing a password that the grabber status is set
        properly.
        """
        self.server = POP3WithoutAPOP()
        self.server.schedule = list
        self.server.timeOut = None

        c, s, pump = iosim.connectedServerAndClient(
            lambda : self.server,
            lambda : self.client)
        pump.flush()

        status = [evt[1] for evt in self.client.events if evt[0] == 'status'][-1]
        lastEvent = [evt[0] for evt in self.client.events if evt[0] != 'status'][-1]

        self.assertEquals(status, u'Login aborted: server not secure.')
        self.assertEquals(lastEvent, u'stopped')