fix pre-demo bugs
diff --git a/run_test.py b/run_test.py
index 1d58ede..aa47b21 100755
--- a/run_test.py
+++ b/run_test.py
@@ -6,6 +6,7 @@
import pprint
import logging
import argparse
+import traceback
import threading
import collections
@@ -50,6 +51,14 @@
return templ.format(data, formatter(res), "=" * 80)
+class Context(object):
+ def __init__(self):
+ self.build_meta = {}
+ self.nodes = []
+ self.clear_calls_stack = []
+ self.openstack_nodes_ids = []
+
+
def connect_one(node):
try:
ssh_pref = "ssh://"
@@ -216,52 +225,89 @@
ctx.sensor_data = ctx.sensors_control_queue.get()
-def run_all_test(cfg, ctx, store_nodes):
+def run_all_test(cfg, ctx):
ctx.results = []
if 'start_test_nodes' in cfg['tests']:
params = cfg['tests']['start_test_nodes']['openstack']
+ os_nodes_ids = []
- for new_node in start_vms.launch_vms(params):
- new_node.roles.append('testnode')
- ctx.nodes.append(new_node)
+ os_creds = params['creds']
+
+ if os_creds == 'fuel':
+ raise NotImplementedError()
+
+ elif os_creds == 'clouds':
+ os_cfg = cfg['clouds']['openstack']
+ tenant = os_cfg['OS_TENANT_NAME'].strip()
+ user = os_cfg['OS_USERNAME'].strip()
+ passwd = os_cfg['OS_PASSWORD'].strip()
+ auth_url = os_cfg['OS_AUTH_URL'].strip()
+
+ elif os_creds == 'ENV':
+ tenant = None
+ user = None
+ passwd = None
+ auth_url = None
+
+ else:
+ raise ValueError("Only 'ENV' creds are supported")
+
+ start_vms.nova_connect(user, passwd, tenant, auth_url)
+
+ new_nodes = []
+ for new_node, node_id in start_vms.launch_vms(params):
+ new_node.roles.append('testnode')
+ ctx.nodes.append(new_node)
+ os_nodes_ids.append(node_id)
+ new_nodes.append(new_node)
+
+ store_nodes_in_log(os_nodes_ids)
+ ctx.openstack_nodes_ids = os_nodes_ids
+
+ connect_all(new_nodes)
if 'tests' in cfg:
- store_nodes(ctx.nodes)
ctx.results.extend(run_tests(cfg_dict, ctx.nodes))
-def shut_down_vms(cfg, ctx):
- with open('vm_journal.log') as f:
- data = str(f.read())
- nodes = pickle.loads(data)
+def shut_down_vms_stage(cfg, ctx):
+ if ctx.openstack_nodes_ids is None:
+ data = open('vm_journal.log').read().strip()
- for node in nodes:
- logger.info("Node " + str(node) + " has been loaded")
+ if data == "":
+ logger.info("Journal file is empty")
+ return
- logger.info("Removing nodes")
- start_vms.clear_nodes()
- logger.info("Nodes has been removed")
+ try:
+ nodes_ids = pickle.loads(data)
+ except:
+ logger.error("File vm_journal.log corrupted")
+ return
+ else:
+ nodes_ids = ctx.openstack_nodes_ids
+
+ logger.info("Removing nodes")
+ start_vms.clear_nodes(nodes_ids)
+ logger.info("Nodes has been removed")
-def store_nodes(nodes):
+def store_nodes_in_log(nodes_ids):
with open('vm_journal.log', 'w+') as f:
- f.write(pickle.dumps([nodes]))
- for node in nodes:
- logger.info("Node " + str(node) + " has been stored")
+ f.write(pickle.dumps([nodes_ids]))
def clear_enviroment(cfg, ctx):
if os.path.exists('vm_journal.log'):
- shut_down_vms(cfg, ctx)
+ shut_down_vms_stage(cfg, ctx)
os.remove('vm_journal.log')
def run_tests_stage(cfg, ctx):
# clear nodes that possible were created on previous test running
- clear_enviroment(cfg, ctx)
- ctx.clear_calls_stack.append(shut_down_vms)
- run_all_test(cfg, ctx, store_nodes)
+ # clear_enviroment(cfg, ctx) << fix OS connection
+ ctx.clear_calls_stack.append(shut_down_vms_stage)
+ run_all_test(cfg, ctx)
def disconnect_stage(cfg, ctx):
@@ -272,6 +318,7 @@
def report_stage(cfg, ctx):
output_dest = cfg.get('output_dest')
+
if output_dest is not None:
if output_dest.endswith(".html"):
report.render_html_results(ctx, output_dest)
@@ -293,13 +340,6 @@
logger.debug(str(node))
-class Context(object):
- def __init__(self):
- self.build_meta = {}
- self.nodes = []
- self.clear_calls_stack = []
-
-
def load_config(path):
global cfg_dict
cfg_dict = parse_config(path)
@@ -319,7 +359,7 @@
# complete_log_nodes_statistic,
deploy_sensors_stage,
run_tests_stage,
- # report_stage
+ report_stage
]
load_config(opts.config_file)
@@ -341,8 +381,8 @@
try:
logger.info("Start {0.__name__} stage".format(stage))
stage(cfg_dict, ctx)
- except:
- pass
+ except Exception as exc:
+ logger.exception("During {0.__name__} stage".format(stage))
if exc is not None:
raise exc, cls, tb