branch merge
authorCraig Dowell <craigdo@ee.washington.edu>
Mon, 31 Mar 2008 16:22:24 -0700
changeset 2858 eaa1a8467872
parent 2857 2c9890f41feb (diff)
parent 2844 6e2d19edddae (current diff)
child 2859 095e1e3692f7
branch merge
examples/simple-point-to-point.cc
src/devices/csma/csma-ipv4-topology.cc
src/devices/csma/csma-ipv4-topology.h
src/devices/csma/csma-topology.cc
src/devices/csma/csma-topology.h
src/devices/point-to-point/point-to-point-topology.cc
src/devices/point-to-point/point-to-point-topology.h
src/internet-node/internet-node.cc
src/internet-node/internet-node.h
tutorial/energy-model.cc
tutorial/energy-model.h
tutorial/energy.cc
tutorial/point-to-point-ipv4-topology.cc
tutorial/point-to-point-ipv4-topology.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/regression.py	Mon Mar 31 16:22:24 2008 -0700
@@ -0,0 +1,133 @@
+#! /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
+
+    userName = "craigdo/"
+    repoName = "ns-3-ref-traces/"
+
+    if not os.path.exists(repoName):
+        cloneCmd = "hg clone http://code.nsnam.org/" + userName + repoName + " >& /dev/null"
+        os.system(cloneCmd)
+    else:
+        os.chdir(repoName)
+        pullCmd = "hg pull http://code.nsnam.org/" + userName + repoName + " >& /dev/null"
+        os.system(pullCmd)
+        os.chdir("..")
+
+    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
+    
+    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 "Running test", test
+        result = runtest(test)
+        if result == 0:
+            if generate:
+                print "GENERATE ", test
+            else:
+                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
+    """
+    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()
+    return tests
+
+def runtest(test):
+    """Run a single test.
+
+    Arguments:
+    test -- the name of the test
+    """
+    if os.path.exists("traces"):
+        files = os.listdir("traces")
+        for file in files:
+            if file == '.' or file == '..':
+                continue
+            path = "traces" + os.sep + file
+            os.remove(path)
+    else:
+        os.mkdir("traces")
+    
+    mod = __import__(test, globals(), locals(), [])
+    return mod.run(verbose, generate)
+
+if __name__ == '__main__':
+    sys.exit(main())
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/tests/test-csma-one-subnet.py	Mon Mar 31 16:22:24 2008 -0700
@@ -0,0 +1,41 @@
+#! /usr/bin/env python
+
+"""Generic trace-comparison-type regression test."""
+
+import os
+import shutil
+
+def run(verbose, generate):
+    """Execute a test."""
+
+    testName = "csma-one-subnet"
+    repoName = "ns-3-ref-traces/"
+    refDirName = testName + ".ref"
+
+    if not os.path.exists(repoName):
+        print"No reference trace repository"
+        return 1
+
+    if generate:
+        if not os.path.exists(repoName + refDirName):
+            print "creating new " + repoName + refDirName
+            os.mkdir(repoName + refDirName)
+
+        os.system("./waf --cwd regression/" + repoName + refDirName +
+            " --run " + testName + " >& /dev/null")
+
+        print "Remember to commit " + repoName + refDirName
+        return 0
+    else:
+        if not os.path.exists(repoName + refDirName):
+            print "Cannot locate reference traces"
+            return 1
+
+        shutil.rmtree("traces");
+        os.mkdir("traces")
+        
+        os.system("./waf --cwd regression/traces --run " +
+          testName + " >& /dev/null")
+        
+        return os.system("diff -q traces " + repoName + refDirName +
+         " >& /dev/null")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/tests/test-simple-point-to-point-olsr.py	Mon Mar 31 16:22:24 2008 -0700
@@ -0,0 +1,41 @@
+#! /usr/bin/env python
+
+"""Generic trace-comparison-type regression test."""
+
+import os
+import shutil
+
+def run(verbose, generate):
+    """Execute a test."""
+
+    testName = "simple-point-to-point-olsr"
+    repoName = "ns-3-ref-traces/"
+    refDirName = testName + ".ref"
+
+    if not os.path.exists(repoName):
+        print"No reference trace repository"
+        return 1
+
+    if generate:
+        if not os.path.exists(repoName + refDirName):
+            print "creating new " + repoName + refDirName
+            os.mkdir(repoName + refDirName)
+
+        os.system("./waf --cwd regression/" + repoName + refDirName +
+            " --run " + testName + " >& /dev/null")
+
+        print "Remember to commit " + repoName + refDirName
+        return 0
+    else:
+        if not os.path.exists(repoName + refDirName):
+            print "Cannot locate reference traces"
+            return 1
+
+        shutil.rmtree("traces");
+        os.mkdir("traces")
+        
+        os.system("./waf --cwd regression/traces --run " +
+          testName + " >& /dev/null")
+        
+        return os.system("diff -q traces " + repoName + refDirName +
+         " >& /dev/null")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/tests/test-simple-point-to-point.py	Mon Mar 31 16:22:24 2008 -0700
@@ -0,0 +1,41 @@
+#! /usr/bin/env python
+
+"""Generic trace-comparison-type regression test."""
+
+import os
+import shutil
+
+def run(verbose, generate):
+    """Execute a test."""
+
+    testName = "simple-point-to-point"
+    repoName = "ns-3-ref-traces/"
+    refDirName = testName + ".ref"
+
+    if not os.path.exists(repoName):
+        print"No reference trace repository"
+        return 1
+
+    if generate:
+        if not os.path.exists(repoName + refDirName):
+            print "creating new " + repoName + refDirName
+            os.mkdir(repoName + refDirName)
+
+        os.system("./waf --cwd regression/" + repoName + refDirName +
+            " --run " + testName + " >& /dev/null")
+
+        print "Remember to commit " + repoName + refDirName
+        return 0
+    else:
+        if not os.path.exists(repoName + refDirName):
+            print "Cannot locate reference traces"
+            return 1
+
+        shutil.rmtree("traces");
+        os.mkdir("traces")
+        
+        os.system("./waf --cwd regression/traces --run " +
+          testName + " >& /dev/null")
+        
+        return os.system("diff -q traces " + repoName + refDirName +
+         " >& /dev/null")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/tests/test-tcp-large-transfer.py	Mon Mar 31 16:22:24 2008 -0700
@@ -0,0 +1,41 @@
+#! /usr/bin/env python
+
+"""Generic trace-comparison-type regression test."""
+
+import os
+import shutil
+
+def run(verbose, generate):
+    """Execute a test."""
+
+    testName = "tcp-large-transfer"
+    repoName = "ns-3-ref-traces/"
+    refDirName = testName + ".ref"
+
+    if not os.path.exists(repoName):
+        print"No reference trace repository"
+        return 1
+
+    if generate:
+        if not os.path.exists(repoName + refDirName):
+            print "creating new " + repoName + refDirName
+            os.mkdir(repoName + refDirName)
+
+        os.system("./waf --cwd regression/" + repoName + refDirName +
+            " --run " + testName + " >& /dev/null")
+
+        print "Remember to commit " + repoName + refDirName
+        return 0
+    else:
+        if not os.path.exists(repoName + refDirName):
+            print "Cannot locate reference traces"
+            return 1
+
+        shutil.rmtree("traces");
+        os.mkdir("traces")
+        
+        os.system("./waf --cwd regression/traces --run " +
+          testName + " >& /dev/null")
+        
+        return os.system("diff -q traces " + repoName + refDirName +
+         " >& /dev/null")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/tests/test-tcp-small-transfer.py	Mon Mar 31 16:22:24 2008 -0700
@@ -0,0 +1,40 @@
+#! /usr/bin/env python
+
+"""Generic trace-comparison-type regression test."""
+
+import os
+import shutil
+
+def run(verbose, generate):
+    """Execute a test."""
+
+    testName = "tcp-small-transfer"
+    repoName = "ns-3-ref-traces/"
+    refDirName = testName + ".ref"
+
+    if not os.path.exists(repoName):
+        print"No reference trace repository"
+        return 1
+
+    if generate:
+        if not os.path.exists(repoName + refDirName):
+            print "creating new " + repoName + refDirName
+            os.mkdir(repoName + refDirName)
+
+        os.system("./waf --cwd regression/" + repoName + refDirName +
+            " --run " + testName + " >& /dev/null")
+
+        print "Remember to commit " + repoName + refDirName
+        return 0
+    else:
+        if not os.path.exists(repoName + refDirName):
+            print "Cannot locate reference traces"
+            return 1
+
+        shutil.rmtree("traces");
+        os.mkdir("traces")
+        
+        os.system("./waf --cwd regression/traces --run " +
+          testName + " >& /dev/null")
+        
+        return os.system("diff -q traces csma-one-subnet.ref >& /dev/null")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/tests/test-udp-echo.py	Mon Mar 31 16:22:24 2008 -0700
@@ -0,0 +1,41 @@
+#! /usr/bin/env python
+
+"""Generic trace-comparison-type regression test."""
+
+import os
+import shutil
+
+def run(verbose, generate):
+    """Execute a test."""
+
+    testName = "udp-echo"
+    repoName = "ns-3-ref-traces/"
+    refDirName = testName + ".ref"
+
+    if not os.path.exists(repoName):
+        print"No reference trace repository"
+        return 1
+
+    if generate:
+        if not os.path.exists(repoName + refDirName):
+            print "creating new " + repoName + refDirName
+            os.mkdir(repoName + refDirName)
+
+        os.system("./waf --cwd regression/" + repoName + refDirName +
+            " --run " + testName + " >& /dev/null")
+
+        print "Remember to commit " + repoName + refDirName
+        return 0
+    else:
+        if not os.path.exists(repoName + refDirName):
+            print "Cannot locate reference traces"
+            return 1
+
+        shutil.rmtree("traces");
+        os.mkdir("traces")
+        
+        os.system("./waf --cwd regression/traces --run " +
+          testName + " >& /dev/null")
+        
+        return os.system("diff -q traces " + repoName + refDirName +
+         " >& /dev/null")
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/waf	Mon Mar 31 16:22:24 2008 -0700
@@ -0,0 +1,1 @@
+exec "`dirname "$0"`"/../waf "$@"
\ No newline at end of file
--- a/wscript	Mon Mar 31 15:39:50 2008 -0700
+++ b/wscript	Mon Mar 31 16:22: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.")