1"""Tests for distutils.command.bdist_rpm.""" 2 3import unittest 4import sys 5import os 6from test.support import run_unittest, requires_zlib 7 8from distutils.core import Distribution 9from distutils.command.bdist_rpm import bdist_rpm 10from distutils.tests import support 11from distutils.spawn import find_executable 12 13SETUP_PY = """\ 14from distutils.core import setup 15import foo 16 17setup(name='foo', version='0.1', py_modules=['foo'], 18 url='xxx', author='xxx', author_email='xxx') 19 20""" 21 22class BuildRpmTestCase(support.TempdirManager, 23 support.EnvironGuard, 24 support.LoggingSilencer, 25 unittest.TestCase): 26 27 def setUp(self): 28 try: 29 sys.executable.encode("UTF-8") 30 except UnicodeEncodeError: 31 raise unittest.SkipTest("sys.executable is not encodable to UTF-8") 32 33 super(BuildRpmTestCase, self).setUp() 34 self.old_location = os.getcwd() 35 self.old_sys_argv = sys.argv, sys.argv[:] 36 37 def tearDown(self): 38 os.chdir(self.old_location) 39 sys.argv = self.old_sys_argv[0] 40 sys.argv[:] = self.old_sys_argv[1] 41 super(BuildRpmTestCase, self).tearDown() 42 43 # XXX I am unable yet to make this test work without 44 # spurious sdtout/stderr output under Mac OS X 45 @unittest.skipUnless(sys.platform.startswith('linux'), 46 'spurious sdtout/stderr output under Mac OS X') 47 @requires_zlib() 48 @unittest.skipIf(find_executable('rpm') is None, 49 'the rpm command is not found') 50 @unittest.skipIf(find_executable('rpmbuild') is None, 51 'the rpmbuild command is not found') 52 def test_quiet(self): 53 # let's create a package 54 tmp_dir = self.mkdtemp() 55 os.environ['HOME'] = tmp_dir # to confine dir '.rpmdb' creation 56 pkg_dir = os.path.join(tmp_dir, 'foo') 57 os.mkdir(pkg_dir) 58 self.write_file((pkg_dir, 'setup.py'), SETUP_PY) 59 self.write_file((pkg_dir, 'foo.py'), '#') 60 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py') 61 self.write_file((pkg_dir, 'README'), '') 62 63 dist = Distribution({'name': 'foo', 'version': '0.1', 64 'py_modules': ['foo'], 65 'url': 'xxx', 'author': 'xxx', 66 'author_email': 'xxx'}) 67 dist.script_name = 'setup.py' 68 os.chdir(pkg_dir) 69 70 sys.argv = ['setup.py'] 71 cmd = bdist_rpm(dist) 72 cmd.fix_python = True 73 74 # running in quiet mode 75 cmd.quiet = 1 76 cmd.ensure_finalized() 77 cmd.run() 78 79 dist_created = os.listdir(os.path.join(pkg_dir, 'dist')) 80 self.assertIn('foo-0.1-1.noarch.rpm', dist_created) 81 82 # bug #2945: upload ignores bdist_rpm files 83 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files) 84 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files) 85 86 # XXX I am unable yet to make this test work without 87 # spurious sdtout/stderr output under Mac OS X 88 @unittest.skipUnless(sys.platform.startswith('linux'), 89 'spurious sdtout/stderr output under Mac OS X') 90 @requires_zlib() 91 # http://bugs.python.org/issue1533164 92 @unittest.skipIf(find_executable('rpm') is None, 93 'the rpm command is not found') 94 @unittest.skipIf(find_executable('rpmbuild') is None, 95 'the rpmbuild command is not found') 96 def test_no_optimize_flag(self): 97 # let's create a package that breaks bdist_rpm 98 tmp_dir = self.mkdtemp() 99 os.environ['HOME'] = tmp_dir # to confine dir '.rpmdb' creation 100 pkg_dir = os.path.join(tmp_dir, 'foo') 101 os.mkdir(pkg_dir) 102 self.write_file((pkg_dir, 'setup.py'), SETUP_PY) 103 self.write_file((pkg_dir, 'foo.py'), '#') 104 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py') 105 self.write_file((pkg_dir, 'README'), '') 106 107 dist = Distribution({'name': 'foo', 'version': '0.1', 108 'py_modules': ['foo'], 109 'url': 'xxx', 'author': 'xxx', 110 'author_email': 'xxx'}) 111 dist.script_name = 'setup.py' 112 os.chdir(pkg_dir) 113 114 sys.argv = ['setup.py'] 115 cmd = bdist_rpm(dist) 116 cmd.fix_python = True 117 118 cmd.quiet = 1 119 cmd.ensure_finalized() 120 cmd.run() 121 122 dist_created = os.listdir(os.path.join(pkg_dir, 'dist')) 123 self.assertIn('foo-0.1-1.noarch.rpm', dist_created) 124 125 # bug #2945: upload ignores bdist_rpm files 126 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files) 127 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files) 128 129 os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm')) 130 131def test_suite(): 132 return unittest.makeSuite(BuildRpmTestCase) 133 134if __name__ == '__main__': 135 run_unittest(test_suite()) 136