Jelajahi Sumber

Merge pull request #5313 from AttilaVamos/HPCC-10736-improvement

HPCC-10736 Regression suite should allow wildcards

Reviewed-by: Gavin Halliday <ghalliday@hpccsystems.com>
Gavin Halliday 11 tahun lalu
induk
melakukan
c4ac05958d
3 mengubah file dengan 35 tambahan dan 16 penghapusan
  1. 3 3
      testing/regress/README.rst
  2. 3 0
      testing/regress/hpcc/util/ecl/file.py
  3. 29 13
      testing/regress/regress

+ 3 - 3
testing/regress/README.rst

@@ -20,7 +20,7 @@ Result:
 |       HPCC Platform Regression suite
 | 
 |       positional arguments:
-|          {list,run}            sub-command help
+|          {list,run,query}      sub-command help
 |            list                list help
 |            run                 run help
 |            query               query help
@@ -90,7 +90,7 @@ Result:
 |       usage: regress query [-h] [--publish] [ECL query] [target cluster | all]
 |
 |       positional arguments:
-|         ECL query             Name of a single ECL query (mandatory).
+|         ECL query             Name of a single ECL query. It can contain wildcards. (mandatory).
 |         target cluster | all  Cluster for single query run. If cluster = 'all' then run single query on all clusters. Default value is thor.
 |
 |       optional arguments:
@@ -309,7 +309,7 @@ Command:
         ./regress query [-h] [--publish] test_name [target cluster | all]
 
 Positional arguments:
-        test_name               Name of a single ECL query (mandatory).
+        test_name               Name of a single ECL query. It can contain wildcards. (mandatory).
         target cluster | all    Cluster for single query run (default: thor).
                                 If cluster = 'all' then run ECL query on all clusters.
 Optional arguments:

+ 3 - 0
testing/regress/hpcc/util/ecl/file.py

@@ -67,6 +67,9 @@ class ECLFile:
     def getEcl(self):
         return os.path.join(self.dir_ec, self.ecl)
 
+    def getBaseEcl(self):
+        return self.ecl
+
     def getWuid(self):
         return self.wuid
 

+ 29 - 13
testing/regress/regress

@@ -25,6 +25,7 @@ import os
 import platform
 import atexit
 import traceback
+import glob
 
 from hpcc.regression.regress import Regression
 from hpcc.util.ecl.file import ECLFile
@@ -38,7 +39,7 @@ if __name__ == "__main__":
     description = 'HPCC Platform Regression suite'
     parser = argparse.ArgumentParser(prog=prog, description=description)
     parser.add_argument('--version', '-v', action='version',
-                        version='%(prog)s 0.0.7')
+                        version='%(prog)s 0.0.9')
     parser.add_argument('--config', help="config file to use. Default: regress.json",
                         nargs='?', default="regress.json")
     parser.add_argument('--loglevel', help="set the log level. Use debug for more detailed logfile.",
@@ -61,7 +62,7 @@ if __name__ == "__main__":
                             type=checkPqParam,  default = 0,   metavar="threadNumber")
 
     parser_query = subparsers.add_parser('query', help='query help')
-    parser_query.add_argument('query', help="Name of a single ECL query (mandatory).",
+    parser_query.add_argument('query', help="Name of a single ECL query. It can contain wildcards. (mandatory).",
                               nargs='?', metavar="ECL query")
     parser_query.add_argument('cluster', help="Cluster for single query run. If cluster = 'all' then run single query on all clusters. Default value is thor.",
                             nargs='?', default='thor', metavar="target_cluster | all")
@@ -97,27 +98,42 @@ if __name__ == "__main__":
                 parser_query.print_help()
                 exit()
             regress = Regression(args.config, args.loglevel, suiteDir,  timeout)
-            ecl = os.path.join(regress.dir_ec, args.query)
-            eclfile = ECLFile(ecl, regress.dir_a, regress.dir_ex,
-                              regress.dir_r)
+            eclfiles=[]   # List for ECL filenames to be executed
+            if  ('*' in args.query) or ('?' in args.query):
+                # There is any wildcard in ECL file name, resolve it
+                eclwild = os.path.join(regress.dir_ec, args.query)
+                eclfiles = glob.glob(eclwild)
+
+                # Sort ECL filenames to ensure correct execution order
+                eclfiles.sort()
+
+            else:
+                # We have only one ECL file in parameter list, put it on the eclfile list
+                ecl = os.path.join(regress.dir_ec, args.query)
+                eclfiles.append(ecl)
+
             targetClusters = []
             if 'all' in args.cluster:
                 for cluster in regress.config.Clusters:
                     targetClusters.append(str(cluster))
             else:
                 targetClusters.append(args.cluster)
+            # Go through the cluster list
             for cluster in targetClusters:
                 try:
-                    # Check if this query is not skip on this cluster and not part of setup
-                    if (not eclfile.testSkip(cluster)['skip']) and (not eclfile.testSkip('setup')['skip'] ):
-                        if not eclfile.testExclusion(cluster):
-                            regress.runSuiteQ(cluster, eclfile)
+                    # Execute ECL files one by one on the cluster
+                    for ecl in eclfiles:
+                        eclfile = ECLFile(ecl, regress.dir_a, regress.dir_ex, regress.dir_r)
+                        # Check if this query is not skip on this cluster and not part of setup
+                        if (not eclfile.testSkip(cluster)['skip']) and (not eclfile.testSkip('setup')['skip'] ):
+                            if not eclfile.testExclusion(cluster):
+                                regress.runSuiteQ(cluster, eclfile)
+                            else:
+                                logging.warn("%s. %s excluded on %s cluster." % (1,  eclfile.getBaseEcl(), cluster))
                         else:
-                            logging.warn("%s. %s excluded on this cluster." % (1, args.query))
-                    else:
-                        logging.warn("%s. %s skipped on this cluster." % (1, args.query))
+                            logging.warn("%s. %s skipped on %s cluster." % (1, eclfile.getBaseEcl(), cluster))
                 except IOError:
-                    logging.error("%s. Query %s does not exist!" % (1,  args.query))
+                    logging.error("%s. Query %s does not exist!" % (1,  eclfile.getBaseEcl()))
                     exit()
             print("End.")
         elif 'cluster' in args: