[project @ Arch-1:robey@lag.net--2003-public%secsh--dev--1.0--patch-91]

fix test.py to use options instead of env vars, sftp tests default off
fix up the test framework so that the sftp unit tests aren't always run (you
have to ask for them explicitly) and they take their configuration from
command-line options.  they still require a remote server.
This commit is contained in:
Robey Pointer 2004-09-25 22:03:48 +00:00
parent a5f6a984ee
commit ec3df4cc0d
2 changed files with 78 additions and 42 deletions

42
test.py
View File

@ -23,13 +23,53 @@ do the unit tests!
""" """
import sys, os, unittest import sys, os, unittest
from optparse import OptionParser
import paramiko
sys.path.append('tests/') sys.path.append('tests/')
from test_message import MessageTest
from test_file import BufferedFileTest from test_file import BufferedFileTest
from test_pkey import KeyTest
#from test_transport import TransportTest
from test_sftp import SFTPTest from test_sftp import SFTPTest
default_host = 'localhost'
default_user = os.environ.get('USER', 'nobody')
default_keyfile = os.path.join(os.environ.get('HOME', '/'), '.ssh/id_rsa')
default_passwd = None
parser = OptionParser('usage: %prog [options]')
parser.add_option('--sftp', action='store_true', dest='use_sftp', default=False,
help='run sftp tests (currently require an external sftp server)')
parser.add_option('-H', '--sftp-host', dest='hostname', type='string', default=default_host,
metavar='<host>',
help='remote host for sftp tests (default: %s)' % default_host)
parser.add_option('-U', '--sftp-user', dest='username', type='string', default=default_user,
metavar='<username>',
help='username for sftp tests (default: %s)' % default_user)
parser.add_option('-K', '--sftp-key', dest='keyfile', type='string', default=default_keyfile,
metavar='<keyfile>',
help='location of private key for sftp tests (default: %s)' % default_keyfile)
parser.add_option('-P', '--sftp-passwd', dest='password', type='string', default=default_passwd,
metavar='<password>',
help='(optional) password to unlock the private key for sftp tests')
options, args = parser.parse_args()
if len(args) > 0:
parser.error('unknown argument(s)')
if options.use_sftp:
SFTPTest.init(options.hostname, options.username, options.keyfile, options.password)
# setup logging
paramiko.util.log_to_file('test.log')
suite = unittest.TestSuite() suite = unittest.TestSuite()
suite.addTest(unittest.makeSuite(MessageTest))
suite.addTest(unittest.makeSuite(BufferedFileTest)) suite.addTest(unittest.makeSuite(BufferedFileTest))
suite.addTest(unittest.makeSuite(KeyTest))
#suite.addTest(unittest.makeSuite(TransportTest))
if options.use_sftp:
suite.addTest(unittest.makeSuite(SFTPTest)) suite.addTest(unittest.makeSuite(SFTPTest))
unittest.TextTestRunner(verbosity=2).run(suite) unittest.TextTestRunner(verbosity=2).run(suite)

View File

@ -29,13 +29,6 @@ import sys, os
import random import random
import logging import logging
# need a host and private-key where we have acecss
HOST = os.environ.get('TEST_HOST', 'localhost')
USER = os.environ.get('TEST_USER', os.environ.get('USER', 'nobody'))
PKEY = os.environ.get('TEST_PKEY', os.path.join(os.environ.get('HOME', '/'), '.ssh/id_rsa'))
PKEY_PASSWD = os.environ.get('TEST_PKEY_PASSWD', None)
FOLDER = os.environ.get('TEST_FOLDER', 'temp-testing')
import paramiko, unittest import paramiko, unittest
ARTICLE = ''' ARTICLE = '''
@ -65,41 +58,44 @@ liver insulin receptors. Their sensitivity to insulin is, however, similarly
decreased compared with chicken. decreased compared with chicken.
''' '''
FOLDER = os.environ.get('TEST_FOLDER', 'temp-testing')
# setup logging sftp = None
paramiko.util.log_to_file('test.log')
t = paramiko.Transport(HOST)
class SFTPTest (unittest.TestCase):
def init(hostname, username, keyfile, passwd):
global sftp
t = paramiko.Transport(hostname)
try: try:
key = paramiko.RSAKey.from_private_key_file(PKEY, PKEY_PASSWD) key = paramiko.RSAKey.from_private_key_file(keyfile, passwd)
except paramiko.PasswordRequiredException: except paramiko.PasswordRequiredException:
sys.stderr.write('\n\nparamiko.RSAKey.from_private_key_file REQUIRES PASSWORD.\n') sys.stderr.write('\n\nparamiko.RSAKey.from_private_key_file REQUIRES PASSWORD.\n')
sys.stderr.write('You have two options:\n') sys.stderr.write('You have two options:\n')
sys.stderr.write('* Change environment variable TEST_PKEY to point to a different\n') sys.stderr.write('* Use the "-K" option to point to a different (non-password-protected)\n')
sys.stderr.write(' (non-password-protected) private key file.\n') sys.stderr.write(' private key file.\n')
sys.stderr.write('* Set environment variable TEST_PKEY_PASSWD to the password needed\n') sys.stderr.write('* Use the "-P" option to provide the password needed to unlock this private\n')
sys.stderr.write(' to unlock this private key.\n') sys.stderr.write(' key.\n')
sys.stderr.write('\n') sys.stderr.write('\n')
sys.exit(1) sys.exit(1)
try: try:
t.connect(username=USER, pkey=key) t.connect(username=username, pkey=key)
except paramiko.SSHException: except paramiko.SSHException:
t.close() t.close()
sys.stderr.write('\n\nparamiko.Transport.connect FAILED.\n') sys.stderr.write('\n\nparamiko.Transport.connect FAILED.\n')
sys.stderr.write('There are several possible reasons why it might fail so quickly:\n\n') sys.stderr.write('There are several possible reasons why it might fail so quickly:\n\n')
sys.stderr.write('* The host to connect to (%s) is not a valid SSH server.\n' % HOST) sys.stderr.write('* The host to connect to (%s) is not a valid SSH server.\n' % hostname)
sys.stderr.write(' (Override the SSH host with environment variable TEST_HOST.)\n') sys.stderr.write(' (Use the "-H" option to change the host.)\n')
sys.stderr.write('* The username to auth as (%s) is invalid.\n' % USER) sys.stderr.write('* The username to auth as (%s) is invalid.\n' % username)
sys.stderr.write(' (Override the auth user with environment variable TEST_USER.)\n') sys.stderr.write(' (Use the "-U" option to change the username.)\n')
sys.stderr.write('* The private key given (%s) is not accepted by the server.\n' % PKEY) sys.stderr.write('* The private key given (%s) is not accepted by the server.\n' % keyfile)
sys.stderr.write(' (Override the private key location with environment variable TEST_PKEY.)\n') sys.stderr.write(' (Use the "-K" option to provide a different key file.)\n')
sys.stderr.write('\n') sys.stderr.write('\n')
sys.exit(1) sys.exit(1)
sftp = paramiko.SFTP.from_transport(t) sftp = paramiko.SFTP.from_transport(t)
init = staticmethod(init)
class SFTPTest (unittest.TestCase):
def setUp(self): def setUp(self):
sftp.mkdir(FOLDER) sftp.mkdir(FOLDER)