Define a ResourceClassField in object
This field defines a list of valid values for resource name. Change-Id: I9cb9ad539c69a1547a20acc78d453027943a5a4d
This commit is contained in:
@@ -68,3 +68,23 @@ class Json(fields.FieldType):
|
||||
|
||||
class JsonField(fields.AutoTypedField):
|
||||
AUTO_TYPE = Json()
|
||||
|
||||
|
||||
class ResourceClass(fields.Enum):
|
||||
ALL = (
|
||||
VCPU, MEMORY_MB, DISK_GB, PCI_DEVICE, SRIOV_NET_VF,
|
||||
NUMA_SOCKET, NUMA_CORE, NUMA_THREAD, NUMA_MEMORY_MB,
|
||||
IPV4_ADDRESS
|
||||
) = (
|
||||
'VCPU', 'MEMORY_MB', 'DISK_GB', 'PCI_DEVICE', 'SRIOV_NET_VF',
|
||||
'NUMA_SOCKET', 'NUMA_CORE', 'NUMA_THREAD', 'NUMA_MEMORY_MB',
|
||||
'IPV4_ADDRESS'
|
||||
)
|
||||
|
||||
def __init__(self):
|
||||
super(ResourceClass, self).__init__(
|
||||
valid_values=ResourceClass.ALL)
|
||||
|
||||
|
||||
class ResourceClassField(fields.AutoTypedField):
|
||||
AUTO_TYPE = ResourceClass()
|
||||
|
||||
@@ -14,6 +14,7 @@ from oslo_versionedobjects import fields
|
||||
|
||||
from zun.db import api as dbapi
|
||||
from zun.objects import base
|
||||
from zun.objects import fields as z_fields
|
||||
|
||||
|
||||
@base.ZunObjectRegistry.register
|
||||
@@ -23,7 +24,7 @@ class ResourceClass(base.ZunPersistentObject, base.ZunObject):
|
||||
|
||||
fields = {
|
||||
'id': fields.IntegerField(read_only=True),
|
||||
'name': fields.StringField(nullable=False),
|
||||
'name': z_fields.ResourceClassField(nullable=False),
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
|
||||
@@ -172,7 +172,7 @@ def create_test_resource_provider(**kw):
|
||||
def get_test_resource_class(**kw):
|
||||
return {
|
||||
'id': kw.get('id', 42),
|
||||
'name': kw.get('name', 'resource1'),
|
||||
'name': kw.get('name', 'VCPU'),
|
||||
'created_at': kw.get('created_at'),
|
||||
'updated_at': kw.get('updated_at'),
|
||||
}
|
||||
|
||||
@@ -58,3 +58,31 @@ class TestTaskState(test_fields.TestField):
|
||||
|
||||
def test_stringify_invalid(self):
|
||||
self.assertRaises(ValueError, self.field.stringify, 'bad_value')
|
||||
|
||||
|
||||
class TestResourceClass(test_fields.TestField):
|
||||
def setUp(self):
|
||||
super(TestResourceClass, self).setUp()
|
||||
self.field = fields.ResourceClass()
|
||||
self.coerce_good_values = [
|
||||
('VCPU', 'VCPU'),
|
||||
('MEMORY_MB', 'MEMORY_MB'),
|
||||
('DISK_GB', 'DISK_GB'),
|
||||
('PCI_DEVICE', 'PCI_DEVICE'),
|
||||
('SRIOV_NET_VF', 'SRIOV_NET_VF'),
|
||||
('NUMA_SOCKET', 'NUMA_SOCKET'),
|
||||
('NUMA_CORE', 'NUMA_CORE'),
|
||||
('NUMA_THREAD', 'NUMA_THREAD'),
|
||||
('NUMA_MEMORY_MB', 'NUMA_MEMORY_MB'),
|
||||
('IPV4_ADDRESS', 'IPV4_ADDRESS'),
|
||||
]
|
||||
self.coerce_bad_values = ['bad_value']
|
||||
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("'VCPU'",
|
||||
self.field.stringify('VCPU'))
|
||||
|
||||
def test_stringify_invalid(self):
|
||||
self.assertRaises(ValueError, self.field.stringify, 'bad_value')
|
||||
|
||||
@@ -90,20 +90,20 @@ class TestResourceClassObject(base.DbTestCase):
|
||||
autospec=True) as mock_update:
|
||||
resource = objects.ResourceClass.get_by_id(
|
||||
self.context, rc_id)
|
||||
resource.name = 'resourc_class2'
|
||||
resource.name = 'MEMORY_MB'
|
||||
resource.save()
|
||||
|
||||
mock_get_resource_class.assert_called_once_with(
|
||||
self.context, rc_id)
|
||||
mock_update.assert_called_once_with(
|
||||
None, rc_id,
|
||||
{'name': 'resourc_class2'})
|
||||
{'name': 'MEMORY_MB'})
|
||||
self.assertEqual(self.context, resource._context)
|
||||
|
||||
def test_refresh(self):
|
||||
rc_id = self.fake_resource['id']
|
||||
name = self.fake_resource['name']
|
||||
new_name = 'new_name'
|
||||
new_name = 'MEMORY_MB'
|
||||
returns = [dict(self.fake_resource, name=name),
|
||||
dict(self.fake_resource, name=new_name)]
|
||||
expected = [mock.call(self.context, rc_id),
|
||||
|
||||
Reference in New Issue
Block a user