/[webpac]/openisis/current/tcl/test/teststb.tcl
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Contents of /openisis/current/tcl/test/teststb.tcl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 237 - (show annotations)
Mon Mar 8 17:43:12 2004 UTC (20 years, 1 month ago) by dpavlin
File MIME type: application/x-tcl
File size: 13516 byte(s)
initial import of openisis 0.9.0 vendor drop

1 #!/opt/openisis/tcl/bin/isish
2 #
3 # openisis - an open implementation of the ISIS database
4 # Version 0.8.x (microversion see file Version)
5 # Copyright (C) 2003 by Erik Grziwotz, erik@openisis.org
6 #
7 # This library is free software; you can redistribute it and/or
8 # modify it under the terms of the GNU Lesser General Public
9 # License as published by the Free Software Foundation; either
10 # version 2.1 of the License, or (at your option) any later version.
11 #
12 # This library is distributed in the hope that it will be useful,
13 # but WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 # Lesser General Public License for more details.
16 #
17 # You should have received a copy of the GNU Lesser General Public
18 # License along with this library; if not, write to the Free Software
19 # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 #
21 # This software is dedicated to the memory of Eckart Dietrich.
22 #
23 # This software is inspired by (but contains no code of) the iAPI
24 # Copyright (C) 2000 by Robert Janusz, rj@jezuici.krakow.pl.
25 # See iAPI.txt for what it contains.
26 #
27 # $Id: teststb.tcl,v 1.19 2003/06/17 12:45:32 mawag Exp $
28 # test script for stub commands
29
30 proc checklst {msg exp got} {
31 if [catch {
32 set len1 [llength $exp]
33 set len2 [llength $got]
34 if {$len1 != $len2} {
35 puts "ERR $msg: length != $len1"
36 puts "REC = $got"
37 exit 1
38 }
39 for {set j 0} {$len1 > $j} {incr j} {
40 set gg [lindex $got $j]
41 set ee [lindex $exp $j]
42 if {! [string equal $gg $ee]} {
43 puts "ERR $msg: got\[$j] = $gg, exp = $ee"
44 puts "REC = $got"
45 exit 1
46 }
47 }
48 }] {
49 global errorInfo
50 puts $errorInfo
51 puts "REC = $got"
52 exit 1
53 }
54 }
55
56 proc checkrec {msg cmd tag val complete} {
57 set lst ""
58 set witht ""
59 if [catch {
60 set lst [eval $cmd get]
61 set witht [eval $cmd get -tags]
62 set len [llength $val]
63 if $complete {
64 if {[llength $lst] != $len} {
65 puts "ERR $msg: got len = [llength $lst], exp = $len"
66 puts "REC = $witht"
67 exit 1
68 }
69 }
70 for {set j 0} {$len > $j} {incr j} {
71 set exp [lindex $val $j]
72 if $complete {
73 set got [lindex $lst $j]
74 if {! [string equal $got $exp]} {
75 puts "ERR $msg: rec\[$j] = $got, exp = $exp"
76 puts "REC = $witht"
77 exit 1
78 }
79 }
80 set fld [lindex $tag $j]
81 set got [eval $cmd get $fld]
82 set got [lindex $got 0]
83 if {! [string equal $got $exp]} {
84 puts "ERR $msg: tag $fld = $got, exp = $exp"
85 puts "REC = $witht"
86 exit 1
87 }
88 }
89 }] {
90 global errorInfo
91 puts $errorInfo
92 puts "$msg: REC = $witht"
93 exit 1
94 }
95 }
96
97 proc checkrsp {msg stb fld val} {
98 checkrec "$msg" "$stb .res" "$fld" "$val" 0
99 }
100
101 proc checknoerr {msg stb fld val} {
102 lappend fld sid error error2
103 lappend val 0 0 0
104 checkrsp "$msg" $stb "$fld" "$val"
105 }
106
107 proc sendrqs {msg stb type args} {
108 global db
109 if [catch {
110 eval $stb req type $type db $db $args
111 $stb .req delete
112 }] {
113 global errorInfo
114 puts $errorInfo
115 puts "$msg: $stb sendrqs($type)"
116 exit 1
117 }
118 }
119
120 proc puterrline {} {
121 global errorInfo
122 set idx [string first \n $errorInfo]
123 if {0 < $idx} {
124 puts [string range $errorInfo 0 [incr idx -1]]
125 } {
126 puts $errorInfo
127 }
128 }
129
130 proc evalcb {tag} {
131 result add $tag "a server message"
132 }
133
134 proc clntestdb {dbn wrn} {
135 foreach ext {txt ptr oxi} {
136 if [catch {
137 file delete $dbn.$ext
138 }] {
139 if $wrn {
140 puts "cannot delete $dbn.$ext"
141 puterrline
142 }
143 }
144 }
145 }
146
147 proc opentestdb {stb db {msg open}} {
148 set fd1 [openIsisRec]
149 $fd1 add 860 10 862 0 863 1 865 256 866 name 867 ""
150 set fd2 [openIsisRec]
151 $fd2 add 860 11 862 0 863 1 865 256 866 phone 867 ""
152 set fd3 [openIsisRec]
153 $fd3 add 860 12 862 0 863 1 865 256 866 title 867 ""
154 set fd4 [openIsisRec]
155 $fd4 add 860 13 862 0 863 1 865 256 866 street 867 ""
156 set fd5 [openIsisRec]
157 $fd5 add 860 20 862 0 863 1 865 256 866 city 867 ""
158 set fd6 [openIsisRec]
159 $fd6 add 860 88 862 0 863 1 865 256 866 summary 867 ""
160 set fd61 [openIsisRec]
161 $fd61 add 860 88 861 q 862 0 863 0 865 256 866 overview 867 ""
162 set fdt [openIsisRec]
163 $fdt add 880 7
164 $fdt wrap -done -tag 881 $fd1
165 $fdt wrap -done -tag 881 $fd2
166 $fdt wrap -done -tag 881 $fd3
167 $fdt wrap -done -tag 881 $fd4
168 $fdt wrap -done -tag 881 $fd5
169 $fdt wrap -done -tag 881 $fd6
170 $fdt wrap -done -tag 881 $fd61
171
172 set tgt [$stb .req .fdt]
173 $tgt copy $fdt
174 $fdt done
175
176 sendrqs $msg $stb open
177 checknoerr $msg $stb {db dbid} "$db 0"
178 }
179
180 set db testdb
181 set syspath /opt/openisis/db/cds
182 set nn 1
183 set mm 1
184 set debug -1
185 if {$argc} {
186 set x [lindex $argv 0]
187 if [string length $x] {
188 set syspath $x
189 }
190 unset x
191 if {1 < $argc} {
192 set nn [lindex $argv 1]
193 if {2 < $argc} {
194 set mm [lindex $argv 2]
195 if {3 < $argc} {
196 set debug [lindex $argv 3]
197 }
198 }
199 }
200 }
201
202 puts "using $syspath/$db"
203 clntestdb $syspath/$db 0
204
205 for {set n $nn} {$n} {incr n -1} {
206 set args "syspath $syspath"
207 if ![string equal $debug -1] {
208 set args "$args v $debug"
209 }
210 set stb [eval openIsis $args]
211
212 # rqs open
213 # $rec copy
214 opentestdb $stb $db
215
216 for {set m $mm; set hasdb 0} {$m} {incr m -1; set hasdb 1} {
217
218 # rqs eval
219 set rec [$stb .req .rec]
220 $rec add 1 {evalcb 94}
221 sendrqs eval(1) $stb eval
222 checknoerr eval(1) $stb {} {}
223 set rec [$stb .res .rec]
224 checkrec evalres(1) $rec 94 {{a server message}} 1
225
226 # rqs ls
227 sendrqs ls $stb ls
228 checknoerr ls $stb db $db
229
230 # fdt db ?option ...?
231 set fdt [$stb fdt $db]
232 checkrec fdt1 $fdt flen 7 0
233 checkrec fd11 "$fdt .fd\\\[0]" {tag type rep len name descr} \
234 {10 0 1 256 name {}} 1
235 checkrec fd12 "$fdt .fd\\\[1]" {tag type rep len name descr} \
236 {11 0 1 256 phone {}} 1
237 checkrec fd13 "$fdt .fd\\\[2]" {tag type rep len name descr} \
238 {12 0 1 256 title {}} 1
239 checkrec fd14 "$fdt .fd\\\[3]" {tag type rep len name descr} \
240 {13 0 1 256 street {}} 1
241 checkrec fd15 "$fdt .fd\\\[4]" {tag type rep len name descr} \
242 {20 0 1 256 city {}} 1
243 checkrec fd16 "$fdt .fd\\\[5]" {tag type rep len name descr} \
244 {88 0 1 256 summary {}} 1
245 checkrec fd161 "$fdt .fd\\\[6]" {tag sub type rep len name descr} \
246 {88 q 0 0 256 overview {}} 1
247 $fdt done
248 checkrec fd21 "$stb fdt $db .fd\\\[0]" \
249 {tag type rep len name descr} \
250 {10 0 1 256 name ""} 1
251 checkrec fd22 "$stb fdt $db .fd\\\[1]" \
252 {tag type rep len name descr} \
253 {11 0 1 256 phone ""} 1
254 checkrec fd23 "$stb fdt $db .fd\\\[2]" \
255 {tag type rep len name descr} \
256 {12 0 1 256 title ""} 1
257 checkrec fd24 "$stb fdt $db .fd\\\[3]" \
258 {tag type rep len name descr} \
259 {13 0 1 256 street ""} 1
260 checkrec fd25 "$stb fdt $db .fd\\\[4]" \
261 {tag type rep len name descr} \
262 {20 0 1 256 city ""} 1
263 checkrec fd26 "$stb fdt $db .fd\\\[5]" \
264 {tag type rep len name descr} \
265 {88 0 1 256 summary ""} 1
266 checkrec fd261 "$stb fdt $db .fd\\\[6]" \
267 {tag sub type rep len name descr} \
268 {88 q 0 0 256 overview ""} 1
269
270 checkrec fdsys "$stb fdt -sys .fd\\\[0]" \
271 {tag name} {5 syspath} 0
272 checkrec fdsch "$stb fdt -sche .fd\\\[0]" \
273 {tag name} {710 name} 0
274 checkrec fdsch "$stb fdt -sche .fd\\\[1]" \
275 {tag name} {711 host} 0
276 checkrec fddb "$stb fdt -db .fd\\\[0]" \
277 {tag name} {800 db} 0
278 checkrec fdfd "$stb fdt -fd .fd\\\[0]" \
279 {tag name} {860 tag} 0
280 checkrec fdfd "$stb fdt -fdt .fd\\\[0]" \
281 {tag name} {880 flen} 0
282 checkrec fdrqs0 "$stb fdt -req .fd\\\[0]" \
283 {tag name} {900 sid} 0
284 checkrec fdrqs10 "$stb fdt -req .fd\\\[10]" \
285 {tag name} {920 type} 0
286 checkrec fdrsp0 "$stb fdt -res .fd\\\[0]" \
287 {tag name} {900 sid} 0
288 checkrec fdrsp10 "$stb fdt -res .fd\\\[10]" \
289 {tag name} {940 dbid} 0
290
291 # db db ?option ...?
292 set rec [$stb db $db]
293 checkrec meta $rec {800 803} "$db $syspath" 0
294 rename $rec ""
295 if [catch {$rec get}] {} {
296 puts "ERR meta: $rec still present"
297 exit 1
298 }
299
300 # new -schema name ?-cfg val ...?
301 set rec [$stb new -sche testsrv -host localhost -port 3434]
302 checkrec schema $rec {711 712} {localhost 3434} 0
303 rename $rec ""
304 set rec [$stb new -sche testsrv -host localhost -port 3434]
305 checkrec schema $rec {711 712} {localhost 3434} 0
306 $rec done
307
308 # new ?-db db? ?name?
309 # $rec db
310 # $rec fdt
311 if [catch {set rec [$stb new]}] {} {
312 puts "ERR newrec1 = $rec"
313 exit 1
314 }
315 set rec [$stb new -db $db]
316 checkrec recfdt1 "$rec fdt .fd\\\[1]" \
317 {tag name} {11 phone} 0
318 if [catch {
319 set dbn [$rec db get db]
320 if ![string equal $dbn $db] {
321 puts "ERR recdb = $dbn"
322 exit 1
323 }
324 }] {
325 global errorInfo
326 puts $errorInfo
327 puts "recdb failed"
328 exit 1
329 }
330 set rec [$stb new -db -sys $rec]
331 checkrec recfdt2 "$rec fdt .fd\\\[1]" \
332 {tag name} {700 logfile} 0
333 set rec [$rec clone $rec]
334 checkrec recfdt3 "$rec fdt .fd\\\[1]" \
335 {tag name} {700 logfile} 0
336 set dbn ""
337 if [catch {set dbn [$rec db get]}] {} {
338 puts "ERR recdb = $dbn"
339 exit 1
340 }
341 $stb add defaultdb $db
342 if [catch {set rec [$stb new $rec]}] {
343 global errorInfo
344 puts $errorInfo
345 puts "newrec2 failed"
346 exit 1
347 }
348 checkrec recfdt4 "$rec fdt .fd\\\[1]" \
349 {tag name} {11 phone} 0
350 $stb del defaultdb
351 $rec done
352 set rec [$stb clone]
353 checkrec recfdt5 $rec syspath $syspath 0
354 checkrec recfdt6 "$rec fdt .fd\\\[0]" \
355 {tag name} {5 syspath} 0
356 $rec done
357
358 # rqs insert
359 if !$hasdb {
360 set rec [$stb .req -db $db .rec]
361 set idx [$stb .req .idx]
362 $rec add name harry phone 4711 city montevideo
363 # XDOT [[dbn.]mfn.]tag.occ.pos or tag[.occ]
364 $idx add 10 harry 10 hurry
365 sendrqs insert1 $stb insert
366 checknoerr insert1 $stb {db rowid} "$db 1"
367 set row 1
368 }
369 if {1000 > $row} {
370 set rec [$stb .req -db $db .rec]
371 set idx [$stb .req .idx]
372 set phone "+4711"
373 $rec add name mary phone $phone summary {Meeting Implementation}
374 $idx add 11 $phone 11 marry
375 sendrqs insert2 $stb insert
376 checknoerr insert2 $stb {} {}
377 set row2 [$stb .res get rowid]
378 if {[incr row] != $row2} {
379 puts "ERR insert2: rowid == $row2, exp = $row"
380 exit 1
381 }
382 }
383
384 # rqs maxrow
385 sendrqs maxrow1 $stb maxrow
386 checknoerr maxrow1 $stb rowid $row
387
388 # .req ?-db db? ?option ...?
389 # rqs update
390 set phone "+49-30-$row"
391 set rec [$stb .req -db $db .rec]
392 $rec add name lary phone $phone street chausseestr
393 $stb .req -db $db set rowid $row
394 sendrqs update1 $stb update rowid $row
395 checknoerr update1 $stb rowid $row
396 set idx [$stb .req .idx]
397 $idx add -3 "-11.1\tmarry"
398 sendrqs update2 $stb update rowid $row
399 checknoerr update2 $stb rowid $row
400 set idx [$stb .req .idx]
401 $idx add -3 "11\tlary"
402 sendrqs update3 $stb update rowid $row
403 checknoerr update3 $stb rowid $row
404
405 # rqs maxrow
406 sendrqs maxrow2 $stb maxrow
407 checknoerr maxrow2 $stb rowid $row
408
409 # recv
410 if [catch {
411 $stb recv
412 if ![$stb .res] {
413 puts "ERR: .res == 0"
414 exit 1
415 }
416 }] {
417 global errorInfo
418 puts $errorInfo
419 puts "recv failed"
420 exit 1
421 }
422
423 # rqs read (row 1)
424 $stb .req set rowid 1
425 sendrqs read1 $stb read
426 checknoerr read1 $stb {total size rowid} "1 1 1"
427 # checknoerr read1 $stb "" ""
428 set rec [$stb .res .rec]
429 checkrec read1/fdt "$rec fdt .fd\\\[1]" \
430 {tag name} {11 phone} 0
431 if [catch {
432 set dbn [$rec db get db]
433 if ![string equal $dbn $db] {
434 puts "ERR read1/recdb = $dbn"
435 exit 1
436 }
437 }] {
438 global errorInfo
439 puts $errorInfo
440 puts "read1/recdb failed"
441 exit 1
442 }
443 checkrec read1 $rec {name phone city} {harry 4711 montevideo} 1
444 $rec done
445
446 # rqs eval
447 set rec [$stb .req .rec]
448 $rec add 1 {evalcb 229}
449 sendrqs eval(2) $stb eval
450 checknoerr eval(2) $stb {} {}
451 set rec [$stb .res .rec]
452 checkrec evalres(2) $rec 229 {{a server message}} 1
453
454 # rqs read (row n)
455 for {set r 2} {$row >= $r} {incr r} {
456 set msg "read($r)"
457 $stb .req set rowid $r
458 sendrqs $msg $stb read
459 checknoerr $msg $stb {total size rowid} "1 1 $r"
460 set rec [$stb .res .rec]
461 checkrec $msg/fdt "$rec fdt .fd\\\[1]" \
462 {tag name} {11 phone} 0
463 if [catch {
464 set dbn [$rec db get db]
465 if ![string equal $dbn $db] {
466 puts "ERR $msg/recdb = $dbn"
467 exit 1
468 }
469 }] {
470 global errorInfo
471 puts $errorInfo
472 puts "$msg/recdb failed"
473 exit 1
474 }
475 set phone "+49-30-$r"
476 checkrec $msg $rec {name phone street} "lary $phone chausseestr" 1
477 set rec2 [$rec clone]
478 set rero [$rec2 row]
479 $rec2 done
480 if {$rero != $r} {
481 puts "ERR $msg: rowid = $rero, exp: $r"
482 exit 1
483 }
484 if {2 == $r} {
485 set got [$rec get -tag]
486 checklst gettags \
487 "10 lary 11 $phone 13 chausseestr" $got
488 set got [$rec get -tagn]
489 checklst gettagn \
490 "name lary phone $phone street chausseestr" $got
491 }
492 }
493
494 # rqs query
495 set tot [expr $row - 1]
496 set siz 100
497 if {100 >= $row} {
498 set siz $tot
499 }
500 $stb .req set typ query key marr size 100 flags 2
501 $stb req mode 1
502 checknoerr query $stb {total size} "$tot $siz"
503 for {set j 0} {$siz > $j} {incr j} {
504 set r [$stb .res get rowid\[$j\]]
505 set phone "+49-30-$r"
506 set rec [$stb .res .rec\[$j\]]
507 checkrec "query\[$j]" $rec {name phone street} \
508 "lary $phone chausseestr" 1
509 set rero [$rec row]
510 if {$rero != $r} {
511 puts "ERR query\[$j]: rowid = $rero, exp: $r"
512 exit 1
513 }
514 }
515
516 if ![expr $m % 100] {
517 puts "$n $m ($row) ..."
518 }
519 }
520
521 # rqs close
522 sendrqs close $stb close
523 checknoerr close $stb db $db
524 clntestdb $syspath/$db 1
525
526 # rqs eval
527 set rec [$stb .req .rec]
528 $rec add 1 {evalcb 147}
529 sendrqs eval(3) $stb eval
530 checknoerr eval(3) $stb {} {}
531 set rec [$stb .res .rec]
532 checkrec evalres(3) $rec 147 {{a server message}} 1
533
534 if {100 > $mm && ! [expr $n % 100]} {
535 puts "$n ..."
536 }
537
538 # done
539 $stb done
540 if [catch {$stb get}] {} {
541 puts "ERR done"
542 exit 1
543 }
544 }
545
546 puts "ok."
547

Properties

Name Value
svn:executable

  ViewVC Help
Powered by ViewVC 1.1.26