From 3f48a5840161f913f919ed1e35c63b359b293381 Mon Sep 17 00:00:00 2001 From: Matej Matuska Date: Sat, 24 Jun 2023 14:16:40 +0200 Subject: [PATCH] Update grub lib tests --- .../common/libraries/tests/test_grub.py | 64 +++++++++++++++++-- 1 file changed, 58 insertions(+), 6 deletions(-) diff --git a/repos/system_upgrade/common/libraries/tests/test_grub.py b/repos/system_upgrade/common/libraries/tests/test_grub.py index ba086854b0..ee70124787 100644 --- a/repos/system_upgrade/common/libraries/tests/test_grub.py +++ b/repos/system_upgrade/common/libraries/tests/test_grub.py @@ -3,7 +3,7 @@ import pytest from leapp.exceptions import StopActorExecution -from leapp.libraries.common import grub +from leapp.libraries.common import grub, mdraid from leapp.libraries.common.testutils import logger_mocked from leapp.libraries.stdlib import api, CalledProcessError from leapp.models import DefaultGrub, DefaultGrubInfo @@ -11,6 +11,9 @@ BOOT_PARTITION = '/dev/vda1' BOOT_DEVICE = '/dev/vda' +MD_BOOT_DEVICE = '/dev/md0' +MD_BOOT_REAL_DEVICES = ['/dev/sda', '/dev/sdb'] + VALID_DD = b'GRUB GeomHard DiskRead Error' INVALID_DD = b'Nothing to see here!' @@ -27,10 +30,11 @@ def raise_call_error(args=None): class RunMocked(object): - def __init__(self, raise_err=False): + def __init__(self, raise_err=False, boot_on_raid=False): self.called = 0 self.args = None self.raise_err = raise_err + self.boot_on_raid = boot_on_raid def __call__(self, args, encoding=None): self.called += 1 @@ -39,18 +43,24 @@ def __call__(self, args, encoding=None): raise_call_error(args) if self.args == ['grub2-probe', '--target=device', '/boot']: - stdout = BOOT_PARTITION + stdout = MD_BOOT_DEVICE if self.boot_on_raid else BOOT_PARTITION elif self.args == ['lsblk', '-spnlo', 'name', BOOT_PARTITION]: stdout = BOOT_DEVICE + elif self.args == ['lsblk', '-spnlo', 'name', '/dev/sda1']: + stdout = '/dev/sda' + elif self.args == ['lsblk', '-spnlo', 'name', '/dev/sdb1']: + stdout = '/dev/sdb' return {'stdout': stdout} def open_mocked(fn, flags): - return open( - os.path.join(CUR_DIR, 'grub_valid') if fn == BOOT_DEVICE else os.path.join(CUR_DIR, 'grub_invalid'), 'r' - ) + if fn == BOOT_DEVICE or fn in MD_BOOT_REAL_DEVICES: + path = os.path.join(CUR_DIR, 'grub_valid') + else: + path = os.path.join(CUR_DIR, 'grub_invalid') + return open(path, 'r') def open_invalid(fn, flags): @@ -122,3 +132,45 @@ def test_is_blscfg_library(monkeypatch, enabled): assert result else: assert not result + + +def is_mdraid_dev_mocked(dev): + return dev == '/dev/md0' + + +def test_get_grub_devices_one_device(monkeypatch): + run_mocked = RunMocked() + monkeypatch.setattr(grub, 'run', run_mocked) + monkeypatch.setattr(os, 'open', open_mocked) + monkeypatch.setattr(os, 'read', read_mocked) + monkeypatch.setattr(os, 'close', close_mocked) + monkeypatch.setattr(api, 'current_logger', logger_mocked()) + monkeypatch.setattr(mdraid, 'is_mdraid_dev', is_mdraid_dev_mocked) + + result = grub.get_grub_devices() + assert grub.run.called == 2 + assert [BOOT_DEVICE] == result + assert not api.current_logger.warnmsg + assert 'GRUB is installed on {}'.format(",".join(result)) in api.current_logger.infomsg + + +def test_get_grub_devices_raid_device(monkeypatch): + run_mocked = RunMocked(boot_on_raid=True) + monkeypatch.setattr(grub, 'run', run_mocked) + monkeypatch.setattr(os, 'open', open_mocked) + monkeypatch.setattr(os, 'read', read_mocked) + monkeypatch.setattr(os, 'close', close_mocked) + monkeypatch.setattr(api, 'current_logger', logger_mocked()) + monkeypatch.setattr(mdraid, 'is_mdraid_dev', is_mdraid_dev_mocked) + + def get_component_devices_mocked(raid_dev): + assert raid_dev == MD_BOOT_DEVICE + return ['/dev/sda1', '/dev/sdb1'] + + monkeypatch.setattr(mdraid, 'get_component_devices', get_component_devices_mocked) + + result = grub.get_grub_devices() + assert grub.run.called == 3 # grub2-probe + 2x lsblk + assert ['/dev/sda', '/dev/sdb'] == result + assert not api.current_logger.warnmsg + assert 'GRUB is installed on {}'.format(",".join(result)) in api.current_logger.infomsg