Big Switch: Check source_address attribute exists
Check that the source_address attribute exists on HTTPSConnection objects before referencing it since it's not present on python 2.6 deployments. If it does not exist, create a socket connection without specifying the source. Closes-Bug: #1316382 Change-Id: Ica10d23cc6de81ae56f711937f208c7321c77f36
This commit is contained in:
parent
c33013c46a
commit
f5e4cf8e3e
@ -566,8 +566,13 @@ class HTTPSConnectionWithValidation(httplib.HTTPSConnection):
|
|||||||
combined_cert = None
|
combined_cert = None
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
|
try:
|
||||||
sock = socket.create_connection((self.host, self.port),
|
sock = socket.create_connection((self.host, self.port),
|
||||||
self.timeout, self.source_address)
|
self.timeout, self.source_address)
|
||||||
|
except AttributeError:
|
||||||
|
# python 2.6 doesn't have the source_address attribute
|
||||||
|
sock = socket.create_connection((self.host, self.port),
|
||||||
|
self.timeout)
|
||||||
if self._tunnel_host:
|
if self._tunnel_host:
|
||||||
self.sock = sock
|
self.sock = sock
|
||||||
self._tunnel()
|
self._tunnel()
|
||||||
|
@ -402,3 +402,20 @@ class ServerManagerTests(test_rp.BigSwitchProxyPluginV2TestCase):
|
|||||||
self.assertEqual(con._tunnel_host, 'myproxy.local')
|
self.assertEqual(con._tunnel_host, 'myproxy.local')
|
||||||
self.assertEqual(con._tunnel_port, 3128)
|
self.assertEqual(con._tunnel_port, 3128)
|
||||||
self.assertEqual(con.sock, self.wrap_mock())
|
self.assertEqual(con.sock, self.wrap_mock())
|
||||||
|
|
||||||
|
|
||||||
|
class TestSockets(test_rp.BigSwitchProxyPluginV2TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(TestSockets, self).setUp()
|
||||||
|
# http patch must not be running or it will mangle the servermanager
|
||||||
|
# import where the https connection classes are defined
|
||||||
|
self.httpPatch.stop()
|
||||||
|
self.sm = importutils.import_module(SERVERMANAGER)
|
||||||
|
|
||||||
|
def test_socket_create_attempt(self):
|
||||||
|
# exercise the socket creation to make sure it works on both python
|
||||||
|
# versions
|
||||||
|
con = self.sm.HTTPSConnectionWithValidation('127.0.0.1', 0, timeout=1)
|
||||||
|
# if httpcon was created, a connect attempt should raise a socket error
|
||||||
|
self.assertRaises(socket.error, con.connect)
|
||||||
|
Loading…
Reference in New Issue
Block a user