codekingpro/portable-devtools
114k
1"""Tests for distutils.command.bdist_rpm."""2 3import os4import shutil # noqa: F4015import sys6from distutils.command.bdist_rpm import bdist_rpm7from distutils.core import Distribution8from distutils.tests import support9 10import pytest11from test.support import requires_zlib12 13SETUP_PY = """\14from distutils.core import setup15import foo16 17setup(name='foo', version='0.1', py_modules=['foo'],18 url='xxx', author='xxx', author_email='xxx')19 20"""21 22 23@pytest.fixture(autouse=True)24def sys_executable_encodable():25 try:26 sys.executable.encode('UTF-8')27 except UnicodeEncodeError:28 pytest.skip("sys.executable is not encodable to UTF-8")29 30 31mac_woes = pytest.mark.skipif(32 "not sys.platform.startswith('linux')",33 reason='spurious sdtout/stderr output under macOS',34)35 36 37@pytest.mark.usefixtures('save_env')38@pytest.mark.usefixtures('save_argv')39@pytest.mark.usefixtures('save_cwd')40class TestBuildRpm(41 support.TempdirManager,42):43 @mac_woes44 @requires_zlib()45 @pytest.mark.skipif("not shutil.which('rpm')")46 @pytest.mark.skipif("not shutil.which('rpmbuild')")47 def test_quiet(self):48 # let's create a package49 tmp_dir = self.mkdtemp()50 os.environ['HOME'] = tmp_dir # to confine dir '.rpmdb' creation51 pkg_dir = os.path.join(tmp_dir, 'foo')52 os.mkdir(pkg_dir)53 self.write_file((pkg_dir, 'setup.py'), SETUP_PY)54 self.write_file((pkg_dir, 'foo.py'), '#')55 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')56 self.write_file((pkg_dir, 'README'), '')57 58 dist = Distribution({59 'name': 'foo',60 'version': '0.1',61 'py_modules': ['foo'],62 'url': 'xxx',63 'author': 'xxx',64 'author_email': 'xxx',65 })66 dist.script_name = 'setup.py'67 os.chdir(pkg_dir)68 69 sys.argv = ['setup.py']70 cmd = bdist_rpm(dist)71 cmd.fix_python = True72 73 # running in quiet mode74 cmd.quiet = True75 cmd.ensure_finalized()76 cmd.run()77 78 dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))79 assert 'foo-0.1-1.noarch.rpm' in dist_created80 81 # bug #2945: upload ignores bdist_rpm files82 assert ('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm') in dist.dist_files83 assert ('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm') in dist.dist_files84 85 @mac_woes86 @requires_zlib()87 # https://bugs.python.org/issue153316488 @pytest.mark.skipif("not shutil.which('rpm')")89 @pytest.mark.skipif("not shutil.which('rpmbuild')")90 def test_no_optimize_flag(self):91 # let's create a package that breaks bdist_rpm92 tmp_dir = self.mkdtemp()93 os.environ['HOME'] = tmp_dir # to confine dir '.rpmdb' creation94 pkg_dir = os.path.join(tmp_dir, 'foo')95 os.mkdir(pkg_dir)96 self.write_file((pkg_dir, 'setup.py'), SETUP_PY)97 self.write_file((pkg_dir, 'foo.py'), '#')98 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')99 self.write_file((pkg_dir, 'README'), '')100 101 dist = Distribution({102 'name': 'foo',103 'version': '0.1',104 'py_modules': ['foo'],105 'url': 'xxx',106 'author': 'xxx',107 'author_email': 'xxx',108 })109 dist.script_name = 'setup.py'110 os.chdir(pkg_dir)111 112 sys.argv = ['setup.py']113 cmd = bdist_rpm(dist)114 cmd.fix_python = True115 116 cmd.quiet = True117 cmd.ensure_finalized()118 cmd.run()119 120 dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))121 assert 'foo-0.1-1.noarch.rpm' in dist_created122 123 # bug #2945: upload ignores bdist_rpm files124 assert ('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm') in dist.dist_files125 assert ('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm') in dist.dist_files126 127 os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm'))128 