Esempio n. 1
0
    os.system(cmd)
    with open(fn) as f:
        while 1:
            ps = f.readline()
            if not ps:
                break
            chunk = ps.split()
            pid, cmd = chunk[0], chunk[4]
            if cmd == s:
                os.kill(int(pid), signal.SIGTERM)
    os.unlink(fn)


if __name__ == '__main__':
    report_leaks = 0

    if report_leaks:
        gc.enable()
        gc.set_debug(gc.DEBUG_LEAK & ~gc.DEBUG_SAVEALL)

    try:
        Rand.load_file('randpool.dat', -1)
        unittest.TextTestRunner().run(suite())
        Rand.save_file('randpool.dat')
    finally:
        zap_servers()

    if report_leaks:
        from tests import alltests
        alltests.dump_garbage()
Esempio n. 2
0
def main(argv=None):
    '''Run either all tests, or those specified in argv'''
    if argv is None:
        argv = sys.argv

    # parse options
    covreport = False
    failfast = False
    loglevel = logging.WARNING
    opts, args = getopt.gnu_getopt(argv[1:], 'hVD', [
        'help', 'coverage', 'fast', 'failfast', 'ff', 'full', 'debug',
        'verbose'
    ])
    for o, a in opts:
        if o in ('-h', '--help'):
            print('''\
usage: %s [OPTIONS] [MODULES]

Where MODULE should a module name from ./tests/
If no module is given the whole test suite is run.

Options:
  -h, --help     print this text
  --fast         skip a number of slower tests and mock filesystem
  --failfast     stop after the first test that fails
  --ff           alias for "--fast --failfast"
  --full         full test for using filesystem without mock
  --coverage     report test coverage statistics
  -V, --verbose  run with verbose output from logging
  -D, --debug    run with debug output from logging
''' % argv[0])
            return
        elif o == '--coverage':
            if coverage:
                covreport = True
            else:
                print('''\
Can not run test coverage without module 'coverage'.
On Ubuntu or Debian install package 'python3-coverage'.
''',
                      file=sys.stderr)
                sys.exit(1)
        elif o == '--fast':
            tests.FAST_TEST = True
            # set before any test classes are loaded !
        elif o == '--failfast':
            failfast = True
        elif o == '--ff':  # --fast --failfast
            tests.FAST_TEST = True
            failfast = True
        elif o == '--full':
            tests.FULL_TEST = True
        elif o in ('-V', '--verbose'):
            loglevel = logging.INFO
        elif o in ('-D', '--debug'):
            loglevel = logging.DEBUG
        else:
            assert False, 'Unkown option: %s' % o

    # Set logging handler (don't use basicConfig here, we already installed stuff)
    handler = logging.StreamHandler()
    handler.setFormatter(logging.Formatter('%(levelname)s: %(message)s'))
    logger = logging.getLogger()
    logger.setLevel(loglevel)
    logger.addHandler(handler)
    #logging.captureWarnings(True) # FIXME - make all test pass with this enabled

    # Start tracing - before importing the tests
    if coverage:
        cov = coverage.coverage(source=['zim'], branch=True)
        cov.erase()  # clean up old date set
        cov.exclude('assert ')
        cov.exclude('raise NotImplementedError')
        cov.start()

    # Build the test suite
    loader = unittest.TestLoader()
    try:
        if args:
            suite = unittest.TestSuite()
            for name in args:
                module = name if name.startswith('tests.') else 'tests.' + name
                test = loader.loadTestsFromName(module)
                suite.addTest(test)
        else:
            suite = tests.load_tests(loader, None, None)
    except AttributeError as error:
        # HACK: unittest raises and attribute errors if import of test script
        # fails try to catch this and show the import error instead - else raise
        # original error
        import re
        m = re.match(r"'module' object has no attribute '(\w+)'",
                     error.args[0])
        if m:
            module = m.group(1)
            m = __import__('tests.' + module)  # should raise ImportError
        raise error

    # And run it
    unittest.installHandler()  # Fancy handling for ^C during test
    result = \
     unittest.TextTestRunner(verbosity=2, failfast=failfast, descriptions=False).run(suite)

    # Stop tracing
    if coverage:
        cov.stop()
        cov.save()

    # Check the modules were loaded from the right location
    # (so no testing based on modules from a previous installed version...)
    mylib = os.path.abspath('./zim')
    for module in [
            m for m in list(sys.modules.keys())
            if m == 'zim' or m.startswith('zim.')
    ]:
        if sys.modules[module] is None:
            continue
        file = sys.modules[module].__file__
        assert file.startswith(mylib), \
         'Module %s was loaded from %s' % (module, file)

    test_report(result, 'test_report.html')
    print('\nWrote test report to test_report.html')

    # print timings
    with open('test_times.csv', 'w') as out:
        for name, time in sorted(tests.TIMINGS,
                                 reverse=True,
                                 key=lambda t: t[1]):
            out.write("%s,%f\n" % (name, time))
        print("Wrote test_times.csv")

    # Create coverage output if asked to do so
    if covreport:
        print('Writing coverage reports...')
        cov.html_report(directory='./coverage', omit=['zim/inc/*'])
        print('Done - Coverage reports can be found in ./coverage/')
