Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
76f71a52
Kaydet (Commit)
76f71a52
authored
Eki 11, 2008
tarafından
Benjamin Peterson
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
give poplib a real test suite
#4088 from Giampaolo Rodola'x
üst
9d1e2cda
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
267 additions
and
23 deletions
+267
-23
test_poplib.py
Lib/test/test_poplib.py
+267
-23
No files found.
Lib/test/test_poplib.py
Dosyayı görüntüle @
76f71a52
import
socket
"""Test script for poplib module."""
import
threading
# Modified by Giampaolo Rodola' to give poplib.POP3 and poplib.POP3_SSL
# a real test suite
import
poplib
import
poplib
import
threading
import
asyncore
import
asynchat
import
socket
import
os
import
time
import
time
from
unittest
import
TestCase
from
unittest
import
TestCase
from
test
import
test_support
from
test
import
test_support
from
test.test_support
import
HOST
HOST
=
test_support
.
HOST
def
server
(
evt
,
serv
):
# the dummy data returned by server when LIST and RETR commands are issued
serv
.
listen
(
5
)
LIST_RESP
=
'1 1
\r\n
2 2
\r\n
3 3
\r\n
4 4
\r\n
5 5
\r\n
.
\r\n
'
try
:
RETR_RESP
=
"""From: postmaster@python.org
\
conn
,
addr
=
serv
.
accept
()
\r\n
Content-Type: text/plain
\r\n\
except
socket
.
timeout
:
MIME-Version: 1.0
\r\n\
pass
Subject: Dummy
\r\n\
else
:
\r\n\
conn
.
send
(
"+ Hola mundo
\n
"
)
line1
\r\n\
conn
.
close
()
line2
\r\n\
finally
:
line3
\r\n\
serv
.
close
()
.
\r\n
"""
evt
.
set
()
class
DummyPOP3Handler
(
asynchat
.
async_chat
):
def
__init__
(
self
,
conn
):
asynchat
.
async_chat
.
__init__
(
self
,
conn
)
self
.
set_terminator
(
"
\r\n
"
)
self
.
in_buffer
=
[]
self
.
push
(
'+OK dummy pop3 server ready.'
)
def
collect_incoming_data
(
self
,
data
):
self
.
in_buffer
.
append
(
data
)
def
found_terminator
(
self
):
line
=
''
.
join
(
self
.
in_buffer
)
self
.
in_buffer
=
[]
cmd
=
line
.
split
(
' '
)[
0
]
.
lower
()
space
=
line
.
find
(
' '
)
if
space
!=
-
1
:
arg
=
line
[
space
+
1
:]
else
:
arg
=
""
if
hasattr
(
self
,
'cmd_'
+
cmd
):
method
=
getattr
(
self
,
'cmd_'
+
cmd
)
method
(
arg
)
else
:
self
.
push
(
'-ERR unrecognized POP3 command "
%
s".'
%
cmd
)
def
handle_error
(
self
):
raise
def
push
(
self
,
data
):
asynchat
.
async_chat
.
push
(
self
,
data
+
'
\r\n
'
)
def
cmd_echo
(
self
,
arg
):
# sends back the received string (used by the test suite)
self
.
push
(
arg
)
def
cmd_user
(
self
,
arg
):
if
arg
!=
"guido"
:
self
.
push
(
"-ERR no such user"
)
self
.
push
(
'+OK password required'
)
def
cmd_pass
(
self
,
arg
):
if
arg
!=
"python"
:
self
.
push
(
"-ERR wrong password"
)
self
.
push
(
'+OK 10 messages'
)
def
cmd_stat
(
self
,
arg
):
self
.
push
(
'+OK 10 100'
)
def
cmd_list
(
self
,
arg
):
if
arg
:
self
.
push
(
'+OK
%
s
%
s'
%
(
arg
,
arg
))
else
:
self
.
push
(
'+OK'
)
asynchat
.
async_chat
.
push
(
self
,
LIST_RESP
)
cmd_uidl
=
cmd_list
def
cmd_retr
(
self
,
arg
):
self
.
push
(
'+OK
%
s bytes'
%
len
(
RETR_RESP
))
asynchat
.
async_chat
.
push
(
self
,
RETR_RESP
)
cmd_top
=
cmd_retr
def
cmd_dele
(
self
,
arg
):
self
.
push
(
'+OK message marked for deletion.'
)
def
cmd_noop
(
self
,
arg
):
self
.
push
(
'+OK done nothing.'
)
def
cmd_rpop
(
self
,
arg
):
self
.
push
(
'+OK done nothing.'
)
class
DummyPOP3Server
(
asyncore
.
dispatcher
,
threading
.
Thread
):
handler
=
DummyPOP3Handler
def
__init__
(
self
,
address
,
af
=
socket
.
AF_INET
):
threading
.
Thread
.
__init__
(
self
)
asyncore
.
dispatcher
.
__init__
(
self
)
self
.
create_socket
(
af
,
socket
.
SOCK_STREAM
)
self
.
bind
(
address
)
self
.
listen
(
5
)
self
.
active
=
False
self
.
active_lock
=
threading
.
Lock
()
self
.
host
,
self
.
port
=
self
.
socket
.
getsockname
()[:
2
]
def
start
(
self
):
assert
not
self
.
active
self
.
__flag
=
threading
.
Event
()
threading
.
Thread
.
start
(
self
)
self
.
__flag
.
wait
()
def
run
(
self
):
self
.
active
=
True
self
.
__flag
.
set
()
while
self
.
active
and
asyncore
.
socket_map
:
self
.
active_lock
.
acquire
()
asyncore
.
loop
(
timeout
=
0.1
,
count
=
1
)
self
.
active_lock
.
release
()
asyncore
.
close_all
(
ignore_all
=
True
)
def
stop
(
self
):
assert
self
.
active
self
.
active
=
False
self
.
join
()
def
handle_accept
(
self
):
conn
,
addr
=
self
.
accept
()
self
.
handler
=
self
.
handler
(
conn
)
self
.
close
()
def
handle_connect
(
self
):
self
.
close
()
handle_read
=
handle_connect
def
writable
(
self
):
return
0
class
GeneralTests
(
TestCase
):
def
handle_error
(
self
):
raise
class
TestPOP3Class
(
TestCase
):
def
assertOK
(
self
,
resp
):
self
.
assertTrue
(
resp
.
startswith
(
"+OK"
))
def
setUp
(
self
):
self
.
server
=
DummyPOP3Server
((
HOST
,
0
))
self
.
server
.
start
()
self
.
client
=
poplib
.
POP3
(
self
.
server
.
host
,
self
.
server
.
port
)
def
tearDown
(
self
):
self
.
client
.
quit
()
self
.
server
.
stop
()
def
test_getwelcome
(
self
):
self
.
assertEqual
(
self
.
client
.
getwelcome
(),
'+OK dummy pop3 server ready.'
)
def
test_exceptions
(
self
):
self
.
assertRaises
(
poplib
.
error_proto
,
self
.
client
.
_shortcmd
,
'echo -err'
)
def
test_user
(
self
):
self
.
assertOK
(
self
.
client
.
user
(
'guido'
))
self
.
assertRaises
(
poplib
.
error_proto
,
self
.
client
.
user
,
'invalid'
)
def
test_pass_
(
self
):
self
.
assertOK
(
self
.
client
.
pass_
(
'python'
))
self
.
assertRaises
(
poplib
.
error_proto
,
self
.
client
.
user
,
'invalid'
)
def
test_stat
(
self
):
self
.
assertEqual
(
self
.
client
.
stat
(),
(
10
,
100
))
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"
))
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'
],
113
)
self
.
assertEqual
(
self
.
client
.
retr
(
'foo'
),
expected
)
def
test_dele
(
self
):
self
.
assertOK
(
self
.
client
.
dele
(
'foo'
))
def
test_noop
(
self
):
self
.
assertOK
(
self
.
client
.
noop
())
def
test_rpop
(
self
):
self
.
assertOK
(
self
.
client
.
rpop
(
'foo'
))
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'
],
113
)
self
.
assertEqual
(
self
.
client
.
top
(
1
,
1
),
expected
)
def
test_uidl
(
self
):
self
.
client
.
uidl
()
self
.
client
.
uidl
(
'foo'
)
SUPPORTS_SSL
=
False
if
hasattr
(
poplib
,
'POP3_SSL'
):
import
ssl
SUPPORTS_SSL
=
True
CERTFILE
=
os
.
path
.
join
(
os
.
path
.
dirname
(
__file__
)
or
os
.
curdir
,
"keycert.pem"
)
class
DummyPOP3_SSLHandler
(
DummyPOP3Handler
):
def
__init__
(
self
,
conn
):
asynchat
.
async_chat
.
__init__
(
self
,
conn
)
self
.
socket
=
ssl
.
wrap_socket
(
self
.
socket
,
certfile
=
CERTFILE
,
server_side
=
True
)
self
.
set_terminator
(
"
\r\n
"
)
self
.
in_buffer
=
[]
self
.
push
(
'+OK dummy pop3 server ready.'
)
class
TestPOP3_SSLClass
(
TestPOP3Class
):
# repeat previous tests by using poplib.POP3_SSL
def
setUp
(
self
):
self
.
server
=
DummyPOP3Server
((
HOST
,
0
))
self
.
server
.
handler
=
DummyPOP3_SSLHandler
self
.
server
.
start
()
self
.
client
=
poplib
.
POP3_SSL
(
self
.
server
.
host
,
self
.
server
.
port
)
def
test__all__
(
self
):
self
.
assert_
(
'POP3_SSL'
in
poplib
.
__all__
)
class
TestTimeouts
(
TestCase
):
def
setUp
(
self
):
def
setUp
(
self
):
self
.
evt
=
threading
.
Event
()
self
.
evt
=
threading
.
Event
()
self
.
sock
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
self
.
sock
=
socket
.
socket
(
socket
.
AF_INET
,
socket
.
SOCK_STREAM
)
self
.
sock
.
settimeout
(
3
)
self
.
sock
.
settimeout
(
3
)
self
.
port
=
test_support
.
bind_port
(
self
.
sock
)
self
.
port
=
test_support
.
bind_port
(
self
.
sock
)
threading
.
Thread
(
target
=
server
,
args
=
(
self
.
evt
,
self
.
sock
))
.
start
()
threading
.
Thread
(
target
=
se
lf
.
se
rver
,
args
=
(
self
.
evt
,
self
.
sock
))
.
start
()
time
.
sleep
(
.
1
)
time
.
sleep
(
.
1
)
def
tearDown
(
self
):
def
tearDown
(
self
):
self
.
evt
.
wait
()
self
.
evt
.
wait
()
def
testBasic
(
self
):
def
server
(
self
,
evt
,
serv
):
# connects
serv
.
listen
(
5
)
pop
=
poplib
.
POP3
(
HOST
,
self
.
port
)
try
:
pop
.
sock
.
close
()
conn
,
addr
=
serv
.
accept
()
except
socket
.
timeout
:
pass
else
:
conn
.
send
(
"+ Hola mundo
\n
"
)
conn
.
close
()
finally
:
serv
.
close
()
evt
.
set
()
def
testTimeoutDefault
(
self
):
def
testTimeoutDefault
(
self
):
self
.
assertTrue
(
socket
.
getdefaulttimeout
()
is
None
)
self
.
assertTrue
(
socket
.
getdefaulttimeout
()
is
None
)
...
@@ -65,8 +301,16 @@ class GeneralTests(TestCase):
...
@@ -65,8 +301,16 @@ class GeneralTests(TestCase):
pop
.
sock
.
close
()
pop
.
sock
.
close
()
def
test_main
(
verbose
=
None
):
def
test_main
():
test_support
.
run_unittest
(
GeneralTests
)
tests
=
[
TestPOP3Class
,
TestTimeouts
]
if
SUPPORTS_SSL
:
tests
.
append
(
TestPOP3_SSLClass
)
thread_info
=
test_support
.
threading_setup
()
try
:
test_support
.
run_unittest
(
*
tests
)
finally
:
test_support
.
threading_cleanup
(
*
thread_info
)
if
__name__
==
'__main__'
:
if
__name__
==
'__main__'
:
test_main
()
test_main
()
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment