[Avida-SVN] r1473 - in development: . Avida.xcodeproj tests/_testrunner tests/default_classic_100u tests/default_transsmt_100u tests/midrun_classsic_30u tests/task_sort_analyze

brysonda at myxo.css.msu.edu brysonda at myxo.css.msu.edu
Sun Apr 8 16:07:09 PDT 2007


Author: brysonda
Date: 2007-04-08 19:07:09 -0400 (Sun, 08 Apr 2007)
New Revision: 1473

Removed:
   development/consistencytests/
   development/test_avida
Modified:
   development/Avida.xcodeproj/project.pbxproj
   development/CMakeLists.txt
   development/SConstruct
   development/tests/_testrunner/testrunner.cfg
   development/tests/_testrunner/testrunner.py
   development/tests/default_classic_100u/test_list
   development/tests/default_transsmt_100u/test_list
   development/tests/midrun_classsic_30u/test_list
   development/tests/task_sort_analyze/test_list
Log:
Remove old ctest based consistency tests.

Update development to TestRunner v1.2.  Also updated test_list files with createdby and email information.

New Features:
- Test name globbing support (for example default_*)
- Underscore disabled tests can now be run when supplied explicitly on the command line (with globbing support)
- Configurable handling of non-zero exit codes. Options are disallow (the default), allow, and require.  Primary purpose is to support tests with required failure.  For example to verify proper error checking within the tested application.
- Enhanced performance test timing.  Now tracks both wall time and user time for variances.  This will allow for finer grained tracking of things like multithreaded performance.
- Test configuration file (test_list) help is now available via the --help-test-cfg option.  To create a sample test_list run "./run_tests --help-test-cfg > tests/TEST_NAME/test_list".


Modified: development/Avida.xcodeproj/project.pbxproj
===================================================================
--- development/Avida.xcodeproj/project.pbxproj	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/Avida.xcodeproj/project.pbxproj	2007-04-08 23:07:09 UTC (rev 1473)
@@ -365,6 +365,7 @@
 		70F7DE6C09296615009E311D /* cGenotypeControl.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70F7DE6809296613009E311D /* cGenotypeControl.cc */; };
 		70F7DE6D09296616009E311D /* cSpeciesControl.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70F7DE6A09296613009E311D /* cSpeciesControl.cc */; };
 		70F7DE7409296794009E311D /* cGenotype_BirthData.cc in Sources */ = {isa = PBXBuildFile; fileRef = 70F7DE700929678E009E311D /* cGenotype_BirthData.cc */; };
+		70FC02800BC835E700991121 /* cHardwareGX.cc in Sources */ = {isa = PBXBuildFile; fileRef = 423335880BC067E3000DF681 /* cHardwareGX.cc */; };
 		DCC3166107628531008F7A48 /* avida.cc in Sources */ = {isa = PBXBuildFile; fileRef = DCC3109C0762539E008F7A48 /* avida.cc */; };
 		E626209E0A372C2A00C07685 /* SaveLoadActions.cc in Sources */ = {isa = PBXBuildFile; fileRef = 708051A80A1F65FE00CBB8B6 /* SaveLoadActions.cc */; };
 /* End PBXBuildFile section */
@@ -2072,6 +2073,7 @@
 				109746410AE9606E00929ED6 /* cDeme.cc in Sources */,
 				70B1A6510B7E237F00067486 /* cHardwareExperimental.cc in Sources */,
 				706C70000B83F265003174C1 /* cInstSet.cc in Sources */,
+				70FC02800BC835E700991121 /* cHardwareGX.cc in Sources */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};

Modified: development/CMakeLists.txt
===================================================================
--- development/CMakeLists.txt	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/CMakeLists.txt	2007-04-08 23:07:09 UTC (rev 1473)
@@ -182,37 +182,6 @@
   "Enable building interfaceless Avida (fastest version)."
   ON
 )
