blob: df5658fb66f703776a459b3f657fb4fa4f776711 [file] [log] [blame]
#!/usr/bin/python3
# SPDX-License-Identifier: MIT
"""
This module contains unit tests for the installer functions in the amd-debug-tools package.
"""
from unittest.mock import patch, mock_open
import logging
import unittest
from amd_debug.installer import Installer
class TestInstaller(unittest.TestCase):
"""Test installer functions"""
@classmethod
def setUpClass(cls):
logging.basicConfig(filename="/dev/null", level=logging.DEBUG)
def setUp(self):
self.installer = Installer(tool_debug=False)
@patch("builtins.print")
@patch("shutil.copy", return_value=None)
@patch("os.chmod", return_value=None)
@patch("builtins.open")
@patch("subprocess.call", return_value=0)
@patch("os.makedirs", return_value=None)
def test_install_hook(
self,
_mock_mkdir,
_mock_call,
_mock_open,
_mock_chmod,
_mock_shutil,
_mock_print,
):
"""Test install hook function"""
self.installer.install()
@patch("builtins.print")
@patch("shutil.copy", return_value=None)
@patch("os.chmod", return_value=None)
@patch("builtins.open")
@patch("subprocess.call", return_value=0)
@patch("os.makedirs", return_value=None)
def test_install_hook_missing_path(
self,
_mock_mkdir,
_mock_call,
_mock_open,
_mock_chmod,
_mock_shutil,
_mock_print,
):
"""Test install hook function, but some paths are missing"""
with patch("os.path.exists", return_value=False):
self.installer.install()
@patch("builtins.print")
@patch("os.remove", return_value=None)
@patch("builtins.open")
@patch("amd_debug.installer.get_distro", return_value="ubuntu")
@patch("subprocess.call", return_value=0)
def test_remove_hook(
self, _mock_call, _mock_get_distro, _mock_open, _mock_remove, _mock_print
):
"""Test remove hook function"""
with patch("os.path.exists", return_value=True):
self.installer.remove()
@patch("builtins.print")
@patch("os.path.exists", return_value=False)
@patch("subprocess.call", return_value=0)
def test_remove_hook_missing_path(self, _mock_call, _mock_exists, _mock_print):
"""Test remove hook function when the file is missing"""
self.installer.remove()
@patch("builtins.print")
@patch("subprocess.call", return_value=0)
def test_already_installed_iasl(self, _mock_call, _mock_print):
"""Test that an already installed iasl is found"""
self.installer.set_requirements("iasl")
ret = self.installer.install_dependencies()
self.assertTrue(ret)
@patch("builtins.print")
@patch("amd_debug.installer.get_distro", return_value="ubuntu")
@patch("os.execvp", return_value=None)
@patch("subprocess.check_call", return_value=0)
@patch("subprocess.call", return_value=1)
def test_install_iasl_ubuntu(
self, _mock_call, _mock_check_call, _mock_distro, _fake_sudo, _mock_print
):
"""Test install requirements function"""
self.installer.set_requirements("iasl")
ret = self.installer.install_dependencies()
_mock_check_call.assert_called_once_with(["apt", "install", "acpica-tools"])
self.assertTrue(ret)
@patch("builtins.print")
@patch("amd_debug.installer.get_distro", return_value="fedora")
@patch(
"builtins.open", new_callable=mock_open, read_data="VARIANT_ID=workstation\n"
)
@patch("os.execvp", return_value=None)
@patch("subprocess.check_call", return_value=0)
@patch("subprocess.call", return_value=1)
def test_install_iasl_fedora(
self,
_mock_call,
_mock_check_call,
_mock_variant,
_mock_distro,
_fake_sudo,
_mock_print,
):
"""Test install requirements function"""
self.installer.set_requirements("iasl")
ret = self.installer.install_dependencies()
_mock_check_call.assert_called_once_with(
["dnf", "install", "-y", "acpica-tools"]
)
self.assertTrue(ret)
@patch("builtins.print")
@patch("amd_debug.installer.get_distro", return_value="ubuntu")
@patch("os.execvp", return_value=None)
@patch("subprocess.check_call", return_value=0)
@patch("subprocess.call", return_value=1)
def test_install_ethtool_ubuntu(
self, _mock_call, _mock_check_call, _mock_distro, _fake_sudo, _mock_print
):
"""Test install requirements function"""
self.installer.set_requirements("ethtool")
ret = self.installer.install_dependencies()
_mock_check_call.assert_called_once_with(["apt", "install", "ethtool"])
self.assertTrue(ret)
@patch("builtins.print")
@patch("amd_debug.installer.get_distro", return_value="fedora")
@patch(
"builtins.open", new_callable=mock_open, read_data="VARIANT_ID=workstation\n"
)
@patch("os.execvp", return_value=None)
@patch("subprocess.check_call", return_value=0)
@patch("subprocess.call", return_value=1)
def test_install_ethtool_fedora(
self,
_mock_call,
_mock_check_call,
_mock_variant,
_mock_distro,
_fake_sudo,
_mock_print,
):
"""Test install requirements function"""
self.installer.set_requirements("ethtool")
ret = self.installer.install_dependencies()
_mock_check_call.assert_called_once_with(["dnf", "install", "-y", "ethtool"])
self.assertTrue(ret)
@patch("builtins.print")
@patch("amd_debug.installer.get_distro", return_value="arch")
@patch("os.execvp", return_value=None)
@patch("subprocess.check_call", return_value=0)
@patch("subprocess.call", return_value=1)
def test_install_ethtool_arch(
self,
_mock_call,
_mock_check_call,
_mock_distro,
_fake_sudo,
_mock_print,
):
"""Test install requirements function"""
self.installer.set_requirements("ethtool")
ret = self.installer.install_dependencies()
_mock_check_call.assert_called_once_with(["pacman", "-Sy", "ethtool"])
self.assertTrue(ret)
@patch("builtins.print")
@patch("os.path.exists", return_value=False)
@patch("os.execvp", return_value=None)
@patch("amd_debug.installer.get_distro", return_value="gentoo")
@patch("subprocess.call", return_value=1)
def test_install_iasl_gentoo(
self, _mock_call, _mock_distro, _fake_sudo, _mock_exists, _mock_print
):
"""Test install requirements function"""
self.installer.set_requirements("iasl", "ethtool")
ret = self.installer.install_dependencies()
self.assertTrue(ret)
@patch("builtins.print")
@patch("amd_debug.installer.get_distro", return_value="ubuntu")
@patch("os.execvp", return_value=None)
@patch("subprocess.check_call", return_value=0)
@patch("subprocess.call", return_value=1)
def test_install_edid_decode_ubuntu(
self, _mock_call, _mock_check_call, _mock_distro, _fake_sudo, _mock_print
):
"""Test install requirements function for edid-decode on Ubuntu"""
self.installer.set_requirements("edid-decode")
ret = self.installer.install_dependencies()
_mock_check_call.assert_called_once_with(
["apt", "install", "libdisplay-info-bin"]
)
self.assertTrue(ret)
@patch("builtins.print")
@patch("amd_debug.installer.get_distro", return_value="fedora")
@patch(
"builtins.open", new_callable=mock_open, read_data="VARIANT_ID=workstation\n"
)
@patch("os.execvp", return_value=None)
@patch("subprocess.check_call", return_value=0)
@patch("subprocess.call", return_value=1)
def test_install_edid_decode_fedora(
self,
_mock_call,
_mock_check_call,
_mock_variant,
_mock_distro,
_fake_sudo,
_mock_print,
):
"""Test install requirements function for edid-decode on Fedora"""
self.installer.set_requirements("edid-decode")
ret = self.installer.install_dependencies()
_mock_check_call.assert_called_once_with(
["dnf", "install", "-y", "libdisplay-info-tools"]
)
self.assertTrue(ret)
@patch("builtins.print")
@patch("amd_debug.installer.get_distro", return_value="arch")
@patch("os.execvp", return_value=None)
@patch("subprocess.check_call", return_value=0)
@patch("subprocess.call", return_value=1)
def test_install_edid_decode_arch(
self,
_mock_call,
_mock_check_call,
_mock_distro,
_fake_sudo,
_mock_print,
):
"""Test install requirements function for edid-decode on Arch"""
self.installer.set_requirements("edid-decode")
ret = self.installer.install_dependencies()
_mock_check_call.assert_called_once_with(["pacman", "-Sy", "libdisplay-info"])
self.assertTrue(ret)
@patch("builtins.print")
@patch("os.path.exists", return_value=False)
@patch("os.execvp", return_value=None)
@patch("amd_debug.installer.get_distro", return_value="gentoo")
@patch("subprocess.call", return_value=1)
def test_install_edid_decode_gentoo(
self, _mock_call, _mock_distro, _fake_sudo, _mock_exists, _mock_print
):
"""Test install requirements function for edid-decode on unsupported distro"""
self.installer.set_requirements("edid-decode")
ret = self.installer.install_dependencies()
self.assertTrue(ret)
@patch("builtins.print")
@patch("os.path.exists", return_value=False)
@patch("os.execvp", return_value=None)
@patch("amd_debug.installer.get_distro", return_value="gentoo")
@patch("subprocess.call", return_value=255)
def test_install_edid_decode_present(
self, _mock_call, _mock_distro, _fake_sudo, _mock_exists, _mock_print
):
"""Test install requirements function for edid-decode on unsupported distro"""
self.installer.set_requirements("edid-decode")
ret = self.installer.install_dependencies()
self.assertTrue(ret)