Home | History | Annotate | Download | only in tests
      1 """Tests for distutils.command.bdist_rpm."""
      2 
      3 import unittest
      4 import sys
      5 import os
      6 import tempfile
      7 import shutil
      8 
      9 from test.test_support import run_unittest
     10 
     11 from distutils.core import Distribution
     12 from distutils.command.bdist_rpm import bdist_rpm
     13 from distutils.tests import support
     14 from distutils.spawn import find_executable
     15 from distutils import spawn
     16 from distutils.errors import DistutilsExecError
     17 
     18 SETUP_PY = """\
     19 from distutils.core import setup
     20 import foo
     21 
     22 setup(name='foo', version='0.1', py_modules=['foo'],
     23       url='xxx', author='xxx', author_email='xxx')
     24 
     25 """
     26 
     27 class BuildRpmTestCase(support.TempdirManager,
     28                        support.LoggingSilencer,
     29                        unittest.TestCase):
     30 
     31     def setUp(self):
     32         super(BuildRpmTestCase, self).setUp()
     33         self.old_location = os.getcwd()
     34         self.old_sys_argv = sys.argv, sys.argv[:]
     35 
     36     def tearDown(self):
     37         os.chdir(self.old_location)
     38         sys.argv = self.old_sys_argv[0]
     39         sys.argv[:] = self.old_sys_argv[1]
     40         super(BuildRpmTestCase, self).tearDown()
     41 
     42     def test_quiet(self):
     43 
     44         # XXX I am unable yet to make this test work without
     45         # spurious sdtout/stderr output under Mac OS X
     46         if sys.platform != 'linux2':
     47             return
     48 
     49         # this test will run only if the rpm commands are found
     50         if (find_executable('rpm') is None or
     51             find_executable('rpmbuild') is None):
     52             return
     53 
     54         # let's create a package
     55         tmp_dir = self.mkdtemp()
     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.assertTrue('foo-0.1-1.noarch.rpm' in 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     def test_no_optimize_flag(self):
     87 
     88         # XXX I am unable yet to make this test work without
     89         # spurious sdtout/stderr output under Mac OS X
     90         if sys.platform != 'linux2':
     91             return
     92 
     93         # http://bugs.python.org/issue1533164
     94         # this test will run only if the rpm command is found
     95         if (find_executable('rpm') is None or
     96             find_executable('rpmbuild') is None):
     97             return
     98 
     99         # let's create a package that brakes bdist_rpm
    100         tmp_dir = self.mkdtemp()
    101         pkg_dir = os.path.join(tmp_dir, 'foo')
    102         os.mkdir(pkg_dir)
    103         self.write_file((pkg_dir, 'setup.py'), SETUP_PY)
    104         self.write_file((pkg_dir, 'foo.py'), '#')
    105         self.write_file((pkg_dir, 'MANIFEST.in'), 'include foo.py')
    106         self.write_file((pkg_dir, 'README'), '')
    107 
    108         dist = Distribution({'name': 'foo', 'version': '0.1',
    109                              'py_modules': ['foo'],
    110                              'url': 'xxx', 'author': 'xxx',
    111                              'author_email': 'xxx'})
    112         dist.script_name = 'setup.py'
    113         os.chdir(pkg_dir)
    114 
    115         sys.argv = ['setup.py']
    116         cmd = bdist_rpm(dist)
    117         cmd.fix_python = True
    118 
    119         cmd.quiet = 1
    120         cmd.ensure_finalized()
    121         cmd.run()
    122 
    123         dist_created = os.listdir(os.path.join(pkg_dir, 'dist'))
    124         self.assertTrue('foo-0.1-1.noarch.rpm' in dist_created)
    125 
    126         # bug #2945: upload ignores bdist_rpm files
    127         self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.src.rpm'), dist.dist_files)
    128         self.assertIn(('bdist_rpm', 'any', 'dist/foo-0.1-1.noarch.rpm'), dist.dist_files)
    129 
    130         os.remove(os.path.join(pkg_dir, 'dist', 'foo-0.1-1.noarch.rpm'))
    131 
    132 def test_suite():
    133     return unittest.makeSuite(BuildRpmTestCase)
    134 
    135 if __name__ == '__main__':
    136     run_unittest(test_suite())
    137