diff --git a/test/__init__.py b/test/__init__.py index db145240dc..a4a71853eb 100644 --- a/test/__init__.py +++ b/test/__init__.py @@ -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 + diff --git a/test/functional/__init__.py b/test/functional/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/test/functional/sample.conf b/test/functional/sample.conf index 4067269af2..602d7a4f29 100644 --- a/test/functional/sample.conf +++ b/test/functional/sample.conf @@ -1,3 +1,4 @@ +[func_test] # sample config auth_host = 127.0.0.1 # For DevAuth: diff --git a/test/functional/swift.py b/test/functional/swift.py index b251bcc047..465af202a7 100644 --- a/test/functional/swift.py +++ b/test/functional/swift.py @@ -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, } diff --git a/test/functional/tests.py b/test/functional/tests.py index 482b507b52..6afcd22a0e 100644 --- a/test/functional/tests.py +++ b/test/functional/tests.py @@ -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())