[yocto] [qa-tools][PATCH 2/2] testopia_update.py: Add functionality for setup clone-templates

jose.perez.carranza at linux.intel.com jose.perez.carranza at linux.intel.com
Mon May 29 13:18:58 PDT 2017


From: Jose Perez Carranza <jose.perez.carranza at linux.intel.com>

Add action “setup” to do a different actions on the exiting Testopia DB,
also add validation for the specific option used on this new action,
sub-option “-clone-templates” implemented to help on the setup for new
release and cloning form the same bran or form one branch to another.

Signed-off-by: Jose Perez Carranza <jose.perez.carranza at linux.intel.com>
---
 testopia_update.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 file changed, 57 insertions(+), 8 deletions(-)

diff --git a/testopia_update.py b/testopia_update.py
index b3e900d..fa8d10c 100755
--- a/testopia_update.py
+++ b/testopia_update.py
@@ -5,7 +5,6 @@ import sys
 import argparse
 import logging
 import ConfigParser
-import types
 
 from external.testopia import Testopia
 from testopia_update.product import get_products, get_product_class
@@ -13,8 +12,9 @@ from testopia_update.product import get_products, get_product_class
 DEFAULT_CONFIG_FILE = "testopia_update.config"
 DEFAULT_STORE_LOCATION = "/tmp/testopia_update"
 
-ACTIONS = ('create', 'update')
-BRANCHES = ('master', 'jethro', 'dizzy', 'daisy', 'noexists', 'morty', "pyro")
+ACTIONS = ('create', 'update', 'setup')
+BRANCHES = ('master', 'jethro', 'dizzy', 'daisy', 'noexists', 'morty', "krogoth",
+            "pyro")
 CATEGORIES = ('AUTO', 'MANUAL')
 
 
@@ -41,16 +41,28 @@ def load_results(results_log):
 
 
 def load_opts(args, opts_list, opts):
+
+    invalid_opts = ['old_project_version', 'clone_templates', 'new_branch']
+
+    if args.action == "create" or args.action == "update":
+        for invarg in invalid_opts:
+            if getattr(args, invarg):
+                logger.error("option %s not availabe for %s  action "
+                             % (invarg, args.action))
+                sys.exit(1)
+
     for to in opts_list:
         if to in vars(args):
             arg = getattr(args, to)
             if arg:
                 setattr(opts, to, arg)
+
         if not hasattr(opts, to):
             logger.error("%s: Requires testopia %s in arguments or config." % \
                 (sys.argv[0], to))
+
             if args.action == "update":
-                logger.warn('for action create you can use only --testrun-id ' +
+                logger.warn('for action update you can use only --testrun-id ' +
                             'and --results-log if test run was already created')
             sys.exit(1)
 
@@ -59,7 +71,8 @@ def connect_to_testopia():
     config = None
     opts = Options()
 
-    testopia_config = ['url', 'username', 'password', 'store_location']
+    #testopia_config = ['url', 'username', 'password', 'store_location']
+    testopia_config = ['url', 'username', 'password']
 
     if not args.config and os.path.exists(DEFAULT_CONFIG_FILE):
         args.config = DEFAULT_CONFIG_FILE
@@ -73,8 +86,8 @@ def connect_to_testopia():
 
     load_opts(args, testopia_config, opts)
 
-    if not os.path.exists(opts.store_location):
-        os.makedirs(opts.store_location)
+    if not os.path.exists(DEFAULT_STORE_LOCATION):
+        os.makedirs(DEFAULT_STORE_LOCATION)
 
     return opts, config
 
@@ -99,7 +112,7 @@ def get_args():
 
     parser.add_argument('-a', '--action', required=False, dest='action',
         choices=ACTIONS,
-        help='Action to execute can be create or update.')
+        help='Action to execute can be create, update or setup')
     parser.add_argument('-p', '--product', required=False,
         dest="product_name", help='Product to create or update.')
     parser.add_argument('-c', '--category', required=False,
@@ -131,6 +144,16 @@ def get_args():
     parser.add_argument('--results-log', required=False,
         dest="results_log", help='Results log.')
 
+    parser.add_argument('--old-project-version', required=False,
+        dest="old_project_version", help='Version of the project to clone from')
+
+    parser.add_argument('--clone-templates', required=False,
+        dest="clone_templates", help='clone templates from one brnach to \
+                                      another or same branch (only avaibale) \
+                                      with setup action', const='Y', nargs='?')
+    parser.add_argument('--new-branch', required=False,
+        dest="new_branch", help='New branch to clone the Templates')
+
     parser.add_argument('--verbose', required=False, action="store_true",
         dest="verbose", default=False, help='Enable verbose mode.')
     parser.add_argument('--debug', required=False, action="store_true",
@@ -172,6 +195,32 @@ if __name__ == '__main__':
             print("%s\n" % p.name)
         sys.exit(0)
 
+    if args.action == 'setup':
+        setup_opts = ['clone_templates', 'project_version','branch_name',
+                      'old_project_version', 'product_name']
+
+        load_opts(args, setup_opts, opts)
+
+        product = get_product_class(args.product_name, products)
+        test_plan = product.get_test_plan(args.branch_name)
+        temp_summary = 'TRTEMP_' +  args.old_project_version
+        temp_list = product.get_test_run_list(test_plan,temp_summary)
+        if not temp_list:
+            logger.error("%s: No templates found with %s string on %s"
+                         % (sys.argv[0], temp_summary, args.branch_name))
+
+        for tr in temp_list:
+            if args.new_branch and args.new_branch != args.branch_name:
+               kwargs['new_branch'] = args.new_branch
+
+            new_template = product.clone_template(tr, args.old_project_version,
+                                              args.project_version, **kwargs)
+            logger.info("%s: Template was created with (%d), Summary (%s)"
+                        % (sys.argv[0], new_template['run_id'],
+                           new_template['summary']))
+        sys.exit(0)
+
+
     if args.action == 'update' and args.trun_id:
         args.product_name = 'Dummy'
         product = get_product_class(args.product_name, products)
-- 
2.11.0




More information about the yocto mailing list