|
1 # |
|
2 # Copyright 2005-2006 Intel Corporation |
|
3 # |
|
4 # Licensed under the Apache License, Version 2.0 (the "License"); |
|
5 # you may not use this file except in compliance with the License. |
|
6 # You may obtain a copy of the License at |
|
7 # |
|
8 # http://www.apache.org/licenses/LICENSE-2.0 |
|
9 # |
|
10 # Unless required by applicable law or agreed to in writing, software |
|
11 # distributed under the License is distributed on an "AS IS" BASIS, |
|
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
|
13 # See the License for the specific language governing permissions and |
|
14 # limitations under the License. |
|
15 # |
|
16 |
|
17 test::name dtn-perf |
|
18 net::num_nodes 3 |
|
19 |
|
20 manifest::file apps/dtnperf/dtnperf-server dtnperf-server |
|
21 manifest::file apps/dtnperf/dtnperf-client dtnperf-client |
|
22 |
|
23 set perftime 60 |
|
24 set delivery_opts "" |
|
25 set storage_type berkeleydb |
|
26 set clayer tcp |
|
27 |
|
28 set mode "memory" |
|
29 |
|
30 for {set i 0} {$i < [llength $opt(opts)]} {incr i} { |
|
31 set var [lindex $opt(opts) $i] |
|
32 if {$var == "-perftime" } { |
|
33 set perftime [lindex $opt(opts) [incr i]] |
|
34 |
|
35 } elseif {$var == "-forwarding_rcpts" } { |
|
36 append delivery_opts "-F " |
|
37 |
|
38 } elseif {$var == "-receive_rcpts" } { |
|
39 append delivery_opts "-R " |
|
40 |
|
41 } elseif {$var == "-payload_len"} { |
|
42 set len [lindex $opt(opts) [incr i]] |
|
43 append delivery_opts "-p $len " |
|
44 |
|
45 } elseif {$var == "-file_payload"} { |
|
46 set mode "file" |
|
47 |
|
48 } elseif {$var == "-storage_type" } { |
|
49 set storage_type [lindex $opt(opts) [incr i]] |
|
50 |
|
51 } elseif {$var == "-cl" || $var == "cl"} { |
|
52 set clayer [lindex $opt(opts) [incr i]] |
|
53 |
|
54 } else { |
|
55 testlog error "ERROR: unrecognized test option '$var'" |
|
56 exit 1 |
|
57 } |
|
58 } |
|
59 |
|
60 dtn::config -storage_type $storage_type |
|
61 dtn::config_interface $clayer |
|
62 dtn::config_linear_topology ALWAYSON $clayer true |
|
63 |
|
64 if {$mode == "memory"} { |
|
65 append delivery_opts "-m " |
|
66 } else { |
|
67 append delivery_opts "-f dtnperf.snd " |
|
68 } |
|
69 |
|
70 test::script { |
|
71 testlog "Running dtnds" |
|
72 dtn::run_dtnd * |
|
73 |
|
74 testlog "Waiting for dtnds to start up" |
|
75 dtn::wait_for_dtnd * |
|
76 |
|
77 set N [net::num_nodes] |
|
78 set last_node [expr $N - 1] |
|
79 |
|
80 set dest dtn://host-${last_node} |
|
81 |
|
82 set server_rundir [dist::get_rundir $net::host($last_node) $last_node] |
|
83 set server_opts "-v -a 100 -d $server_rundir " |
|
84 if {$mode == "memory"} { |
|
85 append server_opts "-m" |
|
86 } |
|
87 set server_pid [dtn::run_app $last_node dtnperf-server $server_opts] |
|
88 after 1000 |
|
89 |
|
90 set client_rundir [dist::get_rundir $net::host(0) 0] |
|
91 regsub {dtnperf.snd} $delivery_opts "$client_rundir/dtnperf.snd" delivery_opts |
|
92 testlog "Running dtnperf-client for $perftime seconds" |
|
93 set client_pid [dtn::run_app 0 dtnperf-client \ |
|
94 "-t $perftime $delivery_opts -d $dest" ] |
|
95 |
|
96 # XXX might want to try running dtnperf-client when sending to a |
|
97 # non-existent endpoint too, such as: |
|
98 # "-t $perftime -m -d # $dest/foo" ] |
|
99 |
|
100 for {set i 0} {$i < $perftime} {incr i} { |
|
101 for {set id 0} {$id <= $last_node} {incr id} { |
|
102 testlog "Node $id: [dtn::tell_dtnd $id bundle stats]" |
|
103 } |
|
104 testlog "" |
|
105 after 1000 |
|
106 } |
|
107 |
|
108 testlog "waiting for dtnperf-client to exit" |
|
109 run::wait_for_pid_exit 0 $client_pid |
|
110 |
|
111 testlog "Final stats:" |
|
112 for {set id 0} {$id <= $last_node} {incr id} { |
|
113 testlog "$id: [dtn::tell_dtnd $id bundle stats]" |
|
114 } |
|
115 testlog "" |
|
116 |
|
117 testlog "Test success!" |
|
118 } |
|
119 |
|
120 test::exit_script { |
|
121 if {$server_pid == ""} { |
|
122 testlog "ERROR: server_pid not set" |
|
123 } else { |
|
124 testlog "Stopping dtnperf-server (node $last_node server_pid $server_pid test pid [pid])" |
|
125 run::kill_pid $last_node $server_pid 1 |
|
126 run::wait_for_pid_exit $last_node $server_pid |
|
127 } |
|
128 |
|
129 testlog "Stopping all dtnds" |
|
130 dtn::stop_dtnd * |
|
131 } |