from unittest.mock import patch
import pytest
from ucampurestorage.lib.process import Process
# from pathlib import Path
[docs]
@pytest.fixture
def init_ps() -> Process:
return Process()
[docs]
@pytest.mark.parametrize(
"return_vals",
[(0, "cs2.internal.admin.cam.ac.uk", None), (0, "cs-test.google.com", None)],
)
def test_process_hostname(init_ps, return_vals) -> None:
returnval = return_vals
with patch("ucampurestorage.lib.process.Process.run") as ps_run:
ps_run.return_value = returnval
hostname = init_ps.get_hostname()
assert hostname == returnval[1]
[docs]
@pytest.mark.parametrize(
"return_vals, expected", [((0, "1", None), True), ((0, "2", None), False)]
)
def test_process_mountpoint_exists(init_ps, return_vals, expected) -> None:
returnval = return_vals
with patch("ucampurestorage.lib.process.Path.is_dir") as dir_ext:
dir_ext.return_value = True
with patch("ucampurestorage.lib.process.Process.run") as ps_run:
ps_run.return_value = returnval
mt_exist = init_ps.mountpoint_exists("/t1")
assert mt_exist == expected
[docs]
@pytest.mark.parametrize(
"return_vals, mtpt, mt_check, expected",
[
((0, "/dev/mapper/vold11p1", None), "/t1", True, "/dev/mapper/vold11p1"),
((1, "", None), "/t2", False, None),
],
)
def test_process_get_fsdevice_from_mountpoint(
init_ps, return_vals, mtpt, mt_check, expected
) -> None:
returnval = return_vals
with patch("ucampurestorage.lib.process.Process.mountpoint_exists") as mt_check:
mt_check.return_value = mt_check
with patch("ucampurestorage.lib.process.Process.run") as ps_run:
ps_run.return_value = returnval
fsdev = init_ps.get_fsdevice_from_mountpoint(mtpt)
assert fsdev == expected
[docs]
@pytest.mark.parametrize(
"return_val, expected",
[
("/dev/mapper/vold11p1", "/dev/mapper/vold11"),
("/dev/mapper/vold8p1", "/dev/mapper/vold8"),
],
)
def test_process_get_mpath_from_mountpoint(init_ps, return_val, expected) -> None:
returnval = return_val
with patch(
"ucampurestorage.lib.process.Process.get_fsdevice_from_mountpoint"
) as ps_run:
ps_run.return_value = returnval
fsdev = init_ps.get_mpath_from_mountpoint("/t1")
assert fsdev == expected
[docs]
@pytest.mark.skip
def test_process_get_wwn_from_mpath() -> None:
pass
[docs]
@pytest.mark.parametrize(
"wwn, expected",
[("6000d31000e39400000000000000029d", True), ("6000d31000e394000000000", False)],
)
def test_process_is_wwn_valid(init_ps, wwn, expected) -> None:
valid_wwn = init_ps.is_wwn_valid(wwn)
assert valid_wwn == expected
[docs]
@pytest.mark.parametrize(
"wwn, expected",
[
("6000d31000e39400000000000000029d", True),
("6000d31000e30000000", False),
("6000d31000e3940000000001", True),
],
)
def test_process_is_wwn_serial_valid(init_ps, wwn, expected) -> None:
valid_wwn = init_ps.is_wwn_serial_valid(wwn)
assert valid_wwn == expected
[docs]
@pytest.mark.parametrize(
"return_val, wwn_mpath, wwn_valid, expected",
[((0, "/d12", None), True, True, "/d12")],
)
def test_process_is_wwn_mounted(
init_ps, wwn_mpath, wwn_valid, return_val, expected
) -> None:
with patch("ucampurestorage.lib.process.Process.is_wwn_valid") as wwn_valid:
wwn_valid.return_value = wwn_valid
with patch(
"ucampurestorage.lib.process.Process.get_mpath_from_wwn"
) as mpath_wwn:
mpath_wwn.return_value = wwn_mpath
with patch("ucampurestorage.lib.process.Process.run") as run:
run.return_value = return_val
is_mount = init_ps.is_wwn_mounted("6000d31000e39400000000000000029d")
assert is_mount == expected
[docs]
@pytest.mark.parametrize(
"feed_list, expected", [([1, 2, 3], 4), ([1, 2, 4], 3), ([], 1)]
)
def test_process_get_index_in_list(init_ps, feed_list, expected) -> None:
value_index = init_ps.get_index_in_list(feed_list)
assert value_index == expected
[docs]
@pytest.mark.parametrize(
"return_val, expected",
[
((0, "vold01\nvold02", None), "vold03"),
((0, "vold01\nvold03", None), "vold02"),
((0, "", None), "vold01"),
],
)
def test_process_generate_devicemapper_alias(init_ps, return_val, expected) -> None:
with patch("ucampurestorage.lib.process.Process.run") as run:
run.return_value = return_val
value_index = init_ps.generate_devicemapper_alias()
assert value_index == expected
[docs]
@pytest.mark.parametrize(
"device, expected",
[
("/dev/mapper/vold05p1", True),
("/dev/mapper/vold05p2", False),
("/dev/mapper/pure", False),
],
)
def test_process_is_device_valid(init_ps, device, expected) -> None:
value_index = init_ps.is_device_valid(device)
assert value_index == expected
[docs]
@pytest.mark.skip
def test_process_get_wwid_from_wwn() -> None:
pass
[docs]
@pytest.mark.parametrize(
"fs, rc, expected", [("/dp1", (0, None), True), ("/dp2", (1, None), False)]
)
def test_process_mount(init_ps, fs, rc, expected):
with patch("ucampurestorage.lib.process.Process.run") as run:
run.return_value = rc
mount_rt = init_ps.mount(fs)
assert mount_rt == expected
[docs]
@pytest.mark.parametrize(
"fs, rc, expected", [("/dp1", (0, None), True), ("/dp2", (1, None), False)]
)
def test_process_unmount(init_ps, fs, rc, expected):
with patch("ucampurestorage.lib.process.Process.run") as run:
run.return_value = rc
umount_rt = init_ps.umount(fs)
assert umount_rt == expected
[docs]
@pytest.mark.parametrize("version, expected", [("6", True), ("7", True), ("8", True)])
def test_process_reload_multipathd(init_ps, version, expected):
with patch("ucampurestorage.lib.process.Process.get_release") as vers:
vers.return_value = version
with patch("ucampurestorage.lib.process.Process.run") as run:
run.return_value = (0, None)
reload_rt = init_ps.reload_multipathd()
assert reload_rt == expected
[docs]
@pytest.mark.parametrize("version, expected", [("6", True), ("7", True), ("8", True)])
def test_process_daemon_reload(init_ps, version, expected):
with patch("ucampurestorage.lib.process.Process.get_release") as vers:
vers.return_value = version
with patch("ucampurestorage.lib.process.Process.run") as run:
run.return_value = (0, None)
reload_rt = init_ps.daemon_reload()
assert reload_rt == expected
[docs]
def test_process_get_multipath_raw_devices(init_ps):
with patch("ucampurestorage.lib.process.Process.run") as run:
run.return_value = (0, "sdj\nsdg\nsdi\nsdk", None)
reload_rt = init_ps.get_multipath_raw_devices("5715765")
assert reload_rt == ["sdj", "sdg", "sdi", "sdk"]
[docs]
@pytest.mark.skip
def test_process_rescan_scsibus() -> None:
pass