1""" 2 :codeauthor: Rahul Handay <rahulha@saltstack.com> 3""" 4 5 6import os 7 8import salt.states.virtualenv_mod as virtualenv_mod 9from tests.support.mixins import LoaderModuleMockMixin 10from tests.support.mock import MagicMock, patch 11from tests.support.unit import TestCase 12 13 14class VirtualenvModTestCase(TestCase, LoaderModuleMockMixin): 15 """ 16 Validate the virtualenv_mod state 17 """ 18 19 def setup_loader_modules(self): 20 return {virtualenv_mod: {"__env__": "base"}} 21 22 def test_managed(self): 23 """ 24 Test to create a virtualenv and optionally manage it with pip 25 """ 26 ret = {"name": "salt", "changes": {}, "result": False, "comment": ""} 27 ret.update({"comment": "Virtualenv was not detected on this system"}) 28 self.assertDictEqual(virtualenv_mod.managed("salt"), ret) 29 30 mock1 = MagicMock(return_value="True") 31 mock = MagicMock(return_value=False) 32 mock2 = MagicMock(return_value="1.1") 33 with patch.dict( 34 virtualenv_mod.__salt__, 35 { 36 "virtualenv.create": True, 37 "cp.is_cached": mock, 38 "cp.cache_file": mock, 39 "cp.hash_file": mock, 40 "pip.freeze": mock1, 41 "cmd.run_stderr": mock1, 42 "pip.version": mock2, 43 }, 44 ): 45 mock = MagicMock(side_effect=[True, True, True, False, True, True]) 46 with patch.object(os.path, "exists", mock): 47 ret.update({"comment": "pip requirements file 'salt://a' not found"}) 48 self.assertDictEqual( 49 virtualenv_mod.managed("salt", None, "salt://a"), ret 50 ) 51 52 with patch.dict(virtualenv_mod.__opts__, {"test": True}): 53 ret.update( 54 { 55 "changes": {"cleared_packages": "True", "old": "True"}, 56 "comment": "Virtualenv salt is set to be cleared", 57 "result": None, 58 } 59 ) 60 self.assertDictEqual(virtualenv_mod.managed("salt", clear=1), ret) 61 ret.update( 62 { 63 "comment": "Virtualenv salt is already created", 64 "changes": {}, 65 "result": True, 66 } 67 ) 68 self.assertDictEqual(virtualenv_mod.managed("salt"), ret) 69 70 ret.update( 71 { 72 "comment": "Virtualenv salt is set to be created", 73 "result": None, 74 } 75 ) 76 self.assertDictEqual(virtualenv_mod.managed("salt"), ret) 77 78 with patch.dict(virtualenv_mod.__opts__, {"test": False}): 79 ret.update( 80 { 81 "comment": ( 82 "The 'use_wheel' option is" 83 " only supported in pip between 1.4 and 9.0.3." 84 " The version of pip detected was 1.1." 85 ), 86 "result": False, 87 } 88 ) 89 self.assertDictEqual( 90 virtualenv_mod.managed("salt", use_wheel=1), ret 91 ) 92 93 ret.update({"comment": "virtualenv exists", "result": True}) 94 self.assertDictEqual(virtualenv_mod.managed("salt"), ret) 95