Exemplo n.º 1
0
 def init_test(self, cd, argv=[], wd=None,
               buildroot=None, options=None):
     # Initiate a test which runs in directory cd
     # kwargs:
     #    argv: fed to sys.argv and eventually to Settings
     #          fedora-review is prepended and mock_root appended.
     #    wd:   review directory, cleared.
     #    options: mock-options
     os.chdir(cd)
     if wd:
         if os.path.exists(wd):
             shutil.rmtree(wd)
     ReviewDirs.reset(cd)
     ReviewDirs.workdir_setup(os.getcwd(), True)
     args = argv
     args.insert(0, 'fedora-review')
     br = buildroot if buildroot else self.BUILDROOT
     args.append("--mock-config=" + br)
     opts = []
     if NO_NET:
         opts.append('--offline')
     if options:
         opts.append(options)
     if opts:
         argv.append('--mock-options=' +  ' '.join(opts))
     sys.argv = argv
     Settings.init(True)
     Mock.reset()
Exemplo n.º 2
0
 def run(self):
     if not Mock.is_available():
         self.set_passed(self.PENDING,
                         "No installation test done (mock unavailable)")
         return
     if Settings.nobuild:
         bad_ones = self.check_build_installed()
         if bad_ones == []:
             self.set_passed(self.PASS)
         else:
             bad_ones = list(set(bad_ones))
             self.set_passed(self.FAIL,
                             '--no-build: package(s) not installed')
             self.log.info('Packages required by --no-build are'
                           ' not installed: ' + ', '.join(bad_ones))
         return
     _mock_root_setup('While installing built packages', force=True)
     rpms = Mock.get_package_rpm_paths(self.spec)
     rpms.extend(
         Mock.get_package_debuginfo_paths(self.spec.get_package_nvr()))
     self.log.info('Installing built package(s)')
     output = Mock.install(rpms)
     if not output:
         self.set_passed(self.PASS)
     else:
         attachments = [
             self.Attachment('Installation errors', output, 3)]
         self.set_passed(self.FAIL,
                         "Installation errors (see attachment)",
                         attachments)
Exemplo n.º 3
0
 def run(self):
     if not Mock.is_available():
         self.set_passed(self.PENDING,
                         "No installation test done (mock unavailable)")
         return
     if Settings.nobuild:
         bad_ones = self.check_build_installed()
         if bad_ones == []:
             self.set_passed(self.PASS)
         else:
             bad_ones = list(set(bad_ones))
             self.set_passed(self.FAIL,
                             '--no-build: package(s) not installed')
             self.log.info('Packages required by --no-build are'
                           ' not installed: ' + ', '.join(bad_ones))
         return
     _mock_root_setup('While installing built packages', force=True)
     rpms = Mock.get_package_rpm_paths(self.spec)
     rpms.extend(
         Mock.get_package_debuginfo_paths(self.spec.get_package_nvr()))
     self.log.info('Installing built package(s)')
     output = Mock.install(rpms)
     if not output:
         self.set_passed(self.PASS)
     else:
         attachments = [self.Attachment('Installation errors', output, 3)]
         self.set_passed(self.FAIL, "Installation errors (see attachment)",
                         attachments)
Exemplo n.º 4
0
    def run(self):
        # pylint: disable=W0632

        def listfiles():
            ''' Generate listing of dirs and files in each package. '''
            with open('files.dir', 'w') as f:
                for pkg in self.spec.packages:
                    nvr = self.spec.get_package_nvr(pkg)
                    path = Mock.get_package_rpm_path(nvr)
                    dirs, files = deps.listpaths(path)
                    f.write(pkg + '\n')
                    f.write('=' * len(pkg) + '\n')
                    for line in sorted(dirs):
                        f.write(line + '\n')
                    f.write('\n')
                    for line in sorted(files):
                        f.write(line + '\n')
                    f.write('\n')

        if Settings.prebuilt:
            self.set_passed(self.PENDING, 'Using prebuilt packages')
            listfiles()
            return
        if Settings.nobuild:
            if Mock.have_cache_for(self.spec):
                self.set_passed(self.PENDING,
                                'Re-using old build in mock')
                return
            else:
                self.log.info(
                    'No valid cache, building despite --no-build.')
        _mock_root_setup("While building")
        Mock.build(self.srpm.filename)
        listfiles()
        self.set_passed(self.PASS)
Exemplo n.º 5
0
    def init_test(self, cd, argv=None, wd=None, buildroot=None, options=None):
        '''
        Initiate a test which runs in directory cd
        kwargs:
           argv: fed to sys.argv and eventually to Settings
                 fedora-review is prepended and mock_root appended.
           wd:   review directory, cleared.
           options: mock-options'''

        cd = os.path.abspath(cd)
        os.chdir(cd)
        if not wd:
            wd = os.getcwd()
        ReviewDirs.workdir_setup(wd, 'testing')
        if not argv:
            argv = []
        args = argv
        args.insert(0, 'fedora-review')
        br = buildroot if buildroot else self.BUILDROOT
        args.append("--mock-config=" + br)
        opts = []
        if NO_NET:
            opts.append('--offline')
        if options:
            opts.append(options)
        if opts:
            argv.append('--mock-options=' + ' '.join(opts))
        sys.argv = argv
        Settings.init(True)
        Mock.clear_builddir()
        Mock.reset()
