manila/manila/tests/share/test_volume_types.py

116 lines
4.4 KiB
Python

# Copyright 2015 Deutsche Telekom AG
# All Rights Reserved.
#
# 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.
"""Test of Volume Test Manager for Manila."""
import datetime
import ddt
import mock
from manila import context
from manila import db
from manila.share import volume_types
from manila import test
@ddt.ddt
class VolumeTypesTestCase(test.TestCase):
fake_type = {
'test': {
'created_at': datetime.datetime(2015, 1, 22, 11, 43, 24),
'deleted': '0',
'deleted_at': None,
'extra_specs': {},
'id': u'fooid-1',
'name': u'test',
'updated_at': None
}
}
fake_type_w_extra = {
'test_with_extra': {
'created_at': datetime.datetime(2015, 1, 22, 11, 45, 31),
'deleted': '0',
'deleted_at': None,
'extra_specs': {u'gold': u'True'},
'id': u'fooid-2',
'name': u'test_with_extra',
'updated_at': None
}
}
fake_types = dict(fake_type.items() + fake_type_w_extra.items())
def setUp(self):
super(VolumeTypesTestCase, self).setUp()
self.context = context.get_admin_context()
@ddt.data({}, fake_type, fake_type_w_extra, fake_types)
def test_get_all_types(self, vol_type):
self.mock_object(db,
'volume_type_get_all',
mock.Mock(return_value=vol_type))
returned_type = volume_types.get_all_types(self.context)
self.assertItemsEqual(vol_type, returned_type)
def test_get_all_types_filter(self):
vol_type = self.fake_type_w_extra
search_filter = {"extra_specs": {"gold": "True"}}
self.mock_object(db,
'volume_type_get_all',
mock.Mock(return_value=vol_type))
returned_type = volume_types.get_all_types(self.context,
search_opts=search_filter)
self.assertItemsEqual(vol_type, returned_type)
search_filter = {"extra_specs": {"gold": "False"}}
returned_type = volume_types.get_all_types(self.context,
search_opts=search_filter)
self.assertEqual({}, returned_type)
def test_get_volume_type_extra_specs(self):
vol_type = self.fake_type_w_extra['test_with_extra']
self.mock_object(db,
'volume_type_get',
mock.Mock(return_value=vol_type))
id = vol_type['id']
extra_spec = volume_types.get_volume_type_extra_specs(id, key='gold')
self.assertEqual(vol_type['extra_specs']['gold'], extra_spec)
extra_spec = volume_types.get_volume_type_extra_specs(id)
self.assertEqual(vol_type['extra_specs'], extra_spec)
def test_volume_types_diff(self):
vol_type1 = self.fake_type['test']
vol_type2 = self.fake_type_w_extra['test_with_extra']
expeted_diff = {'extra_specs': {u'gold': (None, u'True')}}
self.mock_object(db,
'volume_type_get',
mock.Mock(side_effect=[vol_type1, vol_type2]))
(diff, equal) = volume_types.volume_types_diff(self.context,
vol_type1['id'],
vol_type2['id'])
self.assertEqual(False, equal)
self.assertEqual(expeted_diff, diff)
def test_volume_types_diff_equal(self):
vol_type = self.fake_type['test']
self.mock_object(db,
'volume_type_get',
mock.Mock(return_value=vol_type))
(diff, equal) = volume_types.volume_types_diff(self.context,
vol_type['id'],
vol_type['id'])
self.assertEqual(True, equal)