Merge "Updating how cloudcafe gets info from swift."
This commit is contained in:
commit
53d9aa36bd
@ -31,6 +31,10 @@ from cloudcafe.objectstorage.objectstorage_api.config \
|
|||||||
_auth_data = None
|
_auth_data = None
|
||||||
|
|
||||||
|
|
||||||
|
class SwiftInfoError(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
class ObjectStorageFixture(BaseTestFixture):
|
class ObjectStorageFixture(BaseTestFixture):
|
||||||
"""
|
"""
|
||||||
@summary: Base fixture for objectstorage tests
|
@summary: Base fixture for objectstorage tests
|
||||||
@ -79,7 +83,70 @@ class ObjectStorageFixture(BaseTestFixture):
|
|||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
@memoized
|
@memoized
|
||||||
def required_features(cls, *features):
|
def get_features(cls):
|
||||||
|
"""
|
||||||
|
Used to get the features swift is configured with.
|
||||||
|
|
||||||
|
Returns a string indicating the swift features configured where the
|
||||||
|
features are separated by whitespace.
|
||||||
|
Alternatly one of two special constants from ObjectStorageAPIConfig
|
||||||
|
can be returned:
|
||||||
|
ALL_FEATURES - indicates that CloudCafe should assume that all
|
||||||
|
features have been configured with swfit.
|
||||||
|
NO_FEATURES - indicates that CloudCafe should assume that no
|
||||||
|
features have been configured with swift.
|
||||||
|
"""
|
||||||
|
api_config = ObjectStorageAPIConfig()
|
||||||
|
|
||||||
|
def get_swift_features(api_config):
|
||||||
|
data = ObjectStorageFixture.get_auth_data()
|
||||||
|
client = ObjectStorageAPIClient(
|
||||||
|
data['storage_url'], data['auth_token'])
|
||||||
|
behaviors = ObjectStorageAPI_Behaviors(client, api_config)
|
||||||
|
try:
|
||||||
|
features = behaviors.get_swift_features()
|
||||||
|
except Exception as e:
|
||||||
|
raise SwiftInfoError(e.message)
|
||||||
|
|
||||||
|
return features.split()
|
||||||
|
|
||||||
|
# Get features from swift if needed.
|
||||||
|
reported_features = []
|
||||||
|
if api_config.use_swift_info:
|
||||||
|
reported_features = get_swift_features(api_config)
|
||||||
|
|
||||||
|
def split_features(features):
|
||||||
|
if features == api_config.ALL_FEATURES:
|
||||||
|
return features
|
||||||
|
return unicode(features).split()
|
||||||
|
|
||||||
|
# Split the features if needed.
|
||||||
|
features = split_features(api_config.features)
|
||||||
|
excluded_features = split_features(
|
||||||
|
api_config.excluded_features)
|
||||||
|
|
||||||
|
if features == api_config.ALL_FEATURES:
|
||||||
|
return features
|
||||||
|
|
||||||
|
features = list(set(reported_features) | set(features))
|
||||||
|
|
||||||
|
# If all features are to be ignored, skip
|
||||||
|
if excluded_features == api_config.ALL_FEATURES:
|
||||||
|
return api_config.NO_FEATURES
|
||||||
|
|
||||||
|
# Remove all features
|
||||||
|
for feature in excluded_features:
|
||||||
|
try:
|
||||||
|
index = features.index(feature)
|
||||||
|
features.pop(index)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
return ' '.join(features)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
@memoized
|
||||||
|
def required_features(cls, *required_features):
|
||||||
"""
|
"""
|
||||||
Test decorator to skip tests if features are not configured in swift.
|
Test decorator to skip tests if features are not configured in swift.
|
||||||
Configuration of what features are enabled can be done from the
|
Configuration of what features are enabled can be done from the
|
||||||
@ -96,30 +163,24 @@ class ObjectStorageFixture(BaseTestFixture):
|
|||||||
http://docs.python.org/2/library/unittest.html
|
http://docs.python.org/2/library/unittest.html
|
||||||
"""
|
"""
|
||||||
objectstorage_api_config = ObjectStorageAPIConfig()
|
objectstorage_api_config = ObjectStorageAPIConfig()
|
||||||
enabled_features = objectstorage_api_config.enabled_features
|
features = ObjectStorageFixture.get_features()
|
||||||
|
|
||||||
if enabled_features == objectstorage_api_config.ASK_SWIFT_FOR_FEATURES:
|
if features == objectstorage_api_config.ALL_FEATURES:
|
||||||
data = ObjectStorageFixture.get_auth_data()
|
|
||||||
client = ObjectStorageAPIClient(
|
|
||||||
data['storage_url'], data['auth_token'])
|
|
||||||
behaviors = ObjectStorageAPI_Behaviors(
|
|
||||||
client, objectstorage_api_config)
|
|
||||||
try:
|
|
||||||
enabled_features = behaviors.get_swift_features()
|
|
||||||
except Exception as e:
|
|
||||||
return unittest.skip(e.message)
|
|
||||||
|
|
||||||
elif enabled_features == objectstorage_api_config.ALL_FEATURES:
|
|
||||||
return lambda func: func
|
return lambda func: func
|
||||||
elif enabled_features == objectstorage_api_config.NO_FEATURES:
|
|
||||||
return unittest.skip('no configurable features to be tested.')
|
|
||||||
|
|
||||||
enabled_features = enabled_features.split()
|
if features == objectstorage_api_config.NO_FEATURES:
|
||||||
|
return unittest.skip('skipping all features')
|
||||||
|
|
||||||
for feature in features:
|
features = features.split()
|
||||||
if feature not in enabled_features:
|
missing_reqs = False
|
||||||
|
for req in required_features:
|
||||||
|
if req not in features:
|
||||||
|
missing_reqs = True
|
||||||
|
break
|
||||||
|
|
||||||
|
if missing_reqs:
|
||||||
return unittest.skip(
|
return unittest.skip(
|
||||||
'{0} not configured'.format(feature))
|
'requires features: {0}'.format(', '.join(required_features)))
|
||||||
|
|
||||||
return lambda func: func
|
return lambda func: func
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user