Files
microstack/tools/init/tests/test_questions.py
Dmitrii Shcherbakov 648a45f3d9 Add template rendering in NovaHypervisor
In order to apply dynamically generated virt-type config to the actual
templates they need to be rendered.

Also improves a KVM presence check since the CPU features may be visible
to a container but KVM API via a character file might not be available
there.

The cpu-mode is now also set to "host-model" instead of "host-passthrough"
when emulation is used as it is done in the default config.

Closes-Bug: #1942761
Change-Id: I689543232a94f4df16445c6e3057c5a329d3f6ae
2021-09-14 16:08:35 +03:00

80 lines
3.0 KiB
Python

import unittest
import mock
import os
import sys
from init.questions import NovaHypervisor
sys.path.append(os.getcwd()) # noqa
class TestNovaHypervisor(unittest.TestCase):
@mock.patch('os.path.exists', return_value=False)
def test_is_kvm_api_available_no_kvm_char_file(self, mock_exists):
self.assertFalse(NovaHypervisor._is_kvm_api_available())
@mock.patch('os.access', side_effect=(
lambda p, m: False if p == '/dev/kvm' else True))
@mock.patch('os.path.exists', return_value=True)
def test_is_kvm_api_available_inaccessible_kvm_char_file(
self, mock_exists, mock_access):
self.assertFalse(NovaHypervisor._is_kvm_api_available())
@mock.patch('stat.S_ISCHR', side_effect=lambda m: False)
@mock.patch('os.stat')
@mock.patch('os.access', return_value=True)
@mock.patch('os.path.exists', return_value=True)
def test_is_kvm_api_available_kvm_file_is_not_char_file(
self, mock_exists, mock_access, mock_stat, mock_ischr):
self.assertFalse(NovaHypervisor._is_kvm_api_available())
@mock.patch('os.minor')
@mock.patch('os.major')
@mock.patch('stat.S_ISCHR', return_value=True)
@mock.patch('os.stat')
@mock.patch('os.access', return_value=True)
@mock.patch('os.path.exists', return_value=True)
def test_is_kvm_api_available_kvm_file_invalid_major_minor(
self, mock_exists, mock_access, mock_stat, mock_ischr,
invalid_major, invalid_minor):
self.assertFalse(NovaHypervisor._is_kvm_api_available())
@mock.patch('os.minor')
@mock.patch('os.major', return_value=42)
@mock.patch('stat.S_ISCHR', return_value=True)
@mock.patch('os.stat')
@mock.patch('os.access', return_value=True)
@mock.patch('os.path.exists', return_value=True)
def test_is_kvm_api_available_kvm_file_invalid_major(
self, mock_exists, mock_access, mock_stat, mock_ischr,
invalid_major, invalid_minor):
self.assertFalse(NovaHypervisor._is_kvm_api_available())
@mock.patch('os.minor', return_value=42)
@mock.patch('os.major', return_value=10)
@mock.patch('stat.S_ISCHR', return_value=True)
@mock.patch('os.stat')
@mock.patch('os.access', return_value=True)
@mock.patch('os.path.exists', return_value=True)
def test_is_kvm_api_available_kvm_file_invalid_minor(
self, mock_exists, mock_access, mock_stat, mock_ischr,
invalid_major, invalid_minor):
self.assertFalse(NovaHypervisor._is_kvm_api_available())
@mock.patch('os.minor', return_value=232)
@mock.patch('os.major', return_value=10)
@mock.patch('stat.S_ISCHR', return_value=True)
@mock.patch('os.stat')
@mock.patch('os.access', return_value=True)
@mock.patch('os.path.exists', return_value=True)
def test_is_kvm_api_available_ok(
self, mock_exists, mock_access, mock_stat, mock_ischr,
invalid_major, invalid_minor):
self.assertTrue(NovaHypervisor._is_kvm_api_available())
if __name__ == '__main__':
unittest.main()