Port test_netapp to Python 3
* Add close() method to FakeHttplibSocket, FakeDirectCmodeHTTPConnection, FakeDirect7modeHTTPConnection * Replace StringIO() with BytesIO() for socket buffers * makefile(): ignore optional arguments after mode * Fix bytes versus Unicode: use bytes for HTTP body. Encode HTTP body to UTF-8 and HTTP headers to Latin1. * tox.ini: add cinder.tests.unit.test_netapp to Python 3.4 Partial-Implements: blueprint cinder-python3 Change-Id: I3dc8c36a84ffbb47be3e85eed34518c6adad48ec
This commit is contained in:
parent
17e6aef23f
commit
28e9a94032
@ -67,8 +67,8 @@ class FakeHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
|
|||||||
class FakeHttplibSocket(object):
|
class FakeHttplibSocket(object):
|
||||||
"""A fake socket implementation for http_client.HTTPResponse."""
|
"""A fake socket implementation for http_client.HTTPResponse."""
|
||||||
def __init__(self, value):
|
def __init__(self, value):
|
||||||
self._rbuffer = six.StringIO(value)
|
self._rbuffer = six.BytesIO(value)
|
||||||
self._wbuffer = six.StringIO('')
|
self._wbuffer = six.BytesIO()
|
||||||
oldclose = self._wbuffer.close
|
oldclose = self._wbuffer.close
|
||||||
|
|
||||||
def newclose():
|
def newclose():
|
||||||
@ -76,24 +76,27 @@ class FakeHttplibSocket(object):
|
|||||||
oldclose()
|
oldclose()
|
||||||
self._wbuffer.close = newclose
|
self._wbuffer.close = newclose
|
||||||
|
|
||||||
def makefile(self, mode, _other):
|
def makefile(self, mode, *args):
|
||||||
"""Returns the socket's internal buffer"""
|
"""Returns the socket's internal buffer"""
|
||||||
if mode == 'r' or mode == 'rb':
|
if mode == 'r' or mode == 'rb':
|
||||||
return self._rbuffer
|
return self._rbuffer
|
||||||
if mode == 'w' or mode == 'wb':
|
if mode == 'w' or mode == 'wb':
|
||||||
return self._wbuffer
|
return self._wbuffer
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
pass
|
||||||
|
|
||||||
RESPONSE_PREFIX_DIRECT_CMODE = """<?xml version='1.0' encoding='UTF-8' ?>
|
|
||||||
|
RESPONSE_PREFIX_DIRECT_CMODE = b"""<?xml version='1.0' encoding='UTF-8' ?>
|
||||||
<!DOCTYPE netapp SYSTEM 'file:/etc/netapp_gx.dtd'>"""
|
<!DOCTYPE netapp SYSTEM 'file:/etc/netapp_gx.dtd'>"""
|
||||||
|
|
||||||
RESPONSE_PREFIX_DIRECT_7MODE = """<?xml version='1.0' encoding='UTF-8' ?>
|
RESPONSE_PREFIX_DIRECT_7MODE = b"""<?xml version='1.0' encoding='UTF-8' ?>
|
||||||
<!DOCTYPE netapp SYSTEM "/na_admin/netapp_filer.dtd">"""
|
<!DOCTYPE netapp SYSTEM "/na_admin/netapp_filer.dtd">"""
|
||||||
|
|
||||||
RESPONSE_PREFIX_DIRECT = """
|
RESPONSE_PREFIX_DIRECT = b"""
|
||||||
<netapp version='1.15' xmlns='http://www.netapp.com/filer/admin'>"""
|
<netapp version='1.15' xmlns='http://www.netapp.com/filer/admin'>"""
|
||||||
|
|
||||||
RESPONSE_SUFFIX_DIRECT = """</netapp>"""
|
RESPONSE_SUFFIX_DIRECT = b"""</netapp>"""
|
||||||
|
|
||||||
|
|
||||||
class FakeDirectCMODEServerHandler(FakeHTTPRequestHandler):
|
class FakeDirectCMODEServerHandler(FakeHTTPRequestHandler):
|
||||||
@ -431,6 +434,8 @@ class FakeDirectCMODEServerHandler(FakeHTTPRequestHandler):
|
|||||||
s.end_headers()
|
s.end_headers()
|
||||||
s.wfile.write(RESPONSE_PREFIX_DIRECT_CMODE)
|
s.wfile.write(RESPONSE_PREFIX_DIRECT_CMODE)
|
||||||
s.wfile.write(RESPONSE_PREFIX_DIRECT)
|
s.wfile.write(RESPONSE_PREFIX_DIRECT)
|
||||||
|
if isinstance(body, six.text_type):
|
||||||
|
body = body.encode('utf-8')
|
||||||
s.wfile.write(body)
|
s.wfile.write(body)
|
||||||
s.wfile.write(RESPONSE_SUFFIX_DIRECT)
|
s.wfile.write(RESPONSE_SUFFIX_DIRECT)
|
||||||
|
|
||||||
@ -466,8 +471,10 @@ class FakeDirectCmodeHTTPConnection(object):
|
|||||||
req_str = '%s %s HTTP/1.1\r\n' % (method, path)
|
req_str = '%s %s HTTP/1.1\r\n' % (method, path)
|
||||||
for key, value in headers.items():
|
for key, value in headers.items():
|
||||||
req_str += "%s: %s\r\n" % (key, value)
|
req_str += "%s: %s\r\n" % (key, value)
|
||||||
|
if isinstance(req_str, six.text_type):
|
||||||
|
req_str = req_str.encode('latin1')
|
||||||
if data:
|
if data:
|
||||||
req_str += '\r\n%s' % data
|
req_str += b'\r\n' + data
|
||||||
|
|
||||||
# NOTE(vish): normally the http transport normalizes from unicode
|
# NOTE(vish): normally the http transport normalizes from unicode
|
||||||
sock = FakeHttplibSocket(req_str.decode("latin-1").encode("utf-8"))
|
sock = FakeHttplibSocket(req_str.decode("latin-1").encode("utf-8"))
|
||||||
@ -489,6 +496,9 @@ class FakeDirectCmodeHTTPConnection(object):
|
|||||||
def getresponsebody(self):
|
def getresponsebody(self):
|
||||||
return self.sock.result
|
return self.sock.result
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class NetAppDirectCmodeISCSIDriverTestCase(test.TestCase):
|
class NetAppDirectCmodeISCSIDriverTestCase(test.TestCase):
|
||||||
"""Test case for NetAppISCSIDriver"""
|
"""Test case for NetAppISCSIDriver"""
|
||||||
@ -1174,6 +1184,8 @@ class FakeDirect7MODEServerHandler(FakeHTTPRequestHandler):
|
|||||||
s.end_headers()
|
s.end_headers()
|
||||||
s.wfile.write(RESPONSE_PREFIX_DIRECT_7MODE)
|
s.wfile.write(RESPONSE_PREFIX_DIRECT_7MODE)
|
||||||
s.wfile.write(RESPONSE_PREFIX_DIRECT)
|
s.wfile.write(RESPONSE_PREFIX_DIRECT)
|
||||||
|
if isinstance(body, six.text_type):
|
||||||
|
body = body.encode('utf-8')
|
||||||
s.wfile.write(body)
|
s.wfile.write(body)
|
||||||
s.wfile.write(RESPONSE_SUFFIX_DIRECT)
|
s.wfile.write(RESPONSE_SUFFIX_DIRECT)
|
||||||
|
|
||||||
@ -1194,8 +1206,10 @@ class FakeDirect7modeHTTPConnection(object):
|
|||||||
req_str = '%s %s HTTP/1.1\r\n' % (method, path)
|
req_str = '%s %s HTTP/1.1\r\n' % (method, path)
|
||||||
for key, value in headers.items():
|
for key, value in headers.items():
|
||||||
req_str += "%s: %s\r\n" % (key, value)
|
req_str += "%s: %s\r\n" % (key, value)
|
||||||
|
if isinstance(req_str, six.text_type):
|
||||||
|
req_str = req_str.encode('latin1')
|
||||||
if data:
|
if data:
|
||||||
req_str += '\r\n%s' % data
|
req_str += b'\r\n' + data
|
||||||
|
|
||||||
# NOTE(vish): normally the http transport normailizes from unicode
|
# NOTE(vish): normally the http transport normailizes from unicode
|
||||||
sock = FakeHttplibSocket(req_str.decode("latin-1").encode("utf-8"))
|
sock = FakeHttplibSocket(req_str.decode("latin-1").encode("utf-8"))
|
||||||
@ -1217,6 +1231,9 @@ class FakeDirect7modeHTTPConnection(object):
|
|||||||
def getresponsebody(self):
|
def getresponsebody(self):
|
||||||
return self.sock.result
|
return self.sock.result
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class NetAppDirect7modeISCSIDriverTestCase_NV(test.TestCase):
|
class NetAppDirect7modeISCSIDriverTestCase_NV(test.TestCase):
|
||||||
"""Test case for NetAppISCSIDriver without vfiler"""
|
"""Test case for NetAppISCSIDriver without vfiler"""
|
||||||
|
1
tox.ini
1
tox.ini
@ -79,6 +79,7 @@ commands =
|
|||||||
cinder.tests.unit.test_infortrend_cli \
|
cinder.tests.unit.test_infortrend_cli \
|
||||||
cinder.tests.unit.test_migrations \
|
cinder.tests.unit.test_migrations \
|
||||||
cinder.tests.unit.test_misc \
|
cinder.tests.unit.test_misc \
|
||||||
|
cinder.tests.unit.test_netapp \
|
||||||
cinder.tests.unit.test_netapp_nfs \
|
cinder.tests.unit.test_netapp_nfs \
|
||||||
cinder.tests.unit.test_nfs \
|
cinder.tests.unit.test_nfs \
|
||||||
cinder.tests.unit.test_nimble \
|
cinder.tests.unit.test_nimble \
|
||||||
|
Loading…
Reference in New Issue
Block a user