Exemplo n.º 6
0
    def init_test(self, cd, argv=None, wd=None,
                  buildroot=None, options=None):
        '''
        Initiate a test which runs in directory cd
        kwargs:
           argv: fed to sys.argv and eventually to Settings
                 fedora-review is prepended and mock_root appended.
           wd:   review directory, cleared.
           options: mock-options'''

        cd = os.path.abspath(cd)
        os.chdir(cd)
        if not wd:
            wd = os.getcwd()
        ReviewDirs.workdir_setup(wd, 'testing')
        if not argv:
            argv = []
        args = argv
        args.insert(0, 'fedora-review')
        br = buildroot if buildroot else self.BUILDROOT
        args.append("--mock-config=" + br)
        opts = []
        if NO_NET:
            opts.append('--offline')
        if options:
            opts.append(options)
        if opts:
            argv.append('--mock-options=' + ' '.join(opts))
        sys.argv = argv
        Settings.init(True)
        Mock.clear_builddir()
        Mock.reset()
Exemplo n.º 7
0
    def run(self):
        # pylint: disable=W0632

        def listfiles():
            ''' Generate listing of dirs and files in each package. '''
            with open('files.dir', 'w') as f:
                for pkg in self.spec.packages:
                    nvr = self.spec.get_package_nvr(pkg)
                    path = Mock.get_package_rpm_path(nvr)
                    dirs, files = deps.listpaths(path)
                    f.write(pkg + '\n')
                    f.write('=' * len(pkg) + '\n')
                    for line in sorted(dirs):
                        f.write(line + '\n')
                    f.write('\n')
                    for line in sorted(files):
                        f.write(line + '\n')
                    f.write('\n')

        if Settings.prebuilt:
            self.set_passed(self.PENDING, 'Using prebuilt packages')
            listfiles()
            return
        if Settings.nobuild:
            if Mock.have_cache_for(self.spec):
                self.set_passed(self.PENDING, 'Re-using old build in mock')
                return
            else:
                self.log.info('No valid cache, building despite --no-build.')
        _mock_root_setup("While building")
        Mock.build(self.srpm.filename)
        listfiles()
        self.set_passed(self.PASS)
Exemplo n.º 8
0
 def test_mock_configdir(self):
     self.init_test('test_misc',
                    argv=['-n','python-test'],
                    buildroot='default',
                    options='--configdir=mock-config')
     Mock.reset()
     Mock._get_root()
     self.assertEqual(Mock.mock_root, 'fedora-12-i786')
Exemplo n.º 9
0
 def check_build_installed(self):
     ''' Return list of used rpms which are not installed'''
     bad_ones = []
     for pkg in self.spec.packages:
         try:
             nvr = self.spec.get_package_nvr(pkg)
             Mock.get_package_rpm_path(nvr)
         except ReviewError:
             bad_ones.append(pkg)
     return bad_ones
Exemplo n.º 10
0
 def check_build_installed(self):
     ''' Return list of used rpms which are not installed'''
     bad_ones = []
     for pkg in self.spec.packages:
         try:
             nvr = self.spec.get_package_nvr(pkg)
             Mock.get_package_rpm_path(nvr)
         except ReviewError:
             bad_ones.append(pkg)
     return bad_ones
Exemplo n.º 11
0
 def setUp(self):
     FR_TestCase.setUp(self)
     sys.argv = ['fedora-review', '-b', '1']
     Settings.init(True)
     self.spec_file = os.path.join(os.path.abspath('.'),
                                   'test_regressions',
                                   'test_107_1.spec')
     self.srpm_file = os.path.join(os.path.abspath('.'),
                                   'test_regressions',
                                   'test_107_1-1.0-1.fc17.src.rpm')
     Mock.reset()
Exemplo n.º 12
0
 def test_spec_file(self):
     ''' Test the SpecFile class'''
     ReviewDirs.reset()
     ReviewDirs.workdir_setup('.', True)
     dest = Mock.get_builddir('SOURCES')
     if not os.path.exists(dest):
         os.makedirs(dest)
     self.helpers._get_file(TEST_SPEC, Mock.get_builddir('SOURCES'))
     spec = SpecFile(self.spec_file)
     # Test misc rpm values (Macro resolved)
     self.assertEqual(spec.name, 'python-test')
     self.assertEqual(spec.version, '1.0')
     # resolve the dist-tag
     dist = self.helpers._run_cmd('rpm --eval %dist')[:-1]
     self.assertEqual(spec.release, '1' + dist)
     # test misc rpm values (without macro resolve)
     self.assertEqual(spec.find_tag('Release'), ['1%{?dist}'])
     self.assertEqual(spec.find_tag('License'), ['GPLv2+'])
     self.assertEqual(spec.find_tag('Group'), ['Development/Languages'])
     # Test rpm value not there
     self.assertEqual(spec.find_tag('PreReq'), [])
     # Test get sections
     expected = {'%clean': ['rm -rf $RPM_BUILD_ROOT']}
     self.assertEqual(spec.get_section('%clean'), expected)
     expected = {'%build': ['%{__python} setup.py build']}
     self.assertEqual(spec.get_section('%build'), expected)
     expected = {
         '%install': [
             'rm -rf $RPM_BUILD_ROOT',
             '%{__python} setup.py install -O1 --skip-build'
             ' --root $RPM_BUILD_ROOT'
         ]
     }
     self.assertEqual(spec.get_section('%install'), expected)
     expected = {
         '%files':
         ['%defattr(-,root,root,-)', '%doc COPYING', '%{python_sitelib}/*']
     }
     self.assertEqual(spec.get_section('%files'), expected)
     # Test get_sources (return the Source/Patch lines with macros resolved)
     expected = {
         'Source0':
         'http://timlau.fedorapeople.org/'
         'files/test/review-test/python-test-1.0.tar.gz'
     }
     self.assertEqual(spec.get_sources(), expected)
     # Test find
     regex = re.compile(r'^Release\s*:\s*(.*)')
     res = spec.find(regex)
     if res:
         self.assertEqual(res.groups(), ('1%{?dist}', ))
     else:
         self.assertTrue(False)
     os.chdir(self.startdir)
