| Index: third_party/twisted_8_1/twisted/mail/test/test_pop3client.py
|
| diff --git a/third_party/twisted_8_1/twisted/mail/test/test_pop3client.py b/third_party/twisted_8_1/twisted/mail/test/test_pop3client.py
|
| deleted file mode 100644
|
| index e2c3b8d733421bcddbcbce99f80332bdeebbf874..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/mail/test/test_pop3client.py
|
| +++ /dev/null
|
| @@ -1,573 +0,0 @@
|
| -# -*- test-case-name: twisted.mail.test.test_pop3client -*-
|
| -# Copyright (c) 2001-2004 Divmod Inc.
|
| -# See LICENSE for details.
|
| -
|
| -from zope.interface import directlyProvides
|
| -
|
| -from twisted.mail.pop3 import AdvancedPOP3Client as POP3Client
|
| -from twisted.mail.pop3 import InsecureAuthenticationDisallowed
|
| -from twisted.mail.pop3 import ServerErrorResponse
|
| -from twisted.protocols import loopback
|
| -from twisted.internet import reactor, defer, error, protocol, interfaces
|
| -from twisted.python import log
|
| -
|
| -from twisted.trial import unittest
|
| -from twisted.test.proto_helpers import StringTransport
|
| -from twisted.protocols import basic
|
| -
|
| -from twisted.mail.test import pop3testserver
|
| -
|
| -try:
|
| - from twisted.test.ssl_helpers import ClientTLSContext, ServerTLSContext
|
| -except ImportError:
|
| - ClientTLSContext = ServerTLSContext = None
|
| -
|
| -
|
| -class StringTransportWithConnectionLosing(StringTransport):
|
| - def loseConnection(self):
|
| - self.protocol.connectionLost(error.ConnectionDone())
|
| -
|
| -
|
| -capCache = {"TOP": None, "LOGIN-DELAY": "180", "UIDL": None, \
|
| - "STLS": None, "USER": None, "SASL": "LOGIN"}
|
| -def setUp(greet=True):
|
| - p = POP3Client()
|
| -
|
| - # Skip the CAPA login will issue if it doesn't already have a
|
| - # capability cache
|
| - p._capCache = capCache
|
| -
|
| - t = StringTransportWithConnectionLosing()
|
| - t.protocol = p
|
| - p.makeConnection(t)
|
| -
|
| - if greet:
|
| - p.dataReceived('+OK Hello!\r\n')
|
| -
|
| - return p, t
|
| -
|
| -def strip(f):
|
| - return lambda result, f=f: f()
|
| -
|
| -class POP3ClientLoginTestCase(unittest.TestCase):
|
| - def testNegativeGreeting(self):
|
| - p, t = setUp(greet=False)
|
| - p.allowInsecureLogin = True
|
| - d = p.login("username", "password")
|
| - p.dataReceived('-ERR Offline for maintenance\r\n')
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "Offline for maintenance"))
|
| -
|
| -
|
| - def testOkUser(self):
|
| - p, t = setUp()
|
| - d = p.user("username")
|
| - self.assertEquals(t.value(), "USER username\r\n")
|
| - p.dataReceived("+OK send password\r\n")
|
| - return d.addCallback(self.assertEqual, "send password")
|
| -
|
| - def testBadUser(self):
|
| - p, t = setUp()
|
| - d = p.user("username")
|
| - self.assertEquals(t.value(), "USER username\r\n")
|
| - p.dataReceived("-ERR account suspended\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "account suspended"))
|
| -
|
| - def testOkPass(self):
|
| - p, t = setUp()
|
| - d = p.password("password")
|
| - self.assertEquals(t.value(), "PASS password\r\n")
|
| - p.dataReceived("+OK you're in!\r\n")
|
| - return d.addCallback(self.assertEqual, "you're in!")
|
| -
|
| - def testBadPass(self):
|
| - p, t = setUp()
|
| - d = p.password("password")
|
| - self.assertEquals(t.value(), "PASS password\r\n")
|
| - p.dataReceived("-ERR go away\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "go away"))
|
| -
|
| - def testOkLogin(self):
|
| - p, t = setUp()
|
| - p.allowInsecureLogin = True
|
| - d = p.login("username", "password")
|
| - self.assertEquals(t.value(), "USER username\r\n")
|
| - p.dataReceived("+OK go ahead\r\n")
|
| - self.assertEquals(t.value(), "USER username\r\nPASS password\r\n")
|
| - p.dataReceived("+OK password accepted\r\n")
|
| - return d.addCallback(self.assertEqual, "password accepted")
|
| -
|
| - def testBadPasswordLogin(self):
|
| - p, t = setUp()
|
| - p.allowInsecureLogin = True
|
| - d = p.login("username", "password")
|
| - self.assertEquals(t.value(), "USER username\r\n")
|
| - p.dataReceived("+OK waiting on you\r\n")
|
| - self.assertEquals(t.value(), "USER username\r\nPASS password\r\n")
|
| - p.dataReceived("-ERR bogus login\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "bogus login"))
|
| -
|
| - def testBadUsernameLogin(self):
|
| - p, t = setUp()
|
| - p.allowInsecureLogin = True
|
| - d = p.login("username", "password")
|
| - self.assertEquals(t.value(), "USER username\r\n")
|
| - p.dataReceived("-ERR bogus login\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "bogus login"))
|
| -
|
| - def testServerGreeting(self):
|
| - p, t = setUp(greet=False)
|
| - p.dataReceived("+OK lalala this has no challenge\r\n")
|
| - self.assertEquals(p.serverChallenge, None)
|
| -
|
| - def testServerGreetingWithChallenge(self):
|
| - p, t = setUp(greet=False)
|
| - p.dataReceived("+OK <here is the challenge>\r\n")
|
| - self.assertEquals(p.serverChallenge, "<here is the challenge>")
|
| -
|
| - def testAPOP(self):
|
| - p, t = setUp(greet=False)
|
| - p.dataReceived("+OK <challenge string goes here>\r\n")
|
| - d = p.login("username", "password")
|
| - self.assertEquals(t.value(), "APOP username f34f1e464d0d7927607753129cabe39a\r\n")
|
| - p.dataReceived("+OK Welcome!\r\n")
|
| - return d.addCallback(self.assertEqual, "Welcome!")
|
| -
|
| - def testInsecureLoginRaisesException(self):
|
| - p, t = setUp(greet=False)
|
| - p.dataReceived("+OK Howdy\r\n")
|
| - d = p.login("username", "password")
|
| - self.failIf(t.value())
|
| - return self.assertFailure(
|
| - d, InsecureAuthenticationDisallowed)
|
| -
|
| -
|
| - def testSSLTransportConsideredSecure(self):
|
| - """
|
| - If a server doesn't offer APOP but the transport is secured using
|
| - SSL or TLS, a plaintext login should be allowed, not rejected with
|
| - an InsecureAuthenticationDisallowed exception.
|
| - """
|
| - p, t = setUp(greet=False)
|
| - directlyProvides(t, interfaces.ISSLTransport)
|
| - p.dataReceived("+OK Howdy\r\n")
|
| - d = p.login("username", "password")
|
| - self.assertEquals(t.value(), "USER username\r\n")
|
| - t.clear()
|
| - p.dataReceived("+OK\r\n")
|
| - self.assertEquals(t.value(), "PASS password\r\n")
|
| - p.dataReceived("+OK\r\n")
|
| - return d
|
| -
|
| -
|
| -
|
| -class ListConsumer:
|
| - def __init__(self):
|
| - self.data = {}
|
| -
|
| - def consume(self, (item, value)):
|
| - self.data.setdefault(item, []).append(value)
|
| -
|
| -class MessageConsumer:
|
| - def __init__(self):
|
| - self.data = []
|
| -
|
| - def consume(self, line):
|
| - self.data.append(line)
|
| -
|
| -class POP3ClientListTestCase(unittest.TestCase):
|
| - def testListSize(self):
|
| - p, t = setUp()
|
| - d = p.listSize()
|
| - self.assertEquals(t.value(), "LIST\r\n")
|
| - p.dataReceived("+OK Here it comes\r\n")
|
| - p.dataReceived("1 3\r\n2 2\r\n3 1\r\n.\r\n")
|
| - return d.addCallback(self.assertEqual, [3, 2, 1])
|
| -
|
| - def testListSizeWithConsumer(self):
|
| - p, t = setUp()
|
| - c = ListConsumer()
|
| - f = c.consume
|
| - d = p.listSize(f)
|
| - self.assertEquals(t.value(), "LIST\r\n")
|
| - p.dataReceived("+OK Here it comes\r\n")
|
| - p.dataReceived("1 3\r\n2 2\r\n3 1\r\n")
|
| - self.assertEquals(c.data, {0: [3], 1: [2], 2: [1]})
|
| - p.dataReceived("5 3\r\n6 2\r\n7 1\r\n")
|
| - self.assertEquals(c.data, {0: [3], 1: [2], 2: [1], 4: [3], 5: [2], 6: [1]})
|
| - p.dataReceived(".\r\n")
|
| - return d.addCallback(self.assertIdentical, f)
|
| -
|
| - def testFailedListSize(self):
|
| - p, t = setUp()
|
| - d = p.listSize()
|
| - self.assertEquals(t.value(), "LIST\r\n")
|
| - p.dataReceived("-ERR Fatal doom server exploded\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "Fatal doom server exploded"))
|
| -
|
| - def testListUID(self):
|
| - p, t = setUp()
|
| - d = p.listUID()
|
| - self.assertEquals(t.value(), "UIDL\r\n")
|
| - p.dataReceived("+OK Here it comes\r\n")
|
| - p.dataReceived("1 abc\r\n2 def\r\n3 ghi\r\n.\r\n")
|
| - return d.addCallback(self.assertEqual, ["abc", "def", "ghi"])
|
| -
|
| - def testListUIDWithConsumer(self):
|
| - p, t = setUp()
|
| - c = ListConsumer()
|
| - f = c.consume
|
| - d = p.listUID(f)
|
| - self.assertEquals(t.value(), "UIDL\r\n")
|
| - p.dataReceived("+OK Here it comes\r\n")
|
| - p.dataReceived("1 xyz\r\n2 abc\r\n5 mno\r\n")
|
| - self.assertEquals(c.data, {0: ["xyz"], 1: ["abc"], 4: ["mno"]})
|
| - p.dataReceived(".\r\n")
|
| - return d.addCallback(self.assertIdentical, f)
|
| -
|
| - def testFailedListUID(self):
|
| - p, t = setUp()
|
| - d = p.listUID()
|
| - self.assertEquals(t.value(), "UIDL\r\n")
|
| - p.dataReceived("-ERR Fatal doom server exploded\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "Fatal doom server exploded"))
|
| -
|
| -class POP3ClientMessageTestCase(unittest.TestCase):
|
| - def testRetrieve(self):
|
| - p, t = setUp()
|
| - d = p.retrieve(7)
|
| - self.assertEquals(t.value(), "RETR 8\r\n")
|
| - p.dataReceived("+OK Message incoming\r\n")
|
| - p.dataReceived("La la la here is message text\r\n")
|
| - p.dataReceived("..Further message text tra la la\r\n")
|
| - p.dataReceived(".\r\n")
|
| - return d.addCallback(
|
| - self.assertEqual,
|
| - ["La la la here is message text",
|
| - ".Further message text tra la la"])
|
| -
|
| - def testRetrieveWithConsumer(self):
|
| - p, t = setUp()
|
| - c = MessageConsumer()
|
| - f = c.consume
|
| - d = p.retrieve(7, f)
|
| - self.assertEquals(t.value(), "RETR 8\r\n")
|
| - p.dataReceived("+OK Message incoming\r\n")
|
| - p.dataReceived("La la la here is message text\r\n")
|
| - p.dataReceived("..Further message text\r\n.\r\n")
|
| - return d.addCallback(self._cbTestRetrieveWithConsumer, f, c)
|
| -
|
| - def _cbTestRetrieveWithConsumer(self, result, f, c):
|
| - self.assertIdentical(result, f)
|
| - self.assertEquals(c.data, ["La la la here is message text",
|
| - ".Further message text"])
|
| -
|
| - def testPartialRetrieve(self):
|
| - p, t = setUp()
|
| - d = p.retrieve(7, lines=2)
|
| - self.assertEquals(t.value(), "TOP 8 2\r\n")
|
| - p.dataReceived("+OK 2 lines on the way\r\n")
|
| - p.dataReceived("Line the first! Woop\r\n")
|
| - p.dataReceived("Line the last! Bye\r\n")
|
| - p.dataReceived(".\r\n")
|
| - return d.addCallback(
|
| - self.assertEqual,
|
| - ["Line the first! Woop",
|
| - "Line the last! Bye"])
|
| -
|
| - def testPartialRetrieveWithConsumer(self):
|
| - p, t = setUp()
|
| - c = MessageConsumer()
|
| - f = c.consume
|
| - d = p.retrieve(7, f, lines=2)
|
| - self.assertEquals(t.value(), "TOP 8 2\r\n")
|
| - p.dataReceived("+OK 2 lines on the way\r\n")
|
| - p.dataReceived("Line the first! Woop\r\n")
|
| - p.dataReceived("Line the last! Bye\r\n")
|
| - p.dataReceived(".\r\n")
|
| - return d.addCallback(self._cbTestPartialRetrieveWithConsumer, f, c)
|
| -
|
| - def _cbTestPartialRetrieveWithConsumer(self, result, f, c):
|
| - self.assertIdentical(result, f)
|
| - self.assertEquals(c.data, ["Line the first! Woop",
|
| - "Line the last! Bye"])
|
| -
|
| - def testFailedRetrieve(self):
|
| - p, t = setUp()
|
| - d = p.retrieve(0)
|
| - self.assertEquals(t.value(), "RETR 1\r\n")
|
| - p.dataReceived("-ERR Fatal doom server exploded\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "Fatal doom server exploded"))
|
| -
|
| -
|
| - def test_concurrentRetrieves(self):
|
| - """
|
| - Issue three retrieve calls immediately without waiting for any to
|
| - succeed and make sure they all do succeed eventually.
|
| - """
|
| - p, t = setUp()
|
| - messages = [
|
| - p.retrieve(i).addCallback(
|
| - self.assertEquals,
|
| - ["First line of %d." % (i + 1,),
|
| - "Second line of %d." % (i + 1,)])
|
| - for i
|
| - in range(3)]
|
| -
|
| - for i in range(1, 4):
|
| - self.assertEquals(t.value(), "RETR %d\r\n" % (i,))
|
| - t.clear()
|
| - p.dataReceived("+OK 2 lines on the way\r\n")
|
| - p.dataReceived("First line of %d.\r\n" % (i,))
|
| - p.dataReceived("Second line of %d.\r\n" % (i,))
|
| - self.assertEquals(t.value(), "")
|
| - p.dataReceived(".\r\n")
|
| -
|
| - return defer.DeferredList(messages, fireOnOneErrback=True)
|
| -
|
| -
|
| -
|
| -class POP3ClientMiscTestCase(unittest.TestCase):
|
| - def testCapability(self):
|
| - p, t = setUp()
|
| - d = p.capabilities(useCache=0)
|
| - self.assertEquals(t.value(), "CAPA\r\n")
|
| - p.dataReceived("+OK Capabilities on the way\r\n")
|
| - p.dataReceived("X\r\nY\r\nZ\r\nA 1 2 3\r\nB 1 2\r\nC 1\r\n.\r\n")
|
| - return d.addCallback(
|
| - self.assertEqual,
|
| - {"X": None, "Y": None, "Z": None,
|
| - "A": ["1", "2", "3"],
|
| - "B": ["1", "2"],
|
| - "C": ["1"]})
|
| -
|
| - def testCapabilityError(self):
|
| - p, t = setUp()
|
| - d = p.capabilities(useCache=0)
|
| - self.assertEquals(t.value(), "CAPA\r\n")
|
| - p.dataReceived("-ERR This server is lame!\r\n")
|
| - return d.addCallback(self.assertEquals, {})
|
| -
|
| - def testStat(self):
|
| - p, t = setUp()
|
| - d = p.stat()
|
| - self.assertEquals(t.value(), "STAT\r\n")
|
| - p.dataReceived("+OK 1 1212\r\n")
|
| - return d.addCallback(self.assertEqual, (1, 1212))
|
| -
|
| - def testStatError(self):
|
| - p, t = setUp()
|
| - d = p.stat()
|
| - self.assertEquals(t.value(), "STAT\r\n")
|
| - p.dataReceived("-ERR This server is lame!\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "This server is lame!"))
|
| -
|
| - def testNoop(self):
|
| - p, t = setUp()
|
| - d = p.noop()
|
| - self.assertEquals(t.value(), "NOOP\r\n")
|
| - p.dataReceived("+OK No-op to you too!\r\n")
|
| - return d.addCallback(self.assertEqual, "No-op to you too!")
|
| -
|
| - def testNoopError(self):
|
| - p, t = setUp()
|
| - d = p.noop()
|
| - self.assertEquals(t.value(), "NOOP\r\n")
|
| - p.dataReceived("-ERR This server is lame!\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "This server is lame!"))
|
| -
|
| - def testRset(self):
|
| - p, t = setUp()
|
| - d = p.reset()
|
| - self.assertEquals(t.value(), "RSET\r\n")
|
| - p.dataReceived("+OK Reset state\r\n")
|
| - return d.addCallback(self.assertEqual, "Reset state")
|
| -
|
| - def testRsetError(self):
|
| - p, t = setUp()
|
| - d = p.reset()
|
| - self.assertEquals(t.value(), "RSET\r\n")
|
| - p.dataReceived("-ERR This server is lame!\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "This server is lame!"))
|
| -
|
| - def testDelete(self):
|
| - p, t = setUp()
|
| - d = p.delete(3)
|
| - self.assertEquals(t.value(), "DELE 4\r\n")
|
| - p.dataReceived("+OK Hasta la vista\r\n")
|
| - return d.addCallback(self.assertEqual, "Hasta la vista")
|
| -
|
| - def testDeleteError(self):
|
| - p, t = setUp()
|
| - d = p.delete(3)
|
| - self.assertEquals(t.value(), "DELE 4\r\n")
|
| - p.dataReceived("-ERR Winner is not you.\r\n")
|
| - return self.assertFailure(
|
| - d, ServerErrorResponse).addCallback(
|
| - lambda exc: self.assertEquals(exc.args[0], "Winner is not you."))
|
| -
|
| -
|
| -class SimpleClient(POP3Client):
|
| - def __init__(self, deferred, contextFactory = None):
|
| - self.deferred = deferred
|
| - self.allowInsecureLogin = True
|
| -
|
| - def serverGreeting(self, challenge):
|
| - self.deferred.callback(None)
|
| -
|
| -class POP3HelperMixin:
|
| - serverCTX = None
|
| - clientCTX = None
|
| -
|
| - def setUp(self):
|
| - d = defer.Deferred()
|
| - self.server = pop3testserver.POP3TestServer(contextFactory=self.serverCTX)
|
| - self.client = SimpleClient(d, contextFactory=self.clientCTX)
|
| - self.client.timeout = 30
|
| - self.connected = d
|
| -
|
| - def tearDown(self):
|
| - del self.server
|
| - del self.client
|
| - del self.connected
|
| -
|
| - def _cbStopClient(self, ignore):
|
| - self.client.transport.loseConnection()
|
| -
|
| - def _ebGeneral(self, failure):
|
| - self.client.transport.loseConnection()
|
| - self.server.transport.loseConnection()
|
| - return failure
|
| -
|
| - def loopback(self):
|
| - return loopback.loopbackTCP(self.server, self.client, noisy=False)
|
| -
|
| -
|
| -class TLSServerFactory(protocol.ServerFactory):
|
| - class protocol(basic.LineReceiver):
|
| - context = None
|
| - output = []
|
| - def connectionMade(self):
|
| - self.factory.input = []
|
| - self.output = self.output[:]
|
| - map(self.sendLine, self.output.pop(0))
|
| - def lineReceived(self, line):
|
| - self.factory.input.append(line)
|
| - map(self.sendLine, self.output.pop(0))
|
| - if line == 'STLS':
|
| - self.transport.startTLS(self.context)
|
| -
|
| -
|
| -class POP3TLSTestCase(unittest.TestCase):
|
| - def testStartTLS(self):
|
| - sf = TLSServerFactory()
|
| - sf.protocol.output = [
|
| - ['+OK'], # Server greeting
|
| - ['+OK', 'STLS', '.'], # CAPA response
|
| - ['+OK'], # STLS response
|
| - ['+OK', '.'], # Second CAPA response
|
| - ['+OK'] # QUIT response
|
| - ]
|
| - sf.protocol.context = ServerTLSContext()
|
| - port = reactor.listenTCP(0, sf, interface='127.0.0.1')
|
| - H = port.getHost().host
|
| - P = port.getHost().port
|
| -
|
| - cp = SimpleClient(defer.Deferred(), ClientTLSContext())
|
| - cf = protocol.ClientFactory()
|
| - cf.protocol = lambda: cp
|
| -
|
| - conn = reactor.connectTCP(H, P, cf)
|
| -
|
| - def cbConnected(ignored):
|
| - log.msg("Connected to server; starting TLS")
|
| - return cp.startTLS()
|
| -
|
| - def cbStartedTLS(ignored):
|
| - log.msg("Started TLS; disconnecting")
|
| - return cp.quit()
|
| -
|
| - def cbDisconnected(ign):
|
| - log.msg("Disconnected; asserting correct input received")
|
| - self.assertEquals(
|
| - sf.input,
|
| - ['CAPA', 'STLS', 'CAPA', 'QUIT'])
|
| -
|
| - def cleanup(result):
|
| - log.msg("Asserted correct input; disconnecting client and shutting down server")
|
| - conn.disconnect()
|
| -
|
| - def cbShutdown(ignored):
|
| - log.msg("Shut down server")
|
| - return result
|
| -
|
| - return defer.maybeDeferred(port.stopListening).addCallback(cbShutdown)
|
| -
|
| - cp.deferred.addCallback(cbConnected)
|
| - cp.deferred.addCallback(cbStartedTLS)
|
| - cp.deferred.addCallback(cbDisconnected)
|
| - cp.deferred.addBoth(cleanup)
|
| -
|
| - return cp.deferred
|
| -
|
| -
|
| -class POP3TimeoutTestCase(POP3HelperMixin, unittest.TestCase):
|
| - def testTimeout(self):
|
| - def login():
|
| - d = self.client.login('test', 'twisted')
|
| - d.addCallback(loggedIn)
|
| - d.addErrback(timedOut)
|
| - return d
|
| -
|
| - def loggedIn(result):
|
| - self.fail("Successfully logged in!? Impossible!")
|
| -
|
| -
|
| - def timedOut(failure):
|
| - failure.trap(error.TimeoutError)
|
| - self._cbStopClient(None)
|
| -
|
| - def quit():
|
| - return self.client.quit()
|
| -
|
| - self.client.timeout = 0.01
|
| -
|
| - # Tell the server to not return a response to client. This
|
| - # will trigger a timeout.
|
| - pop3testserver.TIMEOUT_RESPONSE = True
|
| -
|
| - methods = [login, quit]
|
| - map(self.connected.addCallback, map(strip, methods))
|
| - self.connected.addCallback(self._cbStopClient)
|
| - self.connected.addErrback(self._ebGeneral)
|
| - return self.loopback()
|
| -
|
| -
|
| -if ClientTLSContext is None:
|
| - for case in (POP3TLSTestCase,):
|
| - case.skip = "OpenSSL not present"
|
| -elif interfaces.IReactorSSL(reactor, None) is None:
|
| - for case in (POP3TLSTestCase,):
|
| - case.skip = "Reactor doesn't support SSL"
|
| -
|
|
|