nova/nova/tests/unit/objects/test_instance_device_metada...

103 lines
4.2 KiB
Python

# 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 mock
from oslo_serialization import jsonutils
from nova import objects
from nova.tests.unit.objects import test_objects
fake_net_interface_meta = objects.NetworkInterfaceMetadata(
mac='52:54:00:f6:35:8f',
tags=['mytag1'],
bus=objects.PCIDeviceBus(address='0000:00:03.0'),
vlan=1000)
fake_pci_disk_meta = objects.DiskMetadata(
bus=objects.PCIDeviceBus(address='0000:00:09.0'),
tags=['nfvfunc3'])
fake_obj_devices_metadata = objects.InstanceDeviceMetadata(
devices=[fake_net_interface_meta, fake_pci_disk_meta])
fake_devices_metadata = fake_obj_devices_metadata._to_json()
fake_db_metadata = {
'created_at': None,
'updated_at': None,
'deleted_at': None,
'deleted': 0,
'id': 1,
'device_metadata': fake_obj_devices_metadata._to_json()
}
fake_old_db_metadata = dict(fake_db_metadata) # copy
fake_old_db_metadata['device_metadata'] = jsonutils.dumps(
fake_devices_metadata)
def get_fake_obj_device_metadata(context):
fake_obj_devices_metadata_cpy = fake_obj_devices_metadata.obj_clone()
fake_obj_devices_metadata_cpy._context = context
return fake_obj_devices_metadata_cpy
class _TestInstanceDeviceMetadata(object):
def _check_object(self, obj_meta):
self.assertTrue(isinstance(obj_meta,
objects.NetworkInterfaceMetadata) or
isinstance(obj_meta, objects.DiskMetadata))
if isinstance(obj_meta, objects.NetworkInterfaceMetadata):
self.assertEqual(obj_meta.mac, '52:54:00:f6:35:8f')
self.assertEqual(obj_meta.tags, ['mytag1'])
self.assertIsInstance(obj_meta.bus, objects.PCIDeviceBus)
self.assertEqual(obj_meta.bus.address, '0000:00:03.0')
self.assertEqual(obj_meta.vlan, 1000)
elif isinstance(obj_meta, objects.DiskMetadata):
self.assertIsInstance(obj_meta.bus, objects.PCIDeviceBus)
self.assertEqual(obj_meta.bus.address, '0000:00:09.0')
self.assertEqual(obj_meta.tags, ['nfvfunc3'])
@mock.patch('nova.db.api.instance_extra_get_by_instance_uuid')
def test_get_by_instance_uuid(self, mock_get):
mock_get.return_value = fake_db_metadata
inst_meta = objects.InstanceDeviceMetadata
dev_meta = inst_meta.get_by_instance_uuid(
self.context, 'fake_uuid')
for obj_meta, fake_meta in zip(
dev_meta.devices,
fake_obj_devices_metadata.devices):
self._check_object(obj_meta)
def test_obj_from_db(self):
db_meta = fake_db_metadata['device_metadata']
metadata = objects.InstanceDeviceMetadata.obj_from_db(None, db_meta)
for obj_meta in metadata.devices:
self._check_object(obj_meta)
def test_net_if_compatible_pre_1_1(self):
vif_obj = objects.NetworkInterfaceMetadata(mac='52:54:00:f6:35:8f')
vif_obj.tags = ['test']
vif_obj.vlan = 1000
primitive = vif_obj.obj_to_primitive()
self.assertIn('vlan', primitive['nova_object.data'])
vif_obj.obj_make_compatible(primitive['nova_object.data'], '1.0')
self.assertNotIn('vlan', primitive['nova_object.data'])
class TestInstanceDeviceMetadata(test_objects._LocalTest,
_TestInstanceDeviceMetadata):
pass
class TestInstanceDeviceMetadataRemote(test_objects._RemoteTest,
_TestInstanceDeviceMetadata):
pass