123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- # -*- coding: utf-8 -*-
- '''
- :codeauthor: Pedro Algarvio (pedro@algarvio.me)
- tests.integration.states.virtualenv
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- '''
- # Import Python libs
- from __future__ import absolute_import, print_function, unicode_literals
- import os
- import shutil
- import pytest
- # Import Salt Testing libs
- from tests.support.case import ModuleCase
- from tests.support.unit import skipIf
- from tests.support.mixins import SaltReturnAssertsMixin
- from tests.support.runtests import RUNTIME_VARS
- # Import Salt libs
- import salt.utils.files
- import salt.utils.path
- import salt.utils.platform
- from salt.modules.virtualenv_mod import KNOWN_BINARY_NAMES
- @skipIf(salt.utils.path.which_bin(KNOWN_BINARY_NAMES) is None, 'virtualenv not installed')
- class VirtualenvTest(ModuleCase, SaltReturnAssertsMixin):
- @skipIf(salt.utils.platform.is_darwin(), 'Test is flaky on macosx')
- @pytest.mark.destructive_test
- @pytest.mark.skip_if_not_root
- def test_issue_1959_virtualenv_runas(self):
- user = 'issue-1959'
- self.assertSaltTrueReturn(self.run_state('user.present', name=user))
- uinfo = self.run_function('user.info', [user])
- if salt.utils.platform.is_darwin():
- # MacOS does not support createhome with user.present
- self.assertSaltTrueReturn(self.run_state('file.directory', name=uinfo['home'], user=user, group=uinfo['groups'][0], dir_mode=755))
- venv_dir = os.path.join(
- RUNTIME_VARS.SYS_TMP_DIR, 'issue-1959-virtualenv-runas'
- )
- try:
- ret = self.run_function(
- 'state.sls', mods='issue-1959-virtualenv-runas'
- )
- self.assertSaltTrueReturn(ret)
- # Lets check proper ownership
- statinfo = self.run_function('file.stats', [venv_dir])
- self.assertEqual(statinfo['user'], uinfo['name'])
- self.assertEqual(statinfo['uid'], uinfo['uid'])
- finally:
- if os.path.isdir(venv_dir):
- shutil.rmtree(venv_dir)
- self.assertSaltTrueReturn(self.run_state('user.absent', name=user, purge=True))
- @skipIf(salt.utils.platform.is_darwin(), 'Test is flaky on macosx')
- def test_issue_2594_non_invalidated_cache(self):
- # Testing virtualenv directory
- venv_path = os.path.join(RUNTIME_VARS.TMP, 'issue-2594-ve')
- if os.path.exists(venv_path):
- shutil.rmtree(venv_path)
- # Our virtualenv requirements file
- requirements_file_path = os.path.join(
- RUNTIME_VARS.TMP_STATE_TREE, 'issue-2594-requirements.txt'
- )
- if os.path.exists(requirements_file_path):
- os.unlink(requirements_file_path)
- # Our state template
- template = [
- '{0}:'.format(venv_path),
- ' virtualenv.managed:',
- ' - system_site_packages: False',
- ' - clear: false',
- ' - requirements: salt://issue-2594-requirements.txt',
- ]
- # Let's populate the requirements file, just pep-8 for now
- with salt.utils.files.fopen(requirements_file_path, 'a') as fhw:
- fhw.write('pep8==1.3.3\n')
- # Let's run our state!!!
- try:
- ret = self.run_function(
- 'state.template_str', ['\n'.join(template)]
- )
- self.assertSaltTrueReturn(ret)
- self.assertInSaltComment('Created new virtualenv', ret)
- self.assertSaltStateChangesEqual(
- ret, ['pep8==1.3.3'], keys=('packages', 'new')
- )
- except AssertionError:
- # Always clean up the tests temp files
- if os.path.exists(venv_path):
- shutil.rmtree(venv_path)
- if os.path.exists(requirements_file_path):
- os.unlink(requirements_file_path)
- raise
- # Let's make sure, it really got installed
- ret = self.run_function('pip.freeze', bin_env=venv_path)
- self.assertIn('pep8==1.3.3', ret)
- self.assertNotIn('zope.interface==4.0.1', ret)
- # Now let's update the requirements file, which is now cached.
- with salt.utils.files.fopen(requirements_file_path, 'w') as fhw:
- fhw.write('zope.interface==4.0.1\n')
- # Let's run our state!!!
- try:
- ret = self.run_function(
- 'state.template_str', ['\n'.join(template)]
- )
- self.assertSaltTrueReturn(ret)
- self.assertInSaltComment('virtualenv exists', ret)
- self.assertSaltStateChangesEqual(
- ret, ['zope.interface==4.0.1'], keys=('packages', 'new')
- )
- except AssertionError:
- # Always clean up the tests temp files
- if os.path.exists(venv_path):
- shutil.rmtree(venv_path)
- if os.path.exists(requirements_file_path):
- os.unlink(requirements_file_path)
- raise
- # Let's make sure, it really got installed
- ret = self.run_function('pip.freeze', bin_env=venv_path)
- self.assertIn('pep8==1.3.3', ret)
- self.assertIn('zope.interface==4.0.1', ret)
- # If we reached this point no assertion failed, so, cleanup!
- if os.path.exists(venv_path):
- shutil.rmtree(venv_path)
- if os.path.exists(requirements_file_path):
- os.unlink(requirements_file_path)
|