nova/nova/tests/unit/objects/test_pci_device_pool.py

113 lines
4.4 KiB
Python

# Copyright (c) 2013 Hewlett-Packard Development Company, L.P.
# 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.
import copy
from nova import objects
from nova.objects import pci_device_pool
from nova import test
from nova.tests.unit import fake_pci_device_pools as fake_pci
from nova.tests.unit.objects import test_objects
class _TestPciDevicePoolObject(object):
def test_pci_pool_from_dict_not_distructive(self):
test_dict = copy.copy(fake_pci.fake_pool_dict)
objects.PciDevicePool.from_dict(test_dict)
self.assertEqual(fake_pci.fake_pool_dict, test_dict)
def test_pci_pool_from_dict(self):
pool_obj = objects.PciDevicePool.from_dict(fake_pci.fake_pool_dict)
self.assertEqual(pool_obj.product_id, 'fake-product')
self.assertEqual(pool_obj.vendor_id, 'fake-vendor')
self.assertEqual(pool_obj.numa_node, 1)
self.assertEqual(pool_obj.tags, {'t1': 'v1', 't2': 'v2'})
self.assertEqual(pool_obj.count, 2)
def test_pci_pool_from_dict_bad_tags(self):
bad_dict = copy.deepcopy(fake_pci.fake_pool_dict)
bad_dict['bad'] = {'foo': 'bar'}
self.assertRaises(ValueError,
objects.PciDevicePool.from_dict,
value=bad_dict)
def test_pci_pool_from_dict_no_tags(self):
dict_notag = copy.copy(fake_pci.fake_pool_dict)
dict_notag.pop('t1')
dict_notag.pop('t2')
pool_obj = objects.PciDevicePool.from_dict(dict_notag)
self.assertEqual(pool_obj.tags, {})
def test_pci_pool_to_dict(self):
tags = {'t1': 'foo', 't2': 'bar'}
pool_obj = objects.PciDevicePool(product_id='pid', tags=tags)
pool_dict = pool_obj.to_dict()
self.assertEqual({'product_id': 'pid',
't1': 'foo',
't2': 'bar'}, pool_dict)
def test_pci_pool_to_dict_no_tags(self):
pool_obj = objects.PciDevicePool(product_id='pid', tags={})
pool_dict = pool_obj.to_dict()
self.assertEqual({'product_id': 'pid'}, pool_dict)
def test_pci_pool_to_dict_with_tags_unset(self):
pool_obj = objects.PciDevicePool(product_id='pid')
pool_dict = pool_obj.to_dict()
self.assertEqual({'product_id': 'pid'}, pool_dict)
def test_obj_make_compatible(self):
pool_obj = objects.PciDevicePool(product_id='pid', numa_node=1)
primitive = pool_obj.obj_to_primitive()
self.assertIn('numa_node', primitive['nova_object.data'])
pool_obj.obj_make_compatible(primitive['nova_object.data'], '1.0')
self.assertNotIn('numa_node', primitive['nova_object.data'])
class TestPciDevicePoolObject(test_objects._LocalTest,
_TestPciDevicePoolObject):
pass
class TestRemotePciDevicePoolObject(test_objects._RemoteTest,
_TestPciDevicePoolObject):
pass
class TestConvertPciStats(test.NoDBTestCase):
def test_from_pci_stats_obj(self):
prim = fake_pci.fake_pool_list_primitive
pools = pci_device_pool.from_pci_stats(prim)
self.assertIsInstance(pools, pci_device_pool.PciDevicePoolList)
self.assertEqual(len(pools), 1)
def test_from_pci_stats_dict(self):
prim = fake_pci.fake_pool_dict
pools = pci_device_pool.from_pci_stats(prim)
self.assertIsInstance(pools, pci_device_pool.PciDevicePoolList)
self.assertEqual(len(pools), 1)
def test_from_pci_stats_list_of_dicts(self):
prim = fake_pci.fake_pool_dict
pools = pci_device_pool.from_pci_stats([prim, prim])
self.assertIsInstance(pools, pci_device_pool.PciDevicePoolList)
self.assertEqual(len(pools), 2)
def test_from_pci_stats_bad(self):
prim = "not a valid json string for an object"
pools = pci_device_pool.from_pci_stats(prim)
self.assertEqual(len(pools), 0)