blob: 0388791640a40bb1a45b89145e408d4219e2efbd [file] [log] [blame]
import Appserver
import os
import inspect
import sys
import logging
import StringIO
from fabric.api import env
from fabric.colors import cyan
from test_functions import *
import log_capture
# Define resources relative to this file
env.resources = os.path.join(os.path.dirname(inspect.getfile(sys._getframe(0))), 'resources')
# Set some defaults
feature_tags = {
'webapp_jar_mode' : '',
'setup' : True,
'teardown' : True
}
@log_capture.wrap
def before_feature(context, feature):
from global_env import ARTIFACTS, APPSERVERS
context.flavor = feature_tags['flavor']
context.webapp_jar_mode = feature_tags['webapp_jar_mode']
context.appserver = Appserver.Factory(feature_tags['appserver'],
APPSERVERS[feature_tags['appserver']])
context.artifact_appserver = ARTIFACTS[APPSERVERS[feature_tags['appserver']]['artifact_key']]
# Mainline setup
setup()
if feature_tags['setup']:
undeploy_webapp(context.appserver, env.webapps['basic'])
stop_web_server(context.appserver)
destroy_instance(context.appserver)
if feature_tags['flavor'] == 'gemfire-cs':
stop_cacheserver(context.appserver)
stop_locator(context.appserver)
deploy_test_artifact(context.appserver, context.artifact_appserver)
create_instance(context.appserver, context.flavor)
customize_instance(context.appserver, context.flavor, context.webapp_jar_mode)
if feature_tags['flavor'] == 'gemfire-cs':
start_locator(context.appserver)
start_cacheserver(context.appserver)
@log_capture.wrap
def after_feature(context, feature):
if not context.failed and feature_tags['teardown']:
cleanup()
undeploy_webapp(context.appserver, env.webapps['basic'])
stop_web_server(context.appserver)
if feature_tags['flavor'] == 'gemfire-cs':
stop_cacheserver(context.appserver)
stop_locator(context.appserver)
@log_capture.wrap
def before_scenario(context, scenario):
"""
This gets reset by some test methods so we explicitly
ensure it is set correctly at the start of every scenario.
"""
env.region_name = 'gemfire_modules_sessions'
env.modify_war_args = ''
@log_capture.wrap
def after_scenario(context, scenario):
if not context.failed and hasattr(context, 'webapp_name'):
undeploy_webapp(context.appserver, env.webapps[context.webapp_name])
stop_web_server(context.appserver)
if hasattr(context, 'redeploy_active'):
restore_redeploy(context.appserver, context.flavor)
def str2bool(v):
if v.lower() in ("yes", "true", "t", "1"):
return True
elif v.lower() in ("no", "false", "n", "0"):
return False
else:
raise RuntimeError()
############################ Mainline ####################################
# Process tags set by environment variables
if 'FEATURE_TAGS' in os.environ:
for t in os.environ['FEATURE_TAGS'].split(' '):
n = t.find('=')
if n >= 0:
k = t[:n]
try:
v = str2bool(t[n+1:])
except:
v = t[n+1:]
else:
k = t
v = ''
feature_tags[k] = v
max_l = max([len(x) for x in feature_tags.keys()])
format_str = '{:>%d} = {}' % max_l
print cyan('Feature flags:')
feature_keys = feature_tags.keys()
feature_keys.sort()
for k in feature_keys:
print cyan(format_str.format(k, feature_tags[k]))
print
log_capture.dump_logging()
log_capture.setup_logging()