Esempio n. 3
0
def main(argv=None):
	'''Run either all tests, or those specified in argv'''
	if argv is None:
		argv = sys.argv

	# parse options
	coverage = None
	failfast = False
	loglevel = logging.WARNING
	opts, args = getopt.gnu_getopt(argv[1:],
		'hVD', ['help', 'coverage', 'fast', 'failfast', 'debug', 'verbose'])
	for o, a in opts:
		if o in ('-h', '--help'):
			print '''\
usage: %s [OPTIONS] [MODULES]

Where MODULE should a module name from ./tests/
If no module is given the whole test suite is run.

Options:
  -h, --help     print this text
  --fast         skip a number of slower tests (assumes --failfast)
  --failfast     stop after the first test that fails
  --coverage     report test coverage statistics
  -V, --verbose  run with verbose output from logging
  -D, --debug    run with debug output from logging
''' % argv[0]
			return
		elif o == '--coverage':
			try:
				import coverage as coverage_module
			except ImportError:
				print >>sys.stderr, '''\
Can not run test coverage without module 'coverage'.
On Ubuntu or Debian install package 'python-coverage'.
'''
				sys.exit(1)
			#~ coverage = coverage_module.coverage(data_suffix=True, auto_data=True)
			coverage = coverage_module.coverage(data_suffix=True)
			coverage.erase() # clean up old date set
			coverage.exclude('assert ')
			coverage.exclude('raise NotImplementedError')
			coverage.start()
		elif o == '--fast':
			failfast = True
			tests.FAST_TEST = True
				# set before any test classes are loaded !
		elif o == '--failfast':
			failfast = True
		elif o in ('-V', '--verbose'):
			loglevel = logging.INFO
		elif o in ('-D', '--debug'):
			loglevel = logging.DEBUG
		else:
			assert False

	# Set logging handler
	logging.basicConfig(level=loglevel, format='%(levelname)s: %(message)s')

	# Build the test suite
	loader = unittest.TestLoader()
	if args:
		suite = unittest.TestSuite()
		for name in args:
			module = name if name.startswith('tests.') else 'tests.' + name
			test = loader.loadTestsFromName(module)
			suite.addTest(test)
	else:
		suite = tests.load_tests(loader, None, None)

	# And run it
	unittest.installHandler() # Fancy handling for ^C during test
	result = \
		unittest.TextTestRunner(verbosity=2, failfast=failfast, descriptions=False).run(suite)

	# Check the modules were loaded from the right location
	# (so no testing based on modules from a previous installed version...)
	mylib = os.path.abspath('./zim')
	for module in [m for m in sys.modules.keys()
			if m == 'zim' or m.startswith('zim.')]:
				if sys.modules[module] is None:
					continue
				file = sys.modules[module].__file__
				assert file.startswith(mylib), \
					'Module %s was loaded from %s' % (module, file)

	test_report(result, 'test_report.html')
	print '\nWrote test report to test_report.html\n'

	# Create coverage output if asked to do so
	if coverage:
		coverage.stop()
		#~ coverage.combine()

		print 'Writing coverage reports...'

		pyfiles = list(tests.zim_pyfiles())
		#~ coverage.report(pyfiles, show_missing=False)
		#~ coverage.html_report(pyfiles, directory='./coverage', omit=['zim/inc/*'])
		coverage_report(coverage, pyfiles, './coverage')
		print 'Done - Coverage reports can be found in ./coverage/'
Esempio n. 4
0
from tests import unittest
        
if __name__ == '__main__':
    loader = unittest.TestLoader()
    suite = loader.discover('tests/')

    runner = unittest.TextTestRunner()
    runner.run(suite)
Esempio n. 5
0
			suite = tests.load_tests(loader, None, None)
	except AttributeError, error:
		# HACK: unittest raises and attribute errors if import of test script
		# fails try to catch this and show the import error instead - else raise
		# original error
		import re
		m = re.match(r"'module' object has no attribute '(\w+)'", error.args[0])
		if m:
			module = m.group(1)
			m = __import__('tests.'+module) # should raise ImportError
		raise error

	# And run it
	unittest.installHandler() # Fancy handling for ^C during test
	result = \
		unittest.TextTestRunner(verbosity=2, failfast=failfast, descriptions=False).run(suite)

	# Check the modules were loaded from the right location
	# (so no testing based on modules from a previous installed version...)
	mylib = os.path.abspath('./zim')
	for module in [m for m in sys.modules.keys()
			if m == 'zim' or m.startswith('zim.')]:
				if sys.modules[module] is None:
					continue
				file = sys.modules[module].__file__
				assert file.startswith(mylib), \
					'Module %s was loaded from %s' % (module, file)

	test_report(result, 'test_report.html')
	print '\nWrote test report to test_report.html\n'