Create custom assertTrue and assertFalse

Python's unittest framework assertTrue and assertFalse methods don't
check that the provided value is False or True, like the documentation
says:

  Note that this is equivalent to bool(expr) is True and not to expr is
  True (use assertIs(expr, True) for the latter).

According to the documentation we should try to avoid using it as much
as possible:

  This method should also be avoided when more specific methods are
  available (e.g.  assertEqual(a, b) instead of assertTrue(a == b)),
  because they provide a better error message in case of failure.

But in our current code we keep abusing its use in many ways, among
which we can easily find the following:

- Thinking it only matches False/True

- assertTrue(expected, actual) --> This will always be true as long as
bool(expected) is True, because actual is interpreted as the message to
return on failure.

- Incorrectly testing values, like checking for a tuple of the form
(True, {...}) instead of testing for True in the first position.

This patch fixes incorrect some of the incorrect uses of the methods and
overwrites default methods so that they behave the way many people think
they do:

- assertTrue(x) == assertIs(True,x)
- assertFalse(x) == assertIs(False,x)

This will hopefully help us prevent incorrect usage of the methods.

Change-Id: I1e8c82702932e6b6d940bd83d0a2d4494576a81b
This commit is contained in:
Gorka Eguileor 2017-08-30 21:20:35 +02:00
parent 2a92448c69
commit 720f07f0d6
28 changed files with 94 additions and 74 deletions

View File

@ -356,11 +356,28 @@ class TestCase(testtools.TestCase):
self.assertEqual(call[1], posargs[2])
def assertTrue(self, x, *args, **kwargs):
if isinstance(x, six.string_types):
raise AssertionError("%s (%s) is a string. Use a more "
"specific assertion such as assertEqual." %
(x, type(x)))
super(TestCase, self).assertTrue(x, *args, **kwargs)
"""Assert that value is True.
If original behavior is required we will need to do:
assertTrue(bool(result))
"""
# assertTrue uses msg but assertIs uses message keyword argument
args = list(args)
msg = kwargs.pop('msg', args.pop(0) if args else '')
kwargs.setdefault('message', msg)
self.assertIs(True, x, *args, **kwargs)
def assertFalse(self, x, *args, **kwargs):
"""Assert that value is False.
If original behavior is required we will need to do:
assertFalse(bool(result))
"""
# assertTrue uses msg but assertIs uses message keyword argument
args = list(args)
msg = kwargs.pop('msg', args.pop(0) if args else '')
kwargs.setdefault('message', msg)
self.assertIs(False, x, *args, **kwargs)
class ModelsObjectComparatorMixin(object):

View File

@ -64,11 +64,11 @@ class APIVersionRequestTests(test.TestCase):
def test_null_version(self):
v = api_version_request.APIVersionRequest()
self.assertFalse(v)
self.assertFalse(bool(v))
def test_not_null_version(self):
v = api_version_request.APIVersionRequest('1.1')
self.assertTrue(v)
self.assertTrue(bool(v))
@ddt.data('2', '200', '2.1.4', '200.23.66.3', '5 .3', '5. 3',
'5.03', '02.1', '2.001', '', ' 2.1', '2.1 ')

View File

@ -464,7 +464,7 @@ class SnapshotApiTest(test.TestCase):
links = res['snapshots_links']
# Must be a list of links, even if we only get 1 back
self.assertTrue(list, type(links))
self.assertIsInstance(links, list)
next_link = links[0]
# rel entry must be next

View File

@ -393,7 +393,7 @@ class BrickLvmTestCase(test.TestCase):
def test_lv_get_origin(self):
self.assertEqual('fake-volume-1',
self.vg.lv_get_origin('fake-snapshot'))
self.assertFalse(None, self.vg.lv_get_origin('test-volumes'))
self.assertIsNone(self.vg.lv_get_origin('test-volumes'))
def test_activate_lv(self):
with mock.patch.object(self.vg, '_execute'):

View File