Exemplo n.º 13
0
 def setUp(self):
     if not srcpath.PLUGIN_PATH in sys.path:
         sys.path.append(srcpath.PLUGIN_PATH)
     sys.argv = ['fedora-review', '-b', '1']
     Settings.init(True)
     self.log = Settings.get_logger()
     self.helpers = HelpersMixin()
     self.srpm_file = os.path.join(os.path.abspath('.'),
                                   'test_misc',
                                   'python-test-1.0-1.fc17.src.rpm')
     self.startdir = os.getcwd()
     Mock.reset()
Exemplo n.º 14
0
 def setUp(self):
     sys.argv = ['fedora-review', '-b', '1']
     Settings.init(True)
     self.log = Settings.get_logger()
     self.helpers = HelpersMixin()
     self.srpm_file = os.path.join(os.path.abspath('.'),
                                   'test_misc',
                                   'python-test-1.0-1.fc16.src.rpm')
     self.spec_file = os.path.join(Mock.get_builddir('SOURCES'),
                                   'python-test.spec')
     self.startdir = os.getcwd()
     Mock.reset()
Exemplo n.º 15
0
 def run(self):
     if self.checks.checkdict['CheckPackageInstalls'].is_passed:
         rpms = Mock.get_package_rpm_paths(self.spec)
         no_errors, retcode = Mock.rpmlint_rpms(rpms)
         text = 'No rpmlint messages.' if no_errors else \
                          'There are rpmlint messages (see attachment).'
         attachments = \
             [self.Attachment('Rpmlint (installed packages)',
                              retcode + '\n', 5)]
         self.set_passed(self.PASS, text, attachments)
     else:
         self.set_passed(self.FAIL, 'Mock build failed')
Exemplo n.º 16
0
 def test_mock_clear(self):
     ''' test mock.clear_builddir(). '''
     self.init_test('test_misc',
                    argv=['-n', 'python-test', '--cache',
                          '--no-build'])
     wdir = Mock.get_builddir('BUILD')
     len1 = len(glob.glob(os.path.join(wdir, "*")))
     s = "cd {0}; ln -sf foo bar || :".format(wdir)
     check_output(s, shell=True)
     Mock.builddir_cleanup()
     len2 = len(glob.glob(os.path.join(wdir, "*")))
     self.assertEqual(len2, len1)
Exemplo n.º 17
0
 def setUp(self):
     sys.argv = ['fedora-review', '-b', '1']
     self.startdir = os.getcwd()
     Settings.init(True)
     self.log = Settings.get_logger()
     self.helpers = HelpersMixin()
     self.spec_file = os.path.join(os.path.abspath('.'),
                                   'test_regressions',
                                   'test_107_1.spec')
     self.srpm_file = os.path.join(os.path.abspath('.'),
                                   'test_regressions',
                                   'test_107_1-1.0-1.fc17.src.rpm')
     Mock.reset()
Exemplo n.º 18
0
def _mock_root_setup(while_what, force=False):
    ''' Wrap mock --init. '''
    class DependencyInstallError(ReviewError):
        ''' Raised when a package in local repo can't be installed. '''
        pass

    Mock.init(force)
    if Settings.repo:
        repodir = Settings.repo
        if not repodir.startswith('/'):
            repodir = os.path.join(ReviewDirs.startdir, repodir)
        rpms = glob.glob(os.path.join(repodir, '*.rpm'))
        error = Mock.install(rpms)
        if error:
            raise DependencyInstallError(while_what + ': ' + error)
Exemplo n.º 19
0
 def rpmlint_rpms(self):
     """ Runs rpmlint against the used rpms - prebuilt or built in mock.
     """
     # pylint: disable=E1123
     rpms = Mock.get_package_rpm_paths(self.spec, with_srpm=True)
     no_errors, result = self.run_rpmlint(rpms)
     return no_errors, result + '\n'
Exemplo n.º 20
0
 def test_mock_options(self):
     ''' test -o/--mock-options and -m/mock-config '''
     nextrelease = '%d' % (int(RELEASE) + 1)
     v = nextrelease if RELEASE in self.BUILDROOT else RELEASE
     buildroot = 'fedora-%s-i386' % v
     self.init_test('mock-options',
                    argv = ['-n', 'python-test', '--cache'],
                    options='--resultdir=results --uniqueext=foo',
                    buildroot=buildroot)
     bug = NameBug('python-test')
     bug.find_urls()
     bug.download_files()
     mock_cmd = ' '.join(Mock._mock_cmd())
     Mock._get_root()
     self.assertIn('-r ' + buildroot, mock_cmd)
     self.assertEqual(Mock.mock_root, buildroot + '-foo')
