annotate Lib/test/test_poplib.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents fbcaeb4a8654
children 39dbcc92b6c0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
1 """Test script for poplib module."""
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
2
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
3 # Modified by Giampaolo Rodola' to give poplib.POP3 and poplib.POP3_SSL
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
4 # a real test suite
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
5
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
6 import poplib
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
7 import asyncore
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
8 import asynchat
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
9 import socket
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
10 import os
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
11 import time
60933
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
12 import errno
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
13
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
14 from unittest import TestCase
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
15 from test import test_support
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
16 from test.test_support import HOST
61046
3a0484200034 Issue #7449, last part (11): fix many tests if thread support is disabled
Victor Stinner <victor.stinner@haypocalc.com>
parents: 60933
diff changeset
17 threading = test_support.import_module('threading')
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
18
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
19
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
20 # the dummy data returned by server when LIST and RETR commands are issued
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
21 LIST_RESP = '1 1\r\n2 2\r\n3 3\r\n4 4\r\n5 5\r\n.\r\n'
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
22 RETR_RESP = """From: postmaster@python.org\
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
23 \r\nContent-Type: text/plain\r\n\
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
24 MIME-Version: 1.0\r\n\
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
25 Subject: Dummy\r\n\
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
26 \r\n\
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
27 line1\r\n\
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
28 line2\r\n\
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
29 line3\r\n\
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
30 .\r\n"""
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
31
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
32
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
33 class DummyPOP3Handler(asynchat.async_chat):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
34
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
35 def __init__(self, conn):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
36 asynchat.async_chat.__init__(self, conn)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
37 self.set_terminator("\r\n")
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
38 self.in_buffer = []
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
39 self.push('+OK dummy pop3 server ready.')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
40
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
41 def collect_incoming_data(self, data):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
42 self.in_buffer.append(data)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
43
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
44 def found_terminator(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
45 line = ''.join(self.in_buffer)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
46 self.in_buffer = []
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
47 cmd = line.split(' ')[0].lower()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
48 space = line.find(' ')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
49 if space != -1:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
50 arg = line[space + 1:]
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
51 else:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
52 arg = ""
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
53 if hasattr(self, 'cmd_' + cmd):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
54 method = getattr(self, 'cmd_' + cmd)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
55 method(arg)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
56 else:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
57 self.push('-ERR unrecognized POP3 command "%s".' %cmd)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
58
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
59 def handle_error(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
60 raise
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
61
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
62 def push(self, data):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
63 asynchat.async_chat.push(self, data + '\r\n')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
64
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
65 def cmd_echo(self, arg):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
66 # sends back the received string (used by the test suite)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
67 self.push(arg)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
68
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
69 def cmd_user(self, arg):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
70 if arg != "guido":
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
71 self.push("-ERR no such user")
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
72 self.push('+OK password required')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
73
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
74 def cmd_pass(self, arg):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
75 if arg != "python":
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
76 self.push("-ERR wrong password")
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
77 self.push('+OK 10 messages')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
78
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
79 def cmd_stat(self, arg):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
80 self.push('+OK 10 100')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
81
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
82 def cmd_list(self, arg):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
83 if arg:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
84 self.push('+OK %s %s' %(arg, arg))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
85 else:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
86 self.push('+OK')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
87 asynchat.async_chat.push(self, LIST_RESP)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
88
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
89 cmd_uidl = cmd_list
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
90
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
91 def cmd_retr(self, arg):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
92 self.push('+OK %s bytes' %len(RETR_RESP))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
93 asynchat.async_chat.push(self, RETR_RESP)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
94
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
95 cmd_top = cmd_retr
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
96
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
97 def cmd_dele(self, arg):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
98 self.push('+OK message marked for deletion.')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
99
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
100 def cmd_noop(self, arg):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
101 self.push('+OK done nothing.')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
102
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
103 def cmd_rpop(self, arg):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
104 self.push('+OK done nothing.')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
105
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
106
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
107 class DummyPOP3Server(asyncore.dispatcher, threading.Thread):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
108
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
109 handler = DummyPOP3Handler
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
110
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
111 def __init__(self, address, af=socket.AF_INET):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
112 threading.Thread.__init__(self)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
113 asyncore.dispatcher.__init__(self)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
114 self.create_socket(af, socket.SOCK_STREAM)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
115 self.bind(address)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
116 self.listen(5)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
117 self.active = False
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
118 self.active_lock = threading.Lock()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
119 self.host, self.port = self.socket.getsockname()[:2]
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
120
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
121 def start(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
122 assert not self.active
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
123 self.__flag = threading.Event()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
124 threading.Thread.start(self)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
125 self.__flag.wait()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
126
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
127 def run(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
128 self.active = True
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
129 self.__flag.set()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
130 while self.active and asyncore.socket_map:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
131 self.active_lock.acquire()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
132 asyncore.loop(timeout=0.1, count=1)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
133 self.active_lock.release()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
134 asyncore.close_all(ignore_all=True)
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
135
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
136 def stop(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
137 assert self.active
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
138 self.active = False
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
139 self.join()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
140
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
141 def handle_accept(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
142 conn, addr = self.accept()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
143 self.handler = self.handler(conn)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
144 self.close()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
145
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
146 def handle_connect(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
147 self.close()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
148 handle_read = handle_connect
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
149
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
150 def writable(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
151 return 0
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
152
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
153 def handle_error(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
154 raise
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
155
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
156
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
157 class TestPOP3Class(TestCase):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
158
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
159 def assertOK(self, resp):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
160 self.assertTrue(resp.startswith("+OK"))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
161
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
162 def setUp(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
163 self.server = DummyPOP3Server((HOST, 0))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
164 self.server.start()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
165 self.client = poplib.POP3(self.server.host, self.server.port)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
166
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
167 def tearDown(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
168 self.client.quit()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
169 self.server.stop()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
170
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
171 def test_getwelcome(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
172 self.assertEqual(self.client.getwelcome(), '+OK dummy pop3 server ready.')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
173
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
174 def test_exceptions(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
175 self.assertRaises(poplib.error_proto, self.client._shortcmd, 'echo -err')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
176
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
177 def test_user(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
178 self.assertOK(self.client.user('guido'))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
179 self.assertRaises(poplib.error_proto, self.client.user, 'invalid')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
180
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
181 def test_pass_(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
182 self.assertOK(self.client.pass_('python'))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
183 self.assertRaises(poplib.error_proto, self.client.user, 'invalid')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
184
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
185 def test_stat(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
186 self.assertEqual(self.client.stat(), (10, 100))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
187
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
188 def test_list(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
189 self.assertEqual(self.client.list()[1:],
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
190 (['1 1', '2 2', '3 3', '4 4', '5 5'], 25))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
191 self.assertTrue(self.client.list('1').endswith("OK 1 1"))
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
192
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
193 def test_retr(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
194 expected = ('+OK 116 bytes',
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
195 ['From: postmaster@python.org', 'Content-Type: text/plain',
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
196 'MIME-Version: 1.0', 'Subject: Dummy',
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
197 '', 'line1', 'line2', 'line3'],
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
198 113)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
199 self.assertEqual(self.client.retr('foo'), expected)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
200
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
201 def test_dele(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
202 self.assertOK(self.client.dele('foo'))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
203
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
204 def test_noop(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
205 self.assertOK(self.client.noop())
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
206
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
207 def test_rpop(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
208 self.assertOK(self.client.rpop('foo'))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
209
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
210 def test_top(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
211 expected = ('+OK 116 bytes',
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
212 ['From: postmaster@python.org', 'Content-Type: text/plain',
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
213 'MIME-Version: 1.0', 'Subject: Dummy', '',
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
214 'line1', 'line2', 'line3'],
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
215 113)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
216 self.assertEqual(self.client.top(1, 1), expected)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
217
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
218 def test_uidl(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
219 self.client.uidl()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
220 self.client.uidl('foo')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
221
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
222
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
223 SUPPORTS_SSL = False
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
224 if hasattr(poplib, 'POP3_SSL'):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
225 import ssl
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
226
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
227 SUPPORTS_SSL = True
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
228 CERTFILE = os.path.join(os.path.dirname(__file__) or os.curdir, "keycert.pem")
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
229
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
230 class DummyPOP3_SSLHandler(DummyPOP3Handler):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
231
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
232 def __init__(self, conn):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
233 asynchat.async_chat.__init__(self, conn)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
234 self.socket = ssl.wrap_socket(self.socket, certfile=CERTFILE,
60933
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
235 server_side=True,
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
236 do_handshake_on_connect=False)
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
237 # Must try handshake before calling push()
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
238 self._ssl_accepting = True
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
239 self._do_ssl_handshake()
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
240 self.set_terminator("\r\n")
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
241 self.in_buffer = []
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
242 self.push('+OK dummy pop3 server ready.')
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
243
60933
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
244 def _do_ssl_handshake(self):
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
245 try:
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
246 self.socket.do_handshake()
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
247 except ssl.SSLError, err:
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
248 if err.args[0] in (ssl.SSL_ERROR_WANT_READ,
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
249 ssl.SSL_ERROR_WANT_WRITE):
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
250 return
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
251 elif err.args[0] == ssl.SSL_ERROR_EOF:
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
252 return self.handle_close()
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
253 raise
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
254 except socket.error, err:
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
255 if err.args[0] == errno.ECONNABORTED:
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
256 return self.handle_close()
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
257 else:
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
258 self._ssl_accepting = False
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
259
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
260 def handle_read(self):
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
261 if self._ssl_accepting:
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
262 self._do_ssl_handshake()
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
263 else:
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
264 DummyPOP3Handler.handle_read(self)
76a052eedee6 Issue #5103: SSL handshake would ignore the socket timeout and block
Antoine Pitrou <solipsis@pitrou.net>
parents: 58460
diff changeset
265
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
266 class TestPOP3_SSLClass(TestPOP3Class):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
267 # repeat previous tests by using poplib.POP3_SSL
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
268
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
269 def setUp(self):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
270 self.server = DummyPOP3Server((HOST, 0))
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
271 self.server.handler = DummyPOP3_SSLHandler
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
272 self.server.start()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
273 self.client = poplib.POP3_SSL(self.server.host, self.server.port)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
274
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
275 def test__all__(self):
58460
17891566a478 use assert[Not]In where appropriate
Ezio Melotti <ezio.melotti@gmail.com>
parents: 55002
diff changeset
276 self.assertIn('POP3_SSL', poplib.__all__)
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
277
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
278
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
279 class TestTimeouts(TestCase):
41532
4b9fa8092e82 Whitespace normalization. Ugh, we really need to do this more often.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41309
diff changeset
280
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
281 def setUp(self):
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
282 self.evt = threading.Event()
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 41532
diff changeset
283 self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
73964
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
284 self.sock.settimeout(60) # Safety net. Look issue 11812
46362
d917da2b1946 - Issue #2550: The approach used by client/server code for obtaining ports
Trent Nelson <trent.nelson@snakebite.org>
parents: 41532
diff changeset
285 self.port = test_support.bind_port(self.sock)
73964
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
286 self.thread = threading.Thread(target=self.server, args=(self.evt,self.sock))
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
287 self.thread.setDaemon(True)
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
288 self.thread.start()
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
289 self.evt.wait()
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
290
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
291 def tearDown(self):
73964
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
292 self.thread.join()
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
293 del self.thread # Clear out any dangling Thread objects.
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
294
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
295 def server(self, evt, serv):
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
296 serv.listen(5)
73964
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
297 evt.set()
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
298 try:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
299 conn, addr = serv.accept()
73964
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
300 conn.send("+ Hola mundo\n")
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
301 conn.close()
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
302 except socket.timeout:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
303 pass
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
304 finally:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
305 serv.close()
41532
4b9fa8092e82 Whitespace normalization. Ugh, we really need to do this more often.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41309
diff changeset
306
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
307 def testTimeoutDefault(self):
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
308 self.assertTrue(socket.getdefaulttimeout() is None)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
309 socket.setdefaulttimeout(30)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
310 try:
73964
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
311 pop = poplib.POP3(HOST, self.port)
47372
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
312 finally:
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
313 socket.setdefaulttimeout(None)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
314 self.assertEqual(pop.sock.gettimeout(), 30)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
315 pop.sock.close()
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
316
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
317 def testTimeoutNone(self):
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
318 self.assertTrue(socket.getdefaulttimeout() is None)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
319 socket.setdefaulttimeout(30)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
320 try:
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
321 pop = poplib.POP3(HOST, self.port, timeout=None)
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
322 finally:
e2c5ae30cffe Fixed the semantic of timeout for socket.create_connection and
Facundo Batista <facundobatista@gmail.com>
parents: 46362
diff changeset
323 socket.setdefaulttimeout(None)
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
324 self.assertTrue(pop.sock.gettimeout() is None)
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
325 pop.sock.close()
41532
4b9fa8092e82 Whitespace normalization. Ugh, we really need to do this more often.
Neal Norwitz <nnorwitz@gmail.com>
parents: 41309
diff changeset
326
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
327 def testTimeoutValue(self):
73964
fbcaeb4a8654 Issue #13453: Fix a race condition in test_poplib.
Charles-François Natali <neologix@free.fr>
parents: 61046
diff changeset
328 pop = poplib.POP3(HOST, self.port, timeout=30)
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
329 self.assertEqual(pop.sock.gettimeout(), 30)
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
330 pop.sock.close()
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
331
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
332
49495
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
333 def test_main():
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
334 tests = [TestPOP3Class, TestTimeouts]
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
335 if SUPPORTS_SSL:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
336 tests.append(TestPOP3_SSLClass)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
337 thread_info = test_support.threading_setup()
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
338 try:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
339 test_support.run_unittest(*tests)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
340 finally:
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
341 test_support.threading_cleanup(*thread_info)
e6702c1a07d7 give poplib a real test suite
Benjamin Peterson <benjamin@python.org>
parents: 47372
diff changeset
342
41309
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
343
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
344 if __name__ == '__main__':
e4893ee9a885 The basic test cases of poplib.py.
Facundo Batista <facundobatista@gmail.com>
parents:
diff changeset
345 test_main()