# HG changeset patch # User Craig Dowell # Date 1206512244 25200 # Node ID 7689461231acfe08de88ca56ac66767e7cc6425b # Parent 45f6c609e22cc72efb1683dbab0bf213f3f598df start of regression tests diff -r 45f6c609e22c -r 7689461231ac regression/regression.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/regression/regression.py Tue Mar 25 23:17:24 2008 -0700 @@ -0,0 +1,123 @@ +#! /usr/bin/env python +# regression.py adapted from python language regression scripts. + +"""Regression test. + +This will find all modules whose name is "test_*" in the tests +directory, and run them. + +Command line options: + +-v: verbose -- run tests in verbose mode with output to stdout +-g: generate -- write the output file for a test instead of comparing it + +If non-option arguments are present, they are names for tests to run. +If no test names are given, all tests are run. + +""" + +import sys +import os +import getopt + +verbose = 0 +generate = 0 + +def main(tests = None, testdir = None): + """Execute regression tests. + + Arguments: + tests -- a list of strings containing test names (optional) + testdir -- the directory in which to look for tests (optional) + """ + + global verbose + global generate + + try: + opts, args = getopt.getopt(sys.argv[1:], 'vg') + except getopt.error, msg: + print msg + print __doc__ + return 2 + + for o, a in opts: + if o == '-v': verbose = 1 + if o == '-g': generate = 1 + + if not os.path.exists('./traces'): + os.mkdir('./traces') + + bad = [] + + if not testdir: + testdir = os.path.join(os.curdir, "tests") + + if not os.path.exists(testdir): + print "Tests directory does not exist" + return 3 + + if verbose: + print "tests directory: ", testdir + + sys.path.append(testdir) + + for i in range(len(args)): + if args[i][-3:] == '.py': + args[i] = args[i][:-3] + + if not tests: + tests = args + + if not tests: + tests = findtests(testdir) + + for test in tests: + if verbose: + print "main(): running test", test + result = runtest(test) + if result == 0: + print "PASS ", test + else: + bad.append(test) + print "FAIL ", test + + return len(bad) > 0 + +def findtests(testdir): + """Return a list of test modules in the test directory + + Arguments: + testdir -- the directory to look in for tests + """ + if verbose: + print "findtests(", testdir, ")" + if verbose: + print "findtests(): look in ", testdir + + names = os.listdir(testdir) + if verbose: + print "findtests(): found ", names + tests = [] + for name in names: + if name[:5] == "test_" and name[-3:] == ".py": + testname = name[:-3] + tests.append(testname) + tests.sort() + if verbose: + print "findtests(): found tests ", tests + return tests + +def runtest(test): + """Run a single test. + + Arguments: + test -- the name of the test + """ + if verbose: + print "runtest(): run ", test + mod = __import__(test, globals(), locals(), []) + return mod.run(verbose, generate) + +if __name__ == '__main__': + sys.exit(main()) diff -r 45f6c609e22c -r 7689461231ac regression/tests/test_csma_one_subnet.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/regression/tests/test_csma_one_subnet.py Tue Mar 25 23:17:24 2008 -0700 @@ -0,0 +1,10 @@ +#! /usr/bin/env python + +"""Regression test csma-one-subnet.""" + +import os + +def run(verbose, generate): + """Execute a test.""" + os.system("./waf --cwd regression/traces --run csma-one-subnet") + return 0 diff -r 45f6c609e22c -r 7689461231ac regression/waf --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/regression/waf Tue Mar 25 23:17:24 2008 -0700 @@ -0,0 +1,1 @@ +exec "`dirname "$0"`"/../waf "$@" \ No newline at end of file diff -r 45f6c609e22c -r 7689461231ac wscript --- a/wscript Tue Mar 25 14:17:35 2008 -0700 +++ b/wscript Tue Mar 25 23:17:24 2008 -0700 @@ -20,7 +20,6 @@ srcdir = '.' blddir = 'build' - def dist_hook(): shutil.rmtree("doc/html", True) shutil.rmtree("doc/latex", True) @@ -48,6 +47,11 @@ # options provided by the modules opt.tool_options('compiler_cxx') + opt.add_option('--cwd', + help=('Set the working directory for a program.'), + action="store", type="string", default=None, + dest='cwd_launch') + opt.add_option('--enable-gcov', help=('Enable code coverage analysis.' ' WARNING: this option only has effect ' @@ -164,7 +168,7 @@ def build(bld): Params.g_cwd_launch = Params.g_build.m_curdirnode.abspath() - + bld.create_ns3_program = types.MethodType(create_ns3_program, bld) variant_name = bld.env_of_name('default')['NS3_ACTIVE_VARIANT'] @@ -378,9 +382,11 @@ execvec = shlex.split(command_template % (program_node.abspath(env),)) - former_cwd = os.getcwd() - os.chdir(Params.g_cwd_launch) + if (Params.g_options.cwd_launch): + os.chdir(Params.g_options.cwd_launch) + else: + os.chdir(Params.g_cwd_launch) try: retval = _run_argv(execvec) finally: @@ -416,7 +422,6 @@ env = Params.g_build.env_of_name('default') _run_argv([shell], {'NS3_MODULE_PATH': os.pathsep.join(env['NS3_MODULE_PATH'])}) - def doxygen(): if not os.path.exists('doc/introspected-doxygen.h'): Params.warning("doc/introspected-doxygen.h does not exist; run waf check to generate it.")