
This includes changes to WSGI, websocket, bytes/str/unicode handling, SSL, backdoor, greenio and tests. Some comments and conditionals (PY2/PY3) were added for clarity GH issues: Closes #106 Closes #111 Closes #118 Closes #141 Incidentally should also close #135 (reopen if didn't) cc #6
115 lines
3.3 KiB
Python
115 lines
3.3 KiB
Python
import os
|
|
from eventlet.support import six
|
|
from tests.patcher_test import ProcessBase
|
|
from tests import skip_with_pyevent
|
|
|
|
|
|
class Socket(ProcessBase):
|
|
def test_patched_thread(self):
|
|
new_mod = """from eventlet.green import socket
|
|
socket.gethostbyname('localhost')
|
|
socket.getaddrinfo('localhost', 80)
|
|
"""
|
|
os.environ['EVENTLET_TPOOL_DNS'] = 'yes'
|
|
try:
|
|
self.write_to_tempfile("newmod", new_mod)
|
|
output, lines = self.launch_subprocess('newmod.py')
|
|
self.assertEqual(len(lines), 1, lines)
|
|
finally:
|
|
del os.environ['EVENTLET_TPOOL_DNS']
|
|
|
|
|
|
class Tpool(ProcessBase):
|
|
@skip_with_pyevent
|
|
def test_tpool_size(self):
|
|
expected = "40"
|
|
normal = "20"
|
|
new_mod = """from eventlet import tpool
|
|
import eventlet
|
|
import time
|
|
current = [0]
|
|
highwater = [0]
|
|
def count():
|
|
current[0] += 1
|
|
time.sleep(0.1)
|
|
if current[0] > highwater[0]:
|
|
highwater[0] = current[0]
|
|
current[0] -= 1
|
|
expected = %s
|
|
normal = %s
|
|
p = eventlet.GreenPool()
|
|
for i in range(expected*2):
|
|
p.spawn(tpool.execute, count)
|
|
p.waitall()
|
|
assert highwater[0] > 20, "Highwater %%s <= %%s" %% (highwater[0], normal)
|
|
"""
|
|
os.environ['EVENTLET_THREADPOOL_SIZE'] = expected
|
|
try:
|
|
self.write_to_tempfile("newmod", new_mod % (expected, normal))
|
|
output, lines = self.launch_subprocess('newmod.py')
|
|
self.assertEqual(len(lines), 1, lines)
|
|
finally:
|
|
del os.environ['EVENTLET_THREADPOOL_SIZE']
|
|
|
|
def test_tpool_negative(self):
|
|
new_mod = """from eventlet import tpool
|
|
import eventlet
|
|
import time
|
|
def do():
|
|
print("should not get here")
|
|
try:
|
|
tpool.execute(do)
|
|
except AssertionError:
|
|
print("success")
|
|
"""
|
|
os.environ['EVENTLET_THREADPOOL_SIZE'] = "-1"
|
|
try:
|
|
self.write_to_tempfile("newmod", new_mod)
|
|
output, lines = self.launch_subprocess('newmod.py')
|
|
self.assertEqual(len(lines), 2, lines)
|
|
self.assertEqual(lines[0], "success", output)
|
|
finally:
|
|
del os.environ['EVENTLET_THREADPOOL_SIZE']
|
|
|
|
def test_tpool_zero(self):
|
|
new_mod = """from eventlet import tpool
|
|
import eventlet
|
|
import time
|
|
def do():
|
|
print("ran it")
|
|
tpool.execute(do)
|
|
"""
|
|
os.environ['EVENTLET_THREADPOOL_SIZE'] = "0"
|
|
try:
|
|
self.write_to_tempfile("newmod", new_mod)
|
|
output, lines = self.launch_subprocess('newmod.py')
|
|
self.assertEqual(len(lines), 4, lines)
|
|
self.assertEqual(lines[-2], 'ran it', lines)
|
|
assert 'Warning' in lines[1] or 'Warning' in lines[0], lines
|
|
finally:
|
|
del os.environ['EVENTLET_THREADPOOL_SIZE']
|
|
|
|
|
|
class Hub(ProcessBase):
|
|
|
|
def setUp(self):
|
|
super(Hub, self).setUp()
|
|
self.old_environ = os.environ.get('EVENTLET_HUB')
|
|
os.environ['EVENTLET_HUB'] = 'selects'
|
|
|
|
def tearDown(self):
|
|
if self.old_environ:
|
|
os.environ['EVENTLET_HUB'] = self.old_environ
|
|
else:
|
|
del os.environ['EVENTLET_HUB']
|
|
super(Hub, self).tearDown()
|
|
|
|
def test_eventlet_hub(self):
|
|
new_mod = """from eventlet import hubs
|
|
print(hubs.get_hub())
|
|
"""
|
|
self.write_to_tempfile("newmod", new_mod)
|
|
output, lines = self.launch_subprocess('newmod.py')
|
|
self.assertEqual(len(lines), 2, "\n".join(lines))
|
|
assert "selects" in lines[0]
|