-IF(AVD_PRIMITIVE)
-# By default, compile all unit tests of primitive Avida classes.  Tests
-	# are run via 'make test' under unix.
-	OPTION(AVD_CONSISTENCY_TEST_PRIMITIVE
-		"Enable primitive consistency test suites."
-		ON
-	)
-	IF(AVD_CONSISTENCY_TEST_PRIMITIVE)
-		IF(EXISTS ${PROJECT_SOURCE_DIR}/consistencytests)
-			SET(_AvidaExePath
-				"${PROJECT_BINARY_DIR}/bin/avida"
-				CACHE FILEPATH
-				"Where can the Avida executable 'avida' be found ?"
-				FORCE
-			)
-			ENABLE_TESTING()
-			SET(AVD_CONSISTENCY_CHECK_PRIMITIVE
-				ON CACHE INTERNAL
-				"Tell the consistencytests project to enable primitive consistency test suites."
-				FORCE
-			)
-		ELSE(EXISTS ${PROJECT_SOURCE_DIR}/consistencytests)
-			MESSAGE(SEND_ERROR
-				"The option AVD_CONSISTENCY_TEST_PRIMITIVE is enabled but I can't find the consistency test suites. They should be in the subdirectory ${PROJECT_SOURCE_DIR}/consistencytests"
-			)
-		ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/consistencytests)
-		IF(AVD_CONSISTENCY_CHECK_PRIMITIVE)
-			SUBDIRS(consistencytests)
-		ENDIF(AVD_CONSISTENCY_CHECK_PRIMITIVE)
-	ENDIF(AVD_CONSISTENCY_TEST_PRIMITIVE)
-ENDIF(AVD_PRIMITIVE)
 
 OPTION(AVD_GUI_PYQT
 	"Enable the PyQt GUI interface. (EXPERIMENTAL)"

Modified: development/SConstruct
===================================================================
--- development/SConstruct	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/SConstruct	2007-04-08 23:07:09 UTC (rev 1473)
@@ -87,12 +87,6 @@
 )
 environment.SConscript('support/config/SConscript')
 
