Merge "test_storpool.py: Assume volumes have a volume type"

This commit is contained in:
Zuul 2024-11-25 15:44:45 +00:00 committed by Gerrit Code Review
commit 6e5e0b78b3

View File

@ -32,15 +32,16 @@ sys.modules['storpool'] = fakeStorPool
from cinder import exception from cinder import exception
from cinder.tests.unit import fake_constants
from cinder.tests.unit import test from cinder.tests.unit import test
from cinder.volume import configuration as conf from cinder.volume import configuration as conf
from cinder.volume.drivers import storpool as driver from cinder.volume.drivers import storpool as driver
volume_types = { volume_types = {
1: {}, fake_constants.VOLUME_TYPE_ID: {},
2: {'storpool_template': 'ssd'}, fake_constants.VOLUME_TYPE2_ID: {'storpool_template': 'ssd'},
3: {'storpool_template': 'hdd'} fake_constants.VOLUME_TYPE3_ID: {'storpool_template': 'hdd'}
} }
volumes = {} volumes = {}
snapshots = {} snapshots = {}
@ -329,7 +330,8 @@ class StorPoolTestCase(test.TestCase):
self.assertDictEqual({}, snapshots) self.assertDictEqual({}, snapshots)
self.driver.create_volume({'id': '1', 'name': 'v1', 'size': 1, self.driver.create_volume({'id': '1', 'name': 'v1', 'size': 1,
'volume_type': None}) 'volume_type':
{'id': fake_constants.VOLUME_TYPE_ID}})
self.assertCountEqual([volumeName('1')], volumes.keys()) self.assertCountEqual([volumeName('1')], volumes.keys())
self.assertVolumeNames(('1',)) self.assertVolumeNames(('1',))
v = volumes[volumeName('1')] v = volumes[volumeName('1')]
@ -339,8 +341,9 @@ class StorPoolTestCase(test.TestCase):
caught = False caught = False
try: try:
self.driver.create_volume({'id': '1', 'name': 'v1', 'size': 0, self.driver.create_volume(
'volume_type': None}) {'id': '1', 'name': 'v1', 'size': 0,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
except exception.VolumeBackendAPIException: except exception.VolumeBackendAPIException:
caught = True caught = True
self.assertTrue(caught) self.assertTrue(caught)
@ -349,8 +352,9 @@ class StorPoolTestCase(test.TestCase):
self.assertVolumeNames([]) self.assertVolumeNames([])
self.assertDictEqual({}, volumes) self.assertDictEqual({}, volumes)
self.driver.create_volume({'id': '1', 'name': 'v1', 'size': 2, self.driver.create_volume(
'volume_type': None}) {'id': '1', 'name': 'v1', 'size': 2,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
self.assertVolumeNames(('1',)) self.assertVolumeNames(('1',))
v = volumes[volumeName('1')] v = volumes[volumeName('1')]
self.assertEqual(2 * units.Gi, v['size']) self.assertEqual(2 * units.Gi, v['size'])
@ -358,23 +362,26 @@ class StorPoolTestCase(test.TestCase):
self.assertEqual(3, v['replication']) self.assertEqual(3, v['replication'])
self.driver.create_volume({'id': '2', 'name': 'v2', 'size': 3, self.driver.create_volume({'id': '2', 'name': 'v2', 'size': 3,
'volume_type': {'id': 1}}) 'volume_type':
{'id': fake_constants.VOLUME_TYPE_ID}})
self.assertVolumeNames(('1', '2')) self.assertVolumeNames(('1', '2'))
v = volumes[volumeName('2')] v = volumes[volumeName('2')]
self.assertEqual(3 * units.Gi, v['size']) self.assertEqual(3 * units.Gi, v['size'])
self.assertIsNone(v['template']) self.assertIsNone(v['template'])
self.assertEqual(3, v['replication']) self.assertEqual(3, v['replication'])
self.driver.create_volume({'id': '3', 'name': 'v2', 'size': 4, self.driver.create_volume(
'volume_type': {'id': 2}}) {'id': '3', 'name': 'v2', 'size': 4,
'volume_type': {'id': fake_constants.VOLUME_TYPE2_ID}})
self.assertVolumeNames(('1', '2', '3')) self.assertVolumeNames(('1', '2', '3'))
v = volumes[volumeName('3')] v = volumes[volumeName('3')]
self.assertEqual(4 * units.Gi, v['size']) self.assertEqual(4 * units.Gi, v['size'])
self.assertEqual('ssd', v['template']) self.assertEqual('ssd', v['template'])
self.assertNotIn('replication', v.keys()) self.assertNotIn('replication', v.keys())
self.driver.create_volume({'id': '4', 'name': 'v2', 'size': 5, self.driver.create_volume(
'volume_type': {'id': 3}}) {'id': '4', 'name': 'v2', 'size': 5,
'volume_type': {'id': fake_constants.VOLUME_TYPE3_ID}})
self.assertVolumeNames(('1', '2', '3', '4')) self.assertVolumeNames(('1', '2', '3', '4'))
v = volumes[volumeName('4')] v = volumes[volumeName('4')]
self.assertEqual(5 * units.Gi, v['size']) self.assertEqual(5 * units.Gi, v['size'])
@ -400,10 +407,12 @@ class StorPoolTestCase(test.TestCase):
self.assertDictEqual({}, snapshots) self.assertDictEqual({}, snapshots)
# Create two volumes # Create two volumes
self.driver.create_volume({'id': '1', 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': None}) {'id': '1', 'name': 'v1', 'size': 1,
self.driver.create_volume({'id': '2', 'name': 'v2', 'size': 1, 'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
'volume_type': None}) self.driver.create_volume(
{'id': '2', 'name': 'v2', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
self.assertCountEqual([volumeName('1'), volumeName('2')], self.assertCountEqual([volumeName('1'), volumeName('2')],
volumes.keys()) volumes.keys())
self.assertVolumeNames(('1', '2',)) self.assertVolumeNames(('1', '2',))
@ -438,20 +447,27 @@ class StorPoolTestCase(test.TestCase):
self.assertDictEqual({}, volumes) self.assertDictEqual({}, volumes)
self.assertDictEqual({}, snapshots) self.assertDictEqual({}, snapshots)
@mock_volume_types
def test_clone_extend_volume(self): def test_clone_extend_volume(self):
self.assertVolumeNames([]) self.assertVolumeNames([])
self.assertDictEqual({}, volumes) self.assertDictEqual({}, volumes)
self.assertDictEqual({}, snapshots) self.assertDictEqual({}, snapshots)
self.driver.create_volume({'id': '1', 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': None}) {'id': '1', 'name': 'v1', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
self.assertVolumeNames(('1',)) self.assertVolumeNames(('1',))
self.driver.extend_volume({'id': '1'}, 2) self.driver.extend_volume({'id': '1'}, 2)
self.assertEqual(2 * units.Gi, volumes[volumeName('1')]['size']) self.assertEqual(2 * units.Gi, volumes[volumeName('1')]['size'])
with mock.patch.object(self.driver, 'db', new=MockVolumeDB()): with mock.patch.object(self.driver, 'db', new=MockVolumeDB()):
self.driver.create_cloned_volume( self.driver.create_cloned_volume(
{'id': '2', 'name': 'clo', 'size': 3, 'volume_type': None}, {
'id': '2',
'name': 'clo',
'size': 3,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}
},
{'id': 1}) {'id': 1})
self.assertVolumeNames(('1', '2')) self.assertVolumeNames(('1', '2'))
self.assertDictEqual({}, snapshots) self.assertDictEqual({}, snapshots)
@ -468,24 +484,16 @@ class StorPoolTestCase(test.TestCase):
self.assertDictEqual({}, snapshots) self.assertDictEqual({}, snapshots)
@ddt.data(*itertools.product( @ddt.data(*itertools.product(
[None] + [{'id': key} for key in sorted(volume_types.keys())], [{'id': key} for key in sorted(volume_types.keys())],
[None] + [{'id': key} for key in sorted(volume_types.keys())])) [{'id': key} for key in sorted(volume_types.keys())]))
@ddt.unpack @ddt.unpack
@mock_volume_types @mock_volume_types
def test_create_cloned_volume(self, src_type, dst_type): def test_create_cloned_volume(self, src_type, dst_type):
self.assertDictEqual({}, volumes) self.assertDictEqual({}, volumes)
self.assertDictEqual({}, snapshots) self.assertDictEqual({}, snapshots)
src_template = ( src_template = volume_types[src_type['id']].get('storpool_template')
None dst_template = volume_types[dst_type['id']].get('storpool_template')
if src_type is None
else volume_types[src_type['id']].get('storpool_template')
)
dst_template = (
None
if dst_type is None
else volume_types[dst_type['id']].get('storpool_template')
)
src_name = 's-none' if src_template is None else 's-' + src_template src_name = 's-none' if src_template is None else 's-' + src_template
dst_name = 'd-none' if dst_template is None else 'd-' + dst_template dst_name = 'd-none' if dst_template is None else 'd-' + dst_template
@ -553,8 +561,9 @@ class StorPoolTestCase(test.TestCase):
self.assertEqual(21, pool['total_capacity_gb']) self.assertEqual(21, pool['total_capacity_gb'])
self.assertEqual(5, int(pool['free_capacity_gb'])) self.assertEqual(5, int(pool['free_capacity_gb']))
self.driver.create_volume({'id': 'cfgrepl1', 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': None}) {'id': 'cfgrepl1', 'name': 'v1', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
self.assertVolumeNames(('cfgrepl1',)) self.assertVolumeNames(('cfgrepl1',))
v = volumes[volumeName('cfgrepl1')] v = volumes[volumeName('cfgrepl1')]
self.assertEqual(3, v['replication']) self.assertEqual(3, v['replication'])
@ -567,16 +576,18 @@ class StorPoolTestCase(test.TestCase):
self.assertEqual(21, pool['total_capacity_gb']) self.assertEqual(21, pool['total_capacity_gb'])
self.assertEqual(8, int(pool['free_capacity_gb'])) self.assertEqual(8, int(pool['free_capacity_gb']))
self.driver.create_volume({'id': 'cfgrepl2', 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': None}) {'id': 'cfgrepl2', 'name': 'v1', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
self.assertVolumeNames(('cfgrepl2',)) self.assertVolumeNames(('cfgrepl2',))
v = volumes[volumeName('cfgrepl2')] v = volumes[volumeName('cfgrepl2')]
self.assertEqual(2, v['replication']) self.assertEqual(2, v['replication'])
self.assertIsNone(v['template']) self.assertIsNone(v['template'])
self.driver.delete_volume({'id': 'cfgrepl2'}) self.driver.delete_volume({'id': 'cfgrepl2'})
self.driver.create_volume({'id': 'cfgrepl3', 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': {'id': 2}}) {'id': 'cfgrepl3', 'name': 'v1', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE2_ID}})
self.assertVolumeNames(('cfgrepl3',)) self.assertVolumeNames(('cfgrepl3',))
v = volumes[volumeName('cfgrepl3')] v = volumes[volumeName('cfgrepl3')]
self.assertNotIn('replication', v) self.assertNotIn('replication', v)
@ -599,16 +610,18 @@ class StorPoolTestCase(test.TestCase):
self.driver.configuration.storpool_template = None self.driver.configuration.storpool_template = None
self.driver.create_volume({'id': 'cfgtempl1', 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': None}) {'id': 'cfgtempl1', 'name': 'v1', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
self.assertVolumeNames(('cfgtempl1',)) self.assertVolumeNames(('cfgtempl1',))
v = volumes[volumeName('cfgtempl1')] v = volumes[volumeName('cfgtempl1')]
self.assertEqual(3, v['replication']) self.assertEqual(3, v['replication'])
self.assertIsNone(v['template']) self.assertIsNone(v['template'])
self.driver.delete_volume({'id': 'cfgtempl1'}) self.driver.delete_volume({'id': 'cfgtempl1'})
self.driver.create_volume({'id': 'cfgtempl2', 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': {'id': 2}}) {'id': 'cfgtempl2', 'name': 'v1', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE2_ID}})
self.assertVolumeNames(('cfgtempl2',)) self.assertVolumeNames(('cfgtempl2',))
v = volumes[volumeName('cfgtempl2')] v = volumes[volumeName('cfgtempl2')]
self.assertNotIn('replication', v) self.assertNotIn('replication', v)
@ -617,16 +630,18 @@ class StorPoolTestCase(test.TestCase):
self.driver.configuration.storpool_template = 'hdd' self.driver.configuration.storpool_template = 'hdd'
self.driver.create_volume({'id': 'cfgtempl3', 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': None}) {'id': 'cfgtempl3', 'name': 'v1', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
self.assertVolumeNames(('cfgtempl3',)) self.assertVolumeNames(('cfgtempl3',))
v = volumes[volumeName('cfgtempl3')] v = volumes[volumeName('cfgtempl3')]
self.assertNotIn('replication', v) self.assertNotIn('replication', v)
self.assertEqual('hdd', v['template']) self.assertEqual('hdd', v['template'])
self.driver.delete_volume({'id': 'cfgtempl3'}) self.driver.delete_volume({'id': 'cfgtempl3'})
self.driver.create_volume({'id': 'cfgtempl4', 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': {'id': 2}}) {'id': 'cfgtempl4', 'name': 'v1', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE2_ID}})
self.assertVolumeNames(('cfgtempl4',)) self.assertVolumeNames(('cfgtempl4',))
v = volumes[volumeName('cfgtempl4')] v = volumes[volumeName('cfgtempl4')]
self.assertNotIn('replication', v) self.assertNotIn('replication', v)
@ -643,10 +658,10 @@ class StorPoolTestCase(test.TestCase):
# No volume type at all: 'default' # No volume type at all: 'default'
('default', None), ('default', None),
# No storpool_template in the type extra specs: 'default' # No storpool_template in the type extra specs: 'default'
('default', {'id': 1}), ('default', {'id': fake_constants.VOLUME_TYPE_ID}),
# An actual template specified: 'template_*' # An actual template specified: 'template_*'
('template_ssd', {'id': 2}), ('template_ssd', {'id': fake_constants.VOLUME_TYPE2_ID}),
('template_hdd', {'id': 3}), ('template_hdd', {'id': fake_constants.VOLUME_TYPE3_ID}),
) )
@ddt.unpack @ddt.unpack
@mock_volume_types @mock_volume_types
@ -656,6 +671,7 @@ class StorPoolTestCase(test.TestCase):
'volume_type': volume_type 'volume_type': volume_type
})) }))
@mock_volume_types
def test_volume_revert(self): def test_volume_revert(self):
vol_id = 'rev1' vol_id = 'rev1'
vol_name = volumeName(vol_id) vol_name = volumeName(vol_id)
@ -666,8 +682,9 @@ class StorPoolTestCase(test.TestCase):
self.assertDictEqual({}, volumes) self.assertDictEqual({}, volumes)
self.assertDictEqual({}, snapshots) self.assertDictEqual({}, snapshots)
self.driver.create_volume({'id': vol_id, 'name': 'v1', 'size': 1, self.driver.create_volume(
'volume_type': None}) {'id': vol_id, 'name': 'v1', 'size': 1,
'volume_type': {'id': fake_constants.VOLUME_TYPE_ID}})
self.assertVolumeNames((vol_id,)) self.assertVolumeNames((vol_id,))
self.assertDictEqual({}, snapshots) self.assertDictEqual({}, snapshots)