Skip to content

Commit

Permalink
Update grub lib tests
Browse files Browse the repository at this point in the history
  • Loading branch information
matejmatuska committed Jun 24, 2023
1 parent e51bf96 commit 3f48a58
Showing 1 changed file with 58 additions and 6 deletions.
64 changes: 58 additions & 6 deletions repos/system_upgrade/common/libraries/tests/test_grub.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@
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

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!'

Expand All @@ -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
Expand All @@ -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):
Expand Down Expand Up @@ -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

0 comments on commit 3f48a58

Please sign in to comment.