@ -90,7 +90,7 @@ class TestCluster(test_objects.BaseObjectsTestCase):
def test_is_up_no_last_hearbeat(self):
cluster = fake_cluster.fake_cluster_ovo(self.context,
last_heartbeat=None)
self.assertFalse(cluster.is_up)
self.assertFalse(bool(cluster.is_up))
def test_is_up(self):
cluster = fake_cluster.fake_cluster_ovo(

View File

@ -580,7 +580,7 @@ class TestVolume(test_objects.BaseObjectsTestCase):
def test_is_replicated_no_type(self):
volume = fake_volume.fake_volume_obj(
self.context, volume_type_id=None, volume_type=None)
self.assertFalse(volume.is_replicated())
self.assertFalse(bool(volume.is_replicated()))
@ddt.ddt

View File

@ -219,7 +219,7 @@ class TestVolumeType(test_objects.BaseObjectsTestCase):
def test_is_replicated_no_specs(self):
volume_type = fake_volume.fake_volume_type_obj(
self.context, extra_specs={})
self.assertFalse(volume_type.is_replicated())
self.assertFalse(bool(volume_type.is_replicated()))
@ddt.data('<is> False', '<is> false', '<is> f', 'baddata', 'bad data')
def test_is_replicated_specs_false(self, not_enabled):

View File

@ -731,7 +731,7 @@ class AffinityFilterTestCase(BackendFiltersTestCase):
'scheduler_hints': {
'same_host': vol_id}}
self.assertTrue(filt_cls.backend_passes(host, filter_properties))
self.assertTrue(bool(filt_cls.backend_passes(host, filter_properties)))
def test_same_filter_passes(self):
filt_cls = self.class_map['SameBackendFilter']()
@ -743,7 +743,7 @@ class AffinityFilterTestCase(BackendFiltersTestCase):
'scheduler_hints': {
'same_host': [vol_id], }}
self.assertTrue(filt_cls.backend_passes(host, filter_properties))
self.assertTrue(bool(filt_cls.backend_passes(host, filter_properties)))
def test_same_filter_legacy_vol_fails(self):
filt_cls = self.class_map['SameBackendFilter']()
@ -755,7 +755,8 @@ class AffinityFilterTestCase(BackendFiltersTestCase):
'scheduler_hints': {
'same_host': [vol_id], }}
self.assertFalse(filt_cls.backend_passes(host, filter_properties))
result = filt_cls.backend_passes(host, filter_properties)
self.assertEqual([], result.objects)
def test_same_filter_fails(self):
filt_cls = self.class_map['SameBackendFilter']()
@ -767,7 +768,8 @@ class AffinityFilterTestCase(BackendFiltersTestCase):
'scheduler_hints': {
'same_host': [vol_id], }}
self.assertFalse(filt_cls.backend_passes(host, filter_properties))
result = filt_cls.backend_passes(host, filter_properties)
self.assertEqual([], result.objects)
def test_same_filter_vol_list_pass(self):
filt_cls = self.class_map['SameBackendFilter']()
@ -781,7 +783,7 @@ class AffinityFilterTestCase(BackendFiltersTestCase):
'scheduler_hints': {
'same_host': [vol_id1, vol_id2], }}
self.assertTrue(filt_cls.backend_passes(host, filter_properties))
self.assertTrue(bool(filt_cls.backend_passes(host, filter_properties)))
def test_same_filter_handles_none(self):
filt_cls = self.class_map['SameBackendFilter']()
@ -803,7 +805,8 @@ class AffinityFilterTestCase(BackendFiltersTestCase):
'scheduler_hints': {
'same_host': [vol_id], }}
self.assertFalse(filt_cls.backend_passes(host, filter_properties))
result = filt_cls.backend_passes(host, filter_properties)
self.assertEqual([], result.objects)
def test_same_filter_fail_nonuuid_hint(self):
filt_cls = self.class_map['SameBackendFilter']()

View File

