|
Packit Service |
751c4a |
# This file is part of cloud-init. See LICENSE file for license information.
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
import pytest
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
from unittest import mock
|
|
Packit Service |
751c4a |
from logging import Logger
|
|
Packit Service |
751c4a |
from cloudinit.subp import ProcessExecutionError
|
|
Packit Service |
751c4a |
from cloudinit.config.cc_grub_dpkg import fetch_idevs, handle
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
class TestFetchIdevs:
|
|
Packit Service |
751c4a |
"""Tests cc_grub_dpkg.fetch_idevs()"""
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
# Note: udevadm info returns devices in a large single line string
|
|
Packit Service |
751c4a |
@pytest.mark.parametrize(
|
|
Packit Service |
751c4a |
"grub_output,path_exists,expected_log_call,udevadm_output"
|
|
Packit Service |
751c4a |
",expected_idevs",
|
|
Packit Service |
751c4a |
[
|
|
Packit Service |
751c4a |
# Inside a container, grub not installed
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
ProcessExecutionError(reason=FileNotFoundError()),
|
|
Packit Service |
751c4a |
False,
|
|
Packit Service |
751c4a |
mock.call("'grub-probe' not found in $PATH"),
|
|
Packit Service |
751c4a |
'',
|
|
Packit Service |
751c4a |
'',
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
# Inside a container, grub installed
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
ProcessExecutionError(stderr="failed to get canonical path"),
|
|
Packit Service |
751c4a |
False,
|
|
Packit Service |
751c4a |
mock.call("grub-probe 'failed to get canonical path'"),
|
|
Packit Service |
751c4a |
'',
|
|
Packit Service |
751c4a |
'',
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
# KVM Instance
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
['/dev/vda'],
|
|
Packit Service |
751c4a |
True,
|
|
Packit Service |
751c4a |
None,
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
'/dev/disk/by-path/pci-0000:00:00.0 ',
|
|
Packit Service |
751c4a |
'/dev/disk/by-path/virtio-pci-0000:00:00.0 '
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
'/dev/vda',
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
# Xen Instance
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
['/dev/xvda'],
|
|
Packit Service |
751c4a |
True,
|
|
Packit Service |
751c4a |
None,
|
|
Packit Service |
751c4a |
'',
|
|
Packit Service |
751c4a |
'/dev/xvda',
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
# NVMe Hardware Instance
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
['/dev/nvme1n1'],
|
|
Packit Service |
751c4a |
True,
|
|
Packit Service |
751c4a |
None,
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
'/dev/disk/by-id/nvme-Company_hash000 ',
|
|
Packit Service |
751c4a |
'/dev/disk/by-id/nvme-nvme.000-000-000-000-000 ',
|
|
Packit Service |
751c4a |
'/dev/disk/by-path/pci-0000:00:00.0-nvme-0 '
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
'/dev/disk/by-id/nvme-Company_hash000',
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
# SCSI Hardware Instance
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
['/dev/sda'],
|
|
Packit Service |
751c4a |
True,
|
|
Packit Service |
751c4a |
None,
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
'/dev/disk/by-id/company-user-1 ',
|
|
Packit Service |
751c4a |
'/dev/disk/by-id/scsi-0Company_user-1 ',
|
|
Packit Service |
751c4a |
'/dev/disk/by-path/pci-0000:00:00.0-scsi-0:0:0:0 '
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
'/dev/disk/by-id/company-user-1',
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
],
|
|
Packit Service |
751c4a |
)
|
|
Packit Service |
751c4a |
@mock.patch("cloudinit.config.cc_grub_dpkg.util.logexc")
|
|
Packit Service |
751c4a |
@mock.patch("cloudinit.config.cc_grub_dpkg.os.path.exists")
|
|
Packit Service |
751c4a |
@mock.patch("cloudinit.config.cc_grub_dpkg.subp.subp")
|
|
Packit Service |
751c4a |
def test_fetch_idevs(self, m_subp, m_exists, m_logexc, grub_output,
|
|
Packit Service |
751c4a |
path_exists, expected_log_call, udevadm_output,
|
|
Packit Service |
751c4a |
expected_idevs):
|
|
Packit Service |
751c4a |
"""Tests outputs from grub-probe and udevadm info against grub-dpkg"""
|
|
Packit Service |
751c4a |
m_subp.side_effect = [
|
|
Packit Service |
751c4a |
grub_output,
|
|
Packit Service |
751c4a |
["".join(udevadm_output)]
|
|
Packit Service |
751c4a |
]
|
|
Packit Service |
751c4a |
m_exists.return_value = path_exists
|
|
Packit Service |
751c4a |
log = mock.Mock(spec=Logger)
|
|
Packit Service |
751c4a |
idevs = fetch_idevs(log)
|
|
Packit Service |
751c4a |
assert expected_idevs == idevs
|
|
Packit Service |
751c4a |
if expected_log_call is not None:
|
|
Packit Service |
751c4a |
assert expected_log_call in log.debug.call_args_list
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
class TestHandle:
|
|
Packit Service |
751c4a |
"""Tests cc_grub_dpkg.handle()"""
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
@pytest.mark.parametrize(
|
|
Packit Service |
751c4a |
"cfg_idevs,cfg_idevs_empty,fetch_idevs_output,expected_log_output",
|
|
Packit Service |
751c4a |
[
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
# No configuration
|
|
Packit Service |
751c4a |
None,
|
|
Packit Service |
751c4a |
None,
|
|
Packit Service |
751c4a |
'/dev/disk/by-id/nvme-Company_hash000',
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
"Setting grub debconf-set-selections with ",
|
|
Packit Service |
751c4a |
"'/dev/disk/by-id/nvme-Company_hash000','false'"
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
# idevs set, idevs_empty unset
|
|
Packit Service |
751c4a |
'/dev/sda',
|
|
Packit Service |
751c4a |
None,
|
|
Packit Service |
751c4a |
'/dev/sda',
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
"Setting grub debconf-set-selections with ",
|
|
Packit Service |
751c4a |
"'/dev/sda','false'"
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
# idevs unset, idevs_empty set
|
|
Packit Service |
751c4a |
None,
|
|
Packit Service |
751c4a |
'true',
|
|
Packit Service |
751c4a |
'/dev/xvda',
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
"Setting grub debconf-set-selections with ",
|
|
Packit Service |
751c4a |
"'/dev/xvda','true'"
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
# idevs set, idevs_empty set
|
|
Packit Service |
751c4a |
'/dev/vda',
|
|
Packit Service |
751c4a |
'false',
|
|
Packit Service |
751c4a |
'/dev/disk/by-id/company-user-1',
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
"Setting grub debconf-set-selections with ",
|
|
Packit Service |
751c4a |
"'/dev/vda','false'"
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
# idevs set, idevs_empty set
|
|
Packit Service |
751c4a |
# Respect what the user defines, even if its logically wrong
|
|
Packit Service |
751c4a |
'/dev/nvme0n1',
|
|
Packit Service |
751c4a |
'true',
|
|
Packit Service |
751c4a |
'',
|
|
Packit Service |
751c4a |
(
|
|
Packit Service |
751c4a |
"Setting grub debconf-set-selections with ",
|
|
Packit Service |
751c4a |
"'/dev/nvme0n1','true'"
|
|
Packit Service |
751c4a |
),
|
|
Packit Service |
751c4a |
)
|
|
Packit Service |
751c4a |
],
|
|
Packit Service |
751c4a |
)
|
|
Packit Service |
751c4a |
@mock.patch("cloudinit.config.cc_grub_dpkg.fetch_idevs")
|
|
Packit Service |
751c4a |
@mock.patch("cloudinit.config.cc_grub_dpkg.util.get_cfg_option_str")
|
|
Packit Service |
751c4a |
@mock.patch("cloudinit.config.cc_grub_dpkg.util.logexc")
|
|
Packit Service |
751c4a |
@mock.patch("cloudinit.config.cc_grub_dpkg.subp.subp")
|
|
Packit Service |
751c4a |
def test_handle(self, m_subp, m_logexc, m_get_cfg_str, m_fetch_idevs,
|
|
Packit Service |
751c4a |
cfg_idevs, cfg_idevs_empty, fetch_idevs_output,
|
|
Packit Service |
751c4a |
expected_log_output):
|
|
Packit Service |
751c4a |
"""Test setting of correct debconf database entries"""
|
|
Packit Service |
751c4a |
m_get_cfg_str.side_effect = [
|
|
Packit Service |
751c4a |
cfg_idevs,
|
|
Packit Service |
751c4a |
cfg_idevs_empty
|
|
Packit Service |
751c4a |
]
|
|
Packit Service |
751c4a |
m_fetch_idevs.return_value = fetch_idevs_output
|
|
Packit Service |
751c4a |
log = mock.Mock(spec=Logger)
|
|
Packit Service |
751c4a |
handle(mock.Mock(), mock.Mock(), mock.Mock(), log, mock.Mock())
|
|
Packit Service |
751c4a |
log.debug.assert_called_with("".join(expected_log_output))
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
|
|
Packit Service |
751c4a |
# vi: ts=4 expandtab
|