test-suite-quickstart.tcl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:33k
源码类别:

通讯编程

开发平台:

Visual C++

  1. #
  2. # Copyright (c) 2003  International Computer Science Institute
  3. # All rights reserved.
  4. #
  5. # Redistribution and use in source and binary forms, with or without
  6. # modification, are permitted provided that the following conditions
  7. # are met:
  8. # 1. Redistributions of source code must retain the above copyright
  9. #    notice, this list of conditions and the following disclaimer.
  10. # 2. Redistributions in binary form must reproduce the above copyright
  11. #    notice, this list of conditions and the following disclaimer in the
  12. #    documentation and/or other materials provided with the distribution.
  13. # 3. All advertising materials mentioning features or use of this software
  14. #    must display the following acknowledgement:
  15. #      This product includes software developed by ACIRI, the AT&T
  16. #      Center for Internet Research at ICSI (the International Computer
  17. #      Science Institute).
  18. # 4. Neither the name of ACIRI nor of ICSI may be used
  19. #    to endorse or promote products derived from this software without
  20. #    specific prior written permission.
  21. #
  22. # THIS SOFTWARE IS PROVIDED BY ICSI AND CONTRIBUTORS ``AS IS'' AND
  23. # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  24. # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  25. # ARE DISCLAIMED.  IN NO EVENT SHALL ICSI OR CONTRIBUTORS BE LIABLE
  26. # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  27. # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  28. # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  29. # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  30. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  31. # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  32. # SUCH DAMAGE.
  33. #
  34. source misc_simple.tcl
  35. source support.tcl
  36. remove-all-packet-headers       ; # removes all except common
  37. add-packet-header Flags IP TCP QS ; # hdrs reqd for validation test
  38. # FOR UPDATING GLOBAL DEFAULTS:
  39. Agent/TCP set bugfix_ss_ 0
  40. set wrap 90
  41. set wrap1 [expr $wrap * 512 + 40]
  42. Queue set util_weight_ 2  
  43. # 18 seconds
  44. Agent/QSAgent set alloc_rate_ 0.5    
  45. # up to 0.5 of link bandwidth.
  46. Agent/QSAgent set qs_enabled_ 1
  47. Agent/QSAgent set state_delay_ 0.35  
  48. # 0.35 seconds for past approvals
  49. Agent/QSAgent set rate_function_ 1
  50. Agent/TCPSink set qs_enabled_ true
  51. Agent/TCP set qs_enabled_ true
  52. # Uncomment the line below to use a random seed for the
  53. #  random number generator.
  54. # ns-random 0
  55. TestSuite instproc finish {file stoptime} {
  56.         global quiet PERL wrap wrap1
  57.         set space 512
  58.         if [string match {*full*} $file] {
  59.                 exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  60.                    $PERL ../../bin/raw2xg -c -n $space -s 0.01 -m $wrap1 -t $file > temp.rands
  61.                 #exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  62.                 #   $PERL ../../bin/raw2xg -a -c -f -p -y -n $space -s 0.01 -m $wrap1 -t $file >> temp.rands
  63.         } else {
  64.                 exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  65.                   $PERL ../../bin/raw2xg -s 0.01 -m $wrap -t $file > temp.rands
  66.                 #exec $PERL ../../bin/getrc -s 3 -d 2 all.tr | 
  67.                 #  $PERL ../../bin/raw2xg -a -c -p -y -s 0.01 -m $wrap -t $file 
  68.                 #  >> temp.rands
  69.         } 
  70. # exec $PERL ../../bin/getrc -s 2 -d 3 all.tr | 
  71. #   $PERL ../../bin/raw2xg -s 0.01 -m 90 -t $file > temp.rands
  72.         exec echo $stoptime 0 >> temp.rands 
  73.         if {$quiet == "false"} {
  74.                 exec xgraph -bb -tk -nl -m -x time -y packets temp.rands &
  75.         }
  76. #exec csh gnuplotA.com temp.rands quickstart
  77. #exec csh gnuplotA2.com temp.rands quickstart
  78.         exit 0
  79. }
  80. TestSuite instproc emod {} {
  81.         $self instvar topo_
  82.         $topo_ instvar lossylink_
  83.         set errmodule [$lossylink_ errormodule]
  84.         return $errmodule
  85. }
  86. TestSuite instproc drop_pkts pkts {
  87.     $self instvar ns_ errmodel
  88.     set emod [$self emod]
  89.     set errmodel [new ErrorModel/List]
  90.     $errmodel droplist $pkts
  91.     $emod insert $errmodel
  92.     $emod bind $errmodel 1
  93. }
  94. Class Topology
  95. Topology instproc node? num {
  96.     $self instvar node_
  97.     return $node_($num)
  98. }
  99. Class Topology/net2 -superclass Topology
  100. Topology/net2 instproc init ns {
  101.     $self instvar node_
  102.     set node_(s1) [$ns node]
  103.     set node_(s2) [$ns node]
  104.     set node_(r1) [$ns node]
  105.     set node_(r2) [$ns node]
  106.     set node_(s3) [$ns node]
  107.     set node_(s4) [$ns node]
  108.     $self next
  109.     $ns duplex-link $node_(s1) $node_(r1) 1000Mb 2ms DropTail
  110.     $ns duplex-link $node_(s2) $node_(r1) 1000Mb 3ms DropTail
  111.     $ns duplex-link $node_(r1) $node_(r2) 100Mb 500ms RED
  112.     $ns queue-limit $node_(r1) $node_(r2) 100
  113.     $ns queue-limit $node_(r2) $node_(r1) 100 
  114.     $ns duplex-link $node_(s3) $node_(r2) 1000Mb 4ms DropTail
  115.     $ns duplex-link $node_(s4) $node_(r2) 1000Mb 5ms DropTail
  116.     $self instvar lossylink_
  117.     set lossylink_ [$ns link $node_(s1) $node_(r1)]
  118.     set em [new ErrorModule Fid]
  119.     set errmodel [new ErrorModel/Periodic]
  120.     $errmodel unit pkt
  121.     $lossylink_ errormodule $em
  122.     $em insert $errmodel
  123.     $em bind $errmodel 0
  124.     $em default pass
  125. }
  126. Class Topology/net3 -superclass Topology
  127. Topology/net3 instproc init ns {
  128.     $self instvar node_
  129.     set node_(s1) [$ns node]
  130.     set node_(s2) [$ns node]
  131.     set node_(r1) [$ns node]
  132.     set node_(r2) [$ns node]
  133.     set node_(s3) [$ns node]
  134.     set node_(s4) [$ns node]
  135.     $self next
  136.     $ns duplex-link $node_(s1) $node_(r1) 1000Mb 2ms DropTail
  137.     $ns duplex-link $node_(s2) $node_(r1) 1000Mb 3ms DropTail
  138.     $ns duplex-link $node_(r1) $node_(r2) 100Mb 500ms RED
  139.     $ns queue-limit $node_(r1) $node_(r2) 100
  140.     $ns queue-limit $node_(r2) $node_(r1) 100 
  141.     $ns duplex-link $node_(s3) $node_(r2) 1000Mb 4ms DropTail
  142.     $ns duplex-link $node_(s4) $node_(r2) 1000Mb 5ms DropTail
  143. }
  144. Class Topology/net4 -superclass Topology
  145. Topology/net4 instproc init ns {
  146.     $self instvar node_
  147.     set node_(s1) [$ns node]
  148.     set node_(s2) [$ns node]
  149.     set node_(r1) [$ns node]
  150.     set node_(r2) [$ns node]
  151.     set node_(s3) [$ns node]
  152.     set node_(s4) [$ns node]
  153.     $self next
  154.     $ns duplex-link $node_(s1) $node_(r1) 1000Mb 2ms DropTail
  155.     $ns duplex-link $node_(s2) $node_(r1) 1000Mb 3ms DropTail
  156.     $ns duplex-link $node_(r1) $node_(r2) 10Mb 200ms RED
  157.     $ns queue-limit $node_(r1) $node_(r2) 50
  158.     $ns queue-limit $node_(r2) $node_(r1) 50 
  159.     $ns duplex-link $node_(s3) $node_(r2) 1000Mb 4ms DropTail
  160.     $ns duplex-link $node_(s4) $node_(r2) 1000Mb 5ms DropTail
  161. }
  162. Class Test/no_quickstart -superclass TestSuite
  163. Test/no_quickstart instproc init {} {
  164.     $self instvar net_ test_ guide_ sndr rcvr qs
  165.     set net_ net3
  166.     set test_ no_quickstart
  167.     set guide_  "Two TCPs, no quickstart."
  168.     set sndr TCP/Newreno
  169.     set rcvr TCPSink
  170.     set qs OFF
  171.     Agent/QSAgent set qs_enabled_ 0
  172.     $self next pktTraceFile
  173. }
  174. Test/no_quickstart instproc run {} {
  175.     global quiet
  176.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  177.     puts "Guide: $guide_"
  178.     $ns_ node-config -QS $qs
  179.     $self setTopo
  180.     set stopTime 6
  181.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  182.     $tcp1 set window_ 8
  183.     set ftp1 [new Application/FTP]
  184.     $ftp1 attach-agent $tcp1
  185.     $ns_ at 0.0 "$ftp1 start"
  186.     set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s3) 1]
  187.     $tcp2 set window_ 1000
  188.     $tcp2 set rate_request_ 20
  189.     set ftp2 [new Application/FTP]
  190.     $ftp2 attach-agent $tcp2
  191.     $ns_ at 2.0 "$ftp2 produce 80"
  192.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  193.     $ns_ run
  194. }
  195. Class Test/quickstart -superclass TestSuite
  196. Test/quickstart instproc init {} {
  197.     $self instvar net_ test_ guide_ sndr rcvr qs
  198.     set net_ net3
  199.     set test_ quickstart
  200.     set guide_  "Two TCPs, TCP/Newreno, with QuickStart."
  201.     set sndr TCP/Newreno
  202.     set rcvr TCPSink
  203.     set qs ON
  204.     Test/quickstart instproc run {} [Test/no_quickstart info instbody run ]
  205.     $self next pktTraceFile
  206. }
  207. Class Test/quickstart1 -superclass TestSuite
  208. Test/quickstart1 instproc init {} {
  209.     $self instvar net_ test_ guide_ sndr rcvr qs
  210.     set net_ net3
  211.     set test_ quickstart1
  212.     set guide_  "Two TCPs, plain TCP, with QuickStart."
  213.     set sndr TCP
  214.     set rcvr TCPSink
  215.     set qs ON
  216.     Test/quickstart1 instproc run {} [Test/no_quickstart info instbody run ]
  217.     $self next pktTraceFile
  218. }
  219. Class Test/quickstart2 -superclass TestSuite
  220. Test/quickstart2 instproc init {} {
  221.     $self instvar net_ test_ guide_ sndr rcvr qs
  222.     set net_ net3
  223.     set test_ quickstart2
  224.     set guide_  "Two TCPs, Reno TCP, with QuickStart."
  225.     set sndr TCP/Reno
  226.     set rcvr TCPSink
  227.     set qs ON
  228.     Test/quickstart2 instproc run {} [Test/no_quickstart info instbody run ]
  229.     $self next pktTraceFile
  230. }
  231. Class Test/quickstart3 -superclass TestSuite
  232. Test/quickstart3 instproc init {} {
  233.     $self instvar net_ test_ guide_ sndr rcvr qs
  234.     set net_ net3
  235.     set test_ quickstart3
  236.     set guide_  "Two TCPs, NewReno TCP, with QuickStart."
  237.     set sndr TCP/Newreno
  238.     set rcvr TCPSink
  239.     set qs ON
  240.     Test/quickstart3 instproc run {} [Test/no_quickstart info instbody run ]
  241.     $self next pktTraceFile
  242. }
  243. Class Test/quickstart4 -superclass TestSuite
  244. Test/quickstart4 instproc init {} {
  245.     $self instvar net_ test_ guide_ sndr rcvr qs
  246.     set net_ net3
  247.     set test_ quickstart4
  248.     set guide_  "Two TCPs, Sack TCP, with QuickStart."
  249.     set sndr TCP/Sack1
  250.     set rcvr TCPSink/Sack1
  251.     set qs ON
  252.     Test/quickstart4 instproc run {} [Test/no_quickstart info instbody run ]
  253.     $self next pktTraceFile
  254. }
  255. Class Test/quickstart4full -superclass TestSuite
  256. Test/quickstart4full instproc init {} {
  257.     $self instvar net_ test_ guide_ sndr rcvr qs
  258.     set net_ net2
  259.     set test_ quickstart4
  260.     set guide_  "Two TCPs, Sack Full TCP.  QuickStart not added to Full TCP yet."
  261.     set sndr TCP/Sack1
  262.     set rcvr TCPSink/Sack1
  263.     set qs ON
  264.     $self next pktTraceFile
  265. }
  266. Test/quickstart4full instproc run {} {
  267.     global quiet wrap1 wrap
  268.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  269.     puts "Guide: $guide_"
  270.     $ns_ node-config -QS $qs
  271.     $self setTopo
  272.     set stopTime 6
  273.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  274.     $tcp1 set window_ 8
  275.     set ftp1 [new Application/FTP]
  276.     $ftp1 attach-agent $tcp1
  277.     $ns_ at 0.0 "$ftp1 start"
  278.     set wrap $wrap1
  279.     set fid 1
  280.     set tcp2 [new Agent/TCP/FullTcp/Sack]
  281.     set sink [new Agent/TCP/FullTcp/Sack]
  282.     $ns_ attach-agent $node_(s1) $tcp2
  283.     $ns_ attach-agent $node_(s3) $sink
  284.     $tcp2 set fid_ $fid
  285.     $sink set fid_ $fid
  286.     $ns_ connect $tcp2 $sink
  287.     # set up TCP-level connections
  288.     $sink listen ; # will figure out who its peer is
  289.     #set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s3) 1]
  290.     $tcp2 set window_ 1000
  291.     $tcp2 set rate_request_ 20
  292.     set ftp2 [new Application/FTP]
  293.     $ftp2 attach-agent $tcp2
  294.     $ns_ at 2.0 "$ftp2 produce 80"
  295.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  296.     $ns_ run
  297. }
  298. Class Test/high_request -superclass TestSuite
  299. Test/high_request instproc init {} {
  300.     $self instvar net_ test_ guide_ sndr rcvr qs
  301.     set net_ net3
  302.     set test_ high_request
  303.     set guide_  "A high Quick-Start request."
  304.     set sndr TCP/Sack1
  305.     set rcvr TCPSink/Sack1
  306.     Agent/QSAgent set alloc_rate_ 0.01
  307.     Agent/QSAgent set algorithm_ 1
  308.     Agent/TCP set qs_request_mode_ 0
  309.     set qs ON
  310.     $self next pktTraceFile
  311. }
  312. Test/high_request instproc run {} {
  313.     global quiet
  314.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  315.     puts "Guide: $guide_"
  316.     $ns_ node-config -QS $qs
  317.     $self setTopo
  318.     set stopTime 6
  319.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  320.     $tcp1 set window_ 8
  321.     set ftp1 [new Application/FTP]
  322.     $ftp1 attach-agent $tcp1
  323.     $ns_ at 0.0 "$ftp1 start"
  324.     set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s3) 1]
  325.     $tcp2 set window_ 1000
  326.     $tcp2 set rate_request_ 1000
  327.     set ftp2 [new Application/FTP]
  328.     $ftp2 attach-agent $tcp2
  329.     $ns_ at 2.0 "$ftp2 produce 80"
  330.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  331.     $ns_ run
  332. }
  333. Class Test/bad_router -superclass TestSuite
  334. Test/bad_router instproc init {} {
  335.     $self instvar net_ test_ guide_ sndr rcvr qs
  336.     set net_ net3
  337.     set test_ bad_router
  338.     set guide_  "Not all routers support quickstart."
  339.     set sndr TCP/Sack1
  340.     set rcvr TCPSink/Sack1
  341.     set qs ON
  342.     $self next pktTraceFile
  343. }
  344. Test/bad_router instproc run {} {
  345.     global quiet
  346.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  347.     puts "Guide: $guide_"
  348.     $ns_ node-config -QS $qs
  349.     $self setTopo
  350.     set router $node_(r2)
  351.     [$router qs-agent] set qs_enabled_ 0
  352.     set stopTime 6
  353.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  354.     $tcp1 set window_ 8
  355.     set ftp1 [new Application/FTP]
  356.     $ftp1 attach-agent $tcp1
  357.     $ns_ at 0.0 "$ftp1 start"
  358.     set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s3) 1]
  359.     $tcp2 set window_ 1000
  360.     $tcp2 set rate_request_ 20
  361.     set ftp2 [new Application/FTP]
  362.     $ftp2 attach-agent $tcp2
  363.     $ns_ at 2.0 "$ftp2 produce 80"
  364.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  365.     $ns_ run
  366. }
  367. Class Test/changing_rtt -superclass TestSuite
  368. Test/changing_rtt instproc init {} {
  369.     $self instvar net_ test_ guide_ sndr rcvr qs
  370.     set net_ net3
  371.     set test_ changing_rtt
  372.     set guide_  "Changing round-trip times."
  373.     set sndr TCP/Sack1
  374.     set rcvr TCPSink/Sack1
  375.     set qs ON
  376.     $self next pktTraceFile
  377. }
  378. Test/changing_rtt instproc run {} {
  379.     global quiet
  380.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  381.     puts "Guide: $guide_"
  382.     $ns_ node-config -QS $qs
  383.     $self setTopo
  384.     set stopTime 6
  385.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  386.     $tcp1 set window_ 8
  387.     set ftp1 [new Application/FTP]
  388.     $ftp1 attach-agent $tcp1
  389.     $ns_ at 0.0 "$ftp1 start"
  390.     set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s3) 1]
  391.     $tcp2 set window_ 1000
  392.     $tcp2 set rate_request_ 20
  393.     set ftp2 [new Application/FTP]
  394.     $ftp2 attach-agent $tcp2
  395.     $ns_ at 2.0 "$ftp2 produce 80"
  396.     $ns_ at 3.1 "$ns_ delay $node_(r1) $node_(r2) 100ms duplex"
  397.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  398.     $ns_ run
  399. }
  400. Class Test/changing_rtt1 -superclass TestSuite
  401. Test/changing_rtt1 instproc init {} {
  402.     $self instvar net_ test_ guide_ sndr rcvr qs
  403.     set net_ net3
  404.     set test_ changing_rtt1
  405.     set guide_  "Changing round-trip times."
  406.     set sndr TCP/Newreno
  407.     set rcvr TCPSink
  408.     set qs ON
  409.     Test/changing_rtt1 instproc run {} [Test/changing_rtt info instbody run ]
  410.     $self next pktTraceFile
  411. }
  412. Class Test/no_acks_back -superclass TestSuite
  413. Test/no_acks_back instproc init {} {
  414.     $self instvar net_ test_ guide_ sndr rcvr qs
  415.     set net_ net3
  416.     set test_ no_acks_back
  417.     set guide_  "After the first exchange, sender receives no acks."
  418.     set sndr TCP/Sack1
  419.     set rcvr TCPSink/Sack1
  420.     set qs ON
  421.     $self next pktTraceFile
  422. }
  423. Test/no_acks_back instproc run {} {
  424.     global quiet
  425.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  426.     puts "Guide: $guide_"
  427.     $ns_ node-config -QS $qs
  428.     $self setTopo
  429.     set stopTime 10
  430.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  431.     $tcp1 set window_ 8
  432.     set ftp1 [new Application/FTP]
  433.     $ftp1 attach-agent $tcp1
  434.     $ns_ at 0.0 "$ftp1 start"
  435.     set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s4) 1]
  436.     $tcp2 set window_ 1000
  437.     $tcp2 set rate_request_ 20
  438.     set ftp2 [new Application/FTP]
  439.     $ftp2 attach-agent $tcp2
  440.     $ns_ at 2.0 "$ftp2 produce 80"
  441.     $ns_ at 3.0 "$ns_ delay $node_(r2) $node_(s4) 10000ms duplex"
  442.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  443.     $ns_ run
  444. }
  445. Class Test/pkt_drops -superclass TestSuite
  446. Test/pkt_drops instproc init {} {
  447.     $self instvar net_ test_ guide_ sndr rcvr qs
  448.     set net_ net2
  449.     set test_ pkt_drops
  450.     set guide_  "Packets are dropped in the initial window after quickstart."
  451.     set sndr TCP/Sack1
  452.     set rcvr TCPSink/Sack1
  453.     set qs ON
  454.     $self next pktTraceFile
  455. }
  456. Test/pkt_drops instproc run {} {
  457.     global quiet
  458.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  459.     puts "Guide: $guide_"
  460.     $ns_ node-config -QS $qs
  461.     $self setTopo
  462.     set stopTime 20
  463.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  464.     $tcp1 set window_ 8
  465.     set ftp1 [new Application/FTP]
  466.     $ftp1 attach-agent $tcp1
  467.     $ns_ at 0.0 "$ftp1 start"
  468.     set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s4) 1]
  469.     $tcp2 set window_ 1000
  470.     $tcp2 set rate_request_ 20
  471.     $tcp2 set tcp_qs_recovery_ true
  472.     set ftp2 [new Application/FTP]
  473.     $ftp2 attach-agent $tcp2
  474.     $ns_ at 2.0 "$ftp2 produce 80"
  475.     $self drop_pkts {5 6}
  476.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  477.     $ns_ run
  478. }
  479. proc printdrops { fid fmon } {
  480.         set fcl [$fmon classifier]; # flow classifier
  481.         set flow [$fcl lookup auto 0 0 $fid]
  482.         if {$flow != ""} {
  483.           puts "fid: $fid per-link total_packets [$flow set pdepartures_]"
  484.           puts "fid: $fid per-link total_bytes [$flow set bdepartures_]"
  485.           puts "fid: $fid per-link total_drops [$flow set pdrops_]"
  486.           puts "fid: $fid per-link qs_pkts [$flow set qs_pkts_]"
  487.           puts "fid: $fid per-link qs_bytes [$flow set qs_bytes_]"
  488.           puts "fid: $fid per-link qs_drops [$flow set qs_drops_]"
  489.         }
  490. }
  491. Class Test/many_requests -superclass TestSuite
  492. Test/many_requests instproc init {} {
  493.     $self instvar net_ test_ guide_ sndr rcvr qs
  494.     set net_ net4
  495.     set test_ many_requests
  496.     set guide_  "Many Quick-Start requests."
  497.     set sndr TCP/Newreno
  498.     set rcvr TCPSink
  499.     set qs ON
  500.     $self next pktTraceFile
  501. }
  502. Test/many_requests instproc run {} {
  503.     global quiet
  504.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  505.     puts "Guide: $guide_"
  506.     $ns_ node-config -QS $qs
  507.     $self setTopo
  508.     set stopTime 10
  509.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  510.     $tcp1 set window_ 8
  511.     set ftp1 [new Application/FTP]
  512.     $ftp1 attach-agent $tcp1
  513.     $ns_ at 0.0 "$ftp1 start"
  514.     set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s3) 1]
  515.     $tcp2 set window_ 1000
  516.     $tcp2 set rate_request_ 100
  517.     set ftp2 [new Application/FTP]
  518.     $ftp2 attach-agent $tcp2
  519.     $ns_ at 2.0 "$ftp2 produce 400"
  520.     set tcp3 [$ns_ create-connection $sndr $node_(s2) $rcvr $node_(s4) 2]
  521.     $tcp3 set window_ 1000
  522.     $tcp3 set rate_request_ 100
  523.     set ftp3 [new Application/FTP]
  524.     $ftp3 attach-agent $tcp3
  525.     $ns_ at 3.0 "$ftp3 produce 200"
  526.     set tcp4 [$ns_ create-connection $sndr $node_(s2) $rcvr $node_(s4) 3]
  527.     $tcp4 set window_ 1000
  528.     $tcp4 set rate_request_ 100
  529.     set ftp4 [new Application/FTP]
  530.     $ftp4 attach-agent $tcp4
  531.     $ns_ at 4.0 "$ftp4 produce 100"
  532.     set tcp5 [$ns_ create-connection $sndr $node_(s2) $rcvr $node_(s4) 4]
  533.     $tcp5 set window_ 1000
  534.     $tcp5 set rate_request_ 100
  535.     set ftp5 [new Application/FTP]
  536.     $ftp5 attach-agent $tcp5
  537.     $ns_ at 6.0 "$ftp5 produce 100"
  538.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  539.     $ns_ run
  540. }
  541. Class Test/many_requests3 -superclass TestSuite
  542. Test/many_requests3 instproc init {} {
  543.     $self instvar net_ test_ guide_ sndr rcvr qs
  544.     set net_ net4
  545.     set test_ many_requests3
  546.     set guide_  "Many Quick-Start requests, generous router."
  547.     set sndr TCP/Newreno
  548.     set rcvr TCPSink
  549.     set qs ON
  550.     Agent/QSAgent set alloc_rate_ 0.95 
  551.     Agent/QSAgent set threshold_ 0.95
  552.     Test/many_requests3 instproc run {} [Test/many_requests info instbody run ]
  553.     $self next pktTraceFile
  554. }
  555. Class Test/stats -superclass TestSuite
  556. Test/stats instproc init {} {
  557.     $self instvar net_ test_ guide_ sndr rcvr qs
  558.     set net_  net2
  559.     set test_ stats   
  560.     set guide_  "Two TCPs, statistics."
  561.     set sndr TCP/Newreno
  562.     set rcvr TCPSink
  563.     Agent/TCP set print_request_ true
  564.     set qs ON
  565.     $self next pktTraceFile
  566. }
  567. Test/stats instproc run {} {
  568.     global quiet
  569.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  570.     if {$quiet == "false"} {puts $guide_}
  571.     $ns_ node-config -QS $qs
  572.     $self setTopo
  573.     set stopTime 6
  574.     set slink [$ns_ link $node_(r1) $node_(r2)] 
  575.     set fmon [$ns_ makeflowmon Fid]
  576.     $ns_ attach-fmon $slink $fmon
  577.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  578.     $tcp1 set window_ 8
  579.     set ftp1 [new Application/FTP]
  580.     $ftp1 attach-agent $tcp1
  581.     $ns_ at 0.0 "$ftp1 start"
  582.     set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s3) 1]
  583.     $tcp2 set window_ 1000
  584.     $tcp2 set rate_request_ 20
  585.     set ftp2 [new Application/FTP]
  586.     $ftp2 attach-agent $tcp2
  587.     $ns_ at 2.0 "$ftp2 produce 80"
  588.     $ns_ at $stopTime "printdrops 1 $fmon;"
  589.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  590.     $ns_ run
  591. }
  592. Class Test/stats1 -superclass TestSuite
  593. Test/stats1 instproc init {} {
  594.     $self instvar net_ test_ guide_ sndr rcvr qs
  595.     set net_ net2
  596.     set test_ stats1
  597.     set guide_  "Quick-Start packet drops, statistics."
  598.     Agent/TCP set print_request_ true
  599.     set sndr TCP/Sack1
  600.     set rcvr TCPSink/Sack1
  601.     set qs ON
  602.     $self next pktTraceFile
  603. }
  604. Test/stats1 instproc run {} {
  605.     global quiet
  606.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  607.     puts "Guide: $guide_"
  608.     $ns_ node-config -QS $qs
  609.     $self setTopo
  610.     set stopTime 20
  611.     set slink [$ns_ link $node_(s1) $node_(r1)] 
  612.     set fmon [$ns_ makeflowmon Fid]
  613.     $ns_ attach-fmon $slink $fmon
  614.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  615.     $tcp1 set window_ 8
  616.     set ftp1 [new Application/FTP]
  617.     $ftp1 attach-agent $tcp1
  618.     $ns_ at 0.0 "$ftp1 start"
  619.     set tcp2 [$ns_ create-connection $sndr $node_(s1) $rcvr $node_(s4) 1]
  620.     $tcp2 set window_ 1000
  621.     $tcp2 set rate_request_ 20
  622.     $tcp2 set tcp_qs_recovery_ true
  623.     set ftp2 [new Application/FTP]
  624.     $ftp2 attach-agent $tcp2
  625.     $ns_ at 2.0 "$ftp2 produce 80"
  626.     $self drop_pkts {5 6}
  627.     $ns_ at $stopTime "printdrops 1 $fmon;"
  628.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  629.     $ns_ run
  630. }
  631. # 20 KBps = 20 pkts per second
  632. Class Test/rate_request -superclass TestSuite
  633. Test/rate_request instproc init {} {
  634.     $self instvar net_ test_ guide_ sndr rcvr qs
  635.     set net_ net3
  636.     set test_ rate_request
  637.     set guide_  "Quick-Start, request of 20 Kbps."
  638.     set qs ON
  639.     Agent/TCP set qs_request_mode_ 0
  640.     $self next pktTraceFile
  641. }
  642. Test/rate_request instproc run {} {
  643.     global quiet
  644.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  645.     puts "Guide: $guide_"
  646.     $ns_ node-config -QS $qs
  647.     $self setTopo
  648.     set stopTime 2
  649.     if {$quiet == "false"} {
  650.         Agent/TCP set print_request_ true
  651.     }
  652.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  653.     $tcp1 set window_ 10000
  654.     $tcp1 set rate_request_ 20
  655.     set ftp1 [new Application/FTP]
  656.     $ftp1 attach-agent $tcp1
  657.     $ns_ at 0.0 "$ftp1 start"
  658.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  659.     $ns_ run
  660. }
  661. # The request isn't limited by the TCP window, but
  662. #   the actual sending rate is.
  663. Class Test/rate_request1 -superclass TestSuite
  664. Test/rate_request1 instproc init {} {
  665.     $self instvar net_ test_ guide_ sndr rcvr qs
  666.     set net_ net3
  667.     set test_ rate_request1
  668.     set guide_  "Quick-Start, request not limited by TCP window."
  669.     set qs ON
  670.     Agent/TCP set qs_request_mode_ 1
  671.     $self next pktTraceFile
  672. }
  673. Test/rate_request1 instproc run {} {
  674.     global quiet
  675.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  676.     puts "Guide: $guide_"
  677.     $ns_ node-config -QS $qs
  678.     $self setTopo
  679.     set stopTime 2
  680.     if {$quiet == "false"} {
  681.         Agent/TCP set print_request_ true
  682.     }
  683.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  684.     $tcp1 set window_ 10
  685.     $tcp1 set rate_request_ 20
  686.     set ftp1 [new Application/FTP]
  687.     $ftp1 attach-agent $tcp1
  688.     $ns_ at 0.0 "$ftp1 start"
  689.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  690.     $ns_ run
  691. }
  692. # Only make requesst if at least qs_thresh_ packets to send.
  693. Class Test/rate_request3 -superclass TestSuite
  694. Test/rate_request3 instproc init {} {
  695.     $self instvar net_ test_ guide_ sndr rcvr qs
  696.     set net_ net3
  697.     set test_ rate_request3
  698.     set guide_  "Quick-Start, no request because of insufficient data."
  699.     set qs ON
  700.     Agent/TCP set qs_request_mode_ 1
  701.     Agent/TCP set qs_thresh_ 20
  702.     Agent/TCP set qs_rtt_ 1000
  703.     $self next pktTraceFile
  704. }
  705. Test/rate_request3 instproc run {} {
  706.     global quiet
  707.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  708.     puts "Guide: $guide_"
  709.     $ns_ node-config -QS $qs
  710.     $self setTopo
  711.     set stopTime 2
  712.     if {$quiet == "false"} {
  713.         Agent/TCP set print_request_ true
  714.     }
  715.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  716.     $tcp1 set window_ 100
  717.     $tcp1 set rate_request_ 2000
  718.     set ftp1 [new Application/FTP]
  719.     $ftp1 attach-agent $tcp1
  720.     $ns_ at 0.0 "$ftp1 produce 10"
  721.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  722.     $ns_ run
  723. }
  724. # Requesst limited by available data.
  725. Class Test/rate_request4 -superclass TestSuite
  726. Test/rate_request4 instproc init {} {
  727.     $self instvar net_ test_ guide_ sndr rcvr qs
  728.     set net_ net3
  729.     set test_ rate_request4
  730.     set guide_  "Quick-Start, rate request limited by available data."
  731.     set qs ON
  732.     Agent/TCP set qs_request_mode_ 1
  733.     Agent/TCP set qs_thresh_ 5
  734.     Agent/TCP set qs_rtt_ 1000
  735.     $self next pktTraceFile
  736. }
  737. Test/rate_request4 instproc run {} {
  738.     global quiet
  739.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  740.     puts "Guide: $guide_"
  741.     $ns_ node-config -QS $qs
  742.     $self setTopo
  743.     set stopTime 2
  744.     if {$quiet == "false"} {
  745.         Agent/TCP set print_request_ true
  746.     }
  747.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  748.     $tcp1 set window_ 100
  749.     $tcp1 set rate_request_ 2000
  750.     set ftp1 [new Application/FTP]
  751.     $ftp1 attach-agent $tcp1
  752.     $ns_ at 0.0 "$ftp1 produce 10"
  753.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  754.     $ns_ run
  755. }
  756. Class Test/routers1 -superclass TestSuite
  757. Test/routers1 instproc init {} {
  758.     $self instvar net_ test_ guide_ sndr rcvr qs
  759.     set net_ net3
  760.     set test_ routers1
  761.     set guide_  "Quick-Start, rate request 100KBps."
  762.     set qs ON
  763.     set sndr TCP/Newreno
  764.     set rcvr TCPSink
  765.     Agent/QSAgent set algorithm_ 3
  766.     Agent/QSAgent set threshold_ 0.9
  767.     Agent/QSAgent set alloc_rate_ 0.9
  768.     $self next pktTraceFile
  769. }
  770. Test/routers1 instproc run {} {
  771.     global quiet
  772.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  773.     puts "Guide: $guide_"
  774.     $ns_ node-config -QS $qs
  775.     $self setTopo
  776.     set stopTime 6
  777.     if {$quiet == "false"} {
  778.         Agent/TCP set print_request_ true
  779.     }
  780.     Agent/TCP set window_ 10000
  781.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  782.     $tcp1 set rate_request_ 100
  783.     set ftp1 [new Application/FTP]
  784.     $ftp1 attach-agent $tcp1
  785.     $ns_ at 1.0 "$ftp1 produce 100"
  786.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  787.     $ns_ run
  788. }
  789. Class Test/routers2 -superclass TestSuite
  790. Test/routers2 instproc init {} {
  791.     $self instvar net_ test_ guide_ sndr rcvr qs
  792.     set net_ net3
  793.     set test_ routers2
  794.     set guide_  "Quick-Start, routers approve only 62 KBps"
  795.     # 100 Mbps * 0.005 = 500 Kbps = 62 KBps. 
  796.     set qs ON
  797.     set sndr TCP/Newreno
  798.     set rcvr TCPSink
  799.     Agent/QSAgent set algorithm_ 3
  800.     Agent/QSAgent set threshold_ 0.005
  801.     Agent/QSAgent set alloc_rate_ 0.005
  802.     Test/routers2 instproc run {} [Test/routers1 info instbody run ]
  803.     $self next pktTraceFile
  804. }
  805. Class Test/routers3 -superclass TestSuite
  806. Test/routers3 instproc init {} {
  807.     $self instvar net_ test_ guide_ sndr rcvr qs
  808.     set net_ net3
  809.     set test_ routers3
  810.     set guide_  "Quick-Start, log-scale for rate encoding"
  811.     # 100 Mbps * 0.005 = 500 Kbps = 62 KBps. 
  812.     set qs ON
  813.     set sndr TCP/Newreno
  814.     set rcvr TCPSink
  815.     Agent/QSAgent set algorithm_ 3
  816.     Agent/QSAgent set threshold_ 0.9
  817.     Agent/QSAgent set alloc_rate_ 0.9
  818.     Agent/QSAgent set rate_function_ 2
  819.     Test/routers3 instproc run {} [Test/routers1 info instbody run ]
  820.     $self next pktTraceFile
  821. }
  822. # This router allocates the full link bandwidth for QS,
  823. # and the sender requests the full bandwidth for QS.
  824. Class Test/routers4 -superclass TestSuite
  825. Test/routers4 instproc init {} {
  826.     $self instvar net_ test_ guide_ sndr rcvr qs
  827.     set net_ net3
  828.     set test_ routers4
  829.     set guide_  "Quick-Start, request for full link bandwidth."
  830.     set qs ON
  831.     set sndr TCP/Newreno
  832.     set rcvr TCPSink
  833.     Agent/QSAgent set algorithm_ 3
  834.     Agent/QSAgent set threshold_ 1.0
  835.     Agent/QSAgent set alloc_rate_ 1.0
  836.     Agent/QSAgent set rate_function_ 2
  837.     $self next pktTraceFile
  838. }
  839. Test/routers4 instproc run {} {
  840.     global quiet
  841.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  842.     puts "Guide: $guide_"
  843.     $ns_ node-config -QS $qs
  844.     $self setTopo
  845.     set stopTime 4
  846.     if {$quiet == "false"} {
  847.         Agent/TCP set print_request_ true
  848.     }
  849.     $ns_ at 0.0 "$ns_ bandwidth $node_(r1) $node_(r2) 0.64Mbps duplex"
  850.     Agent/TCP set window_ 10000
  851.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  852.     $tcp1 set rate_request_ 80
  853.     set ftp1 [new Application/FTP]
  854.     $ftp1 attach-agent $tcp1
  855.     $ns_ at 1.0 "$ftp1 produce 100"
  856.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  857.     $ns_ run
  858. }
  859. # This router allocates the full link bandwidth for QS,
  860. Class Test/routers5 -superclass TestSuite
  861. Test/routers5 instproc init {} {
  862.     $self instvar net_ test_ guide_ sndr rcvr qs
  863.     set net_ net3
  864.     set test_ routers5
  865.     set guide_  "Quick-Start, two requests, total for full link bandwidth."
  866.     set qs ON
  867.     set sndr TCP/Newreno
  868.     set rcvr TCPSink
  869.     Agent/QSAgent set algorithm_ 3
  870.     Agent/QSAgent set threshold_ 1.0
  871.     Agent/QSAgent set alloc_rate_ 1.0
  872.     Agent/QSAgent set rate_function_ 2
  873.     $self next pktTraceFile
  874. }
  875. Test/routers5 instproc run {} {
  876.     global quiet
  877.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  878.     puts "Guide: $guide_"
  879.     $ns_ node-config -QS $qs
  880.     $self setTopo
  881.     set stopTime 4
  882.     if {$quiet == "false"} {
  883.         Agent/TCP set print_request_ true
  884.     }
  885.     $ns_ at 0.0 "$ns_ bandwidth $node_(r1) $node_(r2) 0.64Mbps duplex"
  886.     Agent/TCP set window_ 10000
  887.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  888.     $tcp1 set rate_request_ 40
  889.     set ftp1 [new Application/FTP]
  890.     $ftp1 attach-agent $tcp1
  891.     $ns_ at 1.0 "$ftp1 produce 100"
  892.     set tcp2 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 1]
  893.     $tcp2 set rate_request_ 40
  894.     set ftp2 [new Application/FTP]
  895.     $ftp2 attach-agent $tcp2
  896.     $ns_ at 1.1 "$ftp2 produce 100"
  897.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  898.     $ns_ run
  899. }
  900. # This router allocates the full link bandwidth for QS,
  901. Class Test/routers6 -superclass TestSuite
  902. Test/routers6 instproc init {} {
  903.     $self instvar net_ test_ guide_ sndr rcvr qs
  904.     set net_ net3
  905.     set test_ routers6
  906.     set guide_  "Quick-Start, three requests, total for more than link bandwidth."
  907.     set qs ON
  908.     set sndr TCP/Newreno
  909.     set rcvr TCPSink
  910.     Agent/QSAgent set algorithm_ 3
  911.     #Agent/QSAgent set algorithm_ 2
  912.     Agent/QSAgent set threshold_ 1.0
  913.     Agent/QSAgent set alloc_rate_ 1.0
  914.     Agent/QSAgent set rate_function_ 2
  915.     $self next pktTraceFile
  916. }
  917. Test/routers6 instproc run {} {
  918.     global quiet
  919.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  920.     puts "Guide: $guide_"
  921.     $ns_ node-config -QS $qs
  922.     $self setTopo
  923.     set stopTime 4
  924.     if {$quiet == "false"} {
  925.         Agent/TCP set print_request_ true
  926.     }
  927.     $ns_ at 0.0 "$ns_ bandwidth $node_(r1) $node_(r2) 0.64Mbps duplex"
  928.     Agent/TCP set window_ 10000
  929.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  930.     $tcp1 set rate_request_ 40
  931.     set ftp1 [new Application/FTP]
  932.     $ftp1 attach-agent $tcp1
  933.     $ns_ at 1.0 "$ftp1 produce 100"
  934.     set tcp2 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 1]
  935.     $tcp2 set rate_request_ 40
  936.     set ftp2 [new Application/FTP]
  937.     $ftp2 attach-agent $tcp2
  938.     $ns_ at 1.1 "$ftp2 produce 100"
  939.     set tcp3 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 2]
  940.     $tcp3 set rate_request_ 40
  941.     set ftp3 [new Application/FTP]
  942.     $ftp3 attach-agent $tcp3
  943.     $ns_ at 1.2 "$ftp3 produce 100"
  944.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  945.     $ns_ run
  946. }
  947. Class Test/small-request -superclass TestSuite
  948. Test/small-request instproc init {} {
  949.     $self instvar net_ test_ guide_ sndr rcvr qs
  950.     set net_ net3
  951.     set test_ small-request
  952.     set guide_  "Quick-Start, a very small request."
  953.     set qs ON
  954.     set sndr TCP/Newreno
  955.     set rcvr TCPSink
  956.     $self next pktTraceFile
  957. }
  958. Test/small-request instproc run {} {
  959.     global quiet
  960.     $self instvar ns_ node_ testName_ guide_ sndr rcvr qs
  961.     puts "Guide: $guide_"
  962.     $ns_ node-config -QS $qs
  963.     $self setTopo
  964.     set stopTime 6
  965.     if {$quiet == "false"} {
  966.         Agent/TCP set print_request_ true
  967.     }
  968.     Agent/TCP set window_ 10000
  969.     set tcp1 [$ns_ create-connection TCP/Newreno $node_(s1) TCPSink $node_(s3) 0]
  970.     $tcp1 set rate_request_ 4
  971.     set ftp1 [new Application/FTP]
  972.     $ftp1 attach-agent $tcp1
  973.     $ns_ at 1.0 "$ftp1 produce 100"
  974.     $ns_ at $stopTime "$self cleanupAll $testName_ $stopTime" 
  975.     $ns_ run
  976. }
  977. # We still need a test that tests state_delay_:
  978. # Agent/QSAgent set state_delay_  0.3
  979. TestSuite runTest