Bläddra i källkod

HPCC-8285 Regression Suite - Change log levels and add debug output

--loglevel can now be used to set the level of logging to output.

Signed-off-by: Philip Schwartz <philip.schwartz@lexisnexis.com>
Philip Schwartz 12 år sedan
förälder
incheckning
cd50f8b86f

+ 3 - 2
testing/regress/hpcc/common/error.py

@@ -22,6 +22,7 @@ ERROR = {
     "1001": "Command return code non-zero.",
     "1002": "Command timed out.",
     "2000": "Value must be of Type Suite or ECLFile.",
+    "2001": "ECL Directory does not exist.",
     "3000": "Return is null",
     "3001": "Return diff does not match."
 }
@@ -34,6 +35,6 @@ class Error(Exception):
 
     def __str__(self):
         if self.err:
-            return "Error (%s): %s \n %s" % (self.code,
-                                             ERROR[self.code], self.err)
+            return "Error (%s): %s \n %s\n" % (self.code,
+                                               ERROR[self.code], self.err)
         return "Error (%s): %s " % (self.code, ERROR[self.code])

+ 7 - 16
testing/regress/hpcc/common/logger.py

@@ -58,13 +58,13 @@ class Logger(object):
                 prefix = '[Error]' % \
                     record.__dict__
             elif record.__dict__['levelname'] == "DEBUG":
-                prefix = '[TEST]' % \
+                prefix = '[Debug]' % \
                     record.__dict__
             elif record.__dict__['levelname'] == "INFO":
                 prefix = '[Pass]' % \
                     record.__dict__
             elif record.__dict__['levelname'] == "WARNING":
