예제 #1
0
def test_call_success_parameters():
    """Test transactional_update.chroot when succeed with parameters"""
    utils_mock = {
        "json.find_json": MagicMock(return_value={"return": "result"}),
    }
    salt_mock = {
        "cmd.run_all": MagicMock(return_value={
            "retcode": 0,
            "stdout": ""
        }),
    }
    with patch.dict(tu.__utils__,
                    utils_mock), patch.dict(tu.__salt__, salt_mock):
        assert tu.call("module.function", key="value") == "result"

        salt_mock["cmd.run_all"].assert_called_with([
            "transactional-update",
            "--non-interactive",
            "--drop-if-no-change",
            "--no-selfupdate",
            "--continue",
            "--quiet",
            "run",
            "salt-call",
            "--out",
            "json",
            "-l",
            "quiet",
            "--no-return-event",
            "--",
            "module.function",
            "key=value",
        ])
예제 #2
0
    def test_call_fails_function(self, mkdtemp):
        """Test transactional_update.chroot when fails the function"""
        mkdtemp.return_value = "/var/cache/salt/minion/tmp01"
        utils_mock = {
            "thin.gen_thin": MagicMock(return_value="/salt-thin.tgz"),
            "files.rm_rf": MagicMock(),
            "json.find_json": MagicMock(side_effect=ValueError()),
        }
        opts_mock = {"cachedir": "/var/cache/salt/minion"}
        salt_mock = {
            "cmd.run":
            MagicMock(return_value=""),
            "config.option":
            MagicMock(),
            "cmd.run_all":
            MagicMock(return_value={
                "retcode": 0,
                "stdout": "Not found",
                "stderr": ""
            }),
        }
        with patch.dict(tu.__utils__, utils_mock), patch.dict(
                tu.__opts__, opts_mock), patch.dict(tu.__salt__, salt_mock):
            assert tu.call("test.ping") == {
                "result": False,
                "retcode": 1,
                "comment": "Not found",
            }

            utils_mock["thin.gen_thin"].assert_called_once()
            salt_mock["config.option"].assert_called()
            salt_mock["cmd.run"].assert_called_once()
            salt_mock["cmd.run_all"].assert_called_with([
                "transactional-update",
                "--non-interactive",
                "--drop-if-no-change",
                "--no-selfupdate",
                "--continue",
                "--quiet",
                "run",
                "python{}".format(sys.version_info[0]),
                "/var/cache/salt/minion/tmp01/salt-call",
                "--metadata",
                "--local",
                "--log-file",
                "/var/cache/salt/minion/tmp01/log",
                "--cachedir",
                "/var/cache/salt/minion/tmp01/cache",
                "--out",
                "json",
                "-l",
                "quiet",
                "--",
                "test.ping",
            ])
            utils_mock["files.rm_rf"].assert_called_once()
예제 #3
0
def test_call_success_reboot():
    """Test transactional_update.chroot when succeed and reboot"""
    pending_transaction_mock = MagicMock(return_value=True)
    reboot_mock = MagicMock()
    utils_mock = {
        "thin.gen_thin": MagicMock(return_value="/salt-thin.tgz"),
        "files.rm_rf": MagicMock(),
        "json.find_json": MagicMock(return_value={"return": "result"}),
    }
    opts_mock = {"cachedir": "/var/cache/salt/minion"}
    salt_mock = {
        "cmd.run": MagicMock(return_value=""),
        "config.option": MagicMock(),
        "cmd.run_all": MagicMock(return_value={
            "retcode": 0,
            "stdout": ""
        }),
    }
    with patch.dict(tu.__utils__, utils_mock), patch.dict(
            tu.__opts__, opts_mock), patch.dict(tu.__salt__, salt_mock), patch(
                "salt.modules.transactional_update.pending_transaction",
                pending_transaction_mock,
            ), patch("salt.modules.transactional_update.reboot", reboot_mock):
        assert (tu.call("transactional_update.dup",
                        activate_transaction=True) == "result")

        utils_mock["thin.gen_thin"].assert_called_once()
        salt_mock["config.option"].assert_called()
        salt_mock["cmd.run"].assert_called_once()
        salt_mock["cmd.run_all"].assert_called_with([
            "transactional-update",
            "--non-interactive",
            "--drop-if-no-change",
            "--no-selfupdate",
            "--continue",
            "--quiet",
            "run",
            "python{}".format(sys.version_info[0]),
            "/var/cache/salt/minion/tmp01/salt-call",
            "--metadata",
            "--local",
            "--log-file",
            "/var/cache/salt/minion/tmp01/log",
            "--cachedir",
            "/var/cache/salt/minion/tmp01/cache",
            "--out",
            "json",
            "-l",
            "quiet",
            "--",
            "transactional_update.dup",
        ])
        utils_mock["files.rm_rf"].assert_called_once()
        pending_transaction_mock.assert_called_once()
        reboot_mock.assert_called_once()
