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()
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)
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)
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)
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()
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)
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')
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
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()
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)
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()
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()
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')
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)
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()
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)
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'
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')
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)
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')
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'
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))
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)
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)
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)
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)
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)
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()
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)
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()
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)
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'))
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)
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()])
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')
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)
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()])
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
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)
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)