Skip to content
Snippets Groups Projects
test_command_line_parse.py 15.6 KiB
Newer Older
FH's avatar
FH committed
#!/usr/bin/env python

"""
test_pacman-mirrors
----------------------------------

Tests for `pacman-mirrors` module.
"""

import unittest
from unittest.mock import patch

from pacman_mirrors.pacman_mirrors import PacmanMirrors
from pacman_mirrors import configfn
from . import mock_configuration as conf
FH's avatar
FH committed


class TestCommandLineParse(unittest.TestCase):
    """Pacman Mirrors Test suite"""
    def setUp(self):
        """Setup tests"""
        pass

    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_branch_unstable(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: config[branch] from arg -b unstable"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "-b", "unstable"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.config["branch"] == "unstable"

    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_branch_testing(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: config[branch] from arg -b testing"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "-b", "testing"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.config["branch"] == "testing"

    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_method(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: config[method] from arg -m random"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "-m", "random"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.config["method"] == "random"

    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_mirrordir(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: config[mirror_dir] from arg -d /another/dir"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "-d", "/another/dir/"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.config["mirror_dir"] == "/another/dir/"

    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_mirrorlist(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: config[mirror_list] from arg -o /another/list"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "-o", "/another/list"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.config["mirror_list"] == "/another/list"

    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_onlycountry(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: config[only_country] from arg -c France,Germany"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "-c", "France,Germany"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.config["only_country"] == ["France", "Germany"]

FH's avatar
FH committed
    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_custom_country(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: custom is True from arg -c Denmark"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "-c Denmark"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.custom is True

FH's avatar
FH committed
    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_geoip(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: geoip True from arg --geoip"""
FH's avatar
FH committed
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "--geoip"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.geoip is True

FH's avatar
FH committed
    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_fasttrack(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: fasttrack is 5 from arg -f 5"""
FH's avatar
FH committed
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
FH's avatar
FH committed
                                  "-f 5"]):
FH's avatar
FH committed
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
FH's avatar
FH committed
            assert app.fasttrack == 5

    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_interactive(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: interactive is true from arg -i"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
FH's avatar
FH committed
                                  "-i"]):
FH's avatar
FH committed
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.interactive is True

    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_max_wait_time(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: max_wait_time is 5 from arg -t 5"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "-t 5"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.max_wait_time == 5

    @patch("os.getuid")
Frede H's avatar
Frede H committed
    @patch.object(configfn, "build_config")
    def test_arg_quiet(self, mock_build_config, mock_os_getuid):
FH's avatar
FH committed
        """TEST: quiet is True from arg -q"""
        mock_os_getuid.return_value = 0
Frede H's avatar
Frede H committed
        mock_build_config.return_value = {
            "branch": "stable",
Frede H's avatar
Frede H committed
            "branches": conf.BRANCHES,
Frede H's avatar
Frede H committed
            "config_file": conf.CONFIG_FILE,
Frede H's avatar
Frede H committed
            "custom_file": conf.CUSTOM_FILE,
Frede H's avatar
Frede H committed
            "fallback_file": conf.FALLBACK,
Frede H's avatar
Frede H committed
            "method": "rank",
            "mirror_dir": conf.MIRROR_DIR,
            "mirror_file": conf.MIRROR_FILE,
            "mirror_list": conf.MIRROR_LIST,
            "no_update": False,
            "only_country": [],
Frede H's avatar
Frede H committed
            "repo_arch": conf.REPO_ARCH,
            "status_file": conf.STATUS_FILE,
            "url_mirrors_json": conf.URL_MIRROR_JSON,
            "url_status_json": conf.URL_STATUS_JSON
Frede H's avatar
Frede H committed
        }
FH's avatar
FH committed
        with unittest.mock.patch("sys.argv",
                                 ["pacman-mirrors",
                                  "-q"]):
            app = PacmanMirrors()
Frede H's avatar
Frede H committed
            app.config["config_file"] = conf.CONFIG_FILE
            app.config = configfn.build_config()
FH's avatar
FH committed
            app.command_line_parse()
            assert app.quiet is True
FH's avatar
FH committed

FH's avatar
FH committed
    def tearDown(self):
        """Tear down"""
        pass


if __name__ == "__main__":
    unittest.main()