@ -187,7 +187,7 @@ class HostManagerTestCase(test.TestCase):
self.host_manager.service_states_last_update['host1'])
# notify capab1 to ceilometer by S0
self.assertTrue(1, _mock_get_usage_and_notify.call_count)
self.assertEqual(1, _mock_get_usage_and_notify.call_count)
# S1: update_service_capabilities()
self.host_manager_1.update_service_capabilities(service_name, 'host1',
@ -263,7 +263,7 @@ class HostManagerTestCase(test.TestCase):
dict(dict(timestamp=31339), **capab1))
# Don't notify capab1 to ceilometer.
self.assertTrue(1, _mock_get_usage_and_notify.call_count)
self.assertEqual(0, _mock_get_usage_and_notify.call_count)
@mock.patch(
'cinder.scheduler.host_manager.HostManager.get_usage_and_notify')
@ -311,7 +311,7 @@ class HostManagerTestCase(test.TestCase):
self.host_manager.service_states['host1'])
# Don't notify capab1 to ceilometer.
self.assertTrue(1, _mock_get_usage_and_notify.call_count)
self.assertEqual(0, _mock_get_usage_and_notify.call_count)
# S0: update_service_capabilities()
self.host_manager.update_service_capabilities(service_name, 'host1',
@ -397,7 +397,7 @@ class HostManagerTestCase(test.TestCase):
self.host_manager_1.service_states_last_update['host1'])
# notify capab2 to ceilometer.
self.assertTrue(2, _mock_get_usage_and_notify.call_count)
self.assertLess(0, _mock_get_usage_and_notify.call_count)
# S1: update_service_capabilities()
self.host_manager_1.update_service_capabilities(service_name, 'host1',
@ -471,7 +471,7 @@ class HostManagerTestCase(test.TestCase):
self.host_manager.service_states['host1'])
# S0 notify capab2 to ceilometer.
self.assertTrue(3, _mock_get_usage_and_notify.call_count)
self.assertLess(0, _mock_get_usage_and_notify.call_count)
# S0: update_service_capabilities()
self.host_manager.update_service_capabilities(service_name, 'host1',

View File

@ -136,7 +136,7 @@ class TestBaseISCSITargetDriver(tf.TargetDriverFixture):
bad_connector)
connector = {'initiator': 'fake_init'}
self.assertTrue(self.target.validate_connector,
self.assertTrue(bool(self.target.validate_connector),
connector)
def test_show_target_error(self):

View File

@ -2684,7 +2684,7 @@ class DBAPIBackupTestCase(BaseTest):
{'status': fields.BackupStatus.DELETED, 'deleted': True,
'deleted_at': UTC_NOW},
db.backup_destroy(self.ctxt, backup['id']))
self.assertFalse(db.backup_get_all(self.ctxt))
self.assertEqual([], db.backup_get_all(self.ctxt))
def test_backup_not_found(self):
self.assertRaises(exception.BackupNotFound, db.backup_get, self.ctxt,

View File

@ -94,7 +94,7 @@ class VolumeTypeTestCase(test.TestCase):
# on destroying the volume type
vol_type_access = db_api._volume_type_access_query(
self.ctxt).filter_by(volume_type_id=type_ref['id']).all()
self.assertFalse(vol_type_access)
self.assertEqual([], vol_type_access)
@mock.patch('cinder.quota.VolumeTypeQuotaEngine.'
'update_quota_resource')

View File

@ -1015,7 +1015,7 @@ class VolumeUtilsTestCase(test.TestCase):
@ddt.data({}, None, {'key': 'value'})
def test_is_replicated_no_specs(self, extra_specs):
res = volume_utils.is_replicated_spec(extra_specs)
self.assertFalse(res)
self.assertFalse(bool(res))
@ddt.data('<is> False', '<is> false', '<is> f', 'baddata', 'bad data')
def test_is_replicated_spec_false(self, enabled):

View File

@ -1498,7 +1498,7 @@ class VMAXRestTest(test.TestCase):
def test_get_workload_settings_failed(self):
wl_settings = self.rest.get_workload_settings(
self.data.failed_resource)
self.assertFalse(wl_settings)
self.assertEqual([], wl_settings)
def test_get_headroom_capacity(self):
ref_headroom = self.data.headroom['headroom'][0]['headroomCapacity']
@ -1540,7 +1540,7 @@ class VMAXRestTest(test.TestCase):
with mock.patch.object(self.rest, 'get_resource', return_value=None):
sg_list = self.rest.get_storage_group_list(
self.data.array, {})
self.assertFalse(sg_list)
self.assertEqual([], sg_list)
def test_create_storage_group(self):
with mock.patch.object(self.rest, 'create_resource'):
@ -1934,7 +1934,7 @@ class VMAXRestTest(test.TestCase):
with mock.patch.object(self.rest, 'get_portgroup',
return_value=None):
port_ids = self.rest.get_port_ids(array, pg_name)
self.assertFalse(port_ids)
self.assertEqual([], port_ids)
def test_get_port(self):
array = self.data.array
@ -1975,7 +1975,7 @@ class VMAXRestTest(test.TestCase):
with mock.patch.object(self.rest, 'get_port',
return_value=None):
target_wwns = self.rest.get_target_wwns(array, pg_name)
self.assertFalse(target_wwns)
self.assertEqual([], target_wwns)
def test_get_initiator_group(self):
array = self.data.array
@ -2002,7 +2002,7 @@ class VMAXRestTest(test.TestCase):
array = self.data.array
with mock.patch.object(self.rest, 'get_resource', return_value={}):
init_list = self.rest.get_initiator_list(array)
self.assertFalse(init_list)
self.assertEqual([], init_list)
def test_get_in_use_initiator_list_from_array(self):
ref_list = self.data.initiator_list[2]['initiatorId']
@ -2015,7 +2015,7 @@ class VMAXRestTest(test.TestCase):
with mock.patch.object(self.rest, 'get_initiator_list',
return_value=[]):
init_list = self.rest.get_in_use_initiator_list_from_array(array)
self.assertFalse(init_list)
self.assertEqual([], init_list)
def test_get_initiator_group_from_initiator(self):
initiator = self.data.wwpn1
@ -2088,12 +2088,12 @@ class VMAXRestTest(test.TestCase):
return_value=None):
masking_view = self.rest.get_masking_views_by_initiator_group(
array, initiatorgroup_name)
self.assertFalse(masking_view)
self.assertEqual([], masking_view)
with mock.patch.object(self.rest, 'get_initiator_group',
return_value={'name': 'no_mv'}):
masking_view = self.rest.get_masking_views_by_initiator_group(
array, initiatorgroup_name)
self.assertFalse(masking_view)
self.assertEqual([], masking_view)
def test_get_element_from_masking_view(self):
array = self.data.array
@ -2145,7 +2145,7 @@ class VMAXRestTest(test.TestCase):
return_value=[]):
maskingview_list = self.rest.get_common_masking_views(
array, portgroup, initiatorgroup)
self.assertFalse(maskingview_list)
self.assertEqual([], maskingview_list)
def test_create_masking_view(self):
maskingview_name = self.data.masking_view_name_f
@ -3293,7 +3293,7 @@ class VMAXCommonTest(test.TestCase):
host = 'DifferentHost'
maskingview_list = self.common.get_masking_views_from_volume(
array, device_id, host)
self.assertFalse(maskingview_list)
self.assertEqual([], maskingview_list)
def test_find_host_lun_id_no_host_check(self):
volume = self.data.test_volume
@ -3645,7 +3645,7 @@ class VMAXCommonTest(test.TestCase):
return_value=None):
target_wwns = self.common.get_target_wwns_from_masking_view(
self.data.test_volume, self.data.connector)
self.assertFalse(target_wwns)
self.assertEqual([], target_wwns)
def test_get_port_group_from_masking_view(self):
array = self.data.array
@ -4022,7 +4022,7 @@ class VMAXCommonTest(test.TestCase):
migrate_status = self.common._slo_workload_migration(
device_id, volume, host, volume_name, new_type,
extra_specs)
self.assertTrue(migrate_status)
self.assertTrue(bool(migrate_status))
self.common._migrate_volume.assert_called_once_with(
extra_specs[utils.ARRAY], device_id,
extra_specs[utils.SRP], self.data.slo,
@ -4511,7 +4511,7 @@ class VMAXFCTest(test.TestCase):
return_value=None):
zoning_mappings = self.driver._get_zoning_mappings(
self.data.test_volume, self.data.connector)
self.assertFalse(zoning_mappings)
self.assertEqual({}, zoning_mappings)
def test_cleanup_zones_other_vols_mapped(self):
ref_data = {'driver_volume_type': 'fibre_channel',

View File

@ -1726,7 +1726,7 @@ class HPE3PARBaseDriver(object):
retyped = self.driver.retype(
self.ctxt, volume, type_ref, None, self.RETYPE_HOST)
self.assertTrue(retyped)
self.assertTrue(retyped[0])
expected = [
mock.call.modifyVolume('osv-0DM4qZEVSKON-AAAAAAAAA',
@ -1796,7 +1796,7 @@ class HPE3PARBaseDriver(object):
self.volume_type_replicated,
None,
self.RETYPE_HOST)
self.assertTrue(retyped)
self.assertTrue(retyped[0])
backend_id = self.replication_targets[0]['backend_id']
expected = [
mock.call.createRemoteCopyGroup(
@ -1899,7 +1899,7 @@ class HPE3PARBaseDriver(object):
retyped = self.driver.retype(
self.ctxt, volume_1, volume_type, None, self.RETYPE_HOST)
self.assertTrue(retyped)
self.assertTrue(retyped[0])
expected = [
mock.call.stopRemoteCopy(self.RCG_3PAR_NAME),
@ -2000,7 +2000,7 @@ class HPE3PARBaseDriver(object):
backend_id = self.replication_targets[0]['backend_id']
retyped = self.driver.retype(
self.ctxt, volume_1, volume_type, None, self.RETYPE_HOST)
self.assertTrue(retyped)
self.assertTrue(retyped[0])
expected = [
mock.call.stopRemoteCopy(self.RCG_3PAR_NAME),

View File

@ -3390,7 +3390,7 @@ class TestHPELeftHandISCSIDriver(HPELeftHandBaseDriver, test.TestCase):
mock_do_setup.return_value = mock_client
mock_replication_client.return_value = mock_replicated_client
self.driver.do_setup(None)
self.assertFalse(self.driver._replication_targets)
self.assertListEqual([], self.driver._replication_targets)
def test__create_replication_client(self):
# set up driver with default config

View File

@ -4970,7 +4970,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
self.driver.support_func = FAKE_POOLS_SUPPORT_REPORT
retype = self.driver.retype(None, self.volume,
test_new_type, None, test_host)
self.assertTrue(retype)
self.assertTrue(retype[0])
@ddt.data(FAKE_POOLS_UNSUPPORT_REPORT, FAKE_POOLS_SUPPORT_REPORT)
@mock.patch.object(rest_client, 'RestClient')
@ -4984,7 +4984,7 @@ class HuaweiFCDriverTestCase(HuaweiTestBase):
self.driver.support_func = pool_data
retype = self.driver.retype(None, self.volume,
test_new_replication_type, None, test_host)
self.assertTrue(retype)
self.assertTrue(retype[0])
@ddt.data(
[

View File

@ -576,7 +576,7 @@ class IBMStorageVolumeDriverTest(test.TestCase):
self.driver.create_volume(volume)
ret = self.driver.retype(ctxt, volume, new_type, diff, host)
self.assertTrue(ret)
self.assertTrue(bool(ret))
self.assertEqual('1', volume['easytier'])
def test_retype_fail_on_exception(self):

View File

@ -913,7 +913,7 @@ class NetAppBlockStorageLibraryTestCase(test.TestCase):
self.library.zapi_client.destroy_lun.assert_called_once_with(fake.PATH)
block_base.LOG.error.assert_not_called()
block_base.LOG.warning.assert_called_once()
self.assertFalse(self.library.lun_table)
self.assertEqual({}, self.library.lun_table)
@mock.patch.object(block_base, 'LOG', mock.Mock())
def test_delete_lun_client_exception(self):

View File

@ -1066,7 +1066,7 @@ class NetAppEseriesClientDriverTestCase(test.TestCase):
client.RestClient._init_features(self.my_client)
self.assertTrue(self.my_client.features.AUTOSUPPORT)
self.assertTrue(bool(self.my_client.features.AUTOSUPPORT))
@ddt.data('00.00.00.00', '01.52.9000.2', '01.52.9001.2', '01.51.9000.3',
'01.51.9001.3', '01.51.9010.5', '0.53.9000.3', '0.53.9001.4')
@ -1078,7 +1078,7 @@ class NetAppEseriesClientDriverTestCase(test.TestCase):
client.RestClient._init_features(self.my_client)
self.assertFalse(self.my_client.features.CHAP_AUTHENTICATION)
self.assertFalse(bool(self.my_client.features.CHAP_AUTHENTICATION))
@ddt.data('01.53.9000.15', '01.53.9000.16', '01.53.8999.15',
'01.54.8999.16', '01.54.9010.15', '01.54.9090.15',
@ -1091,7 +1091,7 @@ class NetAppEseriesClientDriverTestCase(test.TestCase):
client.RestClient._init_features(self.my_client)
self.assertTrue(self.my_client.features.CHAP_AUTHENTICATION)
self.assertTrue(bool(self.my_client.features.CHAP_AUTHENTICATION))
@ddt.data('00.00.00.00', '01.52.9000.1', '01.52.9001.2', '00.53.9001.3',
'01.53.9090.1', '1.53.9010.14', '0.53.9011.15')
@ -1206,7 +1206,7 @@ class TestWebserviceClientTestCase(test.TestCase):
self.assertRaises(exception.NetAppDriverException,
self.webclient.invoke_service)
self.assertTrue(self.mock_log.exception.find(log_error))
self.assertTrue(bool(self.mock_log.exception.find(log_error)))
def test_invoke_service(self):
"""Tests if invoke_service evaluates the right response"""

View File

@ -150,7 +150,7 @@ class NetAppESeriesDriverTestCase(object):
self.library._client.list_storage_system = mock.Mock(wraps=list_system)
result = self.library._check_storage_system()
self.assertTrue(result)
self.assertTrue(bool(result))
def test_create_destroy(self):
self.mock_object(client.RestClient, 'delete_volume',

View File

@ -1378,7 +1378,7 @@ class NetAppEseriesLibraryMultiAttachTestCase(test.TestCase):
self.library.do_setup(mock.Mock())
self.assertTrue(mock_check_flags.called)
self.assertFalse(mock_create.call_count)
self.assertEqual(0, mock_create.call_count)
def test_do_setup_host_group_does_not_exist(self):
mock_check_flags = self.mock_object(na_utils, 'check_flags')
@ -1394,7 +1394,7 @@ class NetAppEseriesLibraryMultiAttachTestCase(test.TestCase):
self.library.do_setup(mock.Mock())
self.assertTrue(mock_check_flags.called)
self.assertTrue(mock_get_host_group.call_count)
self.assertLess(0, mock_get_host_group.call_count)
def test_create_volume(self):
self.library._client.create_volume = mock.Mock(
@ -1403,7 +1403,7 @@ class NetAppEseriesLibraryMultiAttachTestCase(test.TestCase):
'_update_consistency_group_members')
self.library.create_volume(get_fake_volume())
self.assertTrue(self.library._client.create_volume.call_count)
self.assertLess(0, self.library._client.create_volume.call_count)
update_members.assert_not_called()
@ -1460,7 +1460,7 @@ class NetAppEseriesLibraryMultiAttachTestCase(test.TestCase):
self.assertRaises(exception.NetAppDriverException,
self.library.create_volume,
get_fake_volume())
self.assertFalse(self.library._client.create_volume.call_count)
self.assertEqual(0, self.library._client.create_volume.call_count)
@ddt.data(0, 1, 2)
def test_create_snapshot(self, group_count):
@ -2536,7 +2536,7 @@ class NetAppEseriesISCSICHAPAuthenticationTestCase(test.TestCase):
eseries_fake.FAKE_TARGET_IQN)
self.assertTrue(mock_invoke_generate_random_secret.called)
self.assertTrue(mock_log.warning.find(warn_msg))
self.assertTrue(bool(mock_log.warning.find(warn_msg)))
mock_invoke_set_chap_authentication.assert_called_with(
*eseries_fake.FAKE_CLIENT_CHAP_PARAMETERS)
self.assertEqual(eseries_fake.FAKE_CHAP_USERNAME, username)

View File

@ -832,7 +832,7 @@ class BitSetTestCase(test.TestCase):
def test_is_set(self):
bitset = na_utils.BitSet(1 << 16)
self.assertTrue(bitset.is_set(16))
self.assertTrue(bool(bitset.is_set(16)))
def test_not_equal(self):
set1 = na_utils.BitSet(1 << 15)

View File

@ -725,7 +725,7 @@ class TestProphetStorDPLDriver(test.TestCase):
exception.VolumeBackendAPIException,
self.dpldriver.terminate_connection,
volume=DATA_IN_VOLUME, connector=DATA_IN_CONNECTOR)
self.assertTrue(
self.assertIsNotNone(
re.match(r".*Flexvisor failed", ex.msg))
def test_get_pool_info(self):

View File

@ -623,12 +623,12 @@ class PureBaseVolumeDriverTestCase(PureBaseSharedDriverTestCase):
self.assertTrue(result.startswith("really-long-string-that-"))
self.assertTrue(result.endswith("-cinder"))
self.assertEqual(63, len(result))
self.assertTrue(pure.GENERATED_NAME.match(result))
self.assertTrue(bool(pure.GENERATED_NAME.match(result)))
result = self.driver._generate_purity_host_name("!@#$%^-invalid&*")
self.assertTrue(result.startswith("invalid---"))
self.assertTrue(result.endswith("-cinder"))
self.assertEqual(49, len(result))
self.assertTrue(pure.GENERATED_NAME.match(result))
self.assertIsNotNone(pure.GENERATED_NAME.match(result))
@mock.patch(BASE_DRIVER_OBJ + "._add_to_group_if_needed")
@mock.patch(BASE_DRIVER_OBJ + "._is_volume_replicated_type", autospec=True)
@ -2402,7 +2402,7 @@ class PureISCSIDriverTestCase(PureDriverTestCase):
actual = self.driver._connect(VOLUME, ISCSI_CONNECTOR)
self.assertEqual(expected, actual)
self.assertTrue(self.array.connect_host.called)
self.assertTrue(self.array.list_volume_private_connections)
self.assertTrue(bool(self.array.list_volume_private_connections))
@mock.patch(ISCSI_DRIVER_OBJ + "._get_host", autospec=True)
def test_connect_already_connected_list_hosts_empty(self, mock_host):
@ -2416,7 +2416,7 @@ class PureISCSIDriverTestCase(PureDriverTestCase):
self.assertRaises(exception.PureDriverException, self.driver._connect,
VOLUME, ISCSI_CONNECTOR)
self.assertTrue(self.array.connect_host.called)
self.assertTrue(self.array.list_volume_private_connections)
self.assertTrue(bool(self.array.list_volume_private_connections))
@mock.patch(ISCSI_DRIVER_OBJ + "._get_host", autospec=True)
def test_connect_already_connected_list_hosts_exception(self, mock_host):
@ -2433,7 +2433,7 @@ class PureISCSIDriverTestCase(PureDriverTestCase):
self.driver._connect, VOLUME,
ISCSI_CONNECTOR)
self.assertTrue(self.array.connect_host.called)
self.assertTrue(self.array.list_volume_private_connections)
self.assertTrue(bool(self.array.list_volume_private_connections))
@mock.patch(ISCSI_DRIVER_OBJ + "._get_chap_secret_from_init_data")
@mock.patch(ISCSI_DRIVER_OBJ + "._get_host", autospec=True)
@ -2607,7 +2607,7 @@ class PureFCDriverTestCase(PureDriverTestCase):
actual = self.driver._connect(VOLUME, FC_CONNECTOR)
self.assertEqual(expected, actual)
self.assertTrue(self.array.connect_host.called)
self.assertTrue(self.array.list_volume_private_connections)
self.assertTrue(bool(self.array.list_volume_private_connections))
@mock.patch(FC_DRIVER_OBJ + "._get_host", autospec=True)
def test_connect_already_connected_list_hosts_empty(self, mock_host):
@ -2621,7 +2621,7 @@ class PureFCDriverTestCase(PureDriverTestCase):
self.assertRaises(exception.PureDriverException, self.driver._connect,
VOLUME, FC_CONNECTOR)
self.assertTrue(self.array.connect_host.called)
self.assertTrue(self.array.list_volume_private_connections)
self.assertTrue(bool(self.array.list_volume_private_connections))
@mock.patch(FC_DRIVER_OBJ + "._get_host", autospec=True)
def test_connect_already_connected_list_hosts_exception(self, mock_host):
@ -2637,7 +2637,7 @@ class PureFCDriverTestCase(PureDriverTestCase):
self.assertRaises(self.purestorage_module.PureHTTPError,
self.driver._connect, VOLUME, FC_CONNECTOR)
self.assertTrue(self.array.connect_host.called)
self.assertTrue(self.array.list_volume_private_connections)
self.assertTrue(bool(self.array.list_volume_private_connections))
@mock.patch(FC_DRIVER_OBJ + "._get_host", autospec=True)
def test_connect_wwn_already_in_use(self, mock_host):

View File

@ -1020,7 +1020,7 @@ class VMwareVcVmdkDriverTestCase(test.TestCase):
def test_in_use_with_available_volume(self):
volume = self._create_volume_dict()
self.assertFalse(self._driver._in_use(volume))
self.assertIsNone(self._driver._in_use(volume))
@mock.patch.object(VMDK_DRIVER, '_in_use', return_value=True)
def test_retype_with_in_use_volume(self, in_use):

View File

@ -434,7 +434,7 @@ class ImageVolumeTestCases(base.BaseVolumeTestCase):
mock_commit, mock_rollback):
vol = tests_utils.create_volume(self.context, **self.volume_params)
with mock.patch.object(objects, 'Volume', side_effect=ValueError):
self.assertFalse(self.volume._clone_image_volume(
self.assertIsNone(self.volume._clone_image_volume(
self.context, vol, {'id': fake.VOLUME_ID}))
mock_reserve.assert_called_once_with(self.context, volumes=1,

View File

@ -342,7 +342,7 @@ class SnapshotTestCase(base.BaseVolumeTestCase):
# get volume's volume_glance_metadata
ctxt = context.get_admin_context()
vol_glance_meta = db.volume_glance_metadata_get(ctxt, volume_id)
self.assertTrue(vol_glance_meta)
self.assertTrue(bool(vol_glance_meta))
# create snapshot from bootable volume
snap = create_snapshot(volume_id)
@ -351,7 +351,7 @@ class SnapshotTestCase(base.BaseVolumeTestCase):
# get snapshot's volume_glance_metadata
snap_glance_meta = db.volume_snapshot_glance_metadata_get(
ctxt, snap.id)
self.assertTrue(snap_glance_meta)
self.assertTrue(bool(snap_glance_meta))
# ensure that volume's glance metadata is copied
# to snapshot's glance metadata
@ -387,7 +387,7 @@ class SnapshotTestCase(base.BaseVolumeTestCase):
# get volume's volume_glance_metadata
ctxt = context.get_admin_context()
vol_glance_meta = db.volume_glance_metadata_get(ctxt, volume_id)
self.assertTrue(vol_glance_meta)
self.assertTrue(bool(vol_glance_meta))
snap = create_snapshot(volume_id)
self.assertEqual(36, len(snap.id)) # dynamically-generated UUID
self.assertEqual('creating', snap.status)