예제 #4
0
    def test_call_success_parameters(self, mkdtemp):
        """Test transactional_update.chroot when succeed with parameters"""
        mkdtemp.return_value = "/var/cache/salt/minion/tmp01"
        utils_mock = {
            "thin.gen_thin": MagicMock(return_value="/salt-thin.tgz"),
            "files.rm_rf": MagicMock(),
            "json.find_json": MagicMock(return_value={"return": "result"}),
        }
        opts_mock = {"cachedir": "/var/cache/salt/minion"}
        salt_mock = {
            "cmd.run": MagicMock(return_value=""),
            "config.option": MagicMock(),
            "cmd.run_all": MagicMock(return_value={
                "retcode": 0,
                "stdout": ""
            }),
        }
        with patch.dict(tu.__utils__, utils_mock), patch.dict(
                tu.__opts__, opts_mock), patch.dict(tu.__salt__, salt_mock):
            assert tu.call("module.function", key="value") == "result"

            utils_mock["thin.gen_thin"].assert_called_once()
            salt_mock["config.option"].assert_called()
            salt_mock["cmd.run"].assert_called_once()
            salt_mock["cmd.run_all"].assert_called_with([
                "transactional-update",
                "--non-interactive",
                "--drop-if-no-change",
                "--no-selfupdate",
                "--continue",
                "--quiet",
                "run",
                "python{}".format(sys.version_info[0]),
                "/var/cache/salt/minion/tmp01/salt-call",
                "--metadata",
                "--local",
                "--log-file",
                "/var/cache/salt/minion/tmp01/log",
                "--cachedir",
                "/var/cache/salt/minion/tmp01/cache",
                "--out",
                "json",
                "-l",
                "quiet",
                "--",
                "module.function",
                "key=value",
            ])
            utils_mock["files.rm_rf"].assert_called_once()
예제 #5
0
def test_call_success_reboot():
    """Test transactional_update.chroot when succeed and reboot"""
    pending_transaction_mock = MagicMock(return_value=True)
    reboot_mock = MagicMock()
    utils_mock = {
        "json.find_json": MagicMock(return_value={"return": "result"}),
    }
    salt_mock = {
        "cmd.run_all": MagicMock(return_value={
            "retcode": 0,
            "stdout": ""
        }),
    }
    with patch.dict(tu.__utils__, utils_mock), patch.dict(
            tu.__salt__, salt_mock), patch.dict(tu.__salt__, salt_mock), patch(
                "salt.modules.transactional_update.pending_transaction",
                pending_transaction_mock,
            ), patch("salt.modules.transactional_update.reboot", reboot_mock):
        assert (tu.call("transactional_update.dup",
                        activate_transaction=True) == "result")

        salt_mock["cmd.run_all"].assert_called_with([
            "transactional-update",
            "--non-interactive",
            "--drop-if-no-change",
            "--no-selfupdate",
            "--continue",
            "--quiet",
            "run",
            "salt-call",
            "--out",
            "json",
            "-l",
            "quiet",
            "--no-return-event",
            "--",
            "transactional_update.dup",
        ])
        pending_transaction_mock.assert_called_once()
        reboot_mock.assert_called_once()
예제 #6
0
def test_call_fails_untar():
    """Test transactional_update.call when tar fails"""
    utils_mock = {
        "thin.gen_thin": MagicMock(return_value="/salt-thin.tgz"),
        "files.rm_rf": MagicMock(),
    }
    opts_mock = {"cachedir": "/var/cache/salt/minion"}
    salt_mock = {
        "cmd.run": MagicMock(return_value="Error"),
        "config.option": MagicMock(),
    }
    with patch.dict(tu.__utils__, utils_mock), patch.dict(
            tu.__opts__, opts_mock), patch.dict(tu.__salt__, salt_mock):
        assert tu.call("/chroot", "test.ping") == {
            "result": False,
            "comment": "Error",
        }

        utils_mock["thin.gen_thin"].assert_called_once()
        salt_mock["config.option"].assert_called()
        salt_mock["cmd.run"].assert_called_once()
        utils_mock["files.rm_rf"].assert_called_once()
예제 #7
0
def test_call_fails_function():
    """Test transactional_update.chroot when fails the function"""
    utils_mock = {
        "json.find_json": MagicMock(side_effect=ValueError()),
    }
    salt_mock = {
        "cmd.run_all":
        MagicMock(return_value={
            "retcode": 0,
            "stdout": "Not found",
            "stderr": ""
        }),
    }
    with patch.dict(tu.__utils__,
                    utils_mock), patch.dict(tu.__salt__, salt_mock):
        assert tu.call("test.ping") == {
            "result": False,
            "retcode": 1,
            "comment": "Not found",
        }

        salt_mock["cmd.run_all"].assert_called_with([
            "transactional-update",
            "--non-interactive",
            "--drop-if-no-change",
            "--no-selfupdate",
            "--continue",
            "--quiet",
            "run",
            "salt-call",
            "--out",
            "json",
            "-l",
            "quiet",
            "--no-return-event",
            "--",
            "test.ping",
        ])
예제 #8
0
def test_call_fails_input_validation():
    """Test transactional_update.call missing function name"""
    with pytest.raises(CommandExecutionError):
        tu.call("")