From 17b1214035b67acb75c3d77b16a27adb3874eda2 Mon Sep 17 00:00:00 2001 From: Jakub Stasiak Date: Sat, 10 Aug 2013 11:15:12 +0100 Subject: [PATCH] green.ssl: Fix NameError GH-17 https://github.com/eventlet/eventlet/issues/17 --- eventlet/green/ssl.py | 2 +- tests/ssl_test.py | 46 ++++++++++++++++++++++++++++++++----------- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/eventlet/green/ssl.py b/eventlet/green/ssl.py index 6848c1d..c8abce7 100644 --- a/eventlet/green/ssl.py +++ b/eventlet/green/ssl.py @@ -136,7 +136,7 @@ class GreenSSLSocket(__ssl.SSLSocket): else: while True: try: - return socket.sendall(self, buflen, flags) + return socket.sendall(self, data, flags) except orig_socket.error, e: if self.act_non_blocking: raise diff --git a/tests/ssl_test.py b/tests/ssl_test.py index c3c3aa0..2bd5501 100644 --- a/tests/ssl_test.py +++ b/tests/ssl_test.py @@ -1,9 +1,17 @@ -from tests import LimitedTestCase, certificate_file, private_key_file, check_idle_cpu_usage -from tests import skip_if_no_ssl +import socket +import warnings from unittest import main + import eventlet from eventlet import util, greenio -import socket +try: + from eventlet.green.socket import ssl +except ImportError: + pass +from tests import ( + LimitedTestCase, certificate_file, private_key_file, check_idle_cpu_usage, + skip_if_no_ssl +) def listen_ssl_socket(address=('127.0.0.1', 0)): @@ -16,6 +24,15 @@ def listen_ssl_socket(address=('127.0.0.1', 0)): class SSLTest(LimitedTestCase): + def setUp(self): + # disabling socket.ssl warnings because we're testing it here + warnings.filterwarnings( + action='ignore', + message='.*socket.ssl.*', + category=DeprecationWarning) + + super(SSLTest, self).setUp() + @skip_if_no_ssl def test_duplex_response(self): def serve(listener): @@ -133,16 +150,8 @@ class SSLTest(LimitedTestCase): check_idle_cpu_usage(0.2, 0.1) server_coro.kill() - -class SocketSSLTest(LimitedTestCase): @skip_if_no_ssl def test_greensslobject(self): - import warnings - # disabling socket.ssl warnings because we're testing it here - warnings.filterwarnings(action = 'ignore', - message='.*socket.ssl.*', - category=DeprecationWarning) - def serve(listener): sock, addr = listener.accept() sock.write('content') @@ -150,11 +159,24 @@ class SocketSSLTest(LimitedTestCase): sock.close() listener = listen_ssl_socket(('', 0)) killer = eventlet.spawn(serve, listener) - from eventlet.green.socket import ssl client = ssl(eventlet.connect(('localhost', listener.getsockname()[1]))) self.assertEquals(client.read(1024), 'content') self.assertEquals(client.read(1024), '') + @skip_if_no_ssl + def test_regression_gh_17(self): + def serve(listener): + sock, addr = listener.accept() + + # to simulate condition mentioned in GH-17 + sock._sslobj = None + sock.sendall('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]))) if __name__ == '__main__': main()