Exemplo n.º 21
0
 def run(self):
     bad_pkgs = []
     archs = self.checks.spec.expand_tag('BuildArchs')
     if len(self.spec.packages) == 1:
         self.set_passed(self.NA)
         return
     if len(archs) == 1 and archs[0].lower() == 'noarch':
         isa = ''
     else:
         isa = Mock.get_macro('%_isa', self.spec, self.flags)
     regex = self.REGEX.replace('%{?_isa}', isa)
     regex = rpm.expandMacro(regex)
     regex = re.sub('[.](fc|el)[0-9]+', '', regex)
     for pkg in self.spec.packages:
         if pkg == self.spec.base_package:
             continue
         for pkg_end in ['debuginfo', '-javadoc', '-doc']:
             if pkg.endswith(pkg_end):
                 continue
         reqs = ''.join(self.rpms.get(pkg).format_requires)
         if regex not in reqs:
             bad_pkgs.append(pkg)
     if bad_pkgs:
         self.set_passed(self.PENDING, self.HDR + ' , '.join(bad_pkgs))
     else:
         self.set_passed(self.PASS)
Exemplo n.º 22
0
 def run(self):
     bad_pkgs = []
     archs = self.checks.spec.expand_tag('BuildArchs')
     if len(self.spec.packages) == 1:
         self.set_passed(self.NA)
         return
     if len(archs) == 1 and archs[0].lower() == 'noarch':
         isa = ''
     else:
         isa = Mock.get_macro('%_isa', self.spec, self.flags)
     regex = self.REGEX.replace('%{?_isa}', isa)
     regex = rpm.expandMacro(regex)
     regex = re.sub('[.](fc|el)[0-9]+', '', regex)
     for pkg in self.spec.packages:
         if pkg == self.spec.base_package:
             continue
         for pkg_end in ['debuginfo', '-javadoc', '-doc']:
             if pkg.endswith(pkg_end):
                 continue
         reqs = ''.join(self.rpms.get(pkg).format_requires)
         if regex not in reqs:
             bad_pkgs.append(pkg)
     if bad_pkgs:
         self.set_passed(self.PENDING,
                         self.HDR + ' , '.join(bad_pkgs))
     else:
         self.set_passed(self.PASS)
Exemplo n.º 23
0
def _mock_root_setup(while_what, force=False):
    ''' Wrap mock --init. '''

    class DependencyInstallError(ReviewError):
        ''' Raised when a package in local repo can't be installed. '''
        pass

    Mock.init(force)
    if Settings.repo:
        repodir = Settings.repo
        if not repodir.startswith('/'):
            repodir = os.path.join(ReviewDirs.startdir, repodir)
        rpms = glob.glob(os.path.join(repodir, '*.rpm'))
        error = Mock.install(rpms)
        if error:
            raise DependencyInstallError(while_what + ': ' + error)
Exemplo n.º 24
0
 def run(self):
     if not Mock.is_available():
         self.set_passed(self.NA)
         return
     if self.checks.checkdict['CheckPackageInstalls'].is_passed:
         rpms = Mock.get_package_rpm_paths(self.spec)
         rpms.extend(
             Mock.get_package_debuginfo_paths(self.spec.get_package_nvr()))
         no_errors, retcode = Mock.rpmlint_rpms(rpms)
         text = 'No rpmlint messages.' if no_errors else \
                          'There are rpmlint messages (see attachment).'
         attachments = \
             [self.Attachment('Rpmlint (installed packages)',
                              retcode + '\n', 7)]
         self.set_passed(self.PASS, text, attachments)
     else:
         self.set_passed(self.FAIL, 'Mock build failed')
Exemplo n.º 25
0
 def run(self):
     if not Mock.is_available():
         self.set_passed(self.NA)
         return
     if self.checks.checkdict['CheckPackageInstalls'].is_passed:
         rpms = Mock.get_package_rpm_paths(self.spec)
         rpms.extend(
             Mock.get_package_debuginfo_paths(self.spec.get_package_nvr()))
         no_errors, retcode = Mock.rpmlint_rpms(rpms)
         text = 'No rpmlint messages.' if no_errors else \
                          'There are rpmlint messages (see attachment).'
         attachments = \
             [self.Attachment('Rpmlint (installed packages)',
                              retcode + '\n', 7)]
         self.set_passed(self.PASS, text, attachments)
     else:
         self.set_passed(self.FAIL, 'Mock build failed')
Exemplo n.º 26
0
 def rpmlint_rpms(self, rpms=None):
     """ Runs rpmlint against the used rpms - prebuilt or built in mock.
     """
     # pylint: disable=E1123
     if rpms is None:
         rpms = Mock.get_package_rpm_paths(self.spec, with_srpm=True)
     no_errors, result = self.run_rpmlint(rpms)
     return no_errors, result + '\n'
Exemplo n.º 27
0
 def test_mockbuild(self):
     """ Test the SRPMFile class """
     self.init_test('mockbuild', argv=['-rn', 'python-test'])
     srpm = SRPMFile(self.srpm_file)
     # install the srpm
     srpm.unpack()
     self.assertTrue(srpm._unpacked_src is not None)
     src_dir = srpm._unpacked_src
     src_files = glob.glob(os.path.expanduser(src_dir) + '/*')
     src_files = [os.path.basename(f) for f in src_files]
     self.assertTrue('python-test-1.0.tar.gz' in src_files)
     self.log.info("Starting mock build (patience...)")
     Mock.clear_builddir()
     Mock.build(srpm.filename)
     rpms = glob.glob(os.path.join(Mock.resultdir,
                                   'python-test-1.0-1*noarch.rpm'))
     self.assertEqual(1, len(rpms))