-                prefix = '[Running]' % \
+                prefix = '[Action]' % \
                     record.__dict__
             if self._color:
                 prefix = (self._colors.get(record.levelno, self._normal) +
@@ -77,7 +77,7 @@ class Logger(object):
                 formatted = formatted.rstrip() + "\n" + record.exc_text
             return formatted.replace("\n", "\n    ")
 
-    def addHandler(self, fd, level='debug'):
+    def addHandler(self, fd, level='info'):
         root_logger = logging.getLogger()
         channel = logging.FileHandler(fd)
         channel.setLevel(getattr(logging, level.upper()))
@@ -97,18 +97,9 @@ class Logger(object):
         channel.setFormatter(Logger._LogFormatter(color=color))
         root_logger.addHandler(channel)
 
-    def __init__(self, level='debug'):
+    def setLevel(self, level):
         logging.getLogger().setLevel(getattr(logging, level.upper()))
-        self.enable_pretty_logging()
-
 
-def main():
-    logging.info("INFO")
-    logging.debug("sort.ecl")
-    logging.warn("WARN")
-    logging.error("ERROR")
-    logging.critical("CRITICAL")
-
-if __name__ == '__main__':
-    regLog = Logger('debug')
-    main()
+    def __init__(self, level='info'):
+        self.setLevel(level)
+        self.enable_pretty_logging()

+ 4 - 1
testing/regress/hpcc/common/report.py

@@ -47,7 +47,7 @@ class Report:
         self.report = _dict(report)
         self.name = name
 
-    def display(self):
+    def display(self, log=None):
         reportStr = "\n"
         reportStr += "Results\n"
         reportStr += "-------------------------------------------------\n"
@@ -59,6 +59,9 @@ class Report:
                 reportStr += result.Diff
                 reportStr += "\n"
             reportStr += "-------------------------------------------------\n"
+        if log:
+            reportStr += "Log: %s\n" % str(log)
+            reportStr += "-------------------------------------------------\n"
         logging.warn(reportStr)
 
     def getResult(self, eclfile):

+ 2 - 0
testing/regress/hpcc/common/shell.py

@@ -17,6 +17,7 @@
 ############################################################################ */
 '''
 
+import logging
 import sys
 from subprocess import (
     PIPE,
@@ -42,6 +43,7 @@ class Shell:
 
     def __run(self, *args, **kwargs):
         args = [i for i in args if i is not None]
+        logging.debug("CMD: " + " ". join(args))
         process = Popen(
             args, stdout=kwargs.pop('stdout', PIPE),
             stderr=kwargs.pop('stderr', PIPE),

+ 10 - 5
testing/regress/hpcc/regression/regress.py

@@ -20,6 +20,7 @@
 import logging
 import os
 import sys
+import time
 
 from ..common.config import Config
 from ..common.logger import Logger
@@ -30,10 +31,13 @@ from ..util.ecl.command import ECLcmd
 
 
 class Regression:
-    def __init__(self, config="regress.json"):
+    def __init__(self, config="regress.json", level="info"):
         self.config = Config(config).configObj
         self.suites = {}
-        self.log = Logger("DEBUG")
+        self.log = Logger(level)
+
+    def setLogLevel(self, level):
+        self.log.setLevel(level)
 
     def bootstrap(self):
         archives = os.path.join(self.config.baseDir, self.config.archiveDir)
@@ -66,15 +70,16 @@ class Regression:
         logDir = os.path.join(self.config.baseDir, self.config.logDir)
         server = self.config.ip
         report = Report(name)
-        logName = name + ".log"
+        curTime = time.strftime("%y-%m-%d-%H-%M")
+        logName = name + "." + curTime + ".log"
         if name == "setup":
             cluster = 'hthor'
         else:
             cluster = name
         log = os.path.join(logDir, logName)
         self.log.addHandler(log, 'DEBUG')
-        logging.debug("Suite: %s" % name)
-        logging.debug("Queries: %s" % repr(len(suite.getSuite())))
+        logging.warn("Suite: %s" % name)
+        logging.warn("Queries: %s" % repr(len(suite.getSuite())))
         cnt = 1
         for query in suite.getSuite():
             logging.warn("%s. Test: %s" % (repr(cnt), query.ecl))

+ 1 - 1
testing/regress/hpcc/regression/suite.py

@@ -33,7 +33,7 @@ class Suite:
 
     def buildSuite(self):
         if not os.path.isdir(self.dir_ec):
-            raise Exception("ECL Directory does not exist.")
+            raise Error("2001", err="Not Found: %s" % self.dir_ec)
         for files in os.listdir(self.dir_ec):
             if files.endswith(".ecl"):
                 ecl = os.path.join(self.dir_ec, files)

+ 13 - 6
testing/regress/hpcc/util/ecl/file.py

@@ -103,16 +103,23 @@ class ECLFile:
     def testResults(self):
         d = difflib.Differ()
         try:
+            logging.debug("EXP: " + self.getExpected())
+            logging.debug("REC: " + self.getResults())
+            if not os.path.isfile(self.getExpected()):
+                raise IOError("KEY FILE NOT FOUND. " + self.getExpected())
+            if not os.path.isfile(self.getResults()):
+                raise IOError("RESULT FILE NOT FOUND. " + self.getResults())
             expected = open(self.getExpected(), 'r').readlines()
             recieved = open(self.getResults(), 'r').readlines()
-        except IOError as e:
+            for line in difflib.unified_diff(recieved,
+                                             expected,
+                                             fromfile=self.xml_r,
+                                             tofile=self.xml_e):
+                self.diff += line
+        except Exception as e:
             logging.critical(e)
+            return False
 
-        for line in difflib.unified_diff(recieved,
-                                         expected,
-                                         fromfile=self.xml_r,
-                                         tofile=self.xml_e):
-            self.diff += line
         if not self.diff:
             return True
         return False

+ 5 - 1
testing/regress/regress

@@ -31,6 +31,9 @@ if __name__ == "__main__":
                         version='%(prog)s 0.0.1')
     parser.add_argument('--config', help="Config file to use.",
                         nargs='?', default="regress.json")
+    parser.add_argument('--loglevel', help="Set the log level.",
+                        nargs='?', default="info",
+                        choices=['info', 'debug'])
     subparsers = parser.add_subparsers(help='sub-command help')
     parser_list = subparsers.add_parser('list', help='list help')
     parser_list.add_argument('clusters', help="Print clusters from config.",
@@ -39,7 +42,8 @@ if __name__ == "__main__":
     parser_run.add_argument('cluster', help="Run the cluster suite.",
                             nargs='?', default='setup')
     args = parser.parse_args()
-    regress = Regression(args.config)
+
+    regress = Regression(args.config, args.loglevel)
     if 'clusters' in args:
         Clusters = ['setup']
         for cluster in regress.config.Clusters: