summaryrefslogtreecommitdiffstats
path: root/utils
diff options
context:
space:
mode:
Diffstat (limited to 'utils')
-rw-r--r--utils/test/result_collection_api/update/changes.py25
-rw-r--r--utils/test/result_collection_api/update/update.py86
-rw-r--r--utils/test/result_collection_api/update/update_api.py55
-rw-r--r--utils/test/result_collection_api/update/utils.py6
4 files changed, 171 insertions, 1 deletions
diff --git a/utils/test/result_collection_api/update/changes.py b/utils/test/result_collection_api/update/changes.py
new file mode 100644
index 000000000..42ab67b22
--- /dev/null
+++ b/utils/test/result_collection_api/update/changes.py
@@ -0,0 +1,25 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corporation
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+collections_old2New = {
+ 'pod': 'pods',
+ 'test_projects': 'projects',
+ 'test_testcases': 'testcases',
+ 'test_results': 'results'
+}
+
+fields_old2New = {
+ 'test_results': [({}, {'creation_date': 'start_date'})]
+}
+
+docs_old2New = {
+ 'test_results': [
+ ({'criteria': 'failed'}, {'criteria': 'FAILED'}),
+ ({'criteria': 'passed'}, {'criteria': 'PASS'})
+ ]
+}
diff --git a/utils/test/result_collection_api/update/update.py b/utils/test/result_collection_api/update/update.py
new file mode 100644
index 000000000..8b385a0b3
--- /dev/null
+++ b/utils/test/result_collection_api/update/update.py
@@ -0,0 +1,86 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corporation
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import argparse
+
+from pymongo import MongoClient
+
+from utils import main, parse_mongodb_url
+from changes import collections_old2New, fields_old2New, docs_old2New
+
+parser = argparse.ArgumentParser(description='Update MongoDBs')
+
+parser.add_argument('-u', '--url',
+ type=str,
+ required=False,
+ default='mongodb://127.0.0.1:27017/',
+ help='Mongo DB URL for Backups')
+
+parser.add_argument('-d', '--db',
+ type=str,
+ required=False,
+ default='test_results_collection',
+ help='database for the update.')
+
+
+def assert_collections(a_dict):
+ if a_dict is not None:
+ collections = eval_db('collection_names')
+ no_collections = []
+ for collection in a_dict.keys():
+ if collection not in collections:
+ no_collections.append(collection)
+ assert len(no_collections) == 0, \
+ 'collections {} not exist'.format(no_collections)
+
+
+def rename_collections(a_dict):
+ if a_dict is not None:
+ for collection, new_name in a_dict.iteritems():
+ eval_collection(collection, 'rename', new_name)
+
+
+def rename_fields(a_dict):
+ collection_update(a_dict, '$rename')
+
+
+def change_docs(a_dict):
+ collection_update(a_dict, '$set')
+
+
+def eval_db(method, *args, **kwargs):
+ return eval('db.%s(*args, **kwargs)' % method)
+
+
+def eval_collection(collection, method, *args, **kwargs):
+ return eval('db.%s.%s(*args, **kwargs)' % (collection, method))
+
+
+def collection_update(a_dict, operator):
+ if a_dict is not None:
+ for collection, updates in a_dict.iteritems():
+ for (query, doc) in updates:
+ doc_dict = {operator: doc}
+ eval_collection(collection, 'update', query,
+ doc_dict, upsert=False, multi=True)
+
+
+def update(args):
+ parse_mongodb_url(args.url)
+ client = MongoClient(args.url)
+ global db
+ db = client[args.db]
+ assert_collections(docs_old2New)
+ assert_collections(fields_old2New)
+ assert_collections(collections_old2New)
+ change_docs(docs_old2New)
+ rename_fields(fields_old2New)
+ rename_collections(collections_old2New)
+
+if __name__ == '__main__':
+ main(update, parser)
diff --git a/utils/test/result_collection_api/update/update_api.py b/utils/test/result_collection_api/update/update_api.py
new file mode 100644
index 000000000..db8ad2d90
--- /dev/null
+++ b/utils/test/result_collection_api/update/update_api.py
@@ -0,0 +1,55 @@
+##############################################################################
+# Copyright (c) 2016 ZTE Corporation
+# feng.xiaowei@zte.com.cn
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+##############################################################################
+import subprocess
+
+possible_processes = [
+ 'result_collection_api',
+ 'opnfv-testapi'
+]
+
+
+def kill_olds():
+ for proc in possible_processes:
+ query = 'ps -ef | grep {} | grep -v grep'.format(proc)
+ runnings = execute_with_output(query)
+ if runnings:
+ for running in runnings:
+ kill = 'kill -kill ' + running.split()[1]
+ execute_with_output(kill)
+ runnings = execute_with_output(query)
+ assert len(runnings) == 0, 'kill %s failed'.format(proc)
+
+
+def install_dependencies():
+ execute_with_assert('pip install -r ../requirements.txt')
+
+
+def install_new():
+ execute_with_assert('cd ../ && python setup.py install')
+
+
+def run_new():
+ execute_with_assert('opnfv-testapi &')
+
+
+def execute_with_output(cmd):
+ return subprocess.Popen(cmd, shell=True,
+ stdout=subprocess.PIPE).stdout.readlines()
+
+
+def execute_with_assert(cmd):
+ execute_output = subprocess.call(cmd, shell=True)
+ assert execute_output == 0
+
+
+if __name__ == '__main__':
+ kill_olds()
+ install_dependencies()
+ install_new()
+ run_new()
diff --git a/utils/test/result_collection_api/update/utils.py b/utils/test/result_collection_api/update/utils.py
index ef93f33cf..a18ff0389 100644
--- a/utils/test/result_collection_api/update/utils.py
+++ b/utils/test/result_collection_api/update/utils.py
@@ -16,10 +16,14 @@ def get_abspath(path):
return os.path.abspath(path)
-def url_parse(url):
+def parse_mongodb_url(url):
url = urlparse.urlparse(url)
assert url.scheme == 'mongodb', 'URL must be a MongoDB URL'
+ return url
+
+def url_parse(url):
+ url = parse_mongodb_url(url)
return url.username, url.password, url.hostname, url.port