Exemplo n.º 28
0
    def test_spec_file(self):
        ''' Test the SpecFile class'''

        def fix_usr_link(path):
            ''' Convert absolute paths to /usr/path. '''
            if not '/' in path:
                return path
            lead = path.split('/')[1]
            if lead in ['bin', 'sbin', 'lib', 'lib64']:
                return '/usr' + path
            return path

        self.init_test('test_misc',
                       argv=['-n', 'python-test', '--no-build'])
        spec = SpecFile(os.path.join(os.getcwd(), 'python-test.spec'))
        self.assertEqual(spec.name, 'python-test')
        self.assertEqual(spec.version, '1.0')
        dist = Mock.get_macro('%dist', None, {})
        self.assertEqual(spec.release, '1' + dist)
        self.assertEqual(spec.expand_tag('Release'), '1' + dist)
        self.assertEqual(spec.expand_tag('License'), 'GPLv2+')
        self.assertEqual(spec.expand_tag('Group'), 'Development/Languages')
        # Test rpm value not there
        self.assertEqual(spec.expand_tag('PreReq'), None)
        # Test get sections
        expected = ['rm -rf $RPM_BUILD_ROOT']
        self.assertEqual(spec.get_section('%clean'), expected)
        expected = '%{__python} setup.py build'
        expected = ['LANG=C', 'export LANG', 'unset DISPLAY',
                   '/usr/bin/python setup.py build']

        build = spec.get_section('%build')
        build = map(fix_usr_link, build)
        self.assertIn(''.join(build), ''.join(expected))
        install = spec.get_section('%install')
        install = map(fix_usr_link, install)
        expected = ['LANG=C', 'export LANG', 'unset DISPLAY',
                    'rm -rf $RPM_BUILD_ROOT',
                    '/usr/bin/python setup.py install -O1 --skip-build'
                    ' --root $RPM_BUILD_ROOT']
        self.assertIn(''.join(install), ''.join(expected))

        # Test get_sources (return the Source/Patch lines with macros resolved)
        expected = {'Source0': 'http://timlau.fedorapeople.org/'
                    'files/test/review-test/python-test-1.0.tar.gz'}
        self.assertEqual(spec.sources_by_tag, expected)
        expected = ['%defattr(-,root,root,-)',
                    '%doc COPYING',
                    rpm.expandMacro('%{python_sitelib}') + '/*']
        self.assertEqual(spec.get_files(), expected)

        # Test find
        regex = re.compile(r'^Release\s*:\s*(.*)')
        res = spec.find_re(regex)
        if res:
            self.assertEqual(res.split(':')[1].strip(), '1%{?dist}')
        else:
            self.assertTrue(False)
Exemplo n.º 29
0
 def test_spec_file(self):
     ''' Test the SpecFile class'''
     ReviewDirs.reset()
     ReviewDirs.workdir_setup('.', True)
     dest = Mock.get_builddir('SOURCES')
     if not os.path.exists(dest):
         os.makedirs(dest)
     self.helpers._get_file(TEST_SPEC, Mock.get_builddir('SOURCES'))
     spec = SpecFile(self.spec_file)
     # Test misc rpm values (Macro resolved)
     self.assertEqual(spec.name,'python-test')
     self.assertEqual(spec.version,'1.0')
     # resolve the dist-tag
     dist = self.helpers._run_cmd('rpm --eval %dist')[:-1]
     self.assertEqual(spec.release,'1'+dist)
     # test misc rpm values (without macro resolve)
     self.assertEqual(spec.find_tag('Release'), ['1%{?dist}'])
     self.assertEqual(spec.find_tag('License'), ['GPLv2+'])
     self.assertEqual(spec.find_tag('Group'), ['Development/Languages'])
     # Test rpm value not there
     self.assertEqual(spec.find_tag('PreReq'), [])
     # Test get sections
     expected = {'%clean': ['rm -rf $RPM_BUILD_ROOT']}
     self.assertEqual(spec.get_section('%clean'), expected)
     expected = {'%build': ['%{__python} setup.py build']}
     self.assertEqual(spec.get_section('%build'), expected)
     expected = {'%install': ['rm -rf $RPM_BUILD_ROOT', 
                 '%{__python} setup.py install -O1 --skip-build'
                 ' --root $RPM_BUILD_ROOT']}
     self.assertEqual(spec.get_section('%install'),expected)
     expected = {'%files': ['%defattr(-,root,root,-)', 
                 '%doc COPYING', '%{python_sitelib}/*']}
     self.assertEqual(spec.get_section('%files'),expected)
     # Test get_sources (return the Source/Patch lines with macros resolved)
     expected = {'Source0': 'http://timlau.fedorapeople.org/'
                 'files/test/review-test/python-test-1.0.tar.gz'}
     self.assertEqual(spec.get_sources(), expected)
     # Test find
     regex = re.compile(r'^Release\s*:\s*(.*)')
     res = spec.find(regex)
     if res:
         self.assertEqual(res.groups(), ('1%{?dist}',))
     else:
         self.assertTrue(False)
     os.chdir(self.startdir)
