made functional tests more configurable

SWIFT_TEST_CONFIG_FILE can redirect both functional test suites to any conf
functional tests that don't require a account:username can now work with only
username for auth systems that don't support the account/namespace concept
This commit is contained in:
Clay Gerrard 2011-02-22 18:00:11 -06:00
parent aa14afe2bb
commit d1fa1a0040
5 changed files with 42 additions and 20 deletions

View File

@ -2,6 +2,25 @@
# The code below enables nosetests to work with i18n _() blocks
import __builtin__
import os
from ConfigParser import MissingSectionHeaderError
from swift.common.utils import readconf
setattr(__builtin__, '_', lambda x: x)
def get_func_test_config():
config_file = os.environ.get('SWIFT_TEST_CONFIG_FILE',
'/etc/swift/func_test.conf')
config = {}
try:
config = readconf(config_file, 'func_test')
except SystemExit:
print >>sys.stderr, 'SKIPPING FUNCTIONAL TESTS DUE TO NO CONFIG'
except MissingSectionHeaderError:
# rather than mock the stream to spoof a section header, display an
# error to the user and let them fix it.
print >>sys.stderr, 'SKIPPING FUNCTIONAL TESTS DUE TO NO ' \
'[func_test] CONFIG SECTION'
return config

View File

View File

@ -1,3 +1,4 @@
[func_test]
# sample config
auth_host = 127.0.0.1
# For DevAuth:

View File

@ -80,7 +80,7 @@ def listing_items(method):
class Connection(object):
def __init__(self, config):
for key in 'auth_host auth_port auth_ssl account username password'.split():
for key in 'auth_host auth_port auth_ssl username password'.split():
if not config.has_key(key):
raise SkipTest
@ -89,7 +89,7 @@ class Connection(object):
self.auth_ssl = config['auth_ssl'] in ('on', 'true', 'yes', '1')
self.auth_prefix = config.get('auth_prefix', '/')
self.account = config['account']
self.account = config.get('account')
self.username = config['username']
self.password = config['password']
@ -110,8 +110,12 @@ class Connection(object):
self.storage_token = clone_conn.storage_token
return
if self.account:
auth_user = '%s:%s' % (self.account, self.username)
else:
auth_user = self.username
headers = {
'x-auth-user': '%s:%s' % (self.account, self.username),
'x-auth-user': auth_user,
'x-auth-key': self.password,
}

View File

@ -15,7 +15,6 @@
# limitations under the License.
import array
import configobj
from datetime import datetime
import locale
import os
@ -29,20 +28,13 @@ import uuid
import unittest
import urllib
from test import get_func_test_config
from swift import Account, AuthenticationFailed, Connection, Container, \
File, ResponseError
config_file_env_var = 'SWIFT_TEST_CONFIG_FILE'
default_config_file = '/etc/swift/func_test.conf'
config = get_func_test_config()
if os.environ.has_key(config_file_env_var):
config_file = os.environ[config_file_env_var]
elif os.path.isfile(default_config_file):
config_file = default_config_file
else:
print >>sys.stderr, 'SKIPPING FUNCTIONAL TESTS DUE TO NO CONFIG'
config = configobj.ConfigObj(config_file)
locale.setlocale(locale.LC_COLLATE, config.get('collate', 'C'))
class Base:
@ -136,7 +128,8 @@ class TestAccountEnv:
def setUp(cls):
cls.conn = Connection(config)
cls.conn.authenticate()
cls.account = Account(cls.conn, config['account'])
cls.account = Account(cls.conn, config.get('account',
config['username']))
cls.account.delete_containers()
cls.containers = []
@ -314,7 +307,8 @@ class TestAccountNoContainersEnv:
def setUp(cls):
cls.conn = Connection(config)
cls.conn.authenticate()
cls.account = Account(cls.conn, config['account'])
cls.account = Account(cls.conn, config.get('account',
config['username']))
cls.account.delete_containers()
class TestAccountNoContainers(Base):
@ -339,7 +333,8 @@ class TestContainerEnv:
def setUp(cls):
cls.conn = Connection(config)
cls.conn.authenticate()
cls.account = Account(cls.conn, config['account'])
cls.account = Account(cls.conn, config.get('account',
config['username']))
cls.account.delete_containers()
cls.container = cls.account.container(Utils.create_name())
@ -624,7 +619,8 @@ class TestContainerPathsEnv:
def setUp(cls):
cls.conn = Connection(config)
cls.conn.authenticate()
cls.account = Account(cls.conn, config['account'])
cls.account = Account(cls.conn, config.get('account',
config['username']))
cls.account.delete_containers()
cls.file_size = 8
@ -784,7 +780,8 @@ class TestFileEnv:
def setUp(cls):
cls.conn = Connection(config)
cls.conn.authenticate()
cls.account = Account(cls.conn, config['account'])
cls.account = Account(cls.conn, config.get('account',
config['username']))
cls.account.delete_containers()
cls.container = cls.account.container(Utils.create_name())
@ -1430,7 +1427,8 @@ class TestFileComparisonEnv:
def setUp(cls):
cls.conn = Connection(config)
cls.conn.authenticate()
cls.account = Account(cls.conn, config['account'])
cls.account = Account(cls.conn, config.get('account',
config['username']))
cls.account.delete_containers()
cls.container = cls.account.container(Utils.create_name())