blob: bcbb5633e82311cf246328967f4dc2365f87381a [file] [log] [blame]
Tarek Ziadéf0721222009-02-28 10:16:43 +00001"""Tests for distutils.command.bdist_rpm."""
2
3import unittest
4import sys
5import os
6import tempfile
7import shutil
Éric Araujo70ec44a2010-11-06 02:44:43 +00008from test.support import run_unittest
Tarek Ziadéf0721222009-02-28 10:16:43 +00009
10from distutils.core import Distribution
11from distutils.command.bdist_rpm import bdist_rpm
12from distutils.tests import support
13from distutils.spawn import find_executable
14from distutils import spawn
15from distutils.errors import DistutilsExecError
16
17SETUP_PY = """\
18from distutils.core import setup
19import foo
20
21setup(name='foo', version='0.1', py_modules=['foo'],
22 url='xxx', author='xxx', author_email='xxx')
23
24"""
25
26class BuildRpmTestCase(support.TempdirManager,
27 support.LoggingSilencer,
28 unittest.TestCase):
29
30 def setUp(self):
Victor Stinner22a8cbe2011-03-14 20:03:36 -040031 try:
32 sys.executable.encode("UTF-8")
33 except UnicodeEncodeError:
34 raise unittest.SkipTest("sys.executable is not encodable to UTF-8")
35
Tarek Ziadéf0721222009-02-28 10:16:43 +000036 super(BuildRpmTestCase, self).setUp()
37 self.old_location = os.getcwd()
Tarek Ziadé430fb632009-10-18 11:34:51 +000038 self.old_sys_argv = sys.argv, sys.argv[:]
Tarek Ziadéf0721222009-02-28 10:16:43 +000039
40 def tearDown(self):
41 os.chdir(self.old_location)
Tarek Ziadé430fb632009-10-18 11:34:51 +000042 sys.argv = self.old_sys_argv[0]
43 sys.argv[:] = self.old_sys_argv[1]
Tarek Ziadéf0721222009-02-28 10:16:43 +000044 super(BuildRpmTestCase, self).tearDown()
45
Serhiy Storchaka3c02ece2013-12-18 16:41:01 +020046 # XXX I am unable yet to make this test work without
47 # spurious sdtout/stderr output under Mac OS X
48 @unittest.skipUnless(sys.platform.startswith('linux'),
49 'spurious sdtout/stderr output under Mac OS X')
50 @unittest.skipIf(find_executable('rpm') is None,
51 'the rpm command is not found')
52 @unittest.skipIf(find_executable('rpmbuild') is None,
53 'the rpmbuild command is not found')
Tarek Ziadéf0721222009-02-28 10:16:43 +000054 def test_quiet(self):
Tarek Ziadéf0721222009-02-28 10:16:43 +000055 # let's create a package
56 tmp_dir = self.mkdtemp()
57 pkg_dir = os.path.join(tmp_dir, 'foo')
58 os.mkdir(pkg_dir)
59 self.write_file((pkg_dir, 'setup.py'), SETUP_PY)
60 self.write_file((pkg_dir, 'foo.py'), '#')
61 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')
62 self.write_file((pkg_dir, 'README'), '')
63
64 dist = Distribution({'name': 'foo', 'version': '0.1',
65 'py_modules': ['foo'],
66 'url': 'xxx', 'author': 'xxx',
67 'author_email': 'xxx'})
68 dist.script_name = 'setup.py'
69 os.chdir(pkg_dir)
70
71 sys.argv = ['setup.py']
72 cmd = bdist_rpm(dist)
73 cmd.fix_python = True
74
75 # running in quiet mode
76 cmd.quiet = 1
77 cmd.ensure_finalized()
78 cmd.run()
79
80 dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
Serhiy Storchaka39989152013-11-17 00:17:46 +020081 self.assertIn('foo-0.1-1.noarch.rpm', dist_created)
Tarek Ziadéf0721222009-02-28 10:16:43 +000082
Éric Araujo73cec212012-01-15 02:48:55 +010083 # bug #2945: upload ignores bdist_rpm files
84 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files)
85 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files)
86
Serhiy Storchaka3c02ece2013-12-18 16:41:01 +020087 # XXX I am unable yet to make this test work without
88 # spurious sdtout/stderr output under Mac OS X
89 @unittest.skipUnless(sys.platform.startswith('linux'),
90 'spurious sdtout/stderr output under Mac OS X')
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')
Tarek Ziadéf0721222009-02-28 10:16:43 +000096 def test_no_optimize_flag(self):
Tarek Ziadéf0721222009-02-28 10:16:43 +000097 # let's create a package that brakes bdist_rpm
98 tmp_dir = self.mkdtemp()
99 pkg_dir = os.path.join(tmp_dir, 'foo')
100 os.mkdir(pkg_dir)
101 self.write_file((pkg_dir, 'setup.py'), SETUP_PY)
102 self.write_file((pkg_dir, 'foo.py'), '#')
103 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')
104 self.write_file((pkg_dir, 'README'), '')
105
106 dist = Distribution({'name': 'foo', 'version': '0.1',
107 'py_modules': ['foo'],
108 'url': 'xxx', 'author': 'xxx',
109 'author_email': 'xxx'})
110 dist.script_name = 'setup.py'
111 os.chdir(pkg_dir)
112
113 sys.argv = ['setup.py']
114 cmd = bdist_rpm(dist)
115 cmd.fix_python = True
116
Tarek Ziadéf0721222009-02-28 10:16:43 +0000117 cmd.quiet = 1
118 cmd.ensure_finalized()
119 cmd.run()
120
121 dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
Serhiy Storchaka39989152013-11-17 00:17:46 +0200122 self.assertIn('foo-0.1-1.noarch.rpm', dist_created)
Éric Araujo73cec212012-01-15 02:48:55 +0100123
124 # bug #2945: upload ignores bdist_rpm files
125 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files)
126 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files)
127
Tarek Ziadéf0721222009-02-28 10:16:43 +0000128 os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm'))
129
Tarek Ziadéf0721222009-02-28 10:16:43 +0000130def test_suite():
131 return unittest.makeSuite(BuildRpmTestCase)
132
133if __name__ == '__main__':
Éric Araujo70ec44a2010-11-06 02:44:43 +0000134 run_unittest(test_suite())