Exemplo n.º 30
0
 def test_mock_uniqueext(self):
     self.init_test('test_misc',
                    argv=['-n','python-test'],
                    options='--uniqueext=hugo')
     bug = NameBug('python-test')
     bug.find_urls()
     bug.download_files()
     checks = Checks(bug.spec_file, bug.srpm_file)
     Mock.init()
     for dirt in glob.glob('results/*.*'):
         os.unlink(dirt)
     check = checks.checkdict['CheckBuild']
     check.run()
     self.assertTrue(check.is_passed)
     results = glob.glob('results/*.rpm')
     self.assertEqual(len(results), 2)
     for dirt in glob.glob('results/*.*'):
         os.unlink(dirt)
Exemplo n.º 31
0
    def run_spec(self, spec):
        ''' Run all tests for a test spec.... '''
        # pylint: disable=C0111,W0212

        class Null(object):
            def write(self, msg):
                pass

        argv = ['-rn', spec.testcase, '-x', 'generic-large-docs',
                '--no-build']
        argv.extend(spec.args)
        self.init_test(spec.testcase, wd=spec.workdir, argv=argv)
        helper = ReviewHelper()
        Mock.clear_builddir()
        if os.path.exists('BUILD'):
            if os.path.islink('BUILD'):
                os.unlink('BUILD')
            else:
                shutil.rmtree('BUILD')
        stdout = sys.stdout
        sys.stdout = Null()
        rc = helper.run('review.txt')
        self.assertEqual(rc, 0)
        sys.stdout = stdout
        checkdict = helper.checks.get_checks()
        for check in checkdict.itervalues():
            self.assertTrue(check.is_run)
            if check.is_passed or check.is_pending or check.is_failed:
                self.assertIn(check.group, spec.groups_ok,
                              check.name + ': group is ' + check.group)
        for (what, check) in spec.expected:
            state = checkdict[check].state
            if what in ['pass', 'fail', 'pending']:
                self.assertEqual(state, what,
                                 check + ': state is ' + str(state))
            elif what == 'na':
                self.assertEqual(state, None,
                                 check + ': state is ' + str(state))
            elif what.startswith == 'in_attachment':
                self.assertIn(what.split(':')[1],
                              checkdict[check].attachments[0].text)
            else:
                self.assertFalse(what)
Exemplo n.º 32
0
    def run_spec(self, spec):
        ''' Run all tests for a test spec.... '''

        # pylint: disable=C0111,W0212

        class Null(object):
            def write(self, msg):
                pass

        argv = ['-rn', spec.testcase, '-x', 'generic-large-docs', '--no-build']
        argv.extend(spec.args)
        self.init_test(spec.testcase, wd=spec.workdir, argv=argv)
        helper = ReviewHelper()
        Mock.clear_builddir()
        if os.path.exists('BUILD'):
            if os.path.islink('BUILD'):
                os.unlink('BUILD')
            else:
                shutil.rmtree('BUILD')
        stdout = sys.stdout
        sys.stdout = Null()
        rc = helper.run('review.txt')
        self.assertEqual(rc, 0)
        sys.stdout = stdout
        checkdict = helper.checks.get_checks()
        for check in checkdict.itervalues():
            self.assertTrue(check.is_run)
            if check.is_passed or check.is_pending or check.is_failed:
                self.assertIn(check.group, spec.groups_ok,
                              check.name + ': group is ' + check.group)
        for (what, check) in spec.expected:
            state = checkdict[check].state
            if what in ['pass', 'fail', 'pending']:
                self.assertEqual(state, what,
                                 check + ': state is ' + str(state))
            elif what == 'na':
                self.assertEqual(state, None,
                                 check + ': state is ' + str(state))
            elif what.startswith == 'in_attachment':
                self.assertIn(
                    what.split(':')[1], checkdict[check].attachments[0].text)
            else:
                self.assertFalse(what)
Exemplo n.º 33
0
 def setUp(self):
     sys.argv = ['fedora-review','-n','python-test','--prebuilt']
     Settings.init(True)
     ReviewDirs.reset()
     ReviewDirs.workdir_setup('.', True)
     self.log = Settings.get_logger()
     self.helpers = Helpers()
     self.srpm_file = os.path.join(os.path.abspath('.'),
                                   os.path.basename(TEST_SRPM))
     self.spec_file = os.path.join(Mock.get_builddir('SOURCES'),
                                     os.path.basename(TEST_SPEC))
     self.source_file = os.path.join(Mock.get_builddir('SOURCES'),
                                     os.path.basename(TEST_SRC))
     if not os.path.exists(TEST_WORK_DIR):
         os.makedirs(TEST_WORK_DIR)
     self.helpers._get_file(TEST_SRPM, TEST_WORK_DIR)
     self.startdir = os.getcwd()
     for tree in ['python-test', 'results']:
         if os.path.exists(tree):
             shutil.rmtree(tree)
     Mock.reset()
Exemplo n.º 34
0
 def test_prebuilt_sources(self):
     ''' Local built RPM:s (-n) test. '''
     self.init_test('test_misc',
                    argv=['-cn', 'python-test', '--prebuilt'])
     ReviewDirs.startdir = os.getcwd()
     bug = NameBug('python-test')
     bug.find_urls()
     bug.download_files()
     checks = Checks(bug.spec_file, bug.srpm_file)
     subprocess.check_call('touch orvar.rpm', shell=True)
     rpms = Mock.get_package_rpm_paths(checks.spec)
     self.assertEqual(len(rpms), 1)
