cinder/cinder/tests/unit/objects/test_fields.py

159 lines
6.6 KiB
Python

# Copyright 2015 IBM Corp.
#
# 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.
from cinder.objects import fields
from cinder import test
class FakeFieldType(fields.FieldType):
def coerce(self, obj, attr, value):
return '*%s*' % value
def to_primitive(self, obj, attr, value):
return '!%s!' % value
def from_primitive(self, obj, attr, value):
return value[1:-1]
class TestField(test.TestCase):
def setUp(self):
super(TestField, self).setUp()
self.field = fields.Field(FakeFieldType())
self.coerce_good_values = [('foo', '*foo*')]
self.coerce_bad_values = []
self.to_primitive_values = [('foo', '!foo!')]
self.from_primitive_values = [('!foo!', 'foo')]
def test_coerce_good_values(self):
for in_val, out_val in self.coerce_good_values:
self.assertEqual(out_val, self.field.coerce('obj', 'attr', in_val))
def test_coerce_bad_values(self):
for in_val in self.coerce_bad_values:
self.assertRaises((TypeError, ValueError),
self.field.coerce, 'obj', 'attr', in_val)
def test_to_primitive(self):
for in_val, prim_val in self.to_primitive_values:
self.assertEqual(prim_val, self.field.to_primitive('obj', 'attr',
in_val))
def test_from_primitive(self):
class ObjectLikeThing(object):
_context = 'context'
for prim_val, out_val in self.from_primitive_values:
self.assertEqual(out_val, self.field.from_primitive(
ObjectLikeThing, 'attr', prim_val))
def test_stringify(self):
self.assertEqual('123', self.field.stringify(123))
class TestBackupStatus(TestField):
def setUp(self):
super(TestBackupStatus, self).setUp()
self.field = fields.BackupStatusField()
self.coerce_good_values = [('error', fields.BackupStatus.ERROR),
('error_deleting',
fields.BackupStatus.ERROR_DELETING),
('creating', fields.BackupStatus.CREATING),
('available',
fields.BackupStatus.AVAILABLE),
('deleting', fields.BackupStatus.DELETING),
('deleted', fields.BackupStatus.DELETED),
('restoring',
fields.BackupStatus.RESTORING)]
self.coerce_bad_values = ['acme']
self.to_primitive_values = self.coerce_good_values[0:1]
self.from_primitive_values = self.coerce_good_values[0:1]
def test_stringify(self):
self.assertEqual("'error'", self.field.stringify('error'))
def test_stringify_invalid(self):
self.assertRaises(ValueError, self.field.stringify, 'not_a_status')
class TestConsistencyGroupStatus(TestField):
def setUp(self):
super(TestConsistencyGroupStatus, self).setUp()
self.field = fields.ConsistencyGroupStatusField()
self.coerce_good_values = [
('error', fields.ConsistencyGroupStatus.ERROR),
('available', fields.ConsistencyGroupStatus.AVAILABLE),
('creating', fields.ConsistencyGroupStatus.CREATING),
('deleting', fields.ConsistencyGroupStatus.DELETING),
('deleted', fields.ConsistencyGroupStatus.DELETED),
('updating', fields.ConsistencyGroupStatus.UPDATING),
('error_deleting', fields.ConsistencyGroupStatus.ERROR_DELETING)]
self.coerce_bad_values = ['acme']
self.to_primitive_values = self.coerce_good_values[0:1]
self.from_primitive_values = self.coerce_good_values[0:1]
def test_stringify(self):
self.assertEqual("'error'", self.field.stringify('error'))
def test_stringify_invalid(self):
self.assertRaises(ValueError, self.field.stringify, 'not_a_status')
class TestSnapshotStatus(TestField):
def setUp(self):
super(TestSnapshotStatus, self).setUp()
self.field = fields.SnapshotStatusField()
self.coerce_good_values = [
('error', fields.SnapshotStatus.ERROR),
('available', fields.SnapshotStatus.AVAILABLE),
('creating', fields.SnapshotStatus.CREATING),
('deleting', fields.SnapshotStatus.DELETING),
('deleted', fields.SnapshotStatus.DELETED),
('updating', fields.SnapshotStatus.UPDATING),
('error_deleting', fields.SnapshotStatus.ERROR_DELETING)]
self.coerce_bad_values = ['acme']
self.to_primitive_values = self.coerce_good_values[0:1]
self.from_primitive_values = self.coerce_good_values[0:1]
def test_stringify(self):
self.assertEqual("'error'", self.field.stringify('error'))
def test_stringify_invalid(self):
self.assertRaises(ValueError, self.field.stringify, 'not_a_status')
class TestVolumeAttachStatus(TestField):
def setUp(self):
super(TestVolumeAttachStatus, self).setUp()
self.field = fields.VolumeAttachStatusField()
self.coerce_good_values = [('attaching',
fields.VolumeAttachStatus.ATTACHING),
('attached',
fields.VolumeAttachStatus.ATTACHED),
('detached',
fields.VolumeAttachStatus.DETACHED),
('error_attaching',
fields.VolumeAttachStatus.ERROR_ATTACHING),
('error_detaching',
fields.VolumeAttachStatus.ERROR_DETACHING)]
self.coerce_bad_values = ['acme']
self.to_primitive_values = self.coerce_good_values[0:1]
self.from_primitive_values = self.coerce_good_values[0:1]
def test_stringify(self):
self.assertEqual("'attaching'", self.field.stringify('attaching'))
def test_stringify_invalid(self):
self.assertRaises(ValueError, self.field.stringify, 'not_a_status')