Add a --with-regression-traces configure option, to allow using externally supplied regression traces instead of fetching them from the network.
--- 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)
+
--- 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."
--- 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")
--- 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")
--- 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")
--- 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")
--- 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")
--- 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")
--- 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")
--- 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")
--- 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")
--- 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")
--- 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")
--- 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")
--- 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)
--- 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")
--- 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"])
--- 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)