Replace httplib.HTTPSConnection in unittests
SSL Verification is from now on enabled by default for the TestOpenStackClient. So far no unittests was making actively use of httplib.HTTPSConnection. Intention is to reduce noise of audits/scanners which look for Python 2.x httplib.HTTPSConnection missing SSL verification. By completely abandoning the use of httplib.HTTPSConnection. Change-Id: Ic0352cf453d5c41f09084a6d68b3393b8ddda84a Partial-Bug: 1188189
This commit is contained in:
parent
c2807f0ed4
commit
0f9652d92e
|
@ -12,7 +12,8 @@
|
|||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import httplib
|
||||
import netaddr
|
||||
import requests
|
||||
import urlparse
|
||||
|
||||
from cinder.openstack.common import jsonutils
|
||||
|
@ -30,8 +31,8 @@ class OpenStackApiException(Exception):
|
|||
|
||||
if response:
|
||||
message = _('%(message)s\nStatus Code: %(_status)s\n'
|
||||
'Body: %(_body)s') % {'_status': response.status,
|
||||
'_body': response.read()}
|
||||
'Body: %(_body)s') % {'_status': response.status_code,
|
||||
'_body': response.text}
|
||||
|
||||
super(OpenStackApiException, self).__init__(message)
|
||||
|
||||
|
@ -76,7 +77,8 @@ class TestOpenStackClient(object):
|
|||
# default project_id
|
||||
self.project_id = 'openstack'
|
||||
|
||||
def request(self, url, method='GET', body=None, headers=None):
|
||||
def request(self, url, method='GET', body=None, headers=None,
|
||||
ssl_verify=True, stream=False):
|
||||
_headers = {'Content-Type': 'application/json'}
|
||||
_headers.update(headers or {})
|
||||
|
||||
|
@ -85,14 +87,8 @@ class TestOpenStackClient(object):
|
|||
hostname = parsed_url.hostname
|
||||
scheme = parsed_url.scheme
|
||||
|
||||
if scheme == 'http':
|
||||
conn = httplib.HTTPConnection(hostname,
|
||||
port=port)
|
||||
elif scheme == 'https':
|
||||
conn = httplib.HTTPSConnection(hostname,
|
||||
port=port)
|
||||
else:
|
||||
raise OpenStackApiException("Unknown scheme: %s" % url)
|
||||
if netaddr.valid_ipv6(hostname):
|
||||
hostname = "[%s]" % hostname
|
||||
|
||||
relative_url = parsed_url.path
|
||||
if parsed_url.query:
|
||||
|
@ -102,8 +98,14 @@ class TestOpenStackClient(object):
|
|||
if body:
|
||||
LOG.info(_("Body: %s") % body)
|
||||
|
||||
conn.request(method, relative_url, body, _headers)
|
||||
response = conn.getresponse()
|
||||
if port:
|
||||
_url = "%s://%s:%d%s" % (scheme, hostname, int(port), relative_url)
|
||||
else:
|
||||
_url = "%s://%s%s" % (scheme, hostname, relative_url)
|
||||
|
||||
response = requests.request(method, _url, data=body, headers=_headers,
|
||||
verify=ssl_verify, stream=stream)
|
||||
|
||||
return response
|
||||
|
||||
def _authenticate(self):
|
||||
|
@ -117,18 +119,14 @@ class TestOpenStackClient(object):
|
|||
response = self.request(auth_uri,
|
||||
headers=headers)
|
||||
|
||||
http_status = response.status
|
||||
http_status = response.status_code
|
||||
LOG.debug(_("%(auth_uri)s => code %(http_status)s"),
|
||||
{'auth_uri': auth_uri, 'http_status': http_status})
|
||||
|
||||
if http_status == 401:
|
||||
raise OpenStackApiAuthenticationException(response=response)
|
||||
|
||||
auth_headers = {}
|
||||
for k, v in response.getheaders():
|
||||
auth_headers[k] = v
|
||||
|
||||
self.auth_result = auth_headers
|
||||
self.auth_result = response.headers
|
||||
return self.auth_result
|
||||
|
||||
def api_request(self, relative_uri, check_response_status=None, **kwargs):
|
||||
|
@ -144,7 +142,7 @@ class TestOpenStackClient(object):
|
|||
|
||||
response = self.request(full_uri, **kwargs)
|
||||
|
||||
http_status = response.status
|
||||
http_status = response.status_code
|
||||
LOG.debug(_("%(relative_uri)s => code %(http_status)s"),
|
||||
{'relative_uri': relative_uri, 'http_status': http_status})
|
||||
|
||||
|
@ -162,7 +160,7 @@ class TestOpenStackClient(object):
|
|||
return response
|
||||
|
||||
def _decode_json(self, response):
|
||||
body = response.read()
|
||||
body = response.text
|
||||
LOG.debug(_("Decoding JSON: %s") % (body))
|
||||
if body:
|
||||
return jsonutils.loads(body)
|
||||
|
|
|
@ -36,6 +36,6 @@ class ExtensionsTest(integrated_helpers._IntegratedTestBase):
|
|||
def test_get_foxnsocks(self):
|
||||
"""Simple check that fox-n-socks works."""
|
||||
response = self.api.api_request('/foxnsocks')
|
||||
foxnsocks = response.read()
|
||||
foxnsocks = response.text
|
||||
LOG.debug("foxnsocks: %s" % foxnsocks)
|
||||
self.assertEqual('Try to say this Mr. Knox, sir...', foxnsocks)
|
||||
|
|
|
@ -42,8 +42,9 @@ class XmlTests(integrated_helpers._IntegratedTestBase):
|
|||
headers = {}
|
||||
headers['Accept'] = 'application/xml'
|
||||
|
||||
response = self.api.api_request('/volumes', headers=headers)
|
||||
data = response.read()
|
||||
response = self.api.api_request('/volumes', headers=headers,
|
||||
stream=True)
|
||||
data = response.raw
|
||||
LOG.warn("data: %s" % data)
|
||||
root = etree.XML(data)
|
||||
root = etree.parse(data).getroot()
|
||||
self.assertEqual(root.nsmap.get(None), common.XML_NS_V1)
|
||||
|
|
Loading…
Reference in New Issue