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:
@@ -2,6 +2,25 @@
|
|||||||
# The code below enables nosetests to work with i18n _() blocks
|
# The code below enables nosetests to work with i18n _() blocks
|
||||||
|
|
||||||
import __builtin__
|
import __builtin__
|
||||||
|
import os
|
||||||
|
from ConfigParser import MissingSectionHeaderError
|
||||||
|
|
||||||
|
from swift.common.utils import readconf
|
||||||
|
|
||||||
setattr(__builtin__, '_', lambda x: x)
|
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
|
||||||
|
|
||||||
|
0
test/functional/__init__.py
Normal file
0
test/functional/__init__.py
Normal file
@@ -1,3 +1,4 @@
|
|||||||
|
[func_test]
|
||||||
# sample config
|
# sample config
|
||||||
auth_host = 127.0.0.1
|
auth_host = 127.0.0.1
|
||||||
# For DevAuth:
|
# For DevAuth:
|
||||||
|
@@ -80,7 +80,7 @@ def listing_items(method):
|
|||||||
|
|
||||||
class Connection(object):
|
class Connection(object):
|
||||||
def __init__(self, config):
|
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):
|
if not config.has_key(key):
|
||||||
raise SkipTest
|
raise SkipTest
|
||||||
|
|
||||||
@@ -89,7 +89,7 @@ class Connection(object):
|
|||||||
self.auth_ssl = config['auth_ssl'] in ('on', 'true', 'yes', '1')
|
self.auth_ssl = config['auth_ssl'] in ('on', 'true', 'yes', '1')
|
||||||
self.auth_prefix = config.get('auth_prefix', '/')
|
self.auth_prefix = config.get('auth_prefix', '/')
|
||||||
|
|
||||||
self.account = config['account']
|
self.account = config.get('account')
|
||||||
self.username = config['username']
|
self.username = config['username']
|
||||||
self.password = config['password']
|
self.password = config['password']
|
||||||
|
|
||||||
@@ -110,8 +110,12 @@ class Connection(object):
|
|||||||
self.storage_token = clone_conn.storage_token
|
self.storage_token = clone_conn.storage_token
|
||||||
return
|
return
|
||||||
|
|
||||||
|
if self.account:
|
||||||
|
auth_user = '%s:%s' % (self.account, self.username)
|
||||||
|
else:
|
||||||
|
auth_user = self.username
|
||||||
headers = {
|
headers = {
|
||||||
'x-auth-user': '%s:%s' % (self.account, self.username),
|
'x-auth-user': auth_user,
|
||||||
'x-auth-key': self.password,
|
'x-auth-key': self.password,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -15,7 +15,6 @@
|
|||||||
# limitations under the License.
|
# limitations under the License.
|
||||||
|
|
||||||
import array
|
import array
|
||||||
import configobj
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import locale
|
import locale
|
||||||
import os
|
import os
|
||||||
@@ -29,20 +28,13 @@ import uuid
|
|||||||
import unittest
|
import unittest
|
||||||
import urllib
|
import urllib
|
||||||
|
|
||||||
|
from test import get_func_test_config
|
||||||
|
|
||||||
from swift import Account, AuthenticationFailed, Connection, Container, \
|
from swift import Account, AuthenticationFailed, Connection, Container, \
|
||||||
File, ResponseError
|
File, ResponseError
|
||||||
|
|
||||||
config_file_env_var = 'SWIFT_TEST_CONFIG_FILE'
|
config = get_func_test_config()
|
||||||
default_config_file = '/etc/swift/func_test.conf'
|
|
||||||
|
|
||||||
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'))
|
locale.setlocale(locale.LC_COLLATE, config.get('collate', 'C'))
|
||||||
|
|
||||||
class Base:
|
class Base:
|
||||||
@@ -136,7 +128,8 @@ class TestAccountEnv:
|
|||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
cls.conn = Connection(config)
|
cls.conn = Connection(config)
|
||||||
cls.conn.authenticate()
|
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.account.delete_containers()
|
||||||
|
|
||||||
cls.containers = []
|
cls.containers = []
|
||||||
@@ -314,7 +307,8 @@ class TestAccountNoContainersEnv:
|
|||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
cls.conn = Connection(config)
|
cls.conn = Connection(config)
|
||||||
cls.conn.authenticate()
|
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.account.delete_containers()
|
||||||
|
|
||||||
class TestAccountNoContainers(Base):
|
class TestAccountNoContainers(Base):
|
||||||
@@ -339,7 +333,8 @@ class TestContainerEnv:
|
|||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
cls.conn = Connection(config)
|
cls.conn = Connection(config)
|
||||||
cls.conn.authenticate()
|
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.account.delete_containers()
|
||||||
|
|
||||||
cls.container = cls.account.container(Utils.create_name())
|
cls.container = cls.account.container(Utils.create_name())
|
||||||
@@ -624,7 +619,8 @@ class TestContainerPathsEnv:
|
|||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
cls.conn = Connection(config)
|
cls.conn = Connection(config)
|
||||||
cls.conn.authenticate()
|
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.account.delete_containers()
|
||||||
|
|
||||||
cls.file_size = 8
|
cls.file_size = 8
|
||||||
@@ -784,7 +780,8 @@ class TestFileEnv:
|
|||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
cls.conn = Connection(config)
|
cls.conn = Connection(config)
|
||||||
cls.conn.authenticate()
|
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.account.delete_containers()
|
||||||
|
|
||||||
cls.container = cls.account.container(Utils.create_name())
|
cls.container = cls.account.container(Utils.create_name())
|
||||||
@@ -1430,7 +1427,8 @@ class TestFileComparisonEnv:
|
|||||||
def setUp(cls):
|
def setUp(cls):
|
||||||
cls.conn = Connection(config)
|
cls.conn = Connection(config)
|
||||||
cls.conn.authenticate()
|
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.account.delete_containers()
|
||||||
|
|
||||||
cls.container = cls.account.container(Utils.create_name())
|
cls.container = cls.account.container(Utils.create_name())
|
||||||
|
Reference in New Issue
Block a user