1"""
2    :codeauthor: Jayesh Kariya <jayeshk@saltstack.com>
3"""
4
5import pytest
6import salt.states.powerpath as powerpath
7from tests.support.mock import MagicMock, patch
8
9
10@pytest.fixture
11def configure_loader_modules():
12    return {powerpath: {}}
13
14
15def test_license_present():
16    """
17    Test to ensures that the specified PowerPath license key is present
18    on the host.
19    """
20    name = "mylic"
21
22    ret = {"name": name, "changes": {}, "result": True, "comment": ""}
23
24    mock_t = MagicMock(
25        side_effect=[
26            {"result": True, "output": name},
27            {"result": False, "output": name},
28        ]
29    )
30    mock = MagicMock(side_effect=[False, True, True, True, True])
31    mock_l = MagicMock(return_value=[{"key": name}])
32    with patch.dict(
33        powerpath.__salt__,
34        {
35            "powerpath.has_powerpath": mock,
36            "powerpath.list_licenses": mock_l,
37            "powerpath.add_license": mock_t,
38        },
39    ):
40        comt = "PowerPath is not installed."
41        ret.update({"comment": comt, "result": False})
42        assert powerpath.license_present(name) == ret
43
44        comt = "License key {} already present".format(name)
45        ret.update({"comment": comt, "result": True})
46        assert powerpath.license_present(name) == ret
47
48        with patch.dict(powerpath.__opts__, {"test": True}):
49            comt = "License key Mylic is set to be added"
50            ret.update({"comment": comt, "result": None, "name": "Mylic"})
51            assert powerpath.license_present("Mylic") == ret
52
53        with patch.dict(powerpath.__opts__, {"test": False}):
54            ret.update({"comment": name, "result": True, "changes": {"Mylic": "added"}})
55            assert powerpath.license_present("Mylic") == ret
56
57            ret.update({"result": False, "changes": {}})
58            assert powerpath.license_present("Mylic") == ret
59
60
61def test_license_absent():
62    """
63    Test to ensures that the specified PowerPath license key is absent
64    on the host.
65    """
66    name = "mylic"
67
68    ret = {"name": name, "changes": {}, "result": True, "comment": ""}
69
70    mock_t = MagicMock(
71        side_effect=[
72            {"result": True, "output": name},
73            {"result": False, "output": name},
74        ]
75    )
76    mock = MagicMock(side_effect=[False, True, True, True, True])
77    mock_l = MagicMock(return_value=[{"key": "salt"}])
78    with patch.dict(
79        powerpath.__salt__,
80        {
81            "powerpath.has_powerpath": mock,
82            "powerpath.list_licenses": mock_l,
83            "powerpath.remove_license": mock_t,
84        },
85    ):
86        comt = "PowerPath is not installed."
87        ret.update({"comment": comt, "result": False})
88        assert powerpath.license_absent(name) == ret
89
90        comt = "License key {} not present".format(name)
91        ret.update({"comment": comt, "result": True})
92        assert powerpath.license_absent(name) == ret
93
94        with patch.dict(powerpath.__opts__, {"test": True}):
95            comt = "License key salt is set to be removed"
96            ret.update({"comment": comt, "result": None, "name": "salt"})
97            assert powerpath.license_absent("salt") == ret
98
99        with patch.dict(powerpath.__opts__, {"test": False}):
100            ret.update(
101                {"comment": name, "result": True, "changes": {"salt": "removed"}}
102            )
103            assert powerpath.license_absent("salt") == ret
104
105            ret.update({"result": False, "changes": {}})
106            assert powerpath.license_absent("salt") == ret
107