nova/nova/tests/unit/virt/test_osinfo.py
Matt Riedemann 9910bade6f Do not attempt to load osinfo if we do not have os_distro
We get a warning logged every time we try to load up osinfo
with an image metadata that does not have the 'os_distro'
property set. We should be smarter and just not try to load
osinfo at all if we know we cannot get results.

Change-Id: I79ebea3ed222fb0db01d0a33c62a677d0381f66c
Closes-Bug: #1675602
2017-03-23 22:07:03 -04:00

105 lines
4.1 KiB
Python

# Copyright 2015 Red Hat, Inc
#
# 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 fixtures
import mock
from nova import exception
from nova import objects
from nova import test
from nova.tests.unit.virt import fakelibosinfo
from nova.virt import osinfo
class LibvirtOsInfoTest(test.NoDBTestCase):
def setUp(self):
super(LibvirtOsInfoTest, self).setUp()
image_meta = {'properties':
{'os_distro': 'fedora22',
'hw_disk_bus': 'ide',
'hw_vif_model': 'rtl8139'}
}
self.img_meta = objects.ImageMeta.from_dict(image_meta)
self.useFixture(fixtures.MonkeyPatch(
'nova.virt.osinfo.libosinfo',
fakelibosinfo))
self.useFixture(fixtures.MonkeyPatch(
'nova.virt.osinfo._OsInfoDatabase._instance',
None))
def test_get_os(self):
os_info_db = osinfo._OsInfoDatabase.get_instance()
os_name = os_info_db.get_os('fedora22').get_name()
self.assertEqual('Fedora 22', os_name)
def test_get_os_fails(self):
os_info_db = osinfo._OsInfoDatabase.get_instance()
self.assertRaises(exception.OsInfoNotFound,
os_info_db.get_os,
'test33')
def test_module_load_failed(self):
self.useFixture(fixtures.MonkeyPatch(
'nova.virt.osinfo.libosinfo',
None))
with test.nested(
mock.patch.object(osinfo.importutils, 'import_module',
side_effect=ImportError('gi.repository.Libosinfo')),
mock.patch.object(osinfo.LOG, 'info')) as (mock_import, mock_log):
os_info_db = osinfo._OsInfoDatabase.get_instance()
self.assertIsNone(os_info_db.get_os('fedora22'))
os_info_db = osinfo._OsInfoDatabase.get_instance()
self.assertIsNone(os_info_db.get_os('fedora19'))
self.assertEqual(1, mock_log.call_count)
def test_hardware_properties_from_osinfo(self):
"""Verifies that HardwareProperties attributes are being set
from libosinfo.
"""
img_meta = {'properties':
{'os_distro': 'fedora22'}
}
img_meta = objects.ImageMeta.from_dict(img_meta)
osinfo_obj = osinfo.HardwareProperties(img_meta)
self.assertEqual('virtio', osinfo_obj.network_model)
self.assertEqual('virtio', osinfo_obj.disk_model)
def test_hardware_properties_from_meta(self):
"""Verifies that HardwareProperties attributes are being set
from image properties.
"""
with mock.patch.object(osinfo._OsInfoDatabase, 'get_instance'):
osinfo_obj = osinfo.HardwareProperties(self.img_meta)
self.assertEqual('rtl8139', osinfo_obj.network_model)
self.assertEqual('ide', osinfo_obj.disk_model)
@mock.patch('nova.virt.osinfo.LOG.warning')
def test_hardware_properties_from_meta_no_os_distro(self, mock_warn):
"""Verifies that HardwareProperties attributes are not being set
from image properties if there is no os_distro provided.
"""
img_meta = {'properties': {'hw_watchdog_action': 'disabled'}}
img_meta = objects.ImageMeta.from_dict(img_meta)
with mock.patch.object(osinfo._OsInfoDatabase,
'get_instance') as get_instance:
osinfo_obj = osinfo.HardwareProperties(img_meta)
self.assertIsNone(osinfo_obj.network_model)
self.assertIsNone(osinfo_obj.disk_model)
get_instance.assert_not_called()
mock_warn.assert_not_called()