aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/Lib/test/test_poplib.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/test/test_poplib.py')
-rw-r--r--Lib/test/test_poplib.py96
1 files changed, 62 insertions, 34 deletions
diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
index 9505c2250a3..e3901b886ca 100644
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -12,14 +12,15 @@ import time
import errno
from unittest import TestCase
-from test import test_support
-from test.test_support import HOST
+from test import support as test_support
threading = test_support.import_module('threading')
+HOST = test_support.HOST
+PORT = 0
# the dummy data returned by server when LIST and RETR commands are issued
-LIST_RESP = '1 1\r\n2 2\r\n3 3\r\n4 4\r\n5 5\r\n.\r\n'
-RETR_RESP = """From: postmaster@python.org\
+LIST_RESP = b'1 1\r\n2 2\r\n3 3\r\n4 4\r\n5 5\r\n.\r\n'
+RETR_RESP = b"""From: postmaster@python.org\
\r\nContent-Type: text/plain\r\n\
MIME-Version: 1.0\r\n\
Subject: Dummy\r\n\
@@ -34,15 +35,16 @@ class DummyPOP3Handler(asynchat.async_chat):
def __init__(self, conn):
asynchat.async_chat.__init__(self, conn)
- self.set_terminator("\r\n")
+ self.set_terminator(b"\r\n")
self.in_buffer = []
- self.push('+OK dummy pop3 server ready.')
+ self.push('+OK dummy pop3 server ready. <timestamp>')
def collect_incoming_data(self, data):
self.in_buffer.append(data)
def found_terminator(self):
- line = ''.join(self.in_buffer)
+ line = b''.join(self.in_buffer)
+ line = str(line, 'ISO-8859-1')
self.in_buffer = []
cmd = line.split(' ')[0].lower()
space = line.find(' ')
@@ -60,7 +62,7 @@ class DummyPOP3Handler(asynchat.async_chat):
raise
def push(self, data):
- asynchat.async_chat.push(self, data + '\r\n')
+ asynchat.async_chat.push(self, data.encode("ISO-8859-1") + b'\r\n')
def cmd_echo(self, arg):
# sends back the received string (used by the test suite)
@@ -103,6 +105,9 @@ class DummyPOP3Handler(asynchat.async_chat):
def cmd_rpop(self, arg):
self.push('+OK done nothing.')
+ def cmd_apop(self, arg):
+ self.push('+OK done nothing.')
+
class DummyPOP3Server(asyncore.dispatcher, threading.Thread):
@@ -117,6 +122,7 @@ class DummyPOP3Server(asyncore.dispatcher, threading.Thread):
self.active = False
self.active_lock = threading.Lock()
self.host, self.port = self.socket.getsockname()[:2]
+ self.handler_instance = None
def start(self):
assert not self.active
@@ -138,10 +144,8 @@ class DummyPOP3Server(asyncore.dispatcher, threading.Thread):
self.active = False
self.join()
- def handle_accept(self):
- conn, addr = self.accept()
- self.handler = self.handler(conn)
- self.close()
+ def handle_accepted(self, conn, addr):
+ self.handler_instance = self.handler(conn)
def handle_connect(self):
self.close()
@@ -155,12 +159,11 @@ class DummyPOP3Server(asyncore.dispatcher, threading.Thread):
class TestPOP3Class(TestCase):
-
def assertOK(self, resp):
- self.assertTrue(resp.startswith("+OK"))
+ self.assertTrue(resp.startswith(b"+OK"))
def setUp(self):
- self.server = DummyPOP3Server((HOST, 0))
+ self.server = DummyPOP3Server((HOST, PORT))
self.server.start()
self.client = poplib.POP3(self.server.host, self.server.port)
@@ -169,7 +172,8 @@ class TestPOP3Class(TestCase):
self.server.stop()
def test_getwelcome(self):
- self.assertEqual(self.client.getwelcome(), '+OK dummy pop3 server ready.')
+ self.assertEqual(self.client.getwelcome(),
+ b'+OK dummy pop3 server ready. <timestamp>')
def test_exceptions(self):
self.assertRaises(poplib.error_proto, self.client._shortcmd, 'echo -err')
@@ -187,16 +191,18 @@ class TestPOP3Class(TestCase):
def test_list(self):
self.assertEqual(self.client.list()[1:],
- (['1 1', '2 2', '3 3', '4 4', '5 5'], 25))
- self.assertTrue(self.client.list('1').endswith("OK 1 1"))
+ ([b'1 1', b'2 2', b'3 3', b'4 4', b'5 5'],
+ 25))
+ self.assertTrue(self.client.list('1').endswith(b"OK 1 1"))
def test_retr(self):
- expected = ('+OK 116 bytes',
- ['From: postmaster@python.org', 'Content-Type: text/plain',
- 'MIME-Version: 1.0', 'Subject: Dummy',
- '', 'line1', 'line2', 'line3'],
+ expected = (b'+OK 116 bytes',
+ [b'From: postmaster@python.org', b'Content-Type: text/plain',
+ b'MIME-Version: 1.0', b'Subject: Dummy',
+ b'', b'line1', b'line2', b'line3'],
113)
- self.assertEqual(self.client.retr('foo'), expected)
+ foo = self.client.retr('foo')
+ self.assertEqual(foo, expected)
def test_dele(self):
self.assertOK(self.client.dele('foo'))
@@ -207,11 +213,14 @@ class TestPOP3Class(TestCase):
def test_rpop(self):
self.assertOK(self.client.rpop('foo'))
+ def test_apop(self):
+ self.assertOK(self.client.apop('foo', 'dummypassword'))
+
def test_top(self):
- expected = ('+OK 116 bytes',
- ['From: postmaster@python.org', 'Content-Type: text/plain',
- 'MIME-Version: 1.0', 'Subject: Dummy', '',
- 'line1', 'line2', 'line3'],
+ expected = (b'+OK 116 bytes',
+ [b'From: postmaster@python.org', b'Content-Type: text/plain',
+ b'MIME-Version: 1.0', b'Subject: Dummy', b'',
+ b'line1', b'line2', b'line3'],
113)
self.assertEqual(self.client.top(1, 1), expected)
@@ -231,27 +240,29 @@ if hasattr(poplib, 'POP3_SSL'):
def __init__(self, conn):
asynchat.async_chat.__init__(self, conn)
- self.socket = ssl.wrap_socket(self.socket, certfile=CERTFILE,
+ ssl_socket = ssl.wrap_socket(self.socket, certfile=CERTFILE,
server_side=True,
do_handshake_on_connect=False)
+ self.del_channel()
+ self.set_socket(ssl_socket)
# Must try handshake before calling push()
self._ssl_accepting = True
self._do_ssl_handshake()
- self.set_terminator("\r\n")
+ self.set_terminator(b"\r\n")
self.in_buffer = []
- self.push('+OK dummy pop3 server ready.')
+ self.push('+OK dummy pop3 server ready. <timestamp>')
def _do_ssl_handshake(self):
try:
self.socket.do_handshake()
- except ssl.SSLError, err:
+ except ssl.SSLError as err:
if err.args[0] in (ssl.SSL_ERROR_WANT_READ,
ssl.SSL_ERROR_WANT_WRITE):
return
elif err.args[0] == ssl.SSL_ERROR_EOF:
return self.handle_close()
raise
- except socket.error, err:
+ except socket.error as err:
if err.args[0] == errno.ECONNABORTED:
return self.handle_close()
else:
@@ -267,7 +278,7 @@ if hasattr(poplib, 'POP3_SSL'):
# repeat previous tests by using poplib.POP3_SSL
def setUp(self):
- self.server = DummyPOP3Server((HOST, 0))
+ self.server = DummyPOP3Server((HOST, PORT))
self.server.handler = DummyPOP3_SSLHandler
self.server.start()
self.client = poplib.POP3_SSL(self.server.host, self.server.port)
@@ -275,6 +286,23 @@ if hasattr(poplib, 'POP3_SSL'):
def test__all__(self):
self.assertIn('POP3_SSL', poplib.__all__)
+ def test_context(self):
+ ctx = ssl.SSLContext(ssl.PROTOCOL_TLSv1)
+ self.assertRaises(ValueError, poplib.POP3_SSL, self.server.host,
+ self.server.port, keyfile=CERTFILE, context=ctx)
+ self.assertRaises(ValueError, poplib.POP3_SSL, self.server.host,
+ self.server.port, certfile=CERTFILE, context=ctx)
+ self.assertRaises(ValueError, poplib.POP3_SSL, self.server.host,
+ self.server.port, keyfile=CERTFILE,
+ certfile=CERTFILE, context=ctx)
+
+ self.client.quit()
+ self.client = poplib.POP3_SSL(self.server.host, self.server.port,
+ context=ctx)
+ self.assertIsInstance(self.client.sock, ssl.SSLSocket)
+ self.assertIs(self.client.sock.context, ctx)
+ self.assertTrue(self.client.noop().startswith(b'+OK'))
+
class TestTimeouts(TestCase):
@@ -297,7 +325,7 @@ class TestTimeouts(TestCase):
evt.set()
try:
conn, addr = serv.accept()
- conn.send("+ Hola mundo\n")
+ conn.send(b"+ Hola mundo\n")
conn.close()
except socket.timeout:
pass