Exemplo n.º 35
0
 def setUp(self):
     sys.argv = ['fedora-review', '-n', 'python-test', '--prebuilt']
     Settings.init(True)
     ReviewDirs.reset()
     ReviewDirs.workdir_setup('.', True)
     self.log = Settings.get_logger()
     self.helpers = Helpers()
     self.srpm_file = os.path.join(os.path.abspath('.'),
                                   os.path.basename(TEST_SRPM))
     self.spec_file = os.path.join(Mock.get_builddir('SOURCES'),
                                   os.path.basename(TEST_SPEC))
     self.source_file = os.path.join(Mock.get_builddir('SOURCES'),
                                     os.path.basename(TEST_SRC))
     if not os.path.exists(TEST_WORK_DIR):
         os.makedirs(TEST_WORK_DIR)
     self.helpers._get_file(TEST_SRPM, TEST_WORK_DIR)
     self.startdir = os.getcwd()
     for tree in ['python-test', 'results']:
         if os.path.exists(tree):
             shutil.rmtree(tree)
     Mock.reset()
Exemplo n.º 36
0
 def test_mock_uniqueext(self):
     ''' Test --uniqueext option. '''
     loglevel = os.environ['REVIEW_LOGLEVEL']
     os.environ['REVIEW_LOGLEVEL'] = 'ERROR'
     self.init_test('mock-uniqueext',
                    argv=['-cn', 'python-test'],
                    options='--uniqueext=hugo')
     os.environ['REVIEW_LOGLEVEL'] = loglevel
     bug = NameBug('python-test')
     bug.find_urls()
     bug.download_files()
     checks = Checks(bug.spec_file, bug.srpm_file)
     Mock.init()
     for dirt in glob.glob('results/*.*'):
         os.unlink(dirt)
     check = checks.checkdict['CheckBuild']
     check.run()
     self.assertTrue(check.is_passed)
     results = glob.glob('results/*.rpm')
     self.assertEqual(len(results), 2)
     for dirt in glob.glob('results/*.*'):
         os.unlink(dirt)
Exemplo n.º 37
0
 def test_local_repo(self):
     self.init_test('test_misc',
                    argv=['-rn','python-test', '--local-repo',
                          'repo', '--cache'])
     ReviewDirs.reset(os.getcwd())
     bug = NameBug('python-test')
     bug.find_urls()
     bug.download_files()
     checks = Checks(bug.spec_file, bug.srpm_file)
     check = checks.checkdict['CheckPackageInstalls']
     check.run()
     self.assertTrue(check.is_passed)
     self.assertTrue(Mock.is_installed('dummy'))
Exemplo n.º 38
0
 def run(self):
     if not self.checks.checkdict['CheckPackageInstalls'].is_passed:
         self.set_passed(self.NA)
         return self.NA
     rpms = Mock.get_package_debuginfo_paths(self.spec.get_package_nvr())
     if not rpms:
         self.set_passed(self.NA)
         return self.NA
     no_errors, retcode = self.rpmlint_rpms(rpms)
     text = 'No rpmlint messages.' if no_errors else \
                      'There are rpmlint messages (see attachment).'
     attachments = \
         [self.Attachment('Rpmlint (debuginfo)', retcode + '\n', 6)]
     self.set_passed(self.PASS, text, attachments)
Exemplo n.º 39
0
 def run(self):
     if not self.checks.checkdict['CheckPackageInstalls'].is_passed:
         self.set_passed(self.NA)
         return self.NA
     rpms = Mock.get_package_debuginfo_paths(self.spec.get_package_nvr())
     if not rpms:
         self.set_passed(self.NA)
         return self.NA
     no_errors, retcode = self.rpmlint_rpms(rpms)
     text = 'No rpmlint messages.' if no_errors else \
                      'There are rpmlint messages (see attachment).'
     attachments = \
         [self.Attachment('Rpmlint (debuginfo)', retcode + '\n', 6)]
     self.set_passed(self.PASS, text, attachments)
Exemplo n.º 40
0
 def run(self):
     if not Mock.is_available():
         self.set_passed(self.NA)
         return
     Mock.clear_builddir()
     errmsg = Mock.rpmbuild_bp(self.srpm)
     if errmsg:
         self.log.debug(
             "Cannot do rpmbuild -bp, trying with builddeps")
         Mock.install(self.spec.build_requires)
         Mock.rpmbuild_bp(self.srpm)
     if os.path.lexists('BUILD'):
         if os.path.islink('BUILD'):
             os.unlink('BUILD')
         else:
             shutil.rmtree('BUILD')
     os.symlink(Mock.get_builddir('BUILD'), 'BUILD')
     self.log.info('Active plugins: ' +
                       ', '.join(self.checks.get_plugins(True)))
     self.set_passed(self.NA, None, [self.setup_attachment()])
Exemplo n.º 41
0
 def listfiles():
     ''' Generate listing of dirs and files in each package. '''
     with open('files.dir', 'w') as f:
         for pkg in self.spec.packages:
             nvr = self.spec.get_package_nvr(pkg)
             path = Mock.get_package_rpm_path(nvr)
             dirs, files = deps.listpaths(path)
             f.write(pkg + '\n')
             f.write('=' * len(pkg) + '\n')
             for line in sorted(dirs):
                 f.write(line + '\n')
             f.write('\n')
             for line in sorted(files):
                 f.write(line + '\n')
             f.write('\n')
