blob: b090b79e0c4edebf297ccf14fe2e6472dabed0de [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
46 def test_quiet(self):
47
48 # XXX I am unable yet to make this test work without
49 # spurious sdtout/stderr output under Mac OS X
Victor Stinner9c3de4a2011-08-17 20:49:41 +020050 if not sys.platform.startswith('linux'):
Tarek Ziadéf0721222009-02-28 10:16:43 +000051 return
52
53 # this test will run only if the rpm commands are found
54 if (find_executable('rpm') is None or
55 find_executable('rpmbuild') is None):
56 return
57
58 # let's create a package
59 tmp_dir = self.mkdtemp()
60 pkg_dir = os.path.join(tmp_dir, 'foo')
61 os.mkdir(pkg_dir)
62 self.write_file((pkg_dir, 'setup.py'), SETUP_PY)
63 self.write_file((pkg_dir, 'foo.py'), '#')
64 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')
65 self.write_file((pkg_dir, 'README'), '')
66
67 dist = Distribution({'name': 'foo', 'version': '0.1',
68 'py_modules': ['foo'],
69 'url': 'xxx', 'author': 'xxx',
70 'author_email': 'xxx'})
71 dist.script_name = 'setup.py'
72 os.chdir(pkg_dir)
73
74 sys.argv = ['setup.py']
75 cmd = bdist_rpm(dist)
76 cmd.fix_python = True
77
78 # running in quiet mode
79 cmd.quiet = 1
80 cmd.ensure_finalized()
81 cmd.run()
82
83 dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
Benjamin Petersonc9c0f202009-06-30 23:06:06 +000084 self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created)
Tarek Ziadéf0721222009-02-28 10:16:43 +000085
Éric Araujo73cec212012-01-15 02:48:55 +010086 # bug #2945: upload ignores bdist_rpm files
87 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files)
88 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files)
89
Tarek Ziadéf0721222009-02-28 10:16:43 +000090 def test_no_optimize_flag(self):
91
92 # XXX I am unable yet to make this test work without
93 # spurious sdtout/stderr output under Mac OS X
Victor Stinner9c3de4a2011-08-17 20:49:41 +020094 if not sys.platform.startswith('linux'):
Tarek Ziadéf0721222009-02-28 10:16:43 +000095 return
96
97 # http://bugs.python.org/issue1533164
98 # this test will run only if the rpm command is found
99 if (find_executable('rpm') is None or
100 find_executable('rpmbuild') is None):
101 return
102
103 # let's create a package that brakes bdist_rpm
104 tmp_dir = self.mkdtemp()
105 pkg_dir = os.path.join(tmp_dir, 'foo')
106 os.mkdir(pkg_dir)
107 self.write_file((pkg_dir, 'setup.py'), SETUP_PY)
108 self.write_file((pkg_dir, 'foo.py'), '#')
109 self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')
110 self.write_file((pkg_dir, 'README'), '')
111
112 dist = Distribution({'name': 'foo', 'version': '0.1',
113 'py_modules': ['foo'],
114 'url': 'xxx', 'author': 'xxx',
115 'author_email': 'xxx'})
116 dist.script_name = 'setup.py'
117 os.chdir(pkg_dir)
118
119 sys.argv = ['setup.py']
120 cmd = bdist_rpm(dist)
121 cmd.fix_python = True
122
Tarek Ziadéf0721222009-02-28 10:16:43 +0000123 cmd.quiet = 1
124 cmd.ensure_finalized()
125 cmd.run()
126
127 dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
Benjamin Petersonc9c0f202009-06-30 23:06:06 +0000128 self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created)
Éric Araujo73cec212012-01-15 02:48:55 +0100129
130 # bug #2945: upload ignores bdist_rpm files
131 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files)
132 self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files)
133
Tarek Ziadéf0721222009-02-28 10:16:43 +0000134 os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm'))
135
Tarek Ziadéf0721222009-02-28 10:16:43 +0000136def test_suite():
137 return unittest.makeSuite(BuildRpmTestCase)
138
139if __name__ == '__main__':
Éric Araujo70ec44a2010-11-06 02:44:43 +0000140 run_unittest(test_suite())