summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Harney <eharney@redhat.com>2023-01-05 14:29:36 -0500
committerEric Harney <eharney@redhat.com>2023-03-07 12:28:45 -0500
commitc75b3260c844464829bcbc18460684cc69e89259 (patch)
treeafd9596b642b69694b5da3545b05e07cb9f7f644
parentee8e06de8b96541f3fc2bad41436d9caa5a9f47e (diff)
downloadcinder-c75b3260c844464829bcbc18460684cc69e89259.tar.gz
test_rbd_iscsi: Make tests compatible with python 3.11
This makes these tests work in Python 3.11. Also includes a few cleanups such as reducing storing the driver in "self", and removal of unneeded fakes code for rbd_iscsi_client. Related-Bug: #2000436 Change-Id: I471ce2887a9884a5478a303e4b4db9cf8e55b6fb
-rw-r--r--cinder/tests/unit/volume/drivers/ceph/fake_rbd_iscsi_client.py25
-rw-r--r--cinder/tests/unit/volume/drivers/ceph/fake_rbd_iscsi_client_exceptions.py116
-rw-r--r--cinder/tests/unit/volume/drivers/ceph/test_rbd_iscsi.py168
3 files changed, 86 insertions, 223 deletions
diff --git a/cinder/tests/unit/volume/drivers/ceph/fake_rbd_iscsi_client.py b/cinder/tests/unit/volume/drivers/ceph/fake_rbd_iscsi_client.py
deleted file mode 100644
index 3f6555004..000000000
--- a/cinder/tests/unit/volume/drivers/ceph/fake_rbd_iscsi_client.py
+++ /dev/null
@@ -1,25 +0,0 @@
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-"""Fake rbd-iscsi-client for testing without installing the client."""
-
-import sys
-from unittest import mock
-
-from cinder.tests.unit.volume.drivers.ceph \
- import fake_rbd_iscsi_client_exceptions as clientexceptions
-
-rbdclient = mock.MagicMock()
-rbdclient.version = "0.1.5"
-rbdclient.exceptions = clientexceptions
-
-sys.modules['rbd_iscsi_client'] = rbdclient
diff --git a/cinder/tests/unit/volume/drivers/ceph/fake_rbd_iscsi_client_exceptions.py b/cinder/tests/unit/volume/drivers/ceph/fake_rbd_iscsi_client_exceptions.py
deleted file mode 100644
index 7a70ce755..000000000
--- a/cinder/tests/unit/volume/drivers/ceph/fake_rbd_iscsi_client_exceptions.py
+++ /dev/null
@@ -1,116 +0,0 @@
-# Licensed under the Apache License, Version 2.0 (the "License"); you may
-# not use this file except in compliance with the License. You may obtain
-# a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-# License for the specific language governing permissions and limitations
-# under the License.
-#
-"""Fake client exceptions to use."""
-
-
-class UnsupportedVersion(Exception):
- """Unsupported version of the client."""
- pass
-
-
-class ClientException(Exception):
- """The base exception class for these fake exceptions."""
- _error_code = None
- _error_desc = None
- _error_ref = None
-
- _debug1 = None
- _debug2 = None
-
- def __init__(self, error=None):
- if error:
- if 'code' in error:
- self._error_code = error['code']
- if 'desc' in error:
- self._error_desc = error['desc']
- if 'ref' in error:
- self._error_ref = error['ref']
-
- if 'debug1' in error:
- self._debug1 = error['debug1']
- if 'debug2' in error:
- self._debug2 = error['debug2']
-
- def get_code(self):
- return self._error_code
-
- def get_description(self):
- return self._error_desc
-
- def get_ref(self):
- return self._error_ref
-
- def __str__(self):
- formatted_string = self.message
- if self.http_status:
- formatted_string += " (HTTP %s)" % self.http_status
- if self._error_code:
- formatted_string += " %s" % self._error_code
- if self._error_desc:
- formatted_string += " - %s" % self._error_desc
- if self._error_ref:
- formatted_string += " - %s" % self._error_ref
-
- if self._debug1:
- formatted_string += " (1: '%s')" % self._debug1
-
- if self._debug2:
- formatted_string += " (2: '%s')" % self._debug2
-
- return formatted_string
-
-
-class HTTPConflict(ClientException):
- http_status = 409
- message = "Conflict"
-
- def __init__(self, error=None):
- if error:
- super(HTTPConflict, self).__init__(error)
- if 'message' in error:
- self._error_desc = error['message']
-
- def get_description(self):
- return self._error_desc
-
-
-class HTTPNotFound(ClientException):
- http_status = 404
- message = "Not found"
-
-
-class HTTPForbidden(ClientException):
- http_status = 403
- message = "Forbidden"
-
-
-class HTTPBadRequest(ClientException):
- http_status = 400
- message = "Bad request"
-
-
-class HTTPUnauthorized(ClientException):
- http_status = 401
- message = "Unauthorized"
-
-
-class HTTPServerError(ClientException):
- http_status = 500
- message = "Error"
-
- def __init__(self, error=None):
- if error and 'message' in error:
- self._error_desc = error['message']
-
- def get_description(self):
- return self._error_desc
diff --git a/cinder/tests/unit/volume/drivers/ceph/test_rbd_iscsi.py b/cinder/tests/unit/volume/drivers/ceph/test_rbd_iscsi.py
index d593345b6..dab0b2996 100644
--- a/cinder/tests/unit/volume/drivers/ceph/test_rbd_iscsi.py
+++ b/cinder/tests/unit/volume/drivers/ceph/test_rbd_iscsi.py
@@ -23,8 +23,6 @@ from cinder import exception
from cinder.tests.unit import fake_constants as fake
from cinder.tests.unit import fake_volume
from cinder.tests.unit import test
-from cinder.tests.unit.volume.drivers.ceph \
- import fake_rbd_iscsi_client as fake_client
import cinder.volume.drivers.ceph.rbd_iscsi as driver
# This is used to collect raised exceptions so that tests may check what was
@@ -43,12 +41,6 @@ class RBDISCSITestCase(test.TestCase):
self.context = context.get_admin_context()
- # bogus access to prevent pep8 violation
- # from the import of fake_client.
- # fake_client must be imported to create the fake
- # rbd_iscsi_client system module
- fake_client.rbdclient
-
self.fake_target_iqn = 'iqn.2019-01.com.suse.iscsi-gw:iscsi-igw'
self.fake_valid_response = {'status': '200'}
@@ -96,30 +88,19 @@ class RBDISCSITestCase(test.TestCase):
config.rbd_iscsi_api_url = 'http://fake.com:5000'
return config
- @mock.patch(
- 'rbd_iscsi_client.client.RBDISCSIClient',
- spec=True,
- )
- def setup_mock_client(self, _m_client, config=None, mock_conf=None):
- _m_client = _m_client.return_value
-
- # Configure the base constants, defaults etc...
- if mock_conf:
- _m_client.configure_mock(**mock_conf)
-
- if config is None:
- config = self.setup_configuration()
-
- self.driver = driver.RBDISCSIDriver(configuration=config)
- self.driver.set_initialized()
- return _m_client
-
- @mock.patch('rbd_iscsi_client.version', '0.1.0')
- def test_unsupported_client_version(self):
- self.setup_mock_client()
- with mock.patch('cinder.volume.drivers.rbd.RBDDriver.do_setup'):
- self.assertRaises(exception.InvalidInput,
- self.driver.do_setup, None)
+ @mock.patch('cinder.volume.drivers.rbd.RBDDriver.do_setup',
+ new=mock.MagicMock())
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.client')
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.rbd_iscsi_client')
+ def test_unsupported_client_version(self, m_rbd_iscsi_client, m_client):
+ m_rbd_iscsi_client.version = '0.1.0'
+ m_client.version = '0.1.0'
+ drv = driver.RBDISCSIDriver(configuration=self.setup_configuration())
+ drv.set_initialized()
+ self.assertRaisesRegex(exception.InvalidInput,
+ 'version',
+ drv.do_setup,
+ None)
@ddt.data({'user': None, 'password': 'foo',
'url': 'http://fake.com:5000', 'iqn': None},
@@ -133,40 +114,55 @@ class RBDISCSITestCase(test.TestCase):
'url': 'fake', 'iqn': None},
)
@ddt.unpack
- def test_min_config(self, user, password, url, iqn):
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.client')
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.rbd_iscsi_client')
+ def test_min_config(self, m_rbd_iscsi_client, m_client,
+ user, password, url, iqn):
config = self.setup_configuration()
config.rbd_iscsi_api_user = user
config.rbd_iscsi_api_password = password
config.rbd_iscsi_api_url = url
config.rbd_iscsi_target_iqn = iqn
- self.setup_mock_client(config=config)
+
+ drv = driver.RBDISCSIDriver(configuration=config)
+ drv.set_initialized()
with mock.patch('cinder.volume.drivers.rbd.RBDDriver'
'.check_for_setup_error'):
self.assertRaises(exception.InvalidConfigurationValue,
- self.driver.check_for_setup_error)
+ drv.check_for_setup_error)
@ddt.data({'response': None},
{'response': {'nothing': 'nothing'}},
{'response': {'status': '300'}})
@ddt.unpack
- def test_do_setup(self, response):
- mock_conf = {
- 'get_api.return_value': (response, None)}
- mock_client = self.setup_mock_client(mock_conf=mock_conf)
-
- with mock.patch('cinder.volume.drivers.rbd.RBDDriver.do_setup'), \
- mock.patch.object(driver.RBDISCSIDriver,
- '_create_client') as mock_create_client:
- mock_create_client.return_value = mock_client
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.RBDISCSIDriver.'
+ '_create_client')
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.client')
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.rbd_iscsi_client')
+ def test_do_setup(self, m_rbd_iscsi_client, m_client, m_create_client,
+ response):
+ m_create_client.return_value.get_api.return_value = (response, None)
+ m_client.version = '3.0.0'
+ m_rbd_iscsi_client.version = '3.0.0'
+
+ drv = driver.RBDISCSIDriver(configuration=self.setup_configuration())
+ drv.set_initialized()
+
+ with mock.patch('cinder.volume.drivers.rbd.RBDDriver.do_setup'):
self.assertRaises(exception.InvalidConfigurationValue,
- self.driver.do_setup, None)
+ drv.do_setup, None)
- @mock.patch('rbd_iscsi_client.version', "0.1.4")
- def test_unsupported_version(self):
- self.setup_mock_client()
- self.assertRaises(exception.InvalidInput,
- self.driver._create_client)
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.client')
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.rbd_iscsi_client')
+ def test_unsupported_version(self, m_rbd_iscsi_client, m_client):
+ m_rbd_iscsi_client.version = '0.1.4'
+ drv = driver.RBDISCSIDriver(configuration=self.setup_configuration())
+ drv.set_initialized()
+
+ self.assertRaisesRegex(exception.InvalidInput,
+ 'Invalid rbd_iscsi_client version found',
+ drv._create_client)
@ddt.data({'status': '200',
'target_iqn': 'iqn.2019-01.com.suse.iscsi-gw:iscsi-igw',
@@ -176,35 +172,40 @@ class RBDISCSITestCase(test.TestCase):
'clients': None}
)
@ddt.unpack
- def test__get_clients(self, status, target_iqn, clients):
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.RBDISCSIDriver.'
+ '_create_client')
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.client')
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.rbd_iscsi_client')
+ def test__get_clients(self, m_rbd_iscsi_client, m_client, m_create_client,
+ status, target_iqn, clients):
+ m_create_client.return_value.get_api.return_value = (
+ self.fake_valid_response, None)
config = self.setup_configuration()
config.rbd_iscsi_target_iqn = target_iqn
+ drv = driver.RBDISCSIDriver(configuration=config)
+ drv.set_initialized()
+
response = self.fake_clients['response']
response['status'] = status
response['content-location'] = (
response['content-location'].replace('XX_REPLACE_ME', target_iqn))
body = self.fake_clients['body']
- mock_conf = {
- 'get_clients.return_value': (response, body),
- 'get_api.return_value': (self.fake_valid_response, None)
- }
- mock_client = self.setup_mock_client(mock_conf=mock_conf,
- config=config)
-
- with mock.patch('cinder.volume.drivers.rbd.RBDDriver.do_setup'), \
- mock.patch.object(driver.RBDISCSIDriver,
- '_create_client') as mock_create_client:
- mock_create_client.return_value = mock_client
- self.driver.do_setup(None)
+
+ m_create_client.return_value.get_clients.return_value = (response,
+ body)
+
+ with mock.patch('cinder.volume.drivers.rbd.RBDDriver.do_setup'):
+ drv.do_setup(None)
if status == '200':
- actual_response = self.driver._get_clients()
+ actual_response = drv._get_clients()
self.assertEqual(actual_response, body)
else:
# we expect an exception
- self.assertRaises(exception.VolumeBackendAPIException,
- self.driver._get_clients)
+ self.assertRaisesRegex(exception.VolumeBackendAPIException,
+ 'Failed to get_clients()',
+ drv._get_clients)
@ddt.data({'status': '200',
'body': {'created': 'someday',
@@ -215,32 +216,35 @@ class RBDISCSITestCase(test.TestCase):
{'status': '300',
'body': None})
@ddt.unpack
- def test__get_config(self, status, body):
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.RBDISCSIDriver.'
+ '_create_client')
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.client')
+ @mock.patch('cinder.volume.drivers.ceph.rbd_iscsi.rbd_iscsi_client')
+ def test__get_config(self, m_rbd_iscsi_client, m_client, m_create_client,
+ status, body):
+ m_create_client.return_value.get_api.return_value = (
+ self.fake_valid_response, None)
config = self.setup_configuration()
config.rbd_iscsi_target_iqn = self.fake_target_iqn
+ drv = driver.RBDISCSIDriver(configuration=config)
+ drv.set_initialized()
+
response = self.fake_clients['response']
response['status'] = status
response['content-location'] = (
response['content-location'].replace('XX_REPLACE_ME',
self.fake_target_iqn))
- mock_conf = {
- 'get_config.return_value': (response, body),
- 'get_api.return_value': (self.fake_valid_response, None)
- }
- mock_client = self.setup_mock_client(mock_conf=mock_conf,
- config=config)
-
- with mock.patch('cinder.volume.drivers.rbd.RBDDriver.do_setup'), \
- mock.patch.object(driver.RBDISCSIDriver,
- '_create_client') as mock_create_client:
- mock_create_client.return_value = mock_client
- self.driver.do_setup(None)
+ m_create_client.return_value.get_config.return_value = (response, body)
+
+ with mock.patch('cinder.volume.drivers.rbd.RBDDriver.do_setup'):
+ drv.do_setup(None)
if status == '200':
- actual_response = self.driver._get_config()
+ actual_response = drv._get_config()
self.assertEqual(body, actual_response)
else:
# we expect an exception
- self.assertRaises(exception.VolumeBackendAPIException,
- self.driver._get_config)
+ self.assertRaisesRegex(exception.VolumeBackendAPIException,
+ 'Failed to get_config()',
+ drv._get_config)