Exemplo n.º 42
0
 def run_on_applicable(self):
     try:
         fedora_vers = int(Mock.get_macro("%fedora", self.spec, self.flags))
     except ValueError:
         # EPEL?
         fedora_vers = 20
     if fedora_vers <= 20:
         self.set_passed(self.NA)
         return
     failed = self.spec.find_re(r'Requires:\s*rubygem\s*$')
     if failed:
         text = 'Obsolete %s  found in spec' % failed
         self.set_passed(self.FAIL, text)
     else:
         self.set_passed(self.PASS)
Exemplo n.º 43
0
 def run_on_applicable(self):
     try:
         fedora_vers = int(Mock.get_macro("%fedora", self.spec, self.flags))
     except ValueError:
         # EPEL?
         fedora_vers = 20
     if fedora_vers <= 20:
         self.set_passed(self.NA)
         return
     failed = self.spec.find_re(r'Requires:\s*rubygem\s*$')
     if failed:
         text = 'Obsolete %s  found in spec' % failed
         self.set_passed(self.FAIL, text)
     else:
         self.set_passed(self.PASS)
Exemplo n.º 44
0
 def listfiles():
     ''' Generate listing of dirs and files in each package. '''
     with open('files.dir', 'w') as f:
         for pkg in self.spec.packages:
             nvr = self.spec.get_package_nvr(pkg)
             path = Mock.get_package_rpm_path(nvr)
             dirs, files = deps.listpaths(path)
             f.write(pkg + '\n')
             f.write('=' * len(pkg) + '\n')
             for line in sorted(dirs):
                 f.write(line + '\n')
             f.write('\n')
             for line in sorted(files):
                 f.write(line + '\n')
             f.write('\n')
Exemplo n.º 45
0
 def run(self):
     if not Mock.is_available():
         self.log.info(
             "Mock unavailable, build and installation not checked.")
         self.set_passed(self.NA)
         return
     Mock.clear_builddir()
     errmsg = Mock.rpmbuild_bp(self.srpm)
     if errmsg:
         self.log.debug("Cannot do rpmbuild -bp, trying with builddeps")
         Mock.install(self.spec.build_requires)
         Mock.rpmbuild_bp(self.srpm)
     if os.path.lexists('BUILD'):
         if os.path.islink('BUILD'):
             os.unlink('BUILD')
         else:
             shutil.rmtree('BUILD')
     os.symlink(Mock.get_builddir('BUILD'), 'BUILD')
     self.log.info('Active plugins: ' +
                   ', '.join(self.checks.get_plugins(True)))
     self.set_passed(self.NA, None, [self.setup_attachment()])
Exemplo n.º 46
0
 def __run_checks(self, spec, srpm):
     self.checks = Checks(spec, srpm)
     if Settings.no_report:
         self.outfile = '/dev/null'
     else:
         self.outfile = ReviewDirs.report_path(self.checks.spec.name)
     with open(self.outfile, "w") as output:
         if Settings.nobuild:
             self.checks.srpm.is_build = True
         self.log.info('Running checks and generate report\n')
         self.checks.run_checks(output=output,
                                writedown=not Settings.no_report)
         output.close()
     if not os.path.exists('BUILD'):
         os.symlink(Mock.get_builddir('BUILD'), 'BUILD')
     if not Settings.no_report:
         print "Review in: " + self.outfile
Exemplo n.º 47
0
 def run_on_applicable(self):
     try:
         fedora_vers = int(Mock.get_macro("%fedora", self.spec, self.flags))
     except ValueError:
         # EPEL?
         fedora_vers = 20
     if fedora_vers > 20:
         self.set_passed(self.NA)
         return
     failed = []
     for pkg_name in self.spec.packages:
         for suffix in ['-doc', '-fonts', '-devel']:
             if pkg_name.endswith(suffix):
                 continue
         rpm_pkg = self.rpms.get(pkg_name)
         if 'rubygems' not in rpm_pkg.requires and \
                 'ruby(rubygems)' not in rpm_pkg.requires:
             failed.append(pkg_name)
     if failed:
         text = 'Requires: rubygems missing in ' + ', '.join(failed)
         self.set_passed(self.FAIL, text)
     else:
         self.set_passed(self.PASS)
Exemplo n.º 48
0
import os.path
os.chdir(os.path.dirname(os.path.realpath(__file__)))
sys.path.insert(0,os.path.abspath('../'))

import unittest

from FedoraReview  import Mock

from test_misc     import TestMisc
from test_bugzilla import TestBugzilla
from test_checks   import TestChecks
from test_R_checks import TestRChecks
from test_options  import TestOptions
from test_util     import TestUtil
from test_ext      import TestExt

from test_env      import no_net

VERBOSITY = 2

if no_net:
    print "Warning:  No network available, only some tests run"
if not 'REVIEW_LOGLEVEL' in os.environ:
    print "Warning:  REVIEW_LOGLEVEL not set, lot's of output ahead."

Mock.init()

for t in 'Misc', 'Bugzilla', 'Checks', 'RChecks', 'Options', 'Util', 'Ext':
   test = eval( 'unittest.TestLoader().loadTestsFromTestCase(Test%s)' % t)
   unittest.TextTestRunner(verbosity=VERBOSITY).run(test)