mirror of
https://github.com/saltstack/salt.git
synced 2025-04-17 10:10:20 +00:00
use shutils / tests
This commit is contained in:
parent
9d5b65435b
commit
fbac15ee92
2 changed files with 162 additions and 90 deletions
|
@ -26,6 +26,7 @@ Install any kind of pkg, dmg or app file on macOS:
|
|||
import logging
|
||||
import os
|
||||
import re
|
||||
import shutil
|
||||
|
||||
import salt.utils.platform
|
||||
from salt.exceptions import CommandExecutionError
|
||||
|
@ -231,7 +232,9 @@ def installed(
|
|||
finally:
|
||||
if dmg:
|
||||
# Unmount to be kind
|
||||
__salt__["macpackage.unmount"](mount_point)
|
||||
__salt__["cmd.run"]("rm -rf {}".format(mount_point))
|
||||
out = __salt__["macpackage.unmount"](mount_point)
|
||||
# If unmount succeeded cleanup mount point
|
||||
if out["retcode"] == 0:
|
||||
shutil.rmtree(mount_point)
|
||||
|
||||
return ret
|
||||
|
|
|
@ -33,13 +33,14 @@ def test_installed_pkg():
|
|||
"macpackage.install": install_mock,
|
||||
},
|
||||
):
|
||||
out = macpackage.installed("/path/to/file.pkg")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/path/to/file.pkg")
|
||||
install_mock.assert_called_once_with(
|
||||
"/path/to/file.pkg", "LocalSystem", False, False
|
||||
)
|
||||
assert out == expected
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed("/path/to/file.pkg")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/path/to/file.pkg")
|
||||
install_mock.assert_called_once_with(
|
||||
"/path/to/file.pkg", "LocalSystem", False, False
|
||||
)
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -66,11 +67,12 @@ def test_installed_pkg_exists():
|
|||
"macpackage.install": install_mock,
|
||||
},
|
||||
):
|
||||
out = macpackage.installed("/path/to/file.pkg")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/path/to/file.pkg")
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed("/path/to/file.pkg")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/path/to/file.pkg")
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -99,17 +101,18 @@ def test_installed_pkg_version_succeeds():
|
|||
"cmd.run": cmd_mock,
|
||||
},
|
||||
):
|
||||
out = macpackage.installed(
|
||||
"/path/to/file.pkg",
|
||||
version_check=r"/usr/bin/runme --version=.*5\.1\.[0-9]",
|
||||
)
|
||||
cmd_mock.assert_called_once_with(
|
||||
"/usr/bin/runme --version", output_loglevel="quiet", ignore_retcode=True
|
||||
)
|
||||
assert not installed_mock.called
|
||||
assert not get_pkg_id_mock.called
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed(
|
||||
"/path/to/file.pkg",
|
||||
version_check=r"/usr/bin/runme --version=.*5\.1\.[0-9]",
|
||||
)
|
||||
cmd_mock.assert_called_once_with(
|
||||
"/usr/bin/runme --version", output_loglevel="quiet", ignore_retcode=True
|
||||
)
|
||||
assert not installed_mock.called
|
||||
assert not get_pkg_id_mock.called
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -141,19 +144,20 @@ def test_installed_pkg_version_fails():
|
|||
"cmd.run": cmd_mock,
|
||||
},
|
||||
):
|
||||
out = macpackage.installed(
|
||||
"/path/to/file.pkg",
|
||||
version_check=r"/usr/bin/runme --version=.*5\.1\.[0-9]",
|
||||
)
|
||||
cmd_mock.assert_called_once_with(
|
||||
"/usr/bin/runme --version", output_loglevel="quiet", ignore_retcode=True
|
||||
)
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/path/to/file.pkg")
|
||||
install_mock.assert_called_once_with(
|
||||
"/path/to/file.pkg", "LocalSystem", False, False
|
||||
)
|
||||
assert out == expected
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed(
|
||||
"/path/to/file.pkg",
|
||||
version_check=r"/usr/bin/runme --version=.*5\.1\.[0-9]",
|
||||
)
|
||||
cmd_mock.assert_called_once_with(
|
||||
"/usr/bin/runme --version", output_loglevel="quiet", ignore_retcode=True
|
||||
)
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/path/to/file.pkg")
|
||||
install_mock.assert_called_once_with(
|
||||
"/path/to/file.pkg", "LocalSystem", False, False
|
||||
)
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -167,9 +171,9 @@ def test_installed_dmg():
|
|||
"name": "/path/to/file.dmg",
|
||||
"result": True,
|
||||
}
|
||||
|
||||
|
||||
mount_mock = MagicMock(return_value=["success", "/tmp/dmg-X"])
|
||||
unmount_mock = MagicMock()
|
||||
unmount_mock = MagicMock(return_value={"retcode": 0})
|
||||
installed_mock = MagicMock(return_value=["com.apple.id"])
|
||||
get_pkg_id_mock = MagicMock(return_value=["some.other.id"])
|
||||
install_mock = MagicMock(return_value={"retcode": 0})
|
||||
|
@ -184,15 +188,16 @@ def test_installed_dmg():
|
|||
"macpackage.install": install_mock,
|
||||
},
|
||||
):
|
||||
out = macpackage.installed("/path/to/file.dmg", dmg=True)
|
||||
mount_mock.assert_called_once_with("/path/to/file.dmg")
|
||||
unmount_mock.assert_called_once_with("/tmp/dmg-X")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/tmp/dmg-X/*.pkg")
|
||||
install_mock.assert_called_once_with(
|
||||
"/tmp/dmg-X/*.pkg", "LocalSystem", False, False
|
||||
)
|
||||
assert out == expected
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed("/path/to/file.dmg", dmg=True)
|
||||
mount_mock.assert_called_once_with("/path/to/file.dmg")
|
||||
unmount_mock.assert_called_once_with("/tmp/dmg-X")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/tmp/dmg-X/*.pkg")
|
||||
install_mock.assert_called_once_with(
|
||||
"/tmp/dmg-X/*.pkg", "LocalSystem", False, False
|
||||
)
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -208,7 +213,7 @@ def test_installed_dmg_exists():
|
|||
}
|
||||
|
||||
mount_mock = MagicMock(return_value=["success", "/tmp/dmg-X"])
|
||||
unmount_mock = MagicMock()
|
||||
unmount_mock = MagicMock(return_value={"retcode": 0})
|
||||
installed_mock = MagicMock(return_value=["com.apple.id", "some.other.id"])
|
||||
get_pkg_id_mock = MagicMock(return_value=["some.other.id"])
|
||||
install_mock = MagicMock(return_value={"retcode": 0})
|
||||
|
@ -223,13 +228,14 @@ def test_installed_dmg_exists():
|
|||
"macpackage.install": install_mock,
|
||||
},
|
||||
):
|
||||
out = macpackage.installed("/path/to/file.dmg", dmg=True)
|
||||
mount_mock.assert_called_once_with("/path/to/file.dmg")
|
||||
unmount_mock.assert_called_once_with("/tmp/dmg-X")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/tmp/dmg-X/*.pkg")
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed("/path/to/file.dmg", dmg=True)
|
||||
mount_mock.assert_called_once_with("/path/to/file.dmg")
|
||||
unmount_mock.assert_called_once_with("/tmp/dmg-X")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/tmp/dmg-X/*.pkg")
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -249,10 +255,11 @@ def test_installed_app():
|
|||
exists_mock.return_value = False
|
||||
|
||||
with patch.dict(macpackage.__salt__, {"macpackage.install_app": install_mock}):
|
||||
out = macpackage.installed("/path/to/file.app", app=True)
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed("/path/to/file.app", app=True)
|
||||
|
||||
install_mock.assert_called_once_with("/path/to/file.app", "/Applications/")
|
||||
assert out == expected
|
||||
install_mock.assert_called_once_with("/path/to/file.app", "/Applications/")
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -272,10 +279,11 @@ def test_installed_app_exists():
|
|||
exists_mock.return_value = True
|
||||
|
||||
with patch.dict(macpackage.__salt__, {"macpackage.install_app": install_mock}):
|
||||
out = macpackage.installed("/path/to/file.app", app=True)
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed("/path/to/file.app", app=True)
|
||||
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -293,7 +301,7 @@ def test_installed_app_dmg():
|
|||
|
||||
install_mock = MagicMock()
|
||||
mount_mock = MagicMock(return_value=["success", "/tmp/dmg-X"])
|
||||
unmount_mock = MagicMock()
|
||||
unmount_mock = MagicMock(return_value={"retcode": 0})
|
||||
cmd_mock = MagicMock(return_value="file.app")
|
||||
exists_mock.return_value = False
|
||||
|
||||
|
@ -306,17 +314,18 @@ def test_installed_app_dmg():
|
|||
"cmd.run": cmd_mock,
|
||||
},
|
||||
):
|
||||
out = macpackage.installed("/path/to/file.dmg", app=True, dmg=True)
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed("/path/to/file.dmg", app=True, dmg=True)
|
||||
|
||||
mount_mock.assert_called_once_with("/path/to/file.dmg")
|
||||
unmount_mock.assert_called_once_with("/tmp/dmg-X")
|
||||
cmd_mock.assert_called_once_with(
|
||||
"ls -d *.app", python_shell=True, cwd="/tmp/dmg-X"
|
||||
)
|
||||
install_mock.assert_called_once_with(
|
||||
"/tmp/dmg-X/file.app", "/Applications/"
|
||||
)
|
||||
assert out == expected
|
||||
mount_mock.assert_called_once_with("/path/to/file.dmg")
|
||||
unmount_mock.assert_called_once_with("/tmp/dmg-X")
|
||||
cmd_mock.assert_called_once_with(
|
||||
"ls -d *.app", python_shell=True, cwd="/tmp/dmg-X"
|
||||
)
|
||||
install_mock.assert_called_once_with(
|
||||
"/tmp/dmg-X/file.app", "/Applications/"
|
||||
)
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -334,7 +343,7 @@ def test_installed_app_dmg_exists():
|
|||
|
||||
install_mock = MagicMock()
|
||||
mount_mock = MagicMock(return_value=["success", "/tmp/dmg-X"])
|
||||
unmount_mock = MagicMock()
|
||||
unmount_mock = MagicMock(return_value={"retcode": 0})
|
||||
cmd_mock = MagicMock(return_value="file.app")
|
||||
exists_mock.return_value = True
|
||||
|
||||
|
@ -347,15 +356,16 @@ def test_installed_app_dmg_exists():
|
|||
"cmd.run": cmd_mock,
|
||||
},
|
||||
):
|
||||
out = macpackage.installed("/path/to/file.dmg", app=True, dmg=True)
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed("/path/to/file.dmg", app=True, dmg=True)
|
||||
|
||||
mount_mock.assert_called_once_with("/path/to/file.dmg")
|
||||
unmount_mock.assert_called_once_with("/tmp/dmg-X")
|
||||
cmd_mock.assert_called_once_with(
|
||||
"ls -d *.app", python_shell=True, cwd="/tmp/dmg-X"
|
||||
)
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
mount_mock.assert_called_once_with("/path/to/file.dmg")
|
||||
unmount_mock.assert_called_once_with("/tmp/dmg-X")
|
||||
cmd_mock.assert_called_once_with(
|
||||
"ls -d *.app", python_shell=True, cwd="/tmp/dmg-X"
|
||||
)
|
||||
assert not install_mock.called
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
|
@ -384,10 +394,69 @@ def test_installed_pkg_only_if_pass():
|
|||
"cmd.retcode": cmd_mock,
|
||||
},
|
||||
):
|
||||
out = macpackage.installed("/path/to/file.pkg")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/path/to/file.pkg")
|
||||
install_mock.assert_called_once_with(
|
||||
"/path/to/file.pkg", "LocalSystem", False, False
|
||||
)
|
||||
assert out == expected
|
||||
with patch("shutil.rmtree", MagicMock()):
|
||||
out = macpackage.installed("/path/to/file.pkg")
|
||||
installed_mock.assert_called_once_with()
|
||||
get_pkg_id_mock.assert_called_once_with("/path/to/file.pkg")
|
||||
install_mock.assert_called_once_with(
|
||||
"/path/to/file.pkg", "LocalSystem", False, False
|
||||
)
|
||||
assert out == expected
|
||||
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
def test_unmounted_dir_cleans_up():
|
||||
"""
|
||||
Test an unmounted volume removes the mount dir.
|
||||
"""
|
||||
expected = {
|
||||
"changes": {"installed": ["some.other.id"]},
|
||||
"comment": "/path/to/file.dmg installed",
|
||||
"name": "/path/to/file.dmg",
|
||||
"result": True,
|
||||
}
|
||||
rmtree_mock = MagicMock()
|
||||
|
||||
with patch.dict(
|
||||
macpackage.__salt__,
|
||||
{
|
||||
"macpackage.mount": MagicMock(return_value=["success", "/tmp/dmg-X"]),
|
||||
"macpackage.unmount": MagicMock(return_value={"retcode": 0}),
|
||||
"macpackage.installed_pkgs": MagicMock(return_value=["com.apple.id"]),
|
||||
"macpackage.get_pkg_id": MagicMock(return_value=["some.other.id"]),
|
||||
"macpackage.install": MagicMock(return_value={"retcode": 0}),
|
||||
},
|
||||
):
|
||||
with patch("shutil.rmtree", rmtree_mock):
|
||||
out = macpackage.installed("/path/to/file.dmg", dmg=True)
|
||||
rmtree_mock.assert_called_once_with("/path/to/file.dmg")
|
||||
assert out == expected
|
||||
|
||||
|
||||
@pytest.mark.skip_on_windows(reason="Not a Windows test")
|
||||
def test_failed_unmount_leaves_dir():
|
||||
"""
|
||||
Test a mounted volume that fails to unmount does not attempt to remove the mount dir.
|
||||
"""
|
||||
expected = {
|
||||
"changes": {"installed": ["some.other.id"]},
|
||||
"comment": "/path/to/file.dmg installed",
|
||||
"name": "/path/to/file.dmg",
|
||||
"result": True,
|
||||
}
|
||||
rmtree_mock = MagicMock()
|
||||
|
||||
with patch.dict(
|
||||
macpackage.__salt__,
|
||||
{
|
||||
"macpackage.mount": MagicMock(return_value=["success", "/tmp/dmg-X"]),
|
||||
"macpackage.unmount": MagicMock(return_value={"retcode": 1}),
|
||||
"macpackage.installed_pkgs": MagicMock(return_value=["com.apple.id"]),
|
||||
"macpackage.get_pkg_id": MagicMock(return_value=["some.other.id"]),
|
||||
"macpackage.install": MagicMock(return_value={"retcode": 0}),
|
||||
},
|
||||
):
|
||||
with patch("shutil.rmtree", rmtree_mock):
|
||||
out = macpackage.installed("/path/to/file.dmg", dmg=True)
|
||||
rmtree_mock.assert_not_called()
|
Loading…
Add table
Reference in a new issue