diff --git a/setup.py b/setup.py index 48b779997df..45484e5d770 100755 --- a/setup.py +++ b/setup.py @@ -745,6 +745,12 @@ class Install(install): self.distribution.salt_download_windows_dlls = True self.run_command('download-windows-dlls') self.distribution.salt_download_windows_dlls = None + # need to ensure _version.py is created in build dir before install + if not os.path.exists(os.path.join(self.build_lib)): + if not self.skip_build: + self.run_command('build') + else: + self.run_command('write_salt_version') # Run install.run install.run(self) diff --git a/tests/integration/setup/test_egg.py b/tests/integration/setup/test_egg.py new file mode 100644 index 00000000000..fd538ebd61d --- /dev/null +++ b/tests/integration/setup/test_egg.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +''' +tests.integration.setup.test_egg +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +''' + +# Import python libs +from __future__ import absolute_import, print_function, unicode_literals +import os +import re +import shutil + +# Import Salt Testing libs +from tests.support.runtests import RUNTIME_VARS +from tests.support.unit import skipIf +from tests.support.helpers import VirtualEnv, destructiveTest +from tests.support.case import ModuleCase + +# Import salt libs +import salt.utils.path +import salt.utils.platform +from salt.modules.virtualenv_mod import KNOWN_BINARY_NAMES + + +@destructiveTest +@skipIf(salt.utils.path.which_bin(KNOWN_BINARY_NAMES) is None, 'virtualenv not installed') +class EggSetupTest(ModuleCase): + ''' + Tests for building and installing egg packages + ''' + def test_egg_install(self): + ''' + test installing an egg package + ''' + # Let's create the testing virtualenv + with VirtualEnv() as venv: + ret = self.run_function('cmd.run', ['{0} setup.py install --prefix={1}'.format(venv.venv_python, + venv.venv_dir)], + cwd=RUNTIME_VARS.CODE_DIR) + lib_dir = os.path.join(venv.venv_dir, 'lib') + for _dir in os.listdir(lib_dir): + site_pkg = os.path.join(lib_dir, _dir, 'site-packages') + for _file in os.listdir(site_pkg): + if _file.startswith('salt-'): + egg = os.path.join(venv.venv_dir, _file) + assert os.path.exists(os.path.join(site_pkg, _file, 'salt', '_version.py')) + break + + # Let's ensure the version is correct + pip_ver = self.run_function('pip.list', bin_env=venv.venv_dir).get('salt') + egg_ver = [x for x in egg.split('/')[-1:][0].split('-') if re.search(r'^\d.\d*', x)][0] + assert pip_ver == egg_ver.replace('_', '-') + assert self.run_function('cmd.run', ['salt --version']).split()[1] == pip_ver + + def tearDown(self): + build_dir = os.path.join(RUNTIME_VARS.CODE_DIR, 'build') + if os.path.exists(build_dir): + shutil.rmtree(build_dir)