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
83551bab6e
commit
fd194e803f
@ -566,8 +566,13 @@ class HTTPSConnectionWithValidation(httplib.HTTPSConnection):
|
||||
combined_cert = None
|
||||
|
||||
def connect(self):
|
||||
try:
|
||||
sock = socket.create_connection((self.host, self.port),
|
||||
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:
|
||||
self.sock = sock
|
||||
self._tunnel()
|
||||
|
@ -402,3 +402,20 @@ class ServerManagerTests(test_rp.BigSwitchProxyPluginV2TestCase):
|
||||
self.assertEqual(con._tunnel_host, 'myproxy.local')
|
||||
self.assertEqual(con._tunnel_port, 3128)
|
||||
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