# HG changeset patch # User Gustavo J. A. M. Carneiro # Date 1227115027 0 # Node ID 8e757a83fb366488218706f802fb786db6fc73a3 # Parent 827884bf1356e09c78ae2b79c571cc11b5102af9 Add a --with-regression-traces configure option, to allow using externally supplied regression traces instead of fetching them from the network. diff -r 827884bf1356 -r 8e757a83fb36 regression.py --- a/regression.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression.py Wed Nov 19 17:17:07 2008 +0000 @@ -42,18 +42,17 @@ ### Regression testing class Regression(object): - def __init__(self, testdir): + def __init__(self, testdir, reference_traces): self.testdir = testdir + self.reference_traces = reference_traces self.env = Params.g_build.env_of_name('default') - def run_test(self, verbose, generate, refDirName, testName, arguments=[], pyscript=None, refTestName=None): + def run_test(self, verbose, generate, testName, arguments=[], pyscript=None, refTestName=None): """ @param verbose: enable verbose execution @param generate: generate new traces instead of comparing with the reference - @param refDirName: name of the base directory containing reference traces - @param testName: name of the test @arguments: list of extra parameters to pass to the program to be tested @@ -70,11 +69,11 @@ raise TypeError if refTestName is None: - refTestDirName = os.path.join(refDirName, (testName + ".ref")) + refTestDirName = os.path.join(self.reference_traces, (testName + ".ref")) else: - refTestDirName = os.path.join(refDirName, refTestName) + refTestDirName = os.path.join(self.reference_traces, refTestName) - if not os.path.exists(refDirName): + if not os.path.exists(self.reference_traces): print"No reference trace repository" return 1 @@ -90,7 +89,7 @@ tmpl = tmpl + " " + arg wutils.run_program(testName, tmpl) else: - argv = [self.env['PYTHON'], os.path.join('..', '..', '..', *os.path.split(pyscript))] + arguments + argv = [self.env['PYTHON'], os.path.join(Params.g_cwd_launch, *os.path.split(pyscript))] + arguments before = os.getcwd() os.chdir(refTestDirName) try: @@ -170,16 +169,27 @@ tests.sort() return tests -def run_regression(): - """Execute regression tests.""" +def run_regression(reference_traces): + """Execute regression tests. Called with cwd set to the 'regression' subdir of ns-3. + + @param reference_traces: reference traces directory, or None for default. + + """ testdir = "tests" if not os.path.exists(testdir): print "Tests directory does not exist" sys.exit(3) + + dir_name = (wutils.APPNAME + '-' + wutils.VERSION + REGRESSION_SUFFIX) + if reference_traces is None: + reference_traces = dir_name + no_net = False + else: + no_net = True sys.path.append(testdir) - sys.modules['tracediff'] = Regression(testdir) + sys.modules['tracediff'] = Regression(testdir, reference_traces) if Params.g_options.regression_tests: tests = Params.g_options.regression_tests.split(',') @@ -187,36 +197,36 @@ tests = _find_tests(testdir) print "========== Running Regression Tests ==========" - dir_name = wutils.APPNAME + '-' + wutils.VERSION + REGRESSION_SUFFIX env = Params.g_build.env_of_name('default') - if env['MERCURIAL']: - print "Synchronizing reference traces using Mercurial." - if not os.path.exists(dir_name): - print "Cloning " + REGRESSION_TRACES_REPO + dir_name + " from repo." - argv = ["hg", "clone", REGRESSION_TRACES_REPO + dir_name, dir_name] - rv = subprocess.Popen(argv).wait() + if not no_net: + if env['MERCURIAL']: + print "Synchronizing reference traces using Mercurial." + if not os.path.exists(reference_traces): + print "Cloning " + REGRESSION_TRACES_REPO + dir_name + " from repo." + argv = ["hg", "clone", REGRESSION_TRACES_REPO + dir_name, reference_traces] + rv = subprocess.Popen(argv).wait() + else: + _dir = os.getcwd() + os.chdir(reference_traces) + try: + print "Pulling " + REGRESSION_TRACES_REPO + dir_name + " from repo." + result = subprocess.Popen(["hg", "-q", "pull", REGRESSION_TRACES_REPO + dir_name]).wait() + if not result: + result = subprocess.Popen(["hg", "-q", "update"]).wait() + finally: + os.chdir("..") + if result: + Params.fatal("Synchronizing reference traces using Mercurial failed.") else: - _dir = os.getcwd() - os.chdir(dir_name) - try: - print "Pulling " + REGRESSION_TRACES_REPO + dir_name + " from repo." - result = subprocess.Popen(["hg", "-q", "pull", REGRESSION_TRACES_REPO + dir_name]).wait() - if not result: - result = subprocess.Popen(["hg", "-q", "update"]).wait() - finally: - os.chdir("..") - if result: - Params.fatal("Synchronizing reference traces using Mercurial failed.") - else: - if not os.path.exists(dir_name): - traceball = dir_name + wutils.TRACEBALL_SUFFIX - print "Retrieving " + traceball + " from web." - urllib.urlretrieve(REGRESSION_TRACES_URL + traceball, traceball) - os.system("tar -xjf %s -C .." % (traceball)) - print "Done." + if not os.path.exists(reference_traces): + traceball = dir_name + wutils.TRACEBALL_SUFFIX + print "Retrieving " + traceball + " from web." + urllib.urlretrieve(REGRESSION_TRACES_URL + traceball, traceball) + os.system("tar -xjf %s -C .." % (traceball)) + print "Done." - if not os.path.exists(dir_name): - print "Reference traces directory (%s) does not exist" % dir_name + if not os.path.exists(reference_traces): + print "Reference traces directory (%s) does not exist" % reference_traces return 3 bad = [] @@ -254,9 +264,7 @@ else: os.mkdir("traces") - dir_name = wutils.APPNAME + '-' + wutils.VERSION + REGRESSION_SUFFIX - mod = __import__(test, globals(), locals(), []) return mod.run(verbose=(Params.g_options.verbose > 0), - generate=Params.g_options.regression_generate, - refDirName=dir_name) + generate=Params.g_options.regression_generate) + diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-csma-bridge.py --- a/regression/tests/test-csma-bridge.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-csma-bridge.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,10 +6,10 @@ import sys import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" if tracediff.env['ENABLE_PYTHON_BINDINGS']: - return tracediff.run_test(verbose, generate, refDirName, + return tracediff.run_test(verbose, generate, "csma-bridge", pyscript=os.path.join('examples', 'csma-bridge.py')) else: print >> sys.stderr, "Skipping csma-bridge: Python bindings not available." diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-csma-broadcast.py --- a/regression/tests/test-csma-broadcast.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-csma-broadcast.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,7 +6,7 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, "csma-broadcast") + return tracediff.run_test(verbose, generate, "csma-broadcast") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-csma-multicast.py --- a/regression/tests/test-csma-multicast.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-csma-multicast.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,7 +6,7 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, "csma-multicast") + return tracediff.run_test(verbose, generate, "csma-multicast") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-csma-one-subnet.py --- a/regression/tests/test-csma-one-subnet.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-csma-one-subnet.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,7 +6,7 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, "csma-one-subnet") + return tracediff.run_test(verbose, generate, "csma-one-subnet") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-csma-packet-socket.py --- a/regression/tests/test-csma-packet-socket.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-csma-packet-socket.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,8 +6,8 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, + return tracediff.run_test(verbose, generate, "csma-packet-socket") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-csma-ping.py --- a/regression/tests/test-csma-ping.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-csma-ping.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,7 +6,7 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, "csma-ping") + return tracediff.run_test(verbose, generate, "csma-ping") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-csma-raw-ip-socket.py --- a/regression/tests/test-csma-raw-ip-socket.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-csma-raw-ip-socket.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,7 +6,7 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, "csma-raw-ip-socket") + return tracediff.run_test(verbose, generate, "csma-raw-ip-socket") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-csma-star.py --- a/regression/tests/test-csma-star.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-csma-star.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,7 +6,7 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, "csma-star") + return tracediff.run_test(verbose, generate, "csma-star") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-realtime-udp-echo.py --- a/regression/tests/test-realtime-udp-echo.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-realtime-udp-echo.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,7 +6,7 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, "realtime-udp-echo") + return tracediff.run_test(verbose, generate, "realtime-udp-echo") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-simple-error-model.py --- a/regression/tests/test-simple-error-model.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-simple-error-model.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,8 +6,8 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, + return tracediff.run_test(verbose, generate, "simple-error-model") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-simple-global-routing.py --- a/regression/tests/test-simple-global-routing.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-simple-global-routing.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,8 +6,8 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, + return tracediff.run_test(verbose, generate, "simple-global-routing") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-simple-point-to-point-olsr.py --- a/regression/tests/test-simple-point-to-point-olsr.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-simple-point-to-point-olsr.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,8 +6,8 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, + return tracediff.run_test(verbose, generate, "simple-point-to-point-olsr") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-tcp-large-transfer.py --- a/regression/tests/test-tcp-large-transfer.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-tcp-large-transfer.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,8 +6,8 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, + return tracediff.run_test(verbose, generate, "tcp-large-transfer") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-tcp-nsc-lfn.py --- a/regression/tests/test-tcp-nsc-lfn.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-tcp-nsc-lfn.py Wed Nov 19 17:17:07 2008 +0000 @@ -9,7 +9,7 @@ import platform -def run(verbose, generate, refDirName): +def run(verbose, generate): """Run a Network Simulation Cradle test involving two TCP streams.""" if not tracediff.env['ENABLE_NSC']: @@ -29,5 +29,5 @@ # string might not be the best idea? raise "Unknown architecture, not 64 or 32 bit?" - return tracediff.run_test(verbose, generate, refDirName, + return tracediff.run_test(verbose, generate, testName, arguments=arguments, refTestName=traceDirName) diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-udp-echo.py --- a/regression/tests/test-udp-echo.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-udp-echo.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,7 +6,7 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" #print tracediff.env - return tracediff.run_test(verbose, generate, refDirName, "udp-echo") + return tracediff.run_test(verbose, generate, "udp-echo") diff -r 827884bf1356 -r 8e757a83fb36 regression/tests/test-wifi-wired-bridging.py --- a/regression/tests/test-wifi-wired-bridging.py Tue Nov 18 15:12:12 2008 +0000 +++ b/regression/tests/test-wifi-wired-bridging.py Wed Nov 19 17:17:07 2008 +0000 @@ -6,7 +6,7 @@ import shutil import tracediff -def run(verbose, generate, refDirName): +def run(verbose, generate): """Execute a test.""" - return tracediff.run_test(verbose, generate, refDirName, "wifi-wired-bridging", ["--SendIp=0"]) + return tracediff.run_test(verbose, generate, "wifi-wired-bridging", ["--SendIp=0"]) diff -r 827884bf1356 -r 8e757a83fb36 wscript --- a/wscript Tue Nov 18 15:12:12 2008 +0000 +++ b/wscript Wed Nov 19 17:17:07 2008 +0000 @@ -143,6 +143,10 @@ help=('Use sudo to setup suid bits on ns3 executables.'), dest='enable_sudo', action='store_true', default=False) + opt.add_option('--with-regression-traces', + help=('Path to the regression reference traces directory'), + default=None, + dest='regression_traces', type="string") # options provided in a script in a subdirectory named "src" opt.sub_options('src') @@ -193,6 +197,11 @@ variant_env['INCLUDEDIR'] = os.path.join(variant_env['PREFIX'], 'include') + if Params.g_options.regression_traces is not None: + variant_env['REGRESSION_TRACES'] = os.path.join("..", Params.g_options.regression_traces) + else: + variant_env['REGRESSION_TRACES'] = None + if Params.g_options.enable_gcov: variant_name += '-gcov' variant_env.append_value('CCFLAGS', '-fprofile-arcs') @@ -463,10 +472,14 @@ if Params.g_options.regression or Params.g_options.regression_generate: if not env['DIFF']: Params.fatal("Cannot run regression tests: the 'diff' program is not installed.") + _dir = os.getcwd() os.chdir("regression") + regression_traces = env['REGRESSION_TRACES'] + if not regression_traces: + regression_traces = None try: - regression.run_regression() + regression.run_regression(regression_traces) finally: os.chdir(_dir)