python3 compatibility
- dict.items().pop() in proc - str/bytes in backdoor, api_test, ssl_test, test__refcount - import httplib from six - PEP-8 fixes
This commit is contained in:
@@ -1,13 +1,13 @@
|
||||
from __future__ import print_function
|
||||
|
||||
from code import InteractiveConsole
|
||||
import errno
|
||||
import socket
|
||||
import sys
|
||||
import errno
|
||||
from code import InteractiveConsole
|
||||
|
||||
import eventlet
|
||||
from eventlet import hubs
|
||||
from eventlet.support import greenlets, get_errno
|
||||
from eventlet.support import greenlets, get_errno, six
|
||||
|
||||
try:
|
||||
sys.ps1
|
||||
@@ -29,12 +29,14 @@ class FileProxy(object):
|
||||
def flush(self):
|
||||
pass
|
||||
|
||||
def write(self, *a, **kw):
|
||||
self.f.write(*a, **kw)
|
||||
def write(self, data, *a, **kw):
|
||||
data = six.b(data)
|
||||
self.f.write(data, *a, **kw)
|
||||
self.f.flush()
|
||||
|
||||
def readline(self, *a):
|
||||
return self.f.readline(*a).replace('\r\n', '\n')
|
||||
line = self.f.readline(*a).replace(b'\r\n', b'\n')
|
||||
return six.u(line)
|
||||
|
||||
def __getattr__(self, attr):
|
||||
return getattr(self.f, attr)
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
from eventlet import patcher
|
||||
from eventlet.green import socket
|
||||
from eventlet.support import six
|
||||
|
||||
to_patch = [('socket', socket)]
|
||||
|
||||
@@ -9,9 +10,10 @@ try:
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
patcher.inject('httplib',
|
||||
globals(),
|
||||
*to_patch)
|
||||
|
||||
if six.PY2:
|
||||
patcher.inject('httplib', globals(), *to_patch)
|
||||
if six.PY3:
|
||||
patcher.inject('http.client', globals(), *to_patch)
|
||||
|
||||
if __name__ == '__main__':
|
||||
test()
|
||||
|
||||
@@ -11,11 +11,11 @@ try:
|
||||
to_patch.append(('ssl', ssl))
|
||||
except ImportError:
|
||||
pass
|
||||
|
||||
|
||||
patcher.inject('urllib', globals(), *to_patch)
|
||||
|
||||
# patch a bunch of things that have imports inside the
|
||||
# function body; this is lame and hacky but I don't feel
|
||||
# patch a bunch of things that have imports inside the
|
||||
# function body; this is lame and hacky but I don't feel
|
||||
# too bad because urllib is a hacky pile of junk that no
|
||||
# one should be using anyhow
|
||||
URLopener.open_http = patcher.patch_function(URLopener.open_http, ('httplib', httplib))
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
from eventlet.support import get_errno, six
|
||||
from eventlet.hubs import trampoline
|
||||
BUFFER_SIZE = 4096
|
||||
|
||||
import array
|
||||
import errno
|
||||
import os
|
||||
import socket
|
||||
from socket import socket as _original_socket
|
||||
import socket
|
||||
import sys
|
||||
import time
|
||||
import warnings
|
||||
|
||||
from eventlet.support import get_errno, six
|
||||
from eventlet.hubs import trampoline
|
||||
BUFFER_SIZE = 4096
|
||||
|
||||
__all__ = ['GreenSocket', 'GreenPipe', 'shutdown_safe']
|
||||
|
||||
CONNECT_ERR = set((errno.EINPROGRESS, errno.EALREADY, errno.EWOULDBLOCK))
|
||||
@@ -178,7 +178,7 @@ class GreenSocket(object):
|
||||
set_nonblocking(client)
|
||||
return type(self)(client), addr
|
||||
trampoline(fd, read=True, timeout=self.gettimeout(),
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
|
||||
def connect(self, address):
|
||||
if self.act_non_blocking:
|
||||
@@ -196,7 +196,7 @@ class GreenSocket(object):
|
||||
if time.time() >= end:
|
||||
raise socket.timeout("timed out")
|
||||
trampoline(fd, write=True, timeout=end - time.time(),
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
socket_checkerr(fd)
|
||||
|
||||
def connect_ex(self, address):
|
||||
@@ -219,7 +219,7 @@ class GreenSocket(object):
|
||||
if time.time() >= end:
|
||||
raise socket.timeout(errno.EAGAIN)
|
||||
trampoline(fd, write=True, timeout=end - time.time(),
|
||||
timeout_exc=socket.timeout(errno.EAGAIN))
|
||||
timeout_exc=socket.timeout(errno.EAGAIN))
|
||||
socket_checkerr(fd)
|
||||
except socket.error as ex:
|
||||
return get_errno(ex)
|
||||
@@ -239,7 +239,7 @@ class GreenSocket(object):
|
||||
|
||||
def makeGreenFile(self, *args, **kw):
|
||||
warnings.warn("makeGreenFile has been deprecated, please use "
|
||||
"makefile instead", DeprecationWarning, stacklevel=2)
|
||||
"makefile instead", DeprecationWarning, stacklevel=2)
|
||||
return self.makefile(*args, **kw)
|
||||
|
||||
def recv(self, buflen, flags=0):
|
||||
@@ -256,7 +256,8 @@ class GreenSocket(object):
|
||||
return ''
|
||||
else:
|
||||
raise
|
||||
trampoline(fd,
|
||||
trampoline(
|
||||
fd,
|
||||
read=True,
|
||||
timeout=self.gettimeout(),
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
@@ -264,19 +265,19 @@ class GreenSocket(object):
|
||||
def recvfrom(self, *args):
|
||||
if not self.act_non_blocking:
|
||||
trampoline(self.fd, read=True, timeout=self.gettimeout(),
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
return self.fd.recvfrom(*args)
|
||||
|
||||
def recvfrom_into(self, *args):
|
||||
if not self.act_non_blocking:
|
||||
trampoline(self.fd, read=True, timeout=self.gettimeout(),
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
return self.fd.recvfrom_into(*args)
|
||||
|
||||
def recv_into(self, *args):
|
||||
if not self.act_non_blocking:
|
||||
trampoline(self.fd, read=True, timeout=self.gettimeout(),
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
return self.fd.recv_into(*args)
|
||||
|
||||
def send(self, data, flags=0):
|
||||
@@ -287,7 +288,6 @@ class GreenSocket(object):
|
||||
# blocking socket behavior - sends all, blocks if the buffer is full
|
||||
total_sent = 0
|
||||
len_data = len(data)
|
||||
|
||||
while 1:
|
||||
try:
|
||||
total_sent += fd.send(data[total_sent:], flags)
|
||||
@@ -299,7 +299,7 @@ class GreenSocket(object):
|
||||
break
|
||||
|
||||
trampoline(self.fd, write=True, timeout=self.gettimeout(),
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
timeout_exc=socket.timeout("timed out"))
|
||||
|
||||
return total_sent
|
||||
|
||||
@@ -467,9 +467,10 @@ class GreenPipe(_fileobject):
|
||||
|
||||
def close(self):
|
||||
super(GreenPipe, self).close()
|
||||
for method in ['fileno', 'flush', 'isatty', 'next', 'read', 'readinto',
|
||||
'readline', 'readlines', 'seek', 'tell', 'truncate',
|
||||
'write', 'xreadlines', '__iter__', 'writelines']:
|
||||
for method in [
|
||||
'fileno', 'flush', 'isatty', 'next', 'read', 'readinto',
|
||||
'readline', 'readlines', 'seek', 'tell', 'truncate',
|
||||
'write', 'xreadlines', '__iter__', 'writelines']:
|
||||
setattr(self, method, _operationOnClosedFile)
|
||||
|
||||
def __enter__(self):
|
||||
@@ -479,7 +480,7 @@ class GreenPipe(_fileobject):
|
||||
self.close()
|
||||
|
||||
def readinto(self, buf):
|
||||
data = self.read(len(buf)) # FIXME could it be done without allocating intermediate?
|
||||
data = self.read(len(buf)) # FIXME could it be done without allocating intermediate?
|
||||
n = len(data)
|
||||
try:
|
||||
buf[:n] = data
|
||||
@@ -506,9 +507,9 @@ class GreenPipe(_fileobject):
|
||||
|
||||
def seek(self, offset, whence=0):
|
||||
self.flush()
|
||||
if whence == 1 and offset == 0: # tell synonym
|
||||
if whence == 1 and offset == 0: # tell synonym
|
||||
return self.tell()
|
||||
if whence == 1: # adjust offset by what is read ahead
|
||||
if whence == 1: # adjust offset by what is read ahead
|
||||
offset -= self._get_readahead_len()
|
||||
try:
|
||||
rv = os.lseek(self.fileno(), offset, whence)
|
||||
@@ -518,7 +519,7 @@ class GreenPipe(_fileobject):
|
||||
self._clear_readahead_buf()
|
||||
return rv
|
||||
|
||||
if getattr(file, "truncate", None): # not all OSes implement truncate
|
||||
if getattr(file, "truncate", None): # not all OSes implement truncate
|
||||
def truncate(self, size=-1):
|
||||
self.flush()
|
||||
if size == -1:
|
||||
@@ -528,7 +529,7 @@ class GreenPipe(_fileobject):
|
||||
except OSError as e:
|
||||
raise IOError(*e.args)
|
||||
else:
|
||||
self.seek(size) # move position&clear buffer
|
||||
self.seek(size) # move position&clear buffer
|
||||
return rv
|
||||
|
||||
def isatty(self):
|
||||
|
||||
@@ -4,9 +4,11 @@ from eventlet import coros, proc, api
|
||||
from eventlet.semaphore import Semaphore
|
||||
|
||||
import warnings
|
||||
warnings.warn("The pool module is deprecated. Please use the "
|
||||
"eventlet.GreenPool and eventlet.GreenPile classes instead.",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
warnings.warn(
|
||||
"The pool module is deprecated. Please use the "
|
||||
"eventlet.GreenPool and eventlet.GreenPile classes instead.",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
|
||||
|
||||
class Pool(object):
|
||||
def __init__(self, min_size=0, max_size=4, track_events=False):
|
||||
@@ -315,5 +317,3 @@ class Pool(object):
|
||||
while finished < index + 1:
|
||||
yield q.wait()
|
||||
finished += 1
|
||||
|
||||
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
import warnings
|
||||
warnings.warn("The proc module is deprecated! Please use the greenthread "
|
||||
"module, or any of the many other Eventlet cross-coroutine "
|
||||
"primitives, instead.",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
|
||||
"""
|
||||
This module provides means to spawn, kill and link coroutines. Linking means
|
||||
subscribing to the coroutine's result, either in form of return value or
|
||||
@@ -63,7 +57,16 @@ coroutines and wait for all them to complete. Such a function is provided by
|
||||
this module.
|
||||
"""
|
||||
import sys
|
||||
|
||||
from eventlet import api, coros, hubs
|
||||
from eventlet.support import six
|
||||
|
||||
import warnings
|
||||
warnings.warn(
|
||||
"The proc module is deprecated! Please use the greenthread "
|
||||
"module, or any of the many other Eventlet cross-coroutine "
|
||||
"primitives, instead.",
|
||||
DeprecationWarning, stacklevel=2)
|
||||
|
||||
__all__ = ['LinkedExited',
|
||||
'LinkedFailed',
|
||||
@@ -91,11 +94,13 @@ class LinkedExited(Exception):
|
||||
msg = self.msg % self.name
|
||||
Exception.__init__(self, msg)
|
||||
|
||||
|
||||
class LinkedCompleted(LinkedExited):
|
||||
"""Raised when a linked proc finishes the execution cleanly"""
|
||||
|
||||
msg = "%r completed successfully"
|
||||
|
||||
|
||||
class LinkedFailed(LinkedExited):
|
||||
"""Raised when a linked proc dies because of unhandled exception"""
|
||||
msg = "%r failed with %s"
|
||||
@@ -104,12 +109,14 @@ class LinkedFailed(LinkedExited):
|
||||
msg = self.msg % (name, typ.__name__)
|
||||
LinkedExited.__init__(self, name, msg)
|
||||
|
||||
|
||||
class LinkedKilled(LinkedFailed):
|
||||
"""Raised when a linked proc dies because of unhandled GreenletExit
|
||||
(i.e. it was killed)
|
||||
"""
|
||||
msg = """%r was killed with %s"""
|
||||
|
||||
|
||||
def getLinkedFailed(name, typ, value=None, tb=None):
|
||||
if issubclass(typ, api.GreenletExit):
|
||||
return LinkedKilled(name, typ, value, tb)
|
||||
@@ -137,6 +144,7 @@ class Link(object):
|
||||
def __exit__(self, *args):
|
||||
self.cancel()
|
||||
|
||||
|
||||
class LinkToEvent(Link):
|
||||
|
||||
def __call__(self, source):
|
||||
@@ -147,6 +155,7 @@ class LinkToEvent(Link):
|
||||
else:
|
||||
self.listener.send_exception(*source.exc_info())
|
||||
|
||||
|
||||
class LinkToGreenlet(Link):
|
||||
|
||||
def __call__(self, source):
|
||||
@@ -155,6 +164,7 @@ class LinkToGreenlet(Link):
|
||||
else:
|
||||
self.listener.throw(getLinkedFailed(source.name, *source.exc_info()))
|
||||
|
||||
|
||||
class LinkToCallable(Link):
|
||||
|
||||
def __call__(self, source):
|
||||
@@ -291,7 +301,7 @@ class Source(object):
|
||||
if self.value is not _NOT_USED:
|
||||
if self._exc is None:
|
||||
res = repr(self.value)
|
||||
if len(res)>50:
|
||||
if len(res) > 50:
|
||||
res = res[:50]+'...'
|
||||
result.append('result=%s' % res)
|
||||
else:
|
||||
@@ -315,14 +325,14 @@ class Source(object):
|
||||
def exc_info(self):
|
||||
if not self._exc:
|
||||
return (None, None, None)
|
||||
elif len(self._exc)==3:
|
||||
elif len(self._exc) == 3:
|
||||
return self._exc
|
||||
elif len(self._exc)==1:
|
||||
elif len(self._exc) == 1:
|
||||
if isinstance(self._exc[0], type):
|
||||
return self._exc[0], None, None
|
||||
else:
|
||||
return self._exc[0].__class__, self._exc[0], None
|
||||
elif len(self._exc)==2:
|
||||
elif len(self._exc) == 2:
|
||||
return self._exc[0], self._exc[1], None
|
||||
else:
|
||||
return self._exc
|
||||
@@ -401,7 +411,8 @@ class Source(object):
|
||||
self._start_send()
|
||||
|
||||
def _start_send(self):
|
||||
hubs.get_hub().schedule_call_global(0, self._do_send, self._value_links.items(), self._value_links)
|
||||
links_items = list(six.iteritems(self._value_links))
|
||||
hubs.get_hub().schedule_call_global(0, self._do_send, links_items, self._value_links)
|
||||
|
||||
def send_exception(self, *throw_args):
|
||||
assert not self.ready(), "%s has been fired already" % self
|
||||
@@ -410,7 +421,8 @@ class Source(object):
|
||||
self._start_send_exception()
|
||||
|
||||
def _start_send_exception(self):
|
||||
hubs.get_hub().schedule_call_global(0, self._do_send, self._exception_links.items(), self._exception_links)
|
||||
links_items = list(six.iteritems(self._exception_links))
|
||||
hubs.get_hub().schedule_call_global(0, self._do_send, links_items, self._exception_links)
|
||||
|
||||
def _do_send(self, links, consult):
|
||||
while links:
|
||||
@@ -443,7 +455,7 @@ class Source(object):
|
||||
if timeout is not None:
|
||||
timer = api.timeout(timeout, *throw_args)
|
||||
timer.__enter__()
|
||||
if timeout==0:
|
||||
if timeout == 0:
|
||||
if timer.__exit__(None, None, None):
|
||||
return
|
||||
else:
|
||||
@@ -565,7 +577,7 @@ class Proc(Source):
|
||||
result = function(*args, **kwargs)
|
||||
except:
|
||||
self.send_exception(*sys.exc_info())
|
||||
raise # let mainloop log the exception
|
||||
raise # let mainloop log the exception
|
||||
else:
|
||||
self.send(result)
|
||||
|
||||
@@ -603,23 +615,25 @@ class Proc(Source):
|
||||
|
||||
spawn = Proc.spawn
|
||||
|
||||
|
||||
def spawn_link(function, *args, **kwargs):
|
||||
p = spawn(function, *args, **kwargs)
|
||||
p.link()
|
||||
return p
|
||||
|
||||
|
||||
def spawn_link_value(function, *args, **kwargs):
|
||||
p = spawn(function, *args, **kwargs)
|
||||
p.link_value()
|
||||
return p
|
||||
|
||||
|
||||
def spawn_link_exception(function, *args, **kwargs):
|
||||
p = spawn(function, *args, **kwargs)
|
||||
p.link_exception()
|
||||
return p
|
||||
|
||||
|
||||
|
||||
class wrap_errors(object):
|
||||
"""Helper to make function return an exception, rather than raise it.
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import os
|
||||
import os.path
|
||||
import socket
|
||||
from unittest import TestCase, main
|
||||
import warnings
|
||||
@@ -45,7 +44,7 @@ class TestApi(TestCase):
|
||||
conn, addr = listenfd.accept()
|
||||
fd = conn.makefile(mode='w')
|
||||
conn.close()
|
||||
fd.write('hello\n')
|
||||
fd.write(b'hello\n')
|
||||
fd.close()
|
||||
finally:
|
||||
listenfd.close()
|
||||
@@ -56,7 +55,7 @@ class TestApi(TestCase):
|
||||
client = eventlet.connect(('127.0.0.1', server.getsockname()[1]))
|
||||
fd = client.makefile()
|
||||
client.close()
|
||||
assert fd.readline() == 'hello\n'
|
||||
assert fd.readline() == b'hello\n'
|
||||
|
||||
assert fd.read() == ''
|
||||
fd.close()
|
||||
@@ -68,7 +67,7 @@ class TestApi(TestCase):
|
||||
def accept_once(listenfd):
|
||||
try:
|
||||
conn, addr = listenfd.accept()
|
||||
conn.write('hello\r\n')
|
||||
conn.write(b'hello\r\n')
|
||||
greenio.shutdown_safe(conn)
|
||||
conn.close()
|
||||
finally:
|
||||
@@ -84,7 +83,7 @@ class TestApi(TestCase):
|
||||
client = util.wrap_ssl(raw_client)
|
||||
fd = socket._fileobject(client, 'rb', 8192)
|
||||
|
||||
assert fd.readline() == 'hello\r\n'
|
||||
assert fd.readline() == b'hello\r\n'
|
||||
try:
|
||||
self.assertEquals('', fd.read(10))
|
||||
except greenio.SSL.ZeroReturnError:
|
||||
@@ -92,13 +91,13 @@ class TestApi(TestCase):
|
||||
pass
|
||||
greenio.shutdown_safe(client)
|
||||
client.close()
|
||||
|
||||
|
||||
check_hub()
|
||||
|
||||
def test_001_trampoline_timeout(self):
|
||||
from eventlet import coros
|
||||
server_sock = eventlet.listen(('127.0.0.1', 0))
|
||||
bound_port = server_sock.getsockname()[1]
|
||||
|
||||
def server(sock):
|
||||
client, addr = sock.accept()
|
||||
api.sleep(0.1)
|
||||
@@ -108,7 +107,7 @@ class TestApi(TestCase):
|
||||
desc = eventlet.connect(('127.0.0.1', bound_port))
|
||||
api.trampoline(desc, read=True, write=False, timeout=0.001)
|
||||
except api.TimeoutError:
|
||||
pass # test passed
|
||||
pass # test passed
|
||||
else:
|
||||
assert False, "Didn't timeout"
|
||||
|
||||
@@ -120,6 +119,7 @@ class TestApi(TestCase):
|
||||
bound_port = server.getsockname()[1]
|
||||
|
||||
done = [False]
|
||||
|
||||
def client_closer(sock):
|
||||
while True:
|
||||
(conn, addr) = sock.accept()
|
||||
@@ -154,11 +154,11 @@ class TestApi(TestCase):
|
||||
def test_naming_missing_class(self):
|
||||
self.assertRaises(
|
||||
ImportError, api.named, 'this_name_should_hopefully_not_exist.Foo')
|
||||
|
||||
|
||||
|
||||
def test_killing_dormant(self):
|
||||
DELAY = 0.1
|
||||
state = []
|
||||
|
||||
def test():
|
||||
try:
|
||||
state.append('start')
|
||||
@@ -176,7 +176,7 @@ class TestApi(TestCase):
|
||||
self.assertEquals(state, ['start'])
|
||||
api.kill(g)
|
||||
# will not get there, unless switching is explicitly scheduled by kill
|
||||
self.assertEquals(state,['start', 'except'])
|
||||
self.assertEquals(state, ['start', 'except'])
|
||||
api.sleep(DELAY)
|
||||
self.assertEquals(state, ['start', 'except', 'finished'])
|
||||
|
||||
@@ -192,4 +192,3 @@ class Foo(object):
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
|
||||
@@ -14,15 +14,15 @@ class BackdoorTest(LimitedTestCase):
|
||||
client = socket.socket()
|
||||
client.connect(('localhost', listener.getsockname()[1]))
|
||||
f = client.makefile('rw')
|
||||
self.assert_('Python' in f.readline())
|
||||
self.assert_(b'Python' in f.readline())
|
||||
f.readline() # build info
|
||||
f.readline() # help info
|
||||
self.assert_('InteractiveConsole' in f.readline())
|
||||
self.assertEquals('>>> ', f.read(4))
|
||||
f.write('print("hi")\n')
|
||||
self.assert_(b'InteractiveConsole' in f.readline())
|
||||
self.assertEquals(b'>>> ', f.read(4))
|
||||
f.write(b'print("hi")\n')
|
||||
f.flush()
|
||||
self.assertEquals('hi\n', f.readline())
|
||||
self.assertEquals('>>> ', f.read(4))
|
||||
self.assertEquals(b'hi\n', f.readline())
|
||||
self.assertEquals(b'>>> ', f.read(4))
|
||||
f.close()
|
||||
client.close()
|
||||
serv.kill()
|
||||
|
||||
@@ -16,7 +16,7 @@ from tests import (
|
||||
|
||||
def listen_ssl_socket(address=('127.0.0.1', 0)):
|
||||
sock = util.wrap_ssl(socket.socket(), certificate_file,
|
||||
private_key_file, True)
|
||||
private_key_file, True)
|
||||
sock.bind(address)
|
||||
sock.listen(50)
|
||||
|
||||
@@ -37,25 +37,25 @@ class SSLTest(LimitedTestCase):
|
||||
def test_duplex_response(self):
|
||||
def serve(listener):
|
||||
sock, addr = listener.accept()
|
||||
stuff = sock.read(8192)
|
||||
sock.write('response')
|
||||
sock.read(8192)
|
||||
sock.write(b'response')
|
||||
|
||||
sock = listen_ssl_socket()
|
||||
|
||||
server_coro = eventlet.spawn(serve, sock)
|
||||
|
||||
client = util.wrap_ssl(eventlet.connect(('127.0.0.1', sock.getsockname()[1])))
|
||||
client.write('line 1\r\nline 2\r\n\r\n')
|
||||
self.assertEquals(client.read(8192), 'response')
|
||||
client.write(b'line 1\r\nline 2\r\n\r\n')
|
||||
self.assertEquals(client.read(8192), b'response')
|
||||
server_coro.wait()
|
||||
|
||||
@skip_if_no_ssl
|
||||
def test_ssl_close(self):
|
||||
def serve(listener):
|
||||
sock, addr = listener.accept()
|
||||
stuff = sock.read(8192)
|
||||
sock.read(8192)
|
||||
try:
|
||||
self.assertEquals("", sock.read(8192))
|
||||
self.assertEquals(b"", sock.read(8192))
|
||||
except greenio.SSL.ZeroReturnError:
|
||||
pass
|
||||
|
||||
@@ -65,7 +65,7 @@ class SSLTest(LimitedTestCase):
|
||||
|
||||
raw_client = eventlet.connect(('127.0.0.1', sock.getsockname()[1]))
|
||||
client = util.wrap_ssl(raw_client)
|
||||
client.write('X')
|
||||
client.write(b'X')
|
||||
greenio.shutdown_safe(client)
|
||||
client.close()
|
||||
server_coro.wait()
|
||||
@@ -74,14 +74,14 @@ class SSLTest(LimitedTestCase):
|
||||
def test_ssl_connect(self):
|
||||
def serve(listener):
|
||||
sock, addr = listener.accept()
|
||||
stuff = sock.read(8192)
|
||||
sock.read(8192)
|
||||
sock = listen_ssl_socket()
|
||||
server_coro = eventlet.spawn(serve, sock)
|
||||
|
||||
raw_client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
ssl_client = util.wrap_ssl(raw_client)
|
||||
ssl_client.connect(('127.0.0.1', sock.getsockname()[1]))
|
||||
ssl_client.write('abc')
|
||||
ssl_client.write(b'abc')
|
||||
greenio.shutdown_safe(ssl_client)
|
||||
ssl_client.close()
|
||||
server_coro.wait()
|
||||
@@ -90,24 +90,24 @@ class SSLTest(LimitedTestCase):
|
||||
def test_ssl_unwrap(self):
|
||||
def serve():
|
||||
sock, addr = listener.accept()
|
||||
self.assertEquals(sock.recv(6), 'before')
|
||||
self.assertEquals(sock.recv(6), b'before')
|
||||
sock_ssl = util.wrap_ssl(sock, certificate_file, private_key_file,
|
||||
server_side=True)
|
||||
sock_ssl.do_handshake()
|
||||
self.assertEquals(sock_ssl.read(6), 'during')
|
||||
self.assertEquals(sock_ssl.read(6), b'during')
|
||||
sock2 = sock_ssl.unwrap()
|
||||
self.assertEquals(sock2.recv(5), 'after')
|
||||
self.assertEquals(sock2.recv(5), b'after')
|
||||
sock2.close()
|
||||
|
||||
listener = eventlet.listen(('127.0.0.1', 0))
|
||||
server_coro = eventlet.spawn(serve)
|
||||
client = eventlet.connect((listener.getsockname()))
|
||||
client.send('before')
|
||||
client.send(b'before')
|
||||
client_ssl = util.wrap_ssl(client)
|
||||
client_ssl.do_handshake()
|
||||
client_ssl.write('during')
|
||||
client_ssl.write(b'during')
|
||||
client2 = client_ssl.unwrap()
|
||||
client2.send('after')
|
||||
client2.send(b'after')
|
||||
server_coro.wait()
|
||||
|
||||
@skip_if_no_ssl
|
||||
@@ -131,11 +131,11 @@ class SSLTest(LimitedTestCase):
|
||||
def serve(listener):
|
||||
conn, _ = listener.accept()
|
||||
conn.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, BUFFER_SIZE)
|
||||
self.assertEqual(conn.read(8), 'request')
|
||||
conn.write('response')
|
||||
self.assertEqual(conn.read(8), b'request')
|
||||
conn.write(b'response')
|
||||
|
||||
stage_1.wait()
|
||||
conn.sendall('x' * SENDALL_SIZE)
|
||||
conn.sendall(b'x' * SENDALL_SIZE)
|
||||
|
||||
server_sock = listen_ssl_socket()
|
||||
server_coro = eventlet.spawn(serve, server_sock)
|
||||
@@ -143,8 +143,8 @@ class SSLTest(LimitedTestCase):
|
||||
client_sock = eventlet.connect(server_sock.getsockname())
|
||||
client_sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, BUFFER_SIZE)
|
||||
client = util.wrap_ssl(client_sock)
|
||||
client.write('request')
|
||||
self.assertEqual(client.read(8), 'response')
|
||||
client.write(b'request')
|
||||
self.assertEqual(client.read(8), b'response')
|
||||
stage_1.send()
|
||||
|
||||
check_idle_cpu_usage(0.2, 0.1)
|
||||
@@ -154,14 +154,14 @@ class SSLTest(LimitedTestCase):
|
||||
def test_greensslobject(self):
|
||||
def serve(listener):
|
||||
sock, addr = listener.accept()
|
||||
sock.write('content')
|
||||
sock.write(b'content')
|
||||
greenio.shutdown_safe(sock)
|
||||
sock.close()
|
||||
listener = listen_ssl_socket(('', 0))
|
||||
killer = eventlet.spawn(serve, listener)
|
||||
eventlet.spawn(serve, listener)
|
||||
client = ssl(eventlet.connect(('localhost', listener.getsockname()[1])))
|
||||
self.assertEquals(client.read(1024), 'content')
|
||||
self.assertEquals(client.read(1024), '')
|
||||
self.assertEquals(client.read(1024), b'content')
|
||||
self.assertEquals(client.read(1024), b'')
|
||||
|
||||
@skip_if_no_ssl
|
||||
def test_regression_gh_17(self):
|
||||
@@ -170,13 +170,13 @@ class SSLTest(LimitedTestCase):
|
||||
|
||||
# to simulate condition mentioned in GH-17
|
||||
sock._sslobj = None
|
||||
sock.sendall('some data')
|
||||
sock.sendall(b'some data')
|
||||
greenio.shutdown_safe(sock)
|
||||
sock.close()
|
||||
|
||||
listener = listen_ssl_socket(('', 0))
|
||||
killer = eventlet.spawn(serve, listener)
|
||||
client = ssl(eventlet.connect(('localhost', listener.getsockname()[1])))
|
||||
eventlet.spawn(serve, listener)
|
||||
ssl(eventlet.connect(('localhost', listener.getsockname()[1])))
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
||||
@@ -33,9 +33,9 @@ def handle_request(s, raise_on_timeout):
|
||||
return
|
||||
#print('handle_request - accepted')
|
||||
res = conn.recv(100)
|
||||
assert res == 'hello', repr(res)
|
||||
assert res == b'hello', repr(res)
|
||||
#print('handle_request - recvd %r' % res)
|
||||
res = conn.send('bye')
|
||||
res = conn.send(b'bye')
|
||||
#print('handle_request - sent %r' % res)
|
||||
#print('handle_request - conn refcount: %s' % sys.getrefcount(conn))
|
||||
#conn.close()
|
||||
@@ -46,10 +46,10 @@ def make_request(port):
|
||||
s = socket.socket()
|
||||
s.connect(('localhost', port))
|
||||
#print('make_request - connected')
|
||||
res = s.send('hello')
|
||||
res = s.send(b'hello')
|
||||
#print('make_request - sent %s' % res)
|
||||
res = s.recv(100)
|
||||
assert res == 'bye', repr(res)
|
||||
assert res == b'bye', repr(res)
|
||||
#print('make_request - recvd %r' % res)
|
||||
#s.close()
|
||||
|
||||
@@ -59,7 +59,7 @@ def run_interaction(run_client):
|
||||
start_new_thread(handle_request, (s, run_client))
|
||||
if run_client:
|
||||
start_new_thread(make_request, (port,))
|
||||
sleep(0.1+SOCKET_TIMEOUT)
|
||||
sleep(0.1 + SOCKET_TIMEOUT)
|
||||
#print(sys.getrefcount(s.fd))
|
||||
#s.close()
|
||||
return weakref.ref(s.fd)
|
||||
@@ -74,7 +74,7 @@ def run_and_check(run_client):
|
||||
for x in gc.get_referrers(w()):
|
||||
print(pformat(x))
|
||||
for y in gc.get_referrers(x):
|
||||
print('-', pformat(y))
|
||||
print('- {0}'.format(pformat(y)))
|
||||
raise AssertionError('server should be dead by now')
|
||||
|
||||
|
||||
@@ -82,10 +82,11 @@ def test_clean_exit():
|
||||
run_and_check(True)
|
||||
run_and_check(True)
|
||||
|
||||
|
||||
def test_timeout_exit():
|
||||
run_and_check(False)
|
||||
run_and_check(False)
|
||||
|
||||
|
||||
if __name__=='__main__':
|
||||
unittest.main()
|
||||
|
||||
|
||||
3
tox.ini
3
tox.ini
@@ -38,11 +38,14 @@ commands =
|
||||
eventlet/green/__init__.py \
|
||||
eventlet/green/_socket_nodns.py \
|
||||
eventlet/green/ftplib.py \
|
||||
eventlet/green/httplib.py \
|
||||
eventlet/green/OpenSSL/__init__.py \
|
||||
eventlet/green/subprocess.py \
|
||||
eventlet/green/time.py \
|
||||
eventlet/green/urllib.py \
|
||||
eventlet/hubs/__init__.py \
|
||||
eventlet/hubs/timer.py \
|
||||
eventlet/pool.py \
|
||||
eventlet/semaphore.py \
|
||||
eventlet/support/__init__.py \
|
||||
tests/__init__.py \
|
||||
|
||||
Reference in New Issue
Block a user