OSDN Git Service

* public snapshot of sid simulator
[pf3gnuchains/pf3gnuchains3x.git] / sid / component / testsuite / sidcomp.consoles / socketval.exp
1 # Testsuite for the socket server
2 #
3 # Copyright (C) 1999 Red Hat
4 #include <tcl.h>
5
6 # XXX: FChE 2000-11-13: disable this test; it hangs too easily
7 return
8
9 set test "sid configuration"
10 sid_config_component_etc_test_with_tracing "server.conf" \
11     "load [sid_find_file libconsoles.la] console_component_library" \
12     "sid-io-socket-server" \
13     "load [sid_find_file libsched.la] sched_component_library
14 new sid-sched-host-accurate sched
15 new sid-io-socket-client client
16 set sched num-clients 2
17 set sched enabled? 1
18 connect-pin sched 0-control <- wrapper poll-control
19 connect-pin sched 0-event -> wrapper poll-event
20 connect-pin sched 1-control <- client poll-control
21 connect-pin sched 1-event -> client poll-event
22 relate tester client client"
23 pass $test
24
25 set test "sid start"
26 if {[sid_start "server.conf"]} { pass $test } else { fail $test ; return }
27
28 set test "check attribute list"
29 sid_assert_includes_all "sid::component::attribute_names $victim" {tx-count tx-buffer rx-count poll-count avg-tx-buffer-size server? sockaddr-local sockaddr-peer verbose? trace-traffic? buffer-while-disconnected? connected? max-poll-interval poll-interval}
30
31 set test "check attribute pin list"
32 set category "pin"
33 sid_assert_includes_all "sid::component::attribute_names_in_category $victim $category" {init fini tx rx}
34
35 set test "check attribute register list"
36 set category "register"
37 sid_assert_includes_all "sid::component::attribute_names_in_category $victim $category" {tx-count tx-buffer rx-count poll-count avg-tx-buffer-size sockaddr-peer connected? poll-interval}
38
39 set test "check attribute setting list"
40 set category "setting"
41 sid_assert_includes_all "sid::component::attribute_names_in_category $victim $category" {server? sockaddr-local verbose? trace-traffic? buffer-while-disconnected? max-poll-interval}
42
43 set test "check attribute watchable list"
44 set category "watchable"
45 set attr [sid_cmd "sid::component::attribute_names_in_category $victim $category"]
46 if { $attr == "" } then { pass $test } else { fail $test }
47
48 set test "check pin names"
49 set pins [sid_cmd "sid::component::pin_names $victim"]
50 sid_assert_includes_all "sid::component::pin_names $victim" {poll-control rx fini init poll-event tx}
51
52 set test "check bus names"
53 set bus [sid_cmd "sid::component::bus_names $victim"]
54 if { $bus == "" } then { pass $test } else { fail $test }
55
56 set test "check accessor names"
57 set acc [sid_cmd "sid::component::accessor_names $victim"]
58 if { $acc == "" } then { pass $test } else { fail $test }
59
60 set test "check relationship names"
61 set rel [sid_cmd "sid::component::relationship_names $victim"]
62 if { $rel == "" } then { pass $test } else { fail $test }
63
64 set test "query server? attribute"
65 set value [sid_cmd "sid::component::attribute_value $victim server?"]
66 if { $value == "yes" } then { pass $test } else { fail $test }
67
68 set test "test presence of client component"
69 set client [sid_cmd "set relationships(client)"]
70 if {$client != ""} { pass $test } else { fail $test }
71
72 set test "query server? attribute for client"
73 set value [sid_cmd "sid::component::attribute_value $client server?"]
74 if { $value == "no" } then { pass $test } else { fail $test }
75
76 set test "check default for max-poll-interval"
77 set value [sid_cmd "sid::component::attribute_value $victim max-poll-interval"]
78 if { $value == "250" } then { pass $test } else { fail $test }
79
80 set test "check default for sockaddr-peer"
81 set value [sid_cmd "sid::component::attribute_value $victim sockaddr-peer"]
82 if { $value == "0.0.0.0:0" } then { pass $test } else { fail $test }
83
84 set test "check default for sockaddr-local"
85 set value [sid_cmd "sid::component::attribute_value $victim sockaddr-local"]
86 if { $value == "0.0.0.0:0" } then { pass $test } else { fail $test }
87
88 set test "check default for verbose?"
89 set value [sid_cmd "sid::component::attribute_value $victim verbose?"]
90 if { $value == "no" } then { pass $test } else { fail $test }
91
92 set test "check default for trace-traffic?"
93 set value [sid_cmd "sid::component::attribute_value $victim trace-traffic?"]
94 if { $value == "no" } then { pass $test } else { fail $test }
95
96 set test "check if connection exists "
97 set value [sid_cmd "sid::component::attribute_value $victim connected?"]
98 if { $value == "no" } then { pass $test } else { fail $test }
99
100 set test "query connected? attribute at initialization"
101 set ipaddr "127.0.0.1:1234"
102 set status [sid_cmd "sid::component::set_attribute_value $victim sockaddr-local $ipaddr "]
103 set init [sid_cmd "sid::component::find_pin $victim init"]
104 set value 1
105 sid_cmd "sid::pin::driven_h4 $init $value"
106 set con [sid_cmd "sid::component::attribute_value $victim connected?"]
107 set addr [sid_cmd "sid::component::attribute_value $victim sockaddr-local"]
108 if { $status == "ok" && $init != "" && $con == "no" && $addr == $ipaddr} then { pass $test } else { fail $test }
109
110 set test "set up client"
111 set ipaddr "0.0.0.0:1234"
112 set status [sid_cmd "sid::component::set_attribute_value $client sockaddr-peer $ipaddr "]
113 set addr [sid_cmd "sid::component::attribute_value $client sockaddr-peer"]
114 set clientinit [sid_cmd "sid::component::find_pin $client init"]
115 set value 1
116 sid_cmd "sid::pin::driven_h4 $clientinit $value"
117 set con [sid_cmd "sid::component::attribute_value $client connected?"]
118 if { $status == "ok" && $clientinit != "" && $con == "no" && $addr == $ipaddr} then { pass $test } else { fail $test }
119
120 set test "drive poll-event and attempt to accept"
121 set value 1
122 set clientpollevent [sid_cmd "sid::component::find_pin $client poll-event"]
123 set pollevent [sid_cmd "sid::component::find_pin $victim poll-event"]
124 while { [sid_cmd "sid::component::attribute_value $victim connected?"] != "yes" || [sid_cmd "sid::component::attribute_value $client connected?"] != "yes"} {
125     sid_cmd "sid::pin::driven_h4 $pollevent $value"
126     sid_cmd "sid::pin::driven_h4 $clientpollevent $value"
127 #poll until connected
128
129 set peer [sid_cmd "sid::component::attribute_value $victim sockaddr-peer"]
130 set con [sid_cmd "sid::component::attribute_value $victim connected?"]
131 if { $pollevent != "" && $clientpollevent != "" && $peer != "0.0.0.0:0" && $con == "yes"} then { pass $test } else { fail $test }
132
133 set old_avg_tx [sid_cmd "sid::component::attribute_value $victim avg-tx-buffer-size"]
134 set tx [sid_cmd "sid::component::find_pin $victim tx"]
135 set atoz ABCDEFGHIJKLMNOPQRSTUVWXYZ
136 for {set i 0} {$i < 26} {incr i} {
137    set alpha [expr $i + 65]
138    set test "drive tx pin to $alpha and check tx-buffer value"
139    sid_cmd "sid::pin::driven_h4 $tx $alpha"
140    set buf [sid_cmd "sid::component::attribute_value $victim tx-buffer"]
141    set expected_value [string range $atoz 0 $i]
142    set new_avg_tx [sid_cmd "sid::component::attribute_value $victim avg-tx-buffer-size"]
143    if { $tx != "" && [ string compare $buf $expected_value ] == "0" && $old_avg_tx != $new_avg_tx } then { pass $test } else { fail $test }
144    set old_avg_tx $new_avg_tx
145 }
146
147 set prevtx_count [sid_cmd "sid::component::attribute_value $victim tx-count"]
148 set prevrx_count [sid_cmd "sid::component::attribute_value $client rx-count"]
149 set prevbuf [sid_cmd "sid::component::attribute_value $victim tx-buffer"]
150
151
152 set test "drive poll-event and check if tx-buffer is cleared"
153 sid_cmd "sid::pin::driven_h4 $pollevent 1"
154 set buf [sid_cmd "sid::component::attribute_value $victim tx-buffer"]
155 if {$buf == "" && $prevbuf != ""} then { pass $test} else {fail $test}
156
157 set test "check if tx-count changes after poll-event is driven"
158 set tx_count [sid_cmd "sid::component::attribute_value $victim tx-count"]
159 if { $tx_count != $prevtx_count } then { pass $test } else { fail $test}
160
161 set test "check if client rx-count changes after poll-event is driven on server side"
162 set value 1
163 sid_cmd "sid::pin::driven_h4 $clientpollevent $value"
164 set rx_count [sid_cmd "sid::component::attribute_value $client rx-count"]
165 if { $rx_count != $prevrx_count } then { pass $test } else { fail $test}
166
167 set test "check if poll-count changes"
168 set prev_count [sid_cmd "sid::component::attribute_value $victim poll-count"]
169 sid_cmd "sid::pin::driven_h4 $pollevent 1"
170 set poll_count [sid_cmd "sid::component::attribute_value $victim poll-count"]
171 set exp_count [expr $prev_count+1]
172 if { $poll_count == $exp_count && $prev_count != "0" } then { pass $test } else { fail $test}
173
174 set test "drive fini pin to close connection"
175 set value 1
176 set fini [sid_cmd "sid::component::find_pin $victim fini"]
177 sid_cmd "sid::pin::driven_h4 $fini $value"
178 set con [sid_cmd "sid::component::attribute_value $victim connected?"]
179 if { $fini != "" && $con == "no" } then { pass $test } else { fail $test }
180
181 set test "drive tx pin with buffer-while-disconnected? to no and check if buffer is not updated"
182 set status [sid_cmd "sid::component::set_attribute_value $victim buffer-while-disconnected? no "]
183 set value [sid_cmd "sid::component::attribute_value $victim buffer-while-disconnected?"]
184 set prev_buf [sid_cmd "sid::component::attribute_value $victim tx-buffer"]
185 sid_cmd "sid::pin::driven_h4 $tx 65"
186 set buf [sid_cmd "sid::component::attribute_value $victim tx-buffer"]
187 if {$status == "ok" && $value == "no" && $buf == $prev_buf} then {pass $test} else {fail $test}
188
189 set test "drive tx pin with buffer-while-disconnected? to yes and check if buffer is updated"
190 set status [sid_cmd "sid::component::set_attribute_value $victim buffer-while-disconnected? yes "]
191 set value [sid_cmd "sid::component::attribute_value $victim buffer-while-disconnected?"]
192 set prev_buf [sid_cmd "sid::component::attribute_value $victim tx-buffer"]
193 sid_cmd "sid::pin::driven_h4 $tx 65"
194 set buf [sid_cmd "sid::component::attribute_value $victim tx-buffer"]
195 if {$status == "ok" && $value == "yes" && $buf != $prev_buf} then {pass $test} else {fail $test}
196
197 set test "drive fini pin to close connection on client side"
198 set value 1
199 set clientfini [sid_cmd "sid::component::find_pin $client fini"]
200 sid_cmd "sid::pin::driven_h4 $clientfini $value"
201 set con [sid_cmd "sid::component::attribute_value $client connected?"]
202 if { $clientfini != "" && $con == "no" } then { pass $test } else { fail $test }
203
204 set test "mulitple connect and disconnect"
205 set value 1
206 set ipaddr "127.0.0.1:1234"
207 set status1 [sid_cmd "sid::component::set_attribute_value $victim sockaddr-local $ipaddr "]
208 set ipaddr "0.0.0.0:1234"
209 set status2 [sid_cmd "sid::component::set_attribute_value $client sockaddr-peer $ipaddr "]
210 set pollevent [sid_cmd "sid::component::find_pin $victim poll-event"]
211 set clientpollevent [sid_cmd "sid::component::find_pin $client poll-event"]
212 set init [sid_cmd "sid::component::find_pin $victim init"]
213 set clientinit [sid_cmd "sid::component::find_pin $client init"]
214 set value 1
215 while {$value < 255} {
216    sid_cmd "sid::pin::driven_h4 $init $value"
217    sid_cmd "sid::pin::driven_h4 $clientinit $value"
218    set iterations 0
219     while { ($iterations < 60) && [sid_cmd "sid::component::attribute_value $victim connected?"] != "yes" || [sid_cmd "sid::component::attribute_value $client connected?"] != "yes"} {
220        sid_cmd "sid::pin::driven_h4 $pollevent $value"
221        sid_cmd "sid::pin::driven_h4 $clientpollevent $value"
222        incr iterations
223        sleep 1
224 #poll until connected
225    } 
226    set clientfini [sid_cmd "sid::component::find_pin $client fini"]
227    set fini [sid_cmd "sid::component::find_pin $victim fini"]
228    sid_cmd "sid::pin::driven_h4 $fini $value"
229    sid_cmd "sid::pin::driven_h4 $clientfini $value"
230    set con [sid_cmd "sid::component::attribute_value $victim connected?"]
231    if { $init == "" || $clientinit == "" || $status1 != "ok" || $status2 != "ok" || $con == "yes" || $pollevent == "" || $clientpollevent =="" || $fini == "" || $clientfini == "" || $tx == ""} then { fail $test ; return }
232    set value [expr $value * 2]
233 }
234 pass $test
235
236 set value 1
237 set ipaddr "127.0.0.1:2345"
238 set status1 [sid_cmd "sid::component::set_attribute_value $victim sockaddr-local $ipaddr "]
239 set ipaddr "0.0.0.0:2345"
240 set status2 [sid_cmd "sid::component::set_attribute_value $client sockaddr-peer $ipaddr "]
241 set pollevent [sid_cmd "sid::component::find_pin $victim poll-event"]
242 set clientpollevent [sid_cmd "sid::component::find_pin $client poll-event"]
243 set init [sid_cmd "sid::component::find_pin $victim init"]
244 set clientinit [sid_cmd "sid::component::find_pin $client init"]
245 set clienttx [sid_cmd "sid::component::find_pin $client tx"]
246 set clientfini [sid_cmd "sid::component::find_pin $client fini"]
247 set fini [sid_cmd "sid::component::find_pin $victim fini"]
248 set value 1
249 foreach value {-1 256 10000} {
250 set test "disconnect by driving $value to tx pin on client side to terminate connection"
251    sid_cmd "sid::pin::driven_h4 $init 1"
252    sid_cmd "sid::pin::driven_h4 $clientinit 1"
253    while { [sid_cmd "sid::component::attribute_value $victim connected?"] != "yes" || [sid_cmd "sid::component::attribute_value $client connected?"] != "yes"} {
254        sid_cmd "sid::pin::driven_h4 $pollevent 1"
255        sid_cmd "sid::pin::driven_h4 $clientpollevent 1"
256 #poll until connected
257    } 
258    sid_cmd "sid::pin::driven_h4 $clienttx $value"
259    sid_cmd "sid::pin::driven_h4 $tx $value"
260    set con [sid_cmd "sid::component::attribute_value $victim connected?"]
261    if { $init == "" || $clientinit == "" || $status1 != "ok" || $status2 != "ok" || $con == "yes" || $pollevent == "" || $clientpollevent =="" || $fini == "" || $clientfini == "" || $tx == ""} then { fail $test } else {pass $test}
262    sid_cmd "sid::pin::driven_h4 $fini 1"
263    sid_cmd "sid::pin::driven_h4 $clientfini 1"
264 }
265
266 set test "sid stop"
267 if {[sid_stop]} { pass $test } else { fail $test ; return }
268
269 # zap temp file if tests were successful
270 global exit_status
271 if {$exit_status == "0"} { file delete "server.conf" }