1.1 --- a/regression/regression.py Mon Mar 31 18:20:33 2008 -0700
1.2 +++ b/regression/regression.py Tue Apr 01 16:30:08 2008 -0700
1.3 @@ -8,7 +8,7 @@
1.4
1.5 Command line options:
1.6
1.7 --v: verbose -- run tests in verbose mode with output to stdout
1.8 +-v: verbose -- run tests in verbose mode (print diff output)
1.9 -g: generate -- write the output file for a test instead of comparing it
1.10
1.11 If non-option arguments are present, they are names for tests to run.
1.12 @@ -16,13 +16,41 @@
1.13
1.14 """
1.15
1.16 +import getopt
1.17 import sys
1.18 import os
1.19 -import getopt
1.20 +import urllib
1.21 +import subprocess
1.22
1.23 verbose = 0
1.24 generate = 0
1.25
1.26 +#
1.27 +# The directory in which the tarball of the reference traces lives. This is
1.28 +# used if Mercurial is not on the system.
1.29 +#
1.30 +refUrl = "http://www.nsnam.org/releases/"
1.31 +
1.32 +#
1.33 +# The name of the tarball to find the reference traces in if there is no
1.34 +# mercurial on the system. It is expected to be created using tar -cjf and
1.35 +# will be extracted using tar -xjf
1.36 +#
1.37 +refTarName = "ns-3-ref-traces.tar.bz2"
1.38 +
1.39 +#
1.40 +# The path to the Mercurial repository used to find the reference traces if
1.41 +# we find "hg" on the system. We expect that the repository will be named
1.42 +# identically to refDirName below
1.43 +#
1.44 +refRepo = "http://code.nsnam.org/craigdo/"
1.45 +
1.46 +#
1.47 +# The local directory name into which the reference traces will go in either
1.48 +# case (net or hg).
1.49 +#
1.50 +refDirName = "ns-3-ref-traces"
1.51 +
1.52 def main(tests = None, testdir = None):
1.53 """Execute regression tests.
1.54
1.55 @@ -33,6 +61,11 @@
1.56
1.57 global verbose
1.58 global generate
1.59 + global refUrl
1.60 + global refTarName
1.61 + global refRepo
1.62 + global refRepoName
1.63 + global refDirName
1.64
1.65 try:
1.66 opts, args = getopt.getopt(sys.argv[1:], 'vg')
1.67 @@ -45,28 +78,33 @@
1.68 if o == '-v': verbose = 1
1.69 if o == '-g': generate = 1
1.70
1.71 - userName = "craigdo/"
1.72 - repoName = "ns-3-ref-traces/"
1.73 -
1.74 print "========== Running Unit Tests =========="
1.75 os.system("./waf check")
1.76
1.77 print "========== Running Regression Tests =========="
1.78 - print "Synchronizing reference traces."
1.79 -
1.80 - if not os.path.exists(repoName):
1.81 - cloneCmd = "hg clone http://code.nsnam.org/" + userName + repoName + " >& /dev/null"
1.82 - os.system(cloneCmd)
1.83 + if os.system("hg version > /dev/null 2>&1") == 0:
1.84 + print "Synchronizing reference traces using Mercurial."
1.85 + if not os.path.exists(refDirName):
1.86 + os.system("hg clone " + refRepo + refDirName +
1.87 + " > /dev/null 2>&1")
1.88 + else:
1.89 + os.chdir(refDirName)
1.90 + os.system("hg pull " + refRepo + refDirName +
1.91 + " > /dev/null 2>&1")
1.92 + os.chdir("..")
1.93 else:
1.94 - os.chdir(repoName)
1.95 - pullCmd = "hg pull http://code.nsnam.org/" + userName + repoName + " >& /dev/null"
1.96 - os.system(pullCmd)
1.97 - os.chdir("..")
1.98 + print "Synchronizing reference traces from web."
1.99 + urllib.urlretrieve(refUrl + refTarName, refTarName)
1.100 + os.system("tar -xjf " + refTarName)
1.101
1.102 print "Done."
1.103
1.104 bad = []
1.105
1.106 + if not os.path.exists(refDirName):
1.107 + print "Reference traces directory does not exist"
1.108 + return 3
1.109 +
1.110 if not testdir:
1.111 testdir = os.path.join(os.curdir, "tests")
1.112
1.113 @@ -87,9 +125,7 @@
1.114 tests = findtests(testdir)
1.115
1.116 for test in tests:
1.117 - if verbose:
1.118 - print "Running test " + test
1.119 - result = runtest(test)
1.120 + result = run_test(test)
1.121 if result == 0:
1.122 if generate:
1.123 print "GENERATE" + test
1.124 @@ -108,8 +144,6 @@
1.125 testdir -- the directory to look in for tests
1.126 """
1.127 names = os.listdir(testdir)
1.128 - if verbose:
1.129 - print "findtests(): found ", names
1.130 tests = []
1.131 for name in names:
1.132 if name[:5] == "test-" and name[-3:] == ".py":
1.133 @@ -118,7 +152,7 @@
1.134 tests.sort()
1.135 return tests
1.136
1.137 -def runtest(test):
1.138 +def run_test(test):
1.139 """Run a single test.
1.140
1.141 Arguments:
1.142 @@ -135,7 +169,7 @@
1.143 os.mkdir("traces")
1.144
1.145 mod = __import__(test, globals(), locals(), [])
1.146 - return mod.run(verbose, generate)
1.147 + return mod.run(verbose, generate, refDirName)
1.148
1.149 if __name__ == '__main__':
1.150 sys.exit(main())
2.1 --- a/regression/tests/test-csma-broadcast.py Mon Mar 31 18:20:33 2008 -0700
2.2 +++ b/regression/tests/test-csma-broadcast.py Tue Apr 01 16:30:08 2008 -0700
2.3 @@ -4,38 +4,9 @@
2.4
2.5 import os
2.6 import shutil
2.7 +import tracediff
2.8
2.9 -def run(verbose, generate):
2.10 +def run(verbose, generate, refDirName):
2.11 """Execute a test."""
2.12
2.13 - testName = "csma-broadcast"
2.14 - repoName = "ns-3-ref-traces/"
2.15 - refDirName = testName + ".ref"
2.16 -
2.17 - if not os.path.exists(repoName):
2.18 - print"No reference trace repository"
2.19 - return 1
2.20 -
2.21 - if generate:
2.22 - if not os.path.exists(repoName + refDirName):
2.23 - print "creating new " + repoName + refDirName
2.24 - os.mkdir(repoName + refDirName)
2.25 -
2.26 - os.system("./waf --cwd regression/" + repoName + refDirName +
2.27 - " --run " + testName + " >& /dev/null")
2.28 -
2.29 - print "Remember to commit " + repoName + refDirName
2.30 - return 0
2.31 - else:
2.32 - if not os.path.exists(repoName + refDirName):
2.33 - print "Cannot locate reference traces"
2.34 - return 1
2.35 -
2.36 - shutil.rmtree("traces");
2.37 - os.mkdir("traces")
2.38 -
2.39 - os.system("./waf --cwd regression/traces --run " +
2.40 - testName + " >& /dev/null")
2.41 -
2.42 - return os.system("diff -q traces " + repoName + refDirName +
2.43 - " >& /dev/null")
2.44 + return tracediff.run_test(verbose, generate, refDirName, "csma-broadcast")
3.1 --- a/regression/tests/test-csma-multicast.py Mon Mar 31 18:20:33 2008 -0700
3.2 +++ b/regression/tests/test-csma-multicast.py Tue Apr 01 16:30:08 2008 -0700
3.3 @@ -4,38 +4,9 @@
3.4
3.5 import os
3.6 import shutil
3.7 +import tracediff
3.8
3.9 -def run(verbose, generate):
3.10 +def run(verbose, generate, refDirName):
3.11 """Execute a test."""
3.12
3.13 - testName = "csma-multicast"
3.14 - repoName = "ns-3-ref-traces/"
3.15 - refDirName = testName + ".ref"
3.16 -
3.17 - if not os.path.exists(repoName):
3.18 - print"No reference trace repository"
3.19 - return 1
3.20 -
3.21 - if generate:
3.22 - if not os.path.exists(repoName + refDirName):
3.23 - print "creating new " + repoName + refDirName
3.24 - os.mkdir(repoName + refDirName)
3.25 -
3.26 - os.system("./waf --cwd regression/" + repoName + refDirName +
3.27 - " --run " + testName + " >& /dev/null")
3.28 -
3.29 - print "Remember to commit " + repoName + refDirName
3.30 - return 0
3.31 - else:
3.32 - if not os.path.exists(repoName + refDirName):
3.33 - print "Cannot locate reference traces"
3.34 - return 1
3.35 -
3.36 - shutil.rmtree("traces");
3.37 - os.mkdir("traces")
3.38 -
3.39 - os.system("./waf --cwd regression/traces --run " +
3.40 - testName + " >& /dev/null")
3.41 -
3.42 - return os.system("diff -q traces " + repoName + refDirName +
3.43 - " >& /dev/null")
3.44 + return tracediff.run_test(verbose, generate, refDirName, "csma-multicast")
4.1 --- a/regression/tests/test-csma-one-subnet.py Mon Mar 31 18:20:33 2008 -0700
4.2 +++ b/regression/tests/test-csma-one-subnet.py Tue Apr 01 16:30:08 2008 -0700
4.3 @@ -4,38 +4,9 @@
4.4
4.5 import os
4.6 import shutil
4.7 +import tracediff
4.8
4.9 -def run(verbose, generate):
4.10 +def run(verbose, generate, refDirName):
4.11 """Execute a test."""
4.12
4.13 - testName = "csma-one-subnet"
4.14 - repoName = "ns-3-ref-traces/"
4.15 - refDirName = testName + ".ref"
4.16 -
4.17 - if not os.path.exists(repoName):
4.18 - print"No reference trace repository"
4.19 - return 1
4.20 -
4.21 - if generate:
4.22 - if not os.path.exists(repoName + refDirName):
4.23 - print "creating new " + repoName + refDirName
4.24 - os.mkdir(repoName + refDirName)
4.25 -
4.26 - os.system("./waf --cwd regression/" + repoName + refDirName +
4.27 - " --run " + testName + " >& /dev/null")
4.28 -
4.29 - print "Remember to commit " + repoName + refDirName
4.30 - return 0
4.31 - else:
4.32 - if not os.path.exists(repoName + refDirName):
4.33 - print "Cannot locate reference traces"
4.34 - return 1
4.35 -
4.36 - shutil.rmtree("traces");
4.37 - os.mkdir("traces")
4.38 -
4.39 - os.system("./waf --cwd regression/traces --run " +
4.40 - testName + " >& /dev/null")
4.41 -
4.42 - return os.system("diff -q traces " + repoName + refDirName +
4.43 - " >& /dev/null")
4.44 + return tracediff.run_test(verbose, generate, refDirName, "csma-one-subnet")
5.1 --- a/regression/tests/test-csma-packet-socket.py Mon Mar 31 18:20:33 2008 -0700
5.2 +++ b/regression/tests/test-csma-packet-socket.py Tue Apr 01 16:30:08 2008 -0700
5.3 @@ -4,38 +4,10 @@
5.4
5.5 import os
5.6 import shutil
5.7 +import tracediff
5.8
5.9 -def run(verbose, generate):
5.10 +def run(verbose, generate, refDirName):
5.11 """Execute a test."""
5.12
5.13 - testName = "csma-packet-socket"
5.14 - repoName = "ns-3-ref-traces/"
5.15 - refDirName = testName + ".ref"
5.16 -
5.17 - if not os.path.exists(repoName):
5.18 - print"No reference trace repository"
5.19 - return 1
5.20 -
5.21 - if generate:
5.22 - if not os.path.exists(repoName + refDirName):
5.23 - print "creating new " + repoName + refDirName
5.24 - os.mkdir(repoName + refDirName)
5.25 -
5.26 - os.system("./waf --cwd regression/" + repoName + refDirName +
5.27 - " --run " + testName + " >& /dev/null")
5.28 -
5.29 - print "Remember to commit " + repoName + refDirName
5.30 - return 0
5.31 - else:
5.32 - if not os.path.exists(repoName + refDirName):
5.33 - print "Cannot locate reference traces"
5.34 - return 1
5.35 -
5.36 - shutil.rmtree("traces");
5.37 - os.mkdir("traces")
5.38 -
5.39 - os.system("./waf --cwd regression/traces --run " +
5.40 - testName + " >& /dev/null")
5.41 -
5.42 - return os.system("diff -q traces " + repoName + refDirName +
5.43 - " >& /dev/null")
5.44 + return tracediff.run_test(verbose, generate, refDirName,
5.45 + "csma-packet-socket")
6.1 --- a/regression/tests/test-simple-error-model.py Mon Mar 31 18:20:33 2008 -0700
6.2 +++ b/regression/tests/test-simple-error-model.py Tue Apr 01 16:30:08 2008 -0700
6.3 @@ -4,38 +4,10 @@
6.4
6.5 import os
6.6 import shutil
6.7 +import tracediff
6.8
6.9 -def run(verbose, generate):
6.10 +def run(verbose, generate, refDirName):
6.11 """Execute a test."""
6.12
6.13 - testName = "simple-error-model"
6.14 - repoName = "ns-3-ref-traces/"
6.15 - refDirName = testName + ".ref"
6.16 -
6.17 - if not os.path.exists(repoName):
6.18 - print"No reference trace repository"
6.19 - return 1
6.20 -
6.21 - if generate:
6.22 - if not os.path.exists(repoName + refDirName):
6.23 - print "creating new " + repoName + refDirName
6.24 - os.mkdir(repoName + refDirName)
6.25 -
6.26 - os.system("./waf --cwd regression/" + repoName + refDirName +
6.27 - " --run " + testName + " >& /dev/null")
6.28 -
6.29 - print "Remember to commit " + repoName + refDirName
6.30 - return 0
6.31 - else:
6.32 - if not os.path.exists(repoName + refDirName):
6.33 - print "Cannot locate reference traces"
6.34 - return 1
6.35 -
6.36 - shutil.rmtree("traces");
6.37 - os.mkdir("traces")
6.38 -
6.39 - os.system("./waf --cwd regression/traces --run " +
6.40 - testName + " >& /dev/null")
6.41 -
6.42 - return os.system("diff -q traces " + repoName + refDirName +
6.43 - " >& /dev/null")
6.44 + return tracediff.run_test(verbose, generate, refDirName,
6.45 + "simple-error-model")
7.1 --- a/regression/tests/test-simple-global-routing.py Mon Mar 31 18:20:33 2008 -0700
7.2 +++ b/regression/tests/test-simple-global-routing.py Tue Apr 01 16:30:08 2008 -0700
7.3 @@ -4,38 +4,10 @@
7.4
7.5 import os
7.6 import shutil
7.7 +import tracediff
7.8
7.9 -def run(verbose, generate):
7.10 +def run(verbose, generate, refDirName):
7.11 """Execute a test."""
7.12
7.13 - testName = "simple-global-routing"
7.14 - repoName = "ns-3-ref-traces/"
7.15 - refDirName = testName + ".ref"
7.16 -
7.17 - if not os.path.exists(repoName):
7.18 - print"No reference trace repository"
7.19 - return 1
7.20 -
7.21 - if generate:
7.22 - if not os.path.exists(repoName + refDirName):
7.23 - print "creating new " + repoName + refDirName
7.24 - os.mkdir(repoName + refDirName)
7.25 -
7.26 - os.system("./waf --cwd regression/" + repoName + refDirName +
7.27 - " --run " + testName + " >& /dev/null")
7.28 -
7.29 - print "Remember to commit " + repoName + refDirName
7.30 - return 0
7.31 - else:
7.32 - if not os.path.exists(repoName + refDirName):
7.33 - print "Cannot locate reference traces"
7.34 - return 1
7.35 -
7.36 - shutil.rmtree("traces");
7.37 - os.mkdir("traces")
7.38 -
7.39 - os.system("./waf --cwd regression/traces --run " +
7.40 - testName + " >& /dev/null")
7.41 -
7.42 - return os.system("diff -q traces " + repoName + refDirName +
7.43 - " >& /dev/null")
7.44 + return tracediff.run_test(verbose, generate, refDirName,
7.45 + "simple-global-routing")
8.1 --- a/regression/tests/test-simple-point-to-point-olsr.py Mon Mar 31 18:20:33 2008 -0700
8.2 +++ b/regression/tests/test-simple-point-to-point-olsr.py Tue Apr 01 16:30:08 2008 -0700
8.3 @@ -4,38 +4,10 @@
8.4
8.5 import os
8.6 import shutil
8.7 +import tracediff
8.8
8.9 -def run(verbose, generate):
8.10 +def run(verbose, generate, refDirName):
8.11 """Execute a test."""
8.12
8.13 - testName = "simple-point-to-point-olsr"
8.14 - repoName = "ns-3-ref-traces/"
8.15 - refDirName = testName + ".ref"
8.16 -
8.17 - if not os.path.exists(repoName):
8.18 - print"No reference trace repository"
8.19 - return 1
8.20 -
8.21 - if generate:
8.22 - if not os.path.exists(repoName + refDirName):
8.23 - print "creating new " + repoName + refDirName
8.24 - os.mkdir(repoName + refDirName)
8.25 -
8.26 - os.system("./waf --cwd regression/" + repoName + refDirName +
8.27 - " --run " + testName + " >& /dev/null")
8.28 -
8.29 - print "Remember to commit " + repoName + refDirName
8.30 - return 0
8.31 - else:
8.32 - if not os.path.exists(repoName + refDirName):
8.33 - print "Cannot locate reference traces"
8.34 - return 1
8.35 -
8.36 - shutil.rmtree("traces");
8.37 - os.mkdir("traces")
8.38 -
8.39 - os.system("./waf --cwd regression/traces --run " +
8.40 - testName + " >& /dev/null")
8.41 -
8.42 - return os.system("diff -q traces " + repoName + refDirName +
8.43 - " >& /dev/null")
8.44 + return tracediff.run_test(verbose, generate, refDirName,
8.45 + "simple-point-to-point-olsr")
9.1 --- a/regression/tests/test-tcp-large-transfer.py Mon Mar 31 18:20:33 2008 -0700
9.2 +++ b/regression/tests/test-tcp-large-transfer.py Tue Apr 01 16:30:08 2008 -0700
9.3 @@ -4,38 +4,10 @@
9.4
9.5 import os
9.6 import shutil
9.7 +import tracediff
9.8
9.9 -def run(verbose, generate):
9.10 +def run(verbose, generate, refDirName):
9.11 """Execute a test."""
9.12
9.13 - testName = "tcp-large-transfer"
9.14 - repoName = "ns-3-ref-traces/"
9.15 - refDirName = testName + ".ref"
9.16 -
9.17 - if not os.path.exists(repoName):
9.18 - print"No reference trace repository"
9.19 - return 1
9.20 -
9.21 - if generate:
9.22 - if not os.path.exists(repoName + refDirName):
9.23 - print "creating new " + repoName + refDirName
9.24 - os.mkdir(repoName + refDirName)
9.25 -
9.26 - os.system("./waf --cwd regression/" + repoName + refDirName +
9.27 - " --run " + testName + " >& /dev/null")
9.28 -
9.29 - print "Remember to commit " + repoName + refDirName
9.30 - return 0
9.31 - else:
9.32 - if not os.path.exists(repoName + refDirName):
9.33 - print "Cannot locate reference traces"
9.34 - return 1
9.35 -
9.36 - shutil.rmtree("traces");
9.37 - os.mkdir("traces")
9.38 -
9.39 - os.system("./waf --cwd regression/traces --run " +
9.40 - testName + " >& /dev/null")
9.41 -
9.42 - return os.system("diff -q traces " + repoName + refDirName +
9.43 - " >& /dev/null")
9.44 + return tracediff.run_test(verbose, generate, refDirName,
9.45 + "tcp-large-transfer")
10.1 --- a/regression/tests/test-udp-echo.py Mon Mar 31 18:20:33 2008 -0700
10.2 +++ b/regression/tests/test-udp-echo.py Tue Apr 01 16:30:08 2008 -0700
10.3 @@ -4,38 +4,9 @@
10.4
10.5 import os
10.6 import shutil
10.7 +import tracediff
10.8
10.9 -def run(verbose, generate):
10.10 +def run(verbose, generate, refDirName):
10.11 """Execute a test."""
10.12
10.13 - testName = "udp-echo"
10.14 - repoName = "ns-3-ref-traces/"
10.15 - refDirName = testName + ".ref"
10.16 -
10.17 - if not os.path.exists(repoName):
10.18 - print"No reference trace repository"
10.19 - return 1
10.20 -
10.21 - if generate:
10.22 - if not os.path.exists(repoName + refDirName):
10.23 - print "creating new " + repoName + refDirName
10.24 - os.mkdir(repoName + refDirName)
10.25 -
10.26 - os.system("./waf --cwd regression/" + repoName + refDirName +
10.27 - " --run " + testName + " >& /dev/null")
10.28 -
10.29 - print "Remember to commit " + repoName + refDirName
10.30 - return 0
10.31 - else:
10.32 - if not os.path.exists(repoName + refDirName):
10.33 - print "Cannot locate reference traces"
10.34 - return 1
10.35 -
10.36 - shutil.rmtree("traces");
10.37 - os.mkdir("traces")
10.38 -
10.39 - os.system("./waf --cwd regression/traces --run " +
10.40 - testName + " >& /dev/null")
10.41 -
10.42 - return os.system("diff -q traces " + repoName + refDirName +
10.43 - " >& /dev/null")
10.44 + return tracediff.run_test(verbose, generate, refDirName, "udp-echo")
11.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
11.2 +++ b/regression/tracediff.py Tue Apr 01 16:30:08 2008 -0700
11.3 @@ -0,0 +1,50 @@
11.4 +#! /usr/bin/env python
11.5 +
11.6 +"""Generic trace-comparison-type regression test."""
11.7 +
11.8 +import sys
11.9 +import os
11.10 +import shutil
11.11 +
11.12 +def run_test(verbose, generate, refDirName, testName):
11.13 + """Execute a test."""
11.14 +
11.15 + repoName = "ns-3-ref-traces/"
11.16 + refDirName = testName + ".ref"
11.17 +
11.18 + if not os.path.exists(repoName):
11.19 + print"No reference trace repository"
11.20 + return 1
11.21 +
11.22 + if generate:
11.23 + if not os.path.exists(repoName + refDirName):
11.24 + print "creating new " + repoName + refDirName
11.25 + os.mkdir(repoName + refDirName)
11.26 +
11.27 + try:
11.28 + os.system("./waf --cwd regression/" + repoName + refDirName +
11.29 + " --run " + testName + " > /dev/null 2>&1")
11.30 + except:
11.31 + sys.exit(1)
11.32 +
11.33 + print "Remember to commit " + repoName + refDirName
11.34 + return 0
11.35 + else:
11.36 + if not os.path.exists(repoName + refDirName):
11.37 + print "Cannot locate reference traces"
11.38 + return 1
11.39 +
11.40 + shutil.rmtree("traces");
11.41 + os.mkdir("traces")
11.42 +
11.43 + os.system("./waf --cwd regression/traces --run " +
11.44 + testName + " > /dev/null 2>&1")
11.45 +
11.46 + if verbose:
11.47 + diffCmd = "diff traces " + repoName + refDirName + " | head"
11.48 + else:
11.49 + diffCmd = "diff traces " + repoName + refDirName + \
11.50 + " > /dev/null 2>&1"
11.51 +
11.52 + return os.system(diffCmd)
11.53 +