-# XXX beginnings of consistency tests. @kgn
-environment.SConscript('consistencytests/SConscript',
-  build_dir = 'consistencytest_output',
-  duplicate = 0,
-)
-
 # XXX beginnings of 'extras'. @kgn
 if environment.subst('$extrasDir') not in ['None', 'none', '']:
   environment.SConscript(

Deleted: development/test_avida
===================================================================
--- development/test_avida	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/test_avida	2007-04-08 23:07:09 UTC (rev 1473)
@@ -1,3 +0,0 @@
-#!/bin/sh
-
-cd cbuild && ctest --verbose "$@"

Modified: development/tests/_testrunner/testrunner.cfg
===================================================================
--- development/tests/_testrunner/testrunner.cfg	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/tests/_testrunner/testrunner.cfg	2007-04-08 23:07:09 UTC (rev 1473)
@@ -10,5 +10,6 @@
 app = %(builddir)s/work/avida
 
 [performance]
-margin = .05
+usermargin = .05
+wallmargin = .05
 repeat = 5

Modified: development/tests/_testrunner/testrunner.py
===================================================================
--- development/tests/_testrunner/testrunner.py	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/tests/_testrunner/testrunner.py	2007-04-08 23:07:09 UTC (rev 1473)
@@ -34,6 +34,7 @@
 import ConfigParser
 import difflib
 import dircache
+import fnmatch
 import getopt
 import os
 import popen2
@@ -51,7 +52,7 @@
 
 # Global Constants
 # ---------------------------------------------------------------------------------------------------------------------------
-TESTRUNNER_VERSION = "1.1"
+TESTRUNNER_VERSION = "1.2"
 TESTRUNNER_COPYRIGHT = "2007"
 
 TRUE_STRINGS = ("y","Y","yes","Yes","true","True","1")
@@ -67,7 +68,6 @@
 
 # Global Variables
 # ---------------------------------------------------------------------------------------------------------------------------
-cfg = None      # ConfigParser.ConfigParser
 settings = {}   # {string:string}
 tmpdir = None   # string
 
@@ -91,13 +91,11 @@
   usagestr = """
 Usage: %(_testrunner_name)s [options] [testname ...]
 
-  Runs the specified tests.  If no tests are specified all available tests will
-  be run and new expected results generated, where applicable.
+  Runs the specified tests.  Test names can be unix-style globbing patterns.
+  If no tests are specified all available tests will be run and new expected
+  results generated, where applicable.
 
   Options:
-    -h | --help
-      Display this message
-    
     --builddir=dir [%(builddir)s]
       Set the path to the build directory.
     
@@ -108,6 +106,12 @@
       Force active tests to be treated as peformance tests, regardless of
       individual test configuration.
     
+    -h | --help
+      Display this message
+      
+    --help-test-cfg
+      Display a sample test configuration file
+    
     -j number [%(cpus)d]
       Set the number of concurrent tests to run. i.e. - the number of CPUs
       that are availabile.
@@ -162,7 +166,45 @@
 # } // End of usage()
 
 
+# void sample_test_list() {
+def sample_test_list():
+  global settings, TEST_LIST
+  test_list = ";--- Begin Test Configuration File (%s) ---" % TEST_LIST
+  test_list += """
+[main]
+args =                   ; Command line arguments to pass to the application
+app = %(app)s            ; Application path to test
+nonzeroexit = disallow   ; Exit code handling (disallow, allow, or require)
+                         ;  disallow - treat non-zero exit codes as failures
+                         ;  allow - all exit codes are acceptable
+                         ;  require - treat zero exit codes as failures, useful
+                         ;            for creating tests for app error checking
+createdby =              ; Who created the test
+email =                  ; Email address for the test's creator
 
+[consistency]
+enabled = yes            ; Is this test a consistency test?
+long = no                ; Is this test a long test?
+
+[performance]
+enabled = no             ; Is this test a performance test?
+long = no                ; Is this test a long test?
+
+; The following variables can be used in constructing setting values by calling
+; them with %(variable_name)s.  For example see 'app' above.
+;
+"""
+  sk = settings.keys()
+  sk.sort()
+  for set in sk:
+    if set[0] != "_":
+      test_list += "; %s \n" % set
+  test_list += ";--- End Test Configuration File ---"
+  print test_list
+# } // End of sample_test_list()
+
+
+
 # void version() {
 def version():
   global TESTRUNNER_VERSION, TESTRUNNER_COPYRIGHT
@@ -206,7 +248,7 @@
     self.name = name
     self.tdir = tdir
     
-    if os.path.exists(os.path.join(tdir, settings["svnmetadir"])) and not settings.has_key("disable-svn"): self.usesvn = True
+    if os.path.exists(os.path.join(tdir, settings["svnmetadir"])) and not settings.has_key("_disable_svn"): self.usesvn = True
     else: self.usesvn = False
 
     if settings.has_key("skip-tests"): self.skip = True
@@ -224,7 +266,7 @@
       self.has_perf_base = True
     else: self.has_perf_base = False
     
-    if self.has_perf_base and settings.has_key("reset-perf-base"):
+    if self.has_perf_base and settings.has_key("_reset_perf_base"):
       try:
         rev = "exported"
         if self.usesvn:
@@ -240,7 +282,16 @@
       except (IOError, OSError, shutil.Error): pass
 
     
+    # Load the App for the test and check that it exists
     self.app = self.getSetting("main", "app")
+    self.app = os.path.abspath(self.app)
+    if not os.path.exists(self.app):
+      print "Error: Application (%s) not found" % self.app
+      sys.exit(-1)
+    if not os.path.isfile(self.app):
+      print "Error: Application (%s) is not a file" % self.app
+      sys.exit(-1)
+    
     self.args = self.getConfig("main", "args", "")
     
     if self.getConfig("consistency", "enabled", "yes") in TRUE_STRINGS: self.consistency_enabled = True
@@ -340,23 +391,25 @@
     
     # Process output from app
     # Note: must at least swallow app output so that the process output buffer does not fill and block execution
-    if settings.has_key("verbose"): print
+    if settings.has_key("_verbose"): print
     for line in p.fromchild:
-      if settings.has_key("verbose"):
+      if settings.has_key("_verbose"):
         sys.stdout.write("%s output: %s" % (self.name, line))
         sys.stdout.flush()
     
     self.exitcode = p.wait()
     
 
-    # Non-zero exit code indicates failure, set so and return
-    if self.exitcode != 0:
-      self.success = False
-      try:
-        shutil.rmtree(rundir, True) # Clean up test directory
-      except (IOError, OSError): pass
-      return
+    # Check exit code, depending on mode setting
+    nz = self.getConfig("main", "nonzeroexit", "disallow")
+    if (nz == "disallow" and self.exitcode != 0) or (nz == "require" and self.exitcode == 0):
+        self.success = False
+        try:
+          shutil.rmtree(rundir, True) # Clean up test directory
+        except (IOError, OSError): pass
+        return
       
+      
 
     # Build dictionary of config structure
     confstruct = {}
@@ -473,16 +526,17 @@
     
     # Process output from app
     # Note: must at least swallow app output so that the process output buffer does not fill and block execution
-    if settings.has_key("verbose"): print
+    if settings.has_key("_verbose"): print
     for line in p.fromchild:
-      if settings.has_key("verbose"):
+      if settings.has_key("_verbose"):
         sys.stdout.write("%s output: %s" % (self.name, line))
         sys.stdout.flush()
     
     exitcode = p.wait()
 
-    # Non-zero exit code indicates failure, set so and return
-    if exitcode != 0:
+    # Check exit code
+    nz = self.getConfig("main", "nonzeroexit", "disallow")
+    if (nz == "disallow" and exitcode != 0) or (nz == "require" and exitcode == 0):
       try:
         shutil.rmtree(rundir, True) # Clean up test directory
       except (IOError, OSError): pass
@@ -492,26 +546,22 @@
     
     
     # Run test X times, take min value
-    times = []
+    r_times = []
+    t_times = []
     for i in range(settings["perf_repeat"]):
+      t_start = time.time()
       res_start = resource.getrusage(resource.RUSAGE_CHILDREN)
       
       # Run test app, capturing output and exitcode
       p = popen2.Popen4("cd %s; %s %s" % (rundir, self.app, self.args))
+      for line in p.fromchild: pass      
+      exitcode = p.wait()
       
-    # Process output from app
-    # Note: must at least swallow app output so that the process output buffer does not fill and block execution
-    if settings.has_key("verbose"): print
-    for line in p.fromchild:
-      if settings.has_key("verbose"):
-        sys.stdout.write("%s output: %s" % (self.name, line))
-        sys.stdout.flush()
-      
-      exitcode = p.wait()
       res_end = resource.getrusage(resource.RUSAGE_CHILDREN)
+      t_end = time.time()
   
-      # Non-zero exit code indicates failure, set so and return
-      if exitcode != 0:
+      # Check exit code
+      if (nz == "disallow" and exitcode != 0) or (nz == "require" and exitcode == 0):
         try:
           shutil.rmtree(rundir, True) # Clean up test directory
         except (IOError, OSError): pass
@@ -519,26 +569,34 @@
         self.presult = "test app returned non-zero exit code"
         return
       
-      times.append(res_end.ru_utime - res_start.ru_utime)
+      r_times.append(res_end.ru_utime - res_start.ru_utime)
+      t_times.append(t_end - t_start)
       
     
     # Load baseline results
-    baseline = 0.0
+    r_base = 0.0
+    t_base = 0.0
     basepath = os.path.join(perfdir, PERF_BASE)
     if self.has_perf_base:
       try:
         fp = open(basepath, "r")
         line = fp.readline()
-        baseline = float(line.split(',')[0].strip())
+        vals = line.split(',')
+        r_base = float(vals[0].strip())
+        t_base = float(vals[4].strip())
         fp.close()
       except (IOError):
         self.has_perf_base = False
     
 
-    tmin = min(times)
-    tmax = max(times)
-    tave = sum(times) / len(times)
-    tmed = med(times)
+    r_min = min(r_times)
+    r_max = max(r_times)
+    r_ave = sum(r_times) / len(r_times)
+    r_med = med(r_times)
+    t_min = min(t_times)
+    t_max = max(t_times)
+    t_ave = sum(t_times) / len(t_times)
+    t_med = med(t_times)
     
     # If no baseline results exist, write out results
     if not self.has_perf_base:
@@ -554,7 +612,7 @@
           return
           
         fp = open(basepath, "w")
-        fp.write("%f,%f,%f,%f\n" % (tmin, tmax, tave, tmed))
+        fp.write("%f,%f,%f,%f,%f,%f,%f,%f\n" % (r_min, r_max, r_ave, r_med, t_min, t_max, t_ave, t_med))
         fp.flush()
         fp.close()
       except (IOError):
@@ -568,18 +626,24 @@
       try:
         shutil.rmtree(rundir, True) # Clean up test directory
       except (IOError, OSError): pass
-      self.presult = "new baseline - min: %3.4f max: %3.4f ave: %3.4f med: %3.4f" % (tmin, tmax, tave, tmed)
+      self.presult = "new baseline - wall time: %3.4f user time: %3.4f" % (t_min, r_min)
       return
       
     # Compare results with baseline
-    margin = settings["perf_margin"] * baseline
-    umargin = baseline + margin
-    lmargin = baseline - margin
+    r_margin = settings["perf_user_margin"] * r_base
+    r_umargin = r_base + r_margin
+    r_lmargin = r_base - r_margin
+    t_margin = settings["perf_wall_margin"] * t_base
+    t_umargin = t_base + t_margin
+    t_lmargin = t_base - t_margin
     
-    if tmin > umargin:
+    
+    if r_min > r_umargin or t_min > t_umargin:
       self.psuccess = False
-      self.presult = "failed - base: %3.4f test: %3.4f" % (baseline, tmin)
-    elif tmin < lmargin:
+      self.presult = "failed"
+      if t_min > t_umargin: self.presult += " - wall = b: %3.4f t: %3.4f" % (t_base, t_min)
+      if r_min > r_umargin: self.presult += " - user = b: %3.4f t: %3.4f" % (r_base, r_min)
+    elif r_min < r_lmargin or t_min < t_lmargin:
       # new baseline, move old baseline and write out new results
       try:
         rev = "exported"
@@ -594,17 +658,19 @@
         shutil.move(basepath, os.path.join(perfdir, oname))
         
         fp = open(basepath, "w")
-        fp.write("%f,%f,%f,%f\n" % (tmin, tmax, tave, tmed))
+        fp.write("%f,%f,%f,%f,%f,%f,%f,%f\n" % (r_min, r_max, r_ave, r_med, t_min, t_max, t_ave, t_med))
         fp.flush()
         fp.close()
       except (IOError, OSError, shutil.Error):
         try:
           shutil.rmtree(rundir, True) # Clean up test directory
         except (IOError, OSError): pass
-        self.presult = "exceeded - base: %3.4f test: %3.4f - failed to update" % (baseline, tmin)
+        print "Warning: error updating '%s' performance baseline" % self.name
         return
-
-      self.presult = "exceeded - base: %3.4f test: %3.4f - updated baseline" % (baseline, tmin)
+        
+      self.presult = "exceeded"
+      if t_min < t_lmargin: self.presult += " - wall = b: %3.4f t: %3.4f" % (t_base, t_min)
+      if r_min < r_lmargin: self.presult += " - user = b: %3.4f t: %3.4f" % (r_base, r_min)
     
     # Clean up test directory
     try:
@@ -771,7 +837,7 @@
     else: fail += 1
 
   svndir = os.path.join(tmpdir, "_svn_tests")
-  if os.path.exists(svndir) and not settings.has_key("disable-svn"):
+  if os.path.exists(svndir) and not settings.has_key("_disable_svn"):
     print "\nAdding new expected results to the repository..."
     svn = settings["svn"]
     ecode = os.spawnlp(os.P_WAIT, svn, svn, "commit", svndir, "-m", "Adding new expected results.")
@@ -829,7 +895,7 @@
 
 # int main(string[] argv) {
 def main(argv):
-  global cfg, settings, tmpdir, CONFIGDIR
+  global settings, tmpdir, CONFIGDIR
 
   scriptdir = os.path.abspath(os.path.dirname(argv[0]))
   
@@ -843,7 +909,7 @@
   # string getConfig(string sect, string opt, string default) {
   def getConfig(sect, opt, default):
     try:
-      global cfg, settings
+      global settings
       val = cfg.get(sect, opt, False, settings)
       return val
     except:
@@ -854,6 +920,7 @@
   # Setup Global Settings
   #  - settings that begin with an underscore (i.e. _testrunner_name) are for internal use and are not intended for
   #    use as variables in test_list configuration files
+  settings["app"] = "" # App is defined later, since values like builddir can be modified by cmdline settings
   settings["builddir"] = getConfig("testrunner", "builddir", "build")
   settings["mode"] = getConfig("testrunner", "mode", "local")
   settings["svn"] = getConfig("testrunner", "svn", "svn")
@@ -863,7 +930,8 @@
 
   settings["_testrunner_name"] = "testrunner.py"
   
-  settings["perf_margin"] = float(getConfig("performance","maring",.05))
+  settings["perf_user_margin"] = float(getConfig("performance","usermargin",.05))
+  settings["perf_wall_margin"] = float(getConfig("performance","wallmargin",.05))
   settings["perf_repeat"] = int(getConfig("performance","repeat",5))
 
   settings["cpus"] = 1
@@ -871,9 +939,9 @@
   # Process Command Line Arguments
   try:
     opts, args = getopt.getopt(argv[1:], "fhj:lm:ps:v", \
-      ["builddir=", "disable-svn", "force-perf", "help", "list-tests", "long-tests", "mode=", "reset-perf-base", \
-       "run-perf-tests", "show-diff", "skip-tests", "svnmetadir=", "svn=", "svnversion=", "testdir=", "verbose", \
-       "version", "-testrunner-name="])
+      ["builddir=", "disable-svn", "force-perf", "help", "help-test-cfg", "list-tests", "long-tests", "mode=", \
+       "reset-perf-base", "run-perf-tests", "show-diff", "skip-tests", "svnmetadir=", "svn=", "svnversion=", "testdir=", \
+       "verbose", "version", "-testrunner-name="])
   except getopt.GetoptError:
     usage()
     return -1
@@ -884,6 +952,7 @@
   opt_long = False
   opt_runperf = False
   opt_showhelp = False
+  opt_showtestcfg = False
   opt_showversion = False
   
   # Process Supplied Options
@@ -892,12 +961,14 @@
       opt_showhelp = True
     elif opt == "--builddir":
       settings["builddir"] = arg
+    elif opt == "--help-test-cfg":
+      opt_showtestcfg = True
     elif opt == "-j":
       cpus = int(arg)
       if cpus < 1: cpus = 1
       settings["cpus"] = cpus
     elif opt == "--disable-svn":
-      settings["disable-svn"] = ""
+      settings["_disable_svn"] = ""
     elif opt in ("-f", "--force-perf"):
       opt_forceperf = True
     elif opt in ("-l", "--list-tests"):
@@ -907,7 +978,7 @@
     elif opt in ("-m", "--mode"):
       settings["mode"] = arg
     elif opt == "--reset-perf-base":
-      settings["reset-perf-base"] = ""
+      settings["_reset_perf_base"] = ""
     elif opt in ("-p", "--run-perf-tests"):
       opt_runperf = True
     elif opt == "--show-diff":
@@ -923,48 +994,58 @@
     elif opt == "--testdir":
       settings["testdir"] = arg
     elif opt in ("-v", "--verbose"):
-      settings["verbose"] = ""
+      settings["_verbose"] = ""
     elif opt == "--version":
       opt_showversion = True
     elif opt == "---testrunner-name":
       settings["_testrunner_name"] = arg
       
   # Show help or version and exit, if requested to do so
-  if opt_showhelp:
-    usage()
+  if opt_showhelp or opt_showtestcfg or opt_showversion:
+    if opt_showversion: version()
+    if opt_showhelp: usage()
+    if opt_showtestcfg: sample_test_list()
     return 0
-  elif opt_showversion:
-    version()
-    return 0
   
-  
-  # Load the app to test, check for its existance
-  app = getConfig("main", "app", "")
-  if app == "":
-    print "Warning: No default test app configured"
-  else:
-    app = os.path.abspath(app)
-    if not os.path.exists(app) and not os.path.isfile(app):
-      print "Error: invalid test app"
-      return -1
-  settings['app'] = app
-  
 
+  # Get the path to the test directory
   testdir = os.path.abspath(getConfig("main", "testdir", "."))  
   settings["testdir"] = testdir
 
+
+  # Re-read Configuration File with filled settings
+  cfg = ConfigParser.ConfigParser(settings)
+  cfg.read([os.path.join(scriptdir, "testrunner.cfg")])
+
+
+  # Load the default app to test
+  try:
+    settings["app"] = cfg.get("main", "app")
+  except:
+    print "Warning: No default app configured"
   
+  
   # Load in all tests
   print "Reading Test Configurations..."
   tests = []
   
-  dlist = args
-  if len(dlist) == 0: dlist = dircache.listdir(testdir)
+  prefix_filter = ["."]
+  dlist = []
+  if len(args) != 0:
+    for d in dircache.listdir(testdir):
+      for a in args:
+        if fnmatch.fnmatch(d, a):
+          dlist.append(d)
+          break
+    
+  else:
+    dlist = dircache.listdir(testdir)
+    prefix_filter.append("_")
   
   dircache.annotate(testdir, dlist)
   for d in dlist:
     # Directories with preceeding underscore or period are ignored, as are files
-    if d[0] == "_" or d[0] == "." or d[len(d) - 1] != "/": continue
+    if d[0] in prefix_filter or d[len(d) - 1] != "/": continue
     
     name = d[:len(d) - 1]
     curtdir = os.path.join(testdir, name)

Modified: development/tests/default_classic_100u/test_list
===================================================================
--- development/tests/default_classic_100u/test_list	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/tests/default_classic_100u/test_list	2007-04-08 23:07:09 UTC (rev 1473)
@@ -1,11 +1,35 @@
+;--- Begin Test Configuration File (test_list) ---
 [main]
-args = -s 100
+args = -s 100            ; Command line arguments to pass to the application
+app = %(app)s            ; Application path to test
+nonzeroexit = disallow   ; Exit code handling (disallow, allow, or require)
+                         ;  disallow - treat non-zero exit codes as failures
+                         ;  allow - all exit codes are acceptable
+                         ;  require - treat zero exit codes as failures, useful
+                         ;            for creating tests for app error checking
+createdby = David Bryson ; Who created the test
+email = brysonda at egr.msu.edu ; Email address for the test's creator
 
 [consistency]
-enabled = yes
-long = no
+enabled = yes            ; Is this test a consistency test?
+long = no                ; Is this test a long test?
 
 [performance]
-enabled = no
-long = no
+enabled = no             ; Is this test a performance test?
+long = no                ; Is this test a long test?
 
+; The following variables can be used in constructing setting values by calling
+; them with %(variable_name)s.  For example see 'app' above.
+;
+; app 
+; builddir 
+; cpus 
+; mode 
+; perf_repeat 
+; perf_user_margin 
+; perf_wall_margin 
+; svn 
+; svnmetadir 
+; svnversion 
+; testdir 
+;--- End Test Configuration File ---

Modified: development/tests/default_transsmt_100u/test_list
===================================================================
--- development/tests/default_transsmt_100u/test_list	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/tests/default_transsmt_100u/test_list	2007-04-08 23:07:09 UTC (rev 1473)
@@ -1,11 +1,35 @@
+;--- Begin Test Configuration File (test_list) ---
 [main]
-args = -s 100
+args = -s 100            ; Command line arguments to pass to the application
+app = %(app)s            ; Application path to test
+nonzeroexit = disallow   ; Exit code handling (disallow, allow, or require)
+                         ;  disallow - treat non-zero exit codes as failures
+                         ;  allow - all exit codes are acceptable
+                         ;  require - treat zero exit codes as failures, useful
+                         ;            for creating tests for app error checking
+createdby = David Bryson ; Who created the test
+email = brysonda at egr.msu.edu ; Email address for the test's creator
 
 [consistency]
-enabled = yes
-long = no
+enabled = yes            ; Is this test a consistency test?
+long = no                ; Is this test a long test?
 
 [performance]
-enabled = no
-long = no
+enabled = no             ; Is this test a performance test?
+long = no                ; Is this test a long test?
 
+; The following variables can be used in constructing setting values by calling
+; them with %(variable_name)s.  For example see 'app' above.
+;
+; app 
+; builddir 
+; cpus 
+; mode 
+; perf_repeat 
+; perf_user_margin 
+; perf_wall_margin 
+; svn 
+; svnmetadir 
+; svnversion 
+; testdir 
+;--- End Test Configuration File ---

Modified: development/tests/midrun_classsic_30u/test_list
===================================================================
--- development/tests/midrun_classsic_30u/test_list	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/tests/midrun_classsic_30u/test_list	2007-04-08 23:07:09 UTC (rev 1473)
@@ -1,11 +1,35 @@
+;--- Begin Test Configuration File (test_list) ---
 [main]
-args = -s 100
+args = -s 100            ; Command line arguments to pass to the application
+app = %(app)s            ; Application path to test
+nonzeroexit = disallow   ; Exit code handling (disallow, allow, or require)
+                         ;  disallow - treat non-zero exit codes as failures
+                         ;  allow - all exit codes are acceptable
+                         ;  require - treat zero exit codes as failures, useful
+                         ;            for creating tests for app error checking
+createdby = David Bryson ; Who created the test
+email = brysonda at egr.msu.edu ; Email address for the test's creator
 
 [consistency]
-enabled = yes
-long = no
+enabled = yes            ; Is this test a consistency test?
+long = no                ; Is this test a long test?
 
 [performance]
-enabled = no
-long = no
+enabled = no             ; Is this test a performance test?
+long = no                ; Is this test a long test?
 
+; The following variables can be used in constructing setting values by calling
+; them with %(variable_name)s.  For example see 'app' above.
+;
+; app 
+; builddir 
+; cpus 
+; mode 
+; perf_repeat 
+; perf_user_margin 
+; perf_wall_margin 
+; svn 
+; svnmetadir 
+; svnversion 
+; testdir 
+;--- End Test Configuration File ---

Modified: development/tests/task_sort_analyze/test_list
===================================================================
--- development/tests/task_sort_analyze/test_list	2007-04-08 23:00:25 UTC (rev 1472)
+++ development/tests/task_sort_analyze/test_list	2007-04-08 23:07:09 UTC (rev 1473)
@@ -1,11 +1,35 @@
+;--- Begin Test Configuration File (test_list) ---
 [main]
-args = -a
+args = -a                ; Command line arguments to pass to the application
+app = %(app)s            ; Application path to test
+nonzeroexit = disallow   ; Exit code handling (disallow, allow, or require)
+                         ;  disallow - treat non-zero exit codes as failures
+                         ;  allow - all exit codes are acceptable
+                         ;  require - treat zero exit codes as failures, useful
+                         ;            for creating tests for app error checking
+createdby = David Bryson ; Who created the test
+email = brysonda at egr.msu.edu ; Email address for the test's creator
 
 [consistency]
-enabled = yes
-long = no
+enabled = yes            ; Is this test a consistency test?
+long = no                ; Is this test a long test?
 
 [performance]
-enabled = no
-long = no
+enabled = no             ; Is this test a performance test?
+long = no                ; Is this test a long test?
 
+; The following variables can be used in constructing setting values by calling
+; them with %(variable_name)s.  For example see 'app' above.
+;
+; app 
+; builddir 
+; cpus 
+; mode 
+; perf_repeat 
+; perf_user_margin 
+; perf_wall_margin 
+; svn 
+; svnmetadir 
+; svnversion 
+; testdir 
+;--- End Test Configuration File ---




More information about the Avida-cvs mailing list