use global seed in examples, new regression tests
authorCraig Dowell <craigdo@ee.washington.edu>
Mon, 31 Mar 2008 17:48:21 -0700
changeset 2860 9105a5cf6535
parent 2859 095e1e3692f7
child 2861 18930dcd33e0
use global seed in examples, new regression tests
examples/csma-broadcast.cc
examples/csma-multicast.cc
examples/csma-one-subnet.cc
examples/csma-packet-socket.cc
examples/simple-point-to-point-olsr.cc
regression/tests/test-csma-broadcast.py
regression/tests/test-csma-multicast.py
regression/tests/test-csma-packet-socket.py
src/applications/onoff/onoff-application.cc
--- a/examples/csma-broadcast.cc	Mon Mar 31 16:31:34 2008 -0700
+++ b/examples/csma-broadcast.cc	Mon Mar 31 17:48:21 2008 -0700
@@ -47,30 +47,12 @@
   // for selected modules; the below lines suggest how to do this
 #if 0
   LogComponentEnable ("CsmaBroadcastExample", LOG_LEVEL_INFO);
-
-  LogComponentEnable("Object", LOG_LEVEL_ALL);
-  LogComponentEnable("Queue", LOG_LEVEL_ALL);
-  LogComponentEnable("DropTailQueue", LOG_LEVEL_ALL);
-  LogComponentEnable("Channel", LOG_LEVEL_ALL);
-  LogComponentEnable("CsmaChannel", LOG_LEVEL_ALL);
-  LogComponentEnable("NetDevice", LOG_LEVEL_ALL);
-  LogComponentEnable("CsmaNetDevice", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable("PacketSocket", LOG_LEVEL_ALL);
-  LogComponentEnable("Socket", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpSocket", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpL4Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4StaticRouting", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4Interface", LOG_LEVEL_ALL);
-  LogComponentEnable("ArpIpv4Interface", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4LoopbackInterface", LOG_LEVEL_ALL);
-  LogComponentEnable("OnOffApplication", LOG_LEVEL_ALL);
-  // Enable the below logging command to see the packets being received
-  LogComponentEnable("PacketSinkApplication", LOG_LEVEL_ALL);
 #endif
 
-  // Set up some default values for the simulation.  Use the Bind()
+  //
+  // Make the random number generators generate reproducible results.
+  //
+  RandomVariable::UseGlobalSeed (1, 1, 2, 3, 5, 8);
 
   // Allow the user to override any of the defaults and the above
   // Bind()s at run-time, via command-line arguments
--- a/examples/csma-multicast.cc	Mon Mar 31 16:31:34 2008 -0700
+++ b/examples/csma-multicast.cc	Mon Mar 31 17:48:21 2008 -0700
@@ -50,6 +50,11 @@
   // LogComponentEnable ("CsmaMulticastExample", LOG_LEVEL_INFO);
 
   //
+  // Make the random number generators generate reproducible results.
+  //
+  RandomVariable::UseGlobalSeed (1, 1, 2, 3, 5, 8);
+
+  //
   // Set up default values for the simulation.  
   //
   // Select Ethernet II-style encapsulation (no LLC/Snap header)
--- a/examples/csma-one-subnet.cc	Mon Mar 31 16:31:34 2008 -0700
+++ b/examples/csma-one-subnet.cc	Mon Mar 31 17:48:21 2008 -0700
@@ -47,6 +47,9 @@
   LogComponentEnable ("CsmaOneSubnetExample", LOG_LEVEL_INFO);
 #endif
 //
+// Make the random number generators generate reproducible results.
+//
+  RandomVariable::UseGlobalSeed (1, 1, 2, 3, 5, 8);
 //
 // Allow the user to override any of the defaults and the above Bind() at
 // run-time, via command-line arguments
--- a/examples/csma-packet-socket.cc	Mon Mar 31 16:31:34 2008 -0700
+++ b/examples/csma-packet-socket.cc	Mon Mar 31 17:48:21 2008 -0700
@@ -49,29 +49,12 @@
 {
 #if 0 
   LogComponentEnable ("CsmaPacketSocketExample", LOG_LEVEL_INFO);
+#endif
 
-  LogComponentEnable("Object", LOG_LEVEL_ALL);
-  LogComponentEnable("Queue", LOG_LEVEL_ALL);
-  LogComponentEnable("DropTailQueue", LOG_LEVEL_ALL);
-  LogComponentEnable("Channel", LOG_LEVEL_ALL);
-  LogComponentEnable("CsmaChannel", LOG_LEVEL_ALL);
-  LogComponentEnable("NetDevice", LOG_LEVEL_ALL);
-  LogComponentEnable("CsmaNetDevice", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable("PacketSocket", LOG_LEVEL_ALL);
-  LogComponentEnable("Socket", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpSocket", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpL4Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4StaticRouting", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4Interface", LOG_LEVEL_ALL);
-  LogComponentEnable("ArpIpv4Interface", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4LoopbackInterface", LOG_LEVEL_ALL);
-  LogComponentEnable("OnOffApplication", LOG_LEVEL_ALL);
-  LogComponentEnable("PacketSinkApplication", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_ALL);
-#endif
+  //
+  // Make the random number generators generate reproducible results.
+  //
+  RandomVariable::UseGlobalSeed (1, 1, 2, 3, 5, 8);
 
   CommandLine cmd;
   cmd.Parse (argc, argv);
--- a/examples/simple-point-to-point-olsr.cc	Mon Mar 31 16:31:34 2008 -0700
+++ b/examples/simple-point-to-point-olsr.cc	Mon Mar 31 17:48:21 2008 -0700
@@ -57,29 +57,13 @@
   // for selected modules; the below lines suggest how to do this
 #if 0 
   LogComponentEnable ("SimpleGlobalRoutingExample", LOG_LEVEL_INFO);
+#endif
 
-  LogComponentEnable("Object", LOG_LEVEL_ALL);
-  LogComponentEnable("Queue", LOG_LEVEL_ALL);
-  LogComponentEnable("DropTailQueue", LOG_LEVEL_ALL);
-  LogComponentEnable("Channel", LOG_LEVEL_ALL);
-  LogComponentEnable("CsmaChannel", LOG_LEVEL_ALL);
-  LogComponentEnable("NetDevice", LOG_LEVEL_ALL);
-  LogComponentEnable("CsmaNetDevice", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable("PacketSocket", LOG_LEVEL_ALL);
-  LogComponentEnable("Socket", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpSocket", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpL4Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4StaticRouting", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4Interface", LOG_LEVEL_ALL);
-  LogComponentEnable("ArpIpv4Interface", LOG_LEVEL_ALL);
-  LogComponentEnable("Ipv4LoopbackInterface", LOG_LEVEL_ALL);
-  LogComponentEnable("OnOffApplication", LOG_LEVEL_ALL);
-  LogComponentEnable("PacketSinkApplication", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_ALL);
-  LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_ALL);
-#endif
+  //
+  // Make the random number generators generate reproducible results.
+  //
+  RandomVariable::UseGlobalSeed (1, 1, 2, 3, 5, 8);
+
   // Set up some default values for the simulation.  Use the 
 
   Config::SetDefault ("ns3::OnOffApplication::PacketSize", Uinteger (210));
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/regression/tests/test-csma-broadcast.py	Mon Mar 31 17:48:21 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-broadcast"
+    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-csma-multicast.py	Mon Mar 31 17:48:21 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-multicast"
+    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-csma-packet-socket.py	Mon Mar 31 17:48:21 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-packet-socket"
+    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")
--- a/src/applications/onoff/onoff-application.cc	Mon Mar 31 16:31:34 2008 -0700
+++ b/src/applications/onoff/onoff-application.cc	Mon Mar 31 17:48:21 2008 -0700
@@ -208,6 +208,7 @@
   NS_LOG_FUNCTION;
 
   Time onInterval = Seconds(m_onTime.GetValue());
+  NS_LOG_LOGIC ("stop at " << onInterval);
   Simulator::Schedule(onInterval, &OnOffApplication::StopSending, this);
 }
 
@@ -215,7 +216,7 @@
 void OnOffApplication::SendPacket()
 {
   NS_LOG_FUNCTION;
-
+  NS_LOG_LOGIC ("sending packet at " << Simulator::Now());
   NS_ASSERT (m_sendEvent.IsExpired ());
   Ptr<Packet> packet = Create<Packet> (m_pktSize);
   m_txTrace (packet);