clean up test.py a bit and allow filtering from the command line
This commit is contained in:
Robey Pointer 2006-07-31 00:01:37 -07:00
parent 5bbe1a8f36
commit 157484f5eb
1 changed files with 95 additions and 61 deletions

102
test.py
View File

@ -22,7 +22,10 @@
do the unit tests! do the unit tests!
""" """
import sys, os, unittest import os
import re
import sys
import unittest
from optparse import OptionParser from optparse import OptionParser
import paramiko import paramiko
@ -46,42 +49,64 @@ default_user = os.environ.get('USER', 'nobody')
default_keyfile = os.path.join(os.environ.get('HOME', '/'), '.ssh/id_rsa') default_keyfile = os.path.join(os.environ.get('HOME', '/'), '.ssh/id_rsa')
default_passwd = None default_passwd = None
parser = OptionParser('usage: %prog [options]')
parser.add_option('--verbose', action='store_true', dest='verbose', default=False, def iter_suite_tests(suite):
"""Return all tests in a suite, recursing through nested suites"""
for item in suite._tests:
if isinstance(item, unittest.TestCase):
yield item
elif isinstance(item, unittest.TestSuite):
for r in iter_suite_tests(item):
yield r
else:
raise Exception('unknown object %r inside test suite %r'
% (item, suite))
def filter_suite_by_re(suite, pattern):
result = unittest.TestSuite()
filter_re = re.compile(pattern)
for test in iter_suite_tests(suite):
if filter_re.search(test.id()):
result.addTest(test)
return result
def main():
parser = OptionParser('usage: %prog [options]')
parser.add_option('--verbose', action='store_true', dest='verbose', default=False,
help='verbose display (one line per test)') help='verbose display (one line per test)')
parser.add_option('--no-pkey', action='store_false', dest='use_pkey', default=True, parser.add_option('--no-pkey', action='store_false', dest='use_pkey', default=True,
help='skip RSA/DSS private key tests (which can take a while)') help='skip RSA/DSS private key tests (which can take a while)')
parser.add_option('--no-transport', action='store_false', dest='use_transport', default=True, parser.add_option('--no-transport', action='store_false', dest='use_transport', default=True,
help='skip transport tests (which can take a while)') help='skip transport tests (which can take a while)')
parser.add_option('--no-sftp', action='store_false', dest='use_sftp', default=True, parser.add_option('--no-sftp', action='store_false', dest='use_sftp', default=True,
help='skip SFTP client/server tests, which can be slow') help='skip SFTP client/server tests, which can be slow')
parser.add_option('--no-big-file', action='store_false', dest='use_big_file', default=True, parser.add_option('--no-big-file', action='store_false', dest='use_big_file', default=True,
help='skip big file SFTP tests, which are slow as molasses') help='skip big file SFTP tests, which are slow as molasses')
parser.add_option('-R', action='store_false', dest='use_loopback_sftp', default=True, parser.add_option('-R', action='store_false', dest='use_loopback_sftp', default=True,
help='perform SFTP tests against a remote server (by default, SFTP tests ' + help='perform SFTP tests against a remote server (by default, SFTP tests ' +
'are done through a loopback socket)') 'are done through a loopback socket)')
parser.add_option('-H', '--sftp-host', dest='hostname', type='string', default=default_host, parser.add_option('-H', '--sftp-host', dest='hostname', type='string', default=default_host,
metavar='<host>', metavar='<host>',
help='[with -R] host for remote sftp tests (default: %s)' % default_host) help='[with -R] host for remote sftp tests (default: %s)' % default_host)
parser.add_option('-U', '--sftp-user', dest='username', type='string', default=default_user, parser.add_option('-U', '--sftp-user', dest='username', type='string', default=default_user,
metavar='<username>', metavar='<username>',
help='[with -R] username for remote sftp tests (default: %s)' % default_user) help='[with -R] username for remote sftp tests (default: %s)' % default_user)
parser.add_option('-K', '--sftp-key', dest='keyfile', type='string', default=default_keyfile, parser.add_option('-K', '--sftp-key', dest='keyfile', type='string', default=default_keyfile,
metavar='<keyfile>', metavar='<keyfile>',
help='[with -R] location of private key for remote sftp tests (default: %s)' % help='[with -R] location of private key for remote sftp tests (default: %s)' %
default_keyfile) default_keyfile)
parser.add_option('-P', '--sftp-passwd', dest='password', type='string', default=default_passwd, parser.add_option('-P', '--sftp-passwd', dest='password', type='string', default=default_passwd,
metavar='<password>', metavar='<password>',
help='[with -R] (optional) password to unlock the private key for remote sftp tests') help='[with -R] (optional) password to unlock the private key for remote sftp tests')
options, args = parser.parse_args() options, args = parser.parse_args()
if len(args) > 0:
parser.error('unknown argument(s)')
# setup logging # setup logging
paramiko.util.log_to_file('test.log') paramiko.util.log_to_file('test.log')
if options.use_sftp: if options.use_sftp:
if options.use_loopback_sftp: if options.use_loopback_sftp:
SFTPTest.init_loopback() SFTPTest.init_loopback()
else: else:
@ -89,24 +114,33 @@ if options.use_sftp:
if not options.use_big_file: if not options.use_big_file:
SFTPTest.set_big_file_test(False) SFTPTest.set_big_file_test(False)
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(MessageTest)) suite.addTest(unittest.makeSuite(MessageTest))
suite.addTest(unittest.makeSuite(BufferedFileTest)) suite.addTest(unittest.makeSuite(BufferedFileTest))
suite.addTest(unittest.makeSuite(BufferedPipeTest)) suite.addTest(unittest.makeSuite(BufferedPipeTest))
suite.addTest(unittest.makeSuite(UtilTest)) suite.addTest(unittest.makeSuite(UtilTest))
suite.addTest(unittest.makeSuite(HostKeysTest)) suite.addTest(unittest.makeSuite(HostKeysTest))
if options.use_pkey: if options.use_pkey:
suite.addTest(unittest.makeSuite(KeyTest)) suite.addTest(unittest.makeSuite(KeyTest))
suite.addTest(unittest.makeSuite(KexTest)) suite.addTest(unittest.makeSuite(KexTest))
suite.addTest(unittest.makeSuite(PacketizerTest)) suite.addTest(unittest.makeSuite(PacketizerTest))
if options.use_transport: if options.use_transport:
suite.addTest(unittest.makeSuite(TransportTest)) suite.addTest(unittest.makeSuite(TransportTest))
suite.addTest(unittest.makeSuite(SSHClientTest)) suite.addTest(unittest.makeSuite(SSHClientTest))
if options.use_sftp: if options.use_sftp:
suite.addTest(unittest.makeSuite(SFTPTest)) suite.addTest(unittest.makeSuite(SFTPTest))
if options.use_big_file: if options.use_big_file:
suite.addTest(unittest.makeSuite(BigSFTPTest)) suite.addTest(unittest.makeSuite(BigSFTPTest))
verbosity = 1 verbosity = 1
if options.verbose: if options.verbose:
verbosity = 2 verbosity = 2
unittest.TextTestRunner(verbosity=verbosity).run(suite)
runner = unittest.TextTestRunner(verbosity=verbosity)
if len(args) > 0:
filter = '|'.join(args)
suite = filter_suite_by_re(suite, filter)
runner.run(suite)
if __name__ == '__main__':
main()