Merge "Make test_proxy work independent of env vars"

This commit is contained in:
Jenkins 2015-08-03 20:26:24 +00:00 committed by Gerrit Code Review
commit 708e9a5f05

View File

@ -25,7 +25,6 @@ import six
from six import StringIO from six import StringIO
from six.moves import range from six.moves import range
from test.unit import FakeLogger from test.unit import FakeLogger
import eventlet
from eventlet.green import urllib2 from eventlet.green import urllib2
from swift.common import internal_client from swift.common import internal_client
from swift.common import swob from swift.common import swob
@ -1266,47 +1265,53 @@ class TestSimpleClient(unittest.TestCase):
self.assertEqual([None, None], retval) self.assertEqual([None, None], retval)
def test_proxy(self): def test_proxy(self):
running = True # check that proxy arg is passed through to the urllib Request
scheme = 'http'
def handle(sock): proxy_host = '127.0.0.1:80'
while running: proxy = '%s://%s' % (scheme, proxy_host)
try:
with eventlet.Timeout(0.1):
(conn, addr) = sock.accept()
except eventlet.Timeout:
continue
else:
conn.send('HTTP/1.1 503 Server Error')
conn.close()
sock.close()
sock = eventlet.listen(('', 0))
port = sock.getsockname()[1]
proxy = 'http://127.0.0.1:%s' % port
url = 'https://127.0.0.1:1/a' url = 'https://127.0.0.1:1/a'
server = eventlet.spawn(handle, sock)
try:
headers = {'Content-Length': '0'}
with mock.patch('swift.common.internal_client.sleep'):
try:
internal_client.put_object(
url, container='c', name='o1', headers=headers,
contents='', proxy=proxy, timeout=0.1, retries=0)
except urllib2.HTTPError as e:
self.assertEqual(e.code, 503)
except urllib2.URLError as e:
if 'ECONNREFUSED' in str(e):
self.fail(
"Got %s which probably means the http proxy "
"settings were not used" % e)
else:
raise e
else:
self.fail('Unexpected successful response')
finally:
running = False
server.wait()
class FakeConn(object):
def read(self):
return 'irrelevant'
mocked = 'swift.common.internal_client.urllib2.urlopen'
# module level methods
for func in (internal_client.put_object,
internal_client.delete_object):
with mock.patch(mocked) as mock_urlopen:
mock_urlopen.return_value = FakeConn()
func(url, container='c', name='o1', contents='', proxy=proxy,
timeout=0.1, retries=0)
self.assertEqual(1, mock_urlopen.call_count)
args, kwargs = mock_urlopen.call_args
self.assertEqual(1, len(args))
self.assertEqual(1, len(kwargs))
self.assertEqual(0.1, kwargs['timeout'])
self.assertTrue(isinstance(args[0], urllib2.Request))
self.assertEqual(proxy_host, args[0].host)
self.assertEqual(scheme, args[0].type)
# class methods
content = mock.MagicMock()
cl = internal_client.SimpleClient(url)
scenarios = ((cl.get_account, []),
(cl.get_container, ['c']),
(cl.put_container, ['c']),
(cl.put_object, ['c', 'o', content]))
for scenario in scenarios:
with mock.patch(mocked) as mock_urlopen:
mock_urlopen.return_value = FakeConn()
scenario[0](*scenario[1], proxy=proxy, timeout=0.1)
self.assertEqual(1, mock_urlopen.call_count)
args, kwargs = mock_urlopen.call_args
self.assertEqual(1, len(args))
self.assertEqual(1, len(kwargs))
self.assertEqual(0.1, kwargs['timeout'])
self.assertTrue(isinstance(args[0], urllib2.Request))
self.assertEqual(proxy_host, args[0].host)
self.assertEqual(scheme, args[0].type)
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()