1 |
578 |
markom |
o\input texinfo @c -*- Texinfo -*-
|
2 |
|
|
@finalout
|
3 |
|
|
@setfilename dejagnu.info
|
4 |
|
|
@c
|
5 |
|
|
@c This file documents the GNU Testing Framework ``DejaGnu''
|
6 |
|
|
@c
|
7 |
|
|
@c Copyright (C) 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
8 |
|
|
@c
|
9 |
|
|
@c This text may be freely distributed under the terms of the GNU
|
10 |
|
|
@c General Public License.
|
11 |
|
|
@c
|
12 |
|
|
|
13 |
|
|
@c FIXME---MAIN TODO LIST!
|
14 |
|
|
@c
|
15 |
|
|
@c * Revisit organization.
|
16 |
|
|
@c
|
17 |
|
|
@c * discuss Tcl/expect basics---enough to get started (see seminar notes).
|
18 |
|
|
@c Maybe this would permit abbreviating appendices.
|
19 |
|
|
|
20 |
|
|
@ifinfo
|
21 |
|
|
@format
|
22 |
|
|
START-INFO-DIR-ENTRY
|
23 |
|
|
* DejaGnu: (dejagnu). The GNU testing framework.
|
24 |
|
|
END-INFO-DIR-ENTRY
|
25 |
|
|
@end format
|
26 |
|
|
@end ifinfo
|
27 |
|
|
|
28 |
|
|
@syncodeindex ky cp
|
29 |
|
|
@syncodeindex fn cp
|
30 |
|
|
|
31 |
|
|
@setchapternewpage odd
|
32 |
|
|
@settitle DejaGnu Testing Framework
|
33 |
|
|
@titlepage
|
34 |
|
|
@title The DejaGnu Testing Framework
|
35 |
|
|
@subtitle for DejaGnu Version 1.3
|
36 |
|
|
@sp 1
|
37 |
|
|
@subtitle Jan 1996
|
38 |
|
|
@author Rob Savoye
|
39 |
|
|
@page
|
40 |
|
|
|
41 |
|
|
@tex
|
42 |
|
|
{\parskip=0pt \hfill Cygnus Support}
|
43 |
|
|
@end tex
|
44 |
|
|
|
45 |
|
|
@vskip 0pt plus 1filll
|
46 |
|
|
Copyright @copyright{} 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
47 |
|
|
|
48 |
|
|
Permission is granted to make and distribute verbatim copies of
|
49 |
|
|
this manual provided the copyright notice and this permission notice
|
50 |
|
|
are preserved on all copies.
|
51 |
|
|
|
52 |
|
|
@noindent
|
53 |
|
|
Permission is granted to copy and distribute modified versions of this
|
54 |
|
|
manual under the conditions for verbatim copying, provided also that
|
55 |
|
|
the entire resulting derived work is distributed under the terms of a
|
56 |
|
|
permission notice identical to this one.
|
57 |
|
|
|
58 |
|
|
Permission is granted to copy and distribute translations of this manual
|
59 |
|
|
into another language, under the above conditions for modified versions.
|
60 |
|
|
@end titlepage
|
61 |
|
|
|
62 |
|
|
@ifinfo
|
63 |
|
|
Copyright @copyright{} 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
|
64 |
|
|
|
65 |
|
|
Permission is granted to make and distribute verbatim copies of
|
66 |
|
|
this manual provided the copyright notice and this permission notice
|
67 |
|
|
are preserved on all copies.
|
68 |
|
|
|
69 |
|
|
@ignore
|
70 |
|
|
Permission is granted to process this file through TeX and print the
|
71 |
|
|
results, provided the printed document carries a copying permission
|
72 |
|
|
notice identical to this one except for the removal of this paragraph
|
73 |
|
|
(this paragraph not being relevant to the printed manual).
|
74 |
|
|
@end ignore
|
75 |
|
|
|
76 |
|
|
Permission is granted to copy and distribute modified versions of this
|
77 |
|
|
manual under the conditions for verbatim copying, provided also that
|
78 |
|
|
the entire resulting derived work is distributed under the terms of a
|
79 |
|
|
permission notice identical to this one.
|
80 |
|
|
|
81 |
|
|
Permission is granted to copy and distribute translations of this manual
|
82 |
|
|
into another language, under the above conditions for modified versions.
|
83 |
|
|
|
84 |
|
|
@node Top
|
85 |
|
|
@top DejaGnu
|
86 |
|
|
|
87 |
|
|
DejaGnu is a framework for running test suites on software tools.
|
88 |
|
|
|
89 |
|
|
This file describes version 1.3 of DejaGnu.
|
90 |
|
|
|
91 |
|
|
@menu
|
92 |
|
|
* Overview:: What is DejaGnu?
|
93 |
|
|
* What is New:: What is new in this release.
|
94 |
|
|
* Invoking runtest:: Using `runtest', the main test driver
|
95 |
|
|
* Customizing:: Setting `runtest' defaults
|
96 |
|
|
* Internals:: The DejaGnu implementation
|
97 |
|
|
* Tests:: How to write a test case
|
98 |
|
|
* Extending:: New tools, new targets, and new hosts
|
99 |
|
|
* Installation:: Configuring and Installing DejaGnu
|
100 |
|
|
* Index:: Index
|
101 |
|
|
@end menu
|
102 |
|
|
@end ifinfo
|
103 |
|
|
|
104 |
|
|
@iftex
|
105 |
|
|
@raggedbottom
|
106 |
|
|
@end iftex
|
107 |
|
|
|
108 |
|
|
@node Overview
|
109 |
|
|
@chapter What is DejaGnu?
|
110 |
|
|
@cindex overview
|
111 |
|
|
|
112 |
|
|
DejaGnu is a framework for testing other programs. Its purpose is to
|
113 |
|
|
provide a single front end for all tests. Beyond this, DejaGnu offers
|
114 |
|
|
several advantages for testing:
|
115 |
|
|
|
116 |
|
|
@enumerate
|
117 |
|
|
@item
|
118 |
|
|
The flexibility and consistency of the DejaGnu framework make it easy
|
119 |
|
|
to write tests for any program.
|
120 |
|
|
|
121 |
|
|
@item
|
122 |
|
|
DejaGnu provides a layer of abstraction which allows you to write tests
|
123 |
|
|
that are portable to any host or target where a program must be tested.
|
124 |
|
|
For instance, a test for GDB can run (from any Unix based host) on any
|
125 |
|
|
target architecture that DejaGnu supports. Currently DejaGnu runs tests
|
126 |
|
|
on several single board computers, whose operating software ranges from
|
127 |
|
|
just a boot monitor to a full-fledged, Unix-like realtime OS.
|
128 |
|
|
|
129 |
|
|
@item
|
130 |
|
|
All tests have the same output format. This makes it easy to integrate
|
131 |
|
|
testing into other software development processes. DejaGnu's output is
|
132 |
|
|
designed to be parsed by other filtering script, and it is also human
|
133 |
|
|
readable.
|
134 |
|
|
@end enumerate
|
135 |
|
|
|
136 |
|
|
DejaGnu is written in @code{expect}, which in turn uses @dfn{Tcl}---Tool
|
137 |
|
|
command language.
|
138 |
|
|
|
139 |
|
|
@cindex @code{expect} script names
|
140 |
|
|
@kindex .exp
|
141 |
|
|
@cindex suffix, @code{expect} scripts
|
142 |
|
|
Running tests requires two things: the testing framework, and the test
|
143 |
|
|
suites themselves. Tests are usually written in @code{expect} using
|
144 |
|
|
Tcl, but you can also use a Tcl script to run a test suite that is not
|
145 |
|
|
based on @code{expect}. (@code{expect} script filenames conventionally
|
146 |
|
|
use @samp{.exp} as a suffix; for example, the main implementation of the
|
147 |
|
|
DejaGnu test driver is in the file @file{runtest.exp}.)
|
148 |
|
|
|
149 |
|
|
|
150 |
|
|
@menu
|
151 |
|
|
* Running Tests:: A first look at running DejaGnu tests
|
152 |
|
|
* Sample Test:: What does a DejaGnu test case look like?
|
153 |
|
|
* Design Goals:: Goals behind DejaGnu
|
154 |
|
|
* Posix:: DejaGnu conforms to POSIX 1003.3
|
155 |
|
|
* Future Directions:: Where is DejaGnu going?
|
156 |
|
|
* Tcl and Expect:: Reading more about Tcl and Expect
|
157 |
|
|
@end menu
|
158 |
|
|
|
159 |
|
|
@node What is New
|
160 |
|
|
@chapter What is new in this release ?
|
161 |
|
|
@cindex What is New
|
162 |
|
|
|
163 |
|
|
This release has a number of substantial changes over version 1.2. The
|
164 |
|
|
most visible change is that the version of expect and Tcl included in
|
165 |
|
|
the release are up-to-date with the current stable net releases. Other
|
166 |
|
|
changes are:
|
167 |
|
|
|
168 |
|
|
@enumerate
|
169 |
|
|
@item
|
170 |
|
|
@c FIXME: add a link to the config section
|
171 |
|
|
The config sub-system in DejaGnu has been completely redesigned. It now
|
172 |
|
|
supports testing on remote hosts as well as remote targets.
|
173 |
|
|
|
174 |
|
|
@item
|
175 |
|
|
More builtin support for building target binaries with the correct
|
176 |
|
|
linker flags. Currently this only works with GCC, preferably with a
|
177 |
|
|
target support by @code{libgloss}.
|
178 |
|
|
|
179 |
|
|
@item
|
180 |
|
|
Lots of little bug fixes from a year of heavy use here at Cygnus
|
181 |
|
|
Support.
|
182 |
|
|
|
183 |
|
|
@item
|
184 |
|
|
DejaGnu now uses @code{autoconf} for configuration.
|
185 |
|
|
|
186 |
|
|
@item
|
187 |
|
|
New test cases for DejaGnu have been added for the new features, plus
|
188 |
|
|
the "--tool" option bug in the 1.2 testsuite has been fixed.
|
189 |
|
|
|
190 |
|
|
@item
|
191 |
|
|
The @code{--tool} option is now optional.
|
192 |
|
|
|
193 |
|
|
@item
|
194 |
|
|
@code{runtest} when searching for test drivers ignores all directories
|
195 |
|
|
named SCCS, RCS, and CVS.
|
196 |
|
|
|
197 |
|
|
@item
|
198 |
|
|
There is now a generic keyword based test harness that uses comments in
|
199 |
|
|
source code to control how each test case gets built and run.
|
200 |
|
|
|
201 |
|
|
@item
|
202 |
|
|
There is now some support for running a testsuite with multiple passes
|
203 |
|
|
and multiple targets.
|
204 |
|
|
|
205 |
|
|
@end enumerate
|
206 |
|
|
|
207 |
|
|
@node Running Tests
|
208 |
|
|
@section Running existing tests
|
209 |
|
|
@cindex existing tests, running
|
210 |
|
|
@cindex running tests
|
211 |
|
|
@cindex tests, running
|
212 |
|
|
|
213 |
|
|
@kindex make check
|
214 |
|
|
To run tests from an existing collection, first use @code{configure} as
|
215 |
|
|
usual to set up the source directory containing the tests. Then try
|
216 |
|
|
running
|
217 |
|
|
|
218 |
|
|
@example
|
219 |
|
|
make check
|
220 |
|
|
@end example
|
221 |
|
|
|
222 |
|
|
@cindex @code{check} makefile target
|
223 |
|
|
If the @code{check} target exists, it usually saves you some
|
224 |
|
|
trouble---for instance, it can set up any auxiliary programs or other
|
225 |
|
|
files needed by the tests.
|
226 |
|
|
|
227 |
|
|
@cindex auxiliary files, building
|
228 |
|
|
Once you have run @samp{make check} to build any auxiliary files, you
|
229 |
|
|
might want to call the test driver @code{runtest} directly to repeat the
|
230 |
|
|
tests. You may also have to call @code{runtest} directly for test
|
231 |
|
|
collections with no @code{check} target in the @file{Makefile}.
|
232 |
|
|
|
233 |
|
|
@c force page break to avoid losing footnote to another page
|
234 |
|
|
@page
|
235 |
|
|
@cindex @code{runtest}, most common options
|
236 |
|
|
@cindex options for @code{runtest}, common
|
237 |
|
|
Typically, you must use two command-line options: @samp{--tool}, to
|
238 |
|
|
specify which set of tests to run@footnote{@samp{--tool} selects a
|
239 |
|
|
particular suite of tests, @emph{not} the name of the executable program
|
240 |
|
|
to run. @xref{Config Values,,Configuration dependent values}, for
|
241 |
|
|
information on the variables that you can use to specify the names of
|
242 |
|
|
programs to run.}, and @samp{--srcdir}, to specify where to find test
|
243 |
|
|
directories.
|
244 |
|
|
|
245 |
|
|
For example, if the directory @file{gdb/testsuite} contains a collection
|
246 |
|
|
of DejaGnu tests for @sc{gdb}, you can run them like this:
|
247 |
|
|
|
248 |
|
|
@example
|
249 |
|
|
eg$ cd gdb/testsuite
|
250 |
|
|
eg$ runtest --tool gdb
|
251 |
|
|
@exdent @emph{Test output follows, ending with:}
|
252 |
|
|
|
253 |
|
|
=== gdb Summary ===
|
254 |
|
|
|
255 |
|
|
# of expected passes 508
|
256 |
|
|
# of expected failures 103
|
257 |
|
|
/usr/latest/bin/gdb version 4.14.4 -nx
|
258 |
|
|
@end example
|
259 |
|
|
|
260 |
|
|
You can use the option @samp{--srcdir} to point to some other directory
|
261 |
|
|
containing a collection of tests:
|
262 |
|
|
|
263 |
|
|
@smallexample
|
264 |
|
|
eg$ runtest --tool gdb --srcdir /devo/gdb/testsuite
|
265 |
|
|
@end smallexample
|
266 |
|
|
|
267 |
|
|
@cindex native configuration
|
268 |
|
|
@cindex cross configuration
|
269 |
|
|
These examples assume a @dfn{native} configuration, where the same
|
270 |
|
|
computer runs both @code{runtest} and the tests themselves. When you
|
271 |
|
|
have a @dfn{cross} configuration, the tests run on a different computer,
|
272 |
|
|
controlled by the host running @code{runtest}. In this situation, you
|
273 |
|
|
need the option @samp{--name} to specify the network address for the
|
274 |
|
|
other computer:
|
275 |
|
|
|
276 |
|
|
@smallexample
|
277 |
|
|
eg$ runtest --tool gdb --name vx9.munist.com
|
278 |
|
|
@end smallexample
|
279 |
|
|
|
280 |
|
|
If you always use the same option values, you can record them in a file
|
281 |
|
|
called @file{site.exp}, rather than typing them each time. @xref{Config
|
282 |
|
|
Values,,Setting defaults for @code{runtest} options}.
|
283 |
|
|
|
284 |
|
|
By default, @code{runtest} prints only the names of the tests it runs,
|
285 |
|
|
output from any tests that have unexpected results, and a summary
|
286 |
|
|
showing how many tests passed and how many failed. To display output
|
287 |
|
|
from all tests (whether or not they behave as expected), use the
|
288 |
|
|
@samp{--all} option. For more verbose output about processes being run,
|
289 |
|
|
communication, and so on, use @samp{--verbose}. To see even more output,
|
290 |
|
|
use multiple @samp{--verbose} options. @xref{Invoking runtest,,Using
|
291 |
|
|
@code{runtest}}, for a more detailed explanation of each @code{runtest}
|
292 |
|
|
option.
|
293 |
|
|
|
294 |
|
|
Test output goes into two files in your current directory: summary
|
295 |
|
|
output in @file{@var{tool}.sum}, and detailed output in
|
296 |
|
|
@file{@var{tool}.log}. (@var{tool} refers to the collection of tests;
|
297 |
|
|
for example, after a run with @samp{--tool gdb}, look for output files
|
298 |
|
|
@file{gdb.sum} and @file{gdb.log}.) @xref{Output Files,,The files
|
299 |
|
|
DejaGnu writes}.
|
300 |
|
|
|
301 |
|
|
@node Sample Test
|
302 |
|
|
@section What does a DejaGnu test look like?
|
303 |
|
|
|
304 |
|
|
@cindex example
|
305 |
|
|
Each DejaGnu test is an @code{expect} script; the tests vary widely in
|
306 |
|
|
complexity, depending on the nature of the tool and the feature tested.
|
307 |
|
|
|
308 |
|
|
@kindex gdb.t00/echo.exp
|
309 |
|
|
@kindex echo.exp
|
310 |
|
|
Here is a very simple @sc{gdb} test---one of the simplest tests shipped
|
311 |
|
|
with DejaGnu (extracted from @file{gdb.t00/echo.exp}):@footnote{More
|
312 |
|
|
recent @sc{gdb} tests use the @samp{gdb_test} procedure.
|
313 |
|
|
An equivalent test using that procedure is @samp{ gdb_test "echo Hello
|
314 |
|
|
world!" "Hello world!" }}
|
315 |
|
|
@c FIXME! include xref in footnote, when gdb_test documented in some manual.
|
316 |
|
|
@c @xref{}.
|
317 |
|
|
@c Extra spaces in @samp above avoid running end ' against " inside.
|
318 |
|
|
|
319 |
|
|
@cartouche
|
320 |
|
|
@smallexample
|
321 |
|
|
# send a string to the GDB stdin:
|
322 |
|
|
send "echo Hello world!\n"
|
323 |
|
|
|
324 |
|
|
# inspect the GDB stdout for the correct reply,
|
325 |
|
|
# and determine whether the test passes or fails:
|
326 |
|
|
expect @{
|
327 |
|
|
-re "Hello world.*$prompt $" @{ pass "Echo test" @}
|
328 |
|
|
-re "$prompt $" @{ fail "Echo test" @}
|
329 |
|
|
timeout @{ fail "(timeout) Echo test" @}
|
330 |
|
|
@}
|
331 |
|
|
@end smallexample
|
332 |
|
|
@end cartouche
|
333 |
|
|
|
334 |
|
|
Though brief, this example is a complete test. It illustrates some of
|
335 |
|
|
the main features of DejaGnu test scripts:
|
336 |
|
|
|
337 |
|
|
@itemize @bullet
|
338 |
|
|
@item
|
339 |
|
|
The test case does not start the tested program (@sc{gdb} in this case);
|
340 |
|
|
all test scripts for interactive tools can assume the corresponding tool
|
341 |
|
|
is running.
|
342 |
|
|
|
343 |
|
|
@item
|
344 |
|
|
Comments start with @samp{#}.
|
345 |
|
|
|
346 |
|
|
@item
|
347 |
|
|
The main commands you use to control a tested program are @code{send}
|
348 |
|
|
(to give it commands) and @code{expect} (to analyze its responses).
|
349 |
|
|
|
350 |
|
|
@item
|
351 |
|
|
The @code{expect} command uses a list of pairs; a pattern (regular
|
352 |
|
|
expression if @samp{-re} specified), followed by an action to run if the
|
353 |
|
|
pattern matches output from the program. Only the action for the
|
354 |
|
|
@emph{first} matching pattern will execute.
|
355 |
|
|
|
356 |
|
|
@item
|
357 |
|
|
Test cases use the commands @code{pass} and @code{fail} to record the
|
358 |
|
|
test outcome.
|
359 |
|
|
@end itemize
|
360 |
|
|
|
361 |
|
|
@node Design Goals
|
362 |
|
|
@section Design goals
|
363 |
|
|
@cindex design goals
|
364 |
|
|
|
365 |
|
|
DejaGnu grew out of the internal needs of Cygnus Support. Cygnus
|
366 |
|
|
maintains and enhances a variety of free programs in many different
|
367 |
|
|
environments, and we needed a testing tool that:
|
368 |
|
|
|
369 |
|
|
@itemize @bullet
|
370 |
|
|
@item
|
371 |
|
|
is useful to developers while fixing bugs;
|
372 |
|
|
|
373 |
|
|
@item
|
374 |
|
|
automates running many tests during a software release process;
|
375 |
|
|
|
376 |
|
|
@item
|
377 |
|
|
is portable among a variety of host computers;
|
378 |
|
|
|
379 |
|
|
@item
|
380 |
|
|
supports cross-development testing;
|
381 |
|
|
|
382 |
|
|
@item
|
383 |
|
|
permits testing interactive programs, like @sc{gdb}; and
|
384 |
|
|
|
385 |
|
|
@item
|
386 |
|
|
permits testing batch oriented programs, like @sc{gcc}.
|
387 |
|
|
@end itemize
|
388 |
|
|
|
389 |
|
|
Some of the requirements proved challenging. For example, interactive
|
390 |
|
|
programs do not lend themselves very well to automated testing. But all
|
391 |
|
|
the requirements are important: for instance, it is imperative to make
|
392 |
|
|
sure that @sc{gdb} works as well when cross-debugging as it does in a
|
393 |
|
|
native configuration.
|
394 |
|
|
|
395 |
|
|
Probably the greatest challenge was testing in a cross-development
|
396 |
|
|
environment (which can be a real nightmare). Most cross-development
|
397 |
|
|
environments are customized by each developer. Even when buying
|
398 |
|
|
packaged boards from vendors there are many differences. The
|
399 |
|
|
communication interfaces vary from a serial line to ethernet. DejaGnu
|
400 |
|
|
was designed with a modular communication setup, so that each kind of
|
401 |
|
|
communication can be added as required, and supported thereafter. Once
|
402 |
|
|
a communication procedure is coded, any test can use it. Currently
|
403 |
|
|
DejaGnu can use @code{rsh}, @code{rlogin}, @code{telnet}, @code{tip},
|
404 |
|
|
@code{kermit}, and @code{mondfe} for remote communications.
|
405 |
|
|
|
406 |
|
|
@cindex name ``DejaGnu''
|
407 |
|
|
@cindex DejaGnu, the name
|
408 |
|
|
@cindex Menapace, Julia
|
409 |
|
|
Julia Menapace first coined the term ``Deja Gnu'' to describe an earlier
|
410 |
|
|
testing framework at Cygnus Support. When we replaced it with the
|
411 |
|
|
Expect-based framework, it was like DejaGnu all over again@dots{}
|
412 |
|
|
|
413 |
|
|
@node Posix
|
414 |
|
|
@section A POSIX conforming test framework
|
415 |
|
|
|
416 |
|
|
@cindex POSIX conformance
|
417 |
|
|
@cindex standard conformance: POSIX 1003.3
|
418 |
|
|
DejaGnu conforms to the @sc{posix} standard for test frameworks.
|
419 |
|
|
|
420 |
|
|
@cindex TET
|
421 |
|
|
@sc{posix} standard 1003.3 defines what a testing framework needs to
|
422 |
|
|
provide, in order to permit the creation of @sc{posix} conformance
|
423 |
|
|
test suites. This standard is primarily oriented to running @sc{posix}
|
424 |
|
|
conformance tests, but its requirements also support testing of features
|
425 |
|
|
not related to @sc{posix} conformance. @sc{posix} 1003.3 does not
|
426 |
|
|
specify a particular testing framework, but at this time there is only
|
427 |
|
|
one other @sc{posix} conforming test framework:
|
428 |
|
|
@sc{tet}.@footnote{@sc{tet} was created by Unisoft for a consortium
|
429 |
|
|
comprised of X/Open, Unix International, and the Open Software
|
430 |
|
|
Foundation.}
|
431 |
|
|
|
432 |
|
|
The @sc{posix} documentation refers to @dfn{assertions}. An assertion
|
433 |
|
|
is a description of behavior. For example, if a standard says ``The sun
|
434 |
|
|
shall shine'', a corresponding assertion might be ``The sun is
|
435 |
|
|
shining.'' A test based on this assertion would pass or fail depending
|
436 |
|
|
on whether it is daytime or nighttime. It is important to note that the
|
437 |
|
|
standard being tested is never 1003.3; the standard being tested is some
|
438 |
|
|
other standard, for which the assertions were written.
|
439 |
|
|
|
440 |
|
|
As there is no test suite to test @emph{testing frameworks} for
|
441 |
|
|
@sc{posix} 1003.3 conformance, verifying conformance to this standard is
|
442 |
|
|
done by repeatedly reading the standard and experimenting. One of the
|
443 |
|
|
main things 1003.3 does specify is the set of allowed output messages,
|
444 |
|
|
and their definitions. Four messages are supported for a required
|
445 |
|
|
feature of @sc{posix} conforming systems, and a fifth for a conditional
|
446 |
|
|
feature. DejaGnu supports the use of all five output messages; in this
|
447 |
|
|
sense a test suite that uses exactly these messages can be considered
|
448 |
|
|
@sc{posix} conforming. These definitions specify the output of a test
|
449 |
|
|
case:
|
450 |
|
|
|
451 |
|
|
@ftable @code
|
452 |
|
|
@cindex success, POSIX definition
|
453 |
|
|
@item PASS
|
454 |
|
|
A test has succeeded. That is, it demonstrated that the assertion is true.
|
455 |
|
|
|
456 |
|
|
@cindex XFAIL, avoiding for POSIX
|
457 |
|
|
@item XFAIL
|
458 |
|
|
@sc{posix} 1003.3 does not incorporate the notion of expected failures,
|
459 |
|
|
so @code{PASS}, instead of @code{XPASS}, must also be returned for test
|
460 |
|
|
cases which were expected to fail and did not. This means that
|
461 |
|
|
@code{PASS} is in some sense more ambiguous than if @code{XPASS} is also
|
462 |
|
|
used. For information on @code{XPASS} and @code{XFAIL}, see
|
463 |
|
|
@ref{Invoking runtest,,Using @code{runtest}}.
|
464 |
|
|
|
465 |
|
|
@item FAIL
|
466 |
|
|
@cindex failure, POSIX definition
|
467 |
|
|
A test @emph{has} produced the bug it was intended to capture. That is,
|
468 |
|
|
it has demonstrated that the assertion is false. The @code{FAIL}
|
469 |
|
|
message is based on the test case only. Other messages are used to
|
470 |
|
|
indicate a failure of the framework.
|
471 |
|
|
|
472 |
|
|
As with @code{PASS}, @sc{posix} tests must return @code{FAIL} rather
|
473 |
|
|
than @code{XFAIL} even if a failure was expected.
|
474 |
|
|
|
475 |
|
|
@item UNRESOLVED
|
476 |
|
|
@cindex ambiguity, required for POSIX
|
477 |
|
|
A test produced indeterminate results. Usually, this means the test
|
478 |
|
|
executed in an unexpected fashion; this outcome requires that a human
|
479 |
|
|
being go over results, to determine if the test should have passed or
|
480 |
|
|
failed. This message is also used for any test that requires human
|
481 |
|
|
intervention because it is beyond the abilities of the testing
|
482 |
|
|
framework. Any unresolved test should resolved to @code{PASS} or
|
483 |
|
|
@code{FAIL} before a test run can be considered finished.
|
484 |
|
|
|
485 |
|
|
Note that for @sc{posix}, each assertion must produce a test result
|
486 |
|
|
code. If the test isn't actually run, it must produce @code{UNRESOLVED}
|
487 |
|
|
rather than just leaving that test out of the output. This means that
|
488 |
|
|
you have to be careful when writing tests, to not carelessly use tcl
|
489 |
|
|
statements like @code{return}---if you alter the flow of control of the
|
490 |
|
|
tcl code you must insure that every test still produces some result code.
|
491 |
|
|
|
492 |
|
|
Here are some of the ways a test may wind up @code{UNRESOLVED}:
|
493 |
|
|
|
494 |
|
|
@itemize @bullet
|
495 |
|
|
@item
|
496 |
|
|
A test's execution is interrupted.
|
497 |
|
|
|
498 |
|
|
@item
|
499 |
|
|
A test does not produce a clear result. This is usually because there
|
500 |
|
|
was an @code{ERROR} from DejaGnu while processing the test, or because there
|
501 |
|
|
were three or more @code{WARNING} messages. Any @code{WARNING} or
|
502 |
|
|
@code{ERROR} messages can invalidate the output of the test. This
|
503 |
|
|
usually requires a human being to examine the output to
|
504 |
|
|
determine what really happened---and to improve the test case.
|
505 |
|
|
|
506 |
|
|
@item
|
507 |
|
|
A test depends on a previous test, which fails.
|
508 |
|
|
|
509 |
|
|
@item
|
510 |
|
|
The test was set up incorrectly.
|
511 |
|
|
@end itemize
|
512 |
|
|
|
513 |
|
|
@item UNTESTED
|
514 |
|
|
A test was not run. This is a placeholder, used when there is no
|
515 |
|
|
real test case yet.
|
516 |
|
|
@end ftable
|
517 |
|
|
|
518 |
|
|
@noindent
|
519 |
|
|
The only remaining output message left is intended to test features that
|
520 |
|
|
are specified by the applicable @sc{posix} standard as conditional:
|
521 |
|
|
|
522 |
|
|
@ftable @code
|
523 |
|
|
@item UNSUPPORTED
|
524 |
|
|
There is no support for the tested case. This may mean that a
|
525 |
|
|
conditional feature of an operating system, or of a compiler, is not
|
526 |
|
|
implemented. DejaGnu also uses this message when a testing environment
|
527 |
|
|
(often a ``bare board'' target) lacks basic support for compiling or
|
528 |
|
|
running the test case. For example, a test for the system subroutine
|
529 |
|
|
@code{gethostname} would never work on a target board running only a
|
530 |
|
|
boot monitor.
|
531 |
|
|
@end ftable
|
532 |
|
|
|
533 |
|
|
DejaGnu uses the same output procedures to produce these messages for
|
534 |
|
|
all test suites, and these procedures are already known to conform to
|
535 |
|
|
@sc{posix} 1003.3. For a DejaGnu test suite to conform to @sc{posix}
|
536 |
|
|
1003.3, you must avoid the @code{setup_xfail} procedure as described in
|
537 |
|
|
the @code{PASS} section above, and you must be careful to return
|
538 |
|
|
@code{UNRESOLVED} where appropriate, as described in the
|
539 |
|
|
@code{UNRESOLVED} section above.
|
540 |
|
|
|
541 |
|
|
@node Future Directions
|
542 |
|
|
@section Future directions
|
543 |
|
|
@cindex future directions
|
544 |
|
|
|
545 |
|
|
In the near future, there are two parallel directions for DejaGnu
|
546 |
|
|
development. The first is to add support for more hosts and targets.
|
547 |
|
|
|
548 |
|
|
The second would permit testing programs with a more complex interface,
|
549 |
|
|
whether text based or GUI based. Two components already exist: a Tcl
|
550 |
|
|
based X window toolkit, and a terminal package for @code{expect}. Both
|
551 |
|
|
of these could be merged into DejaGnu in a way that permits testing
|
552 |
|
|
programs that run in each environment.
|
553 |
|
|
|
554 |
|
|
Meanwhile, we hope DejaGnu enables the creation of test suites for
|
555 |
|
|
conformance to @sc{ansi} C and C++, to @sc{posix}, and to other
|
556 |
|
|
standards. We encourage you to make any test suites you create freely
|
557 |
|
|
available, under the same terms as DejaGnu itself.
|
558 |
|
|
|
559 |
|
|
@node Tcl and Expect
|
560 |
|
|
@section Tcl and Expect
|
561 |
|
|
@cindex tool command language
|
562 |
|
|
@cindex tcl
|
563 |
|
|
@cindex Ousterhout, John K.
|
564 |
|
|
Tcl was introduced in a paper by John K. Ousterhout at the 1990 Winter
|
565 |
|
|
Usenix conference, @cite{Tcl: An Embeddable Command Language}. That
|
566 |
|
|
paper is included in PostScript form in the @file{doc} subdirectory of
|
567 |
|
|
the Tcl distribution. The version of Tcl included in DejaGnu at this time is
|
568 |
|
|
Tcl 7.4p3.
|
569 |
|
|
|
570 |
|
|
@cindex @code{expect} scripting language
|
571 |
|
|
@cindex Libes, Don
|
572 |
|
|
Don Libes introduced @code{expect} in his paper @cite{expect: Curing
|
573 |
|
|
Those Uncontrollable Fits of Interaction} at the 1990 Summer Usenix
|
574 |
|
|
conference. The paper is included in PostScript form in the
|
575 |
|
|
@code{expect} distribution (as are several other papers about
|
576 |
|
|
@code{expect}). The version of expect included in DejaGnu at this time
|
577 |
|
|
is expect 5.18.0.
|
578 |
|
|
|
579 |
|
|
@node Invoking runtest
|
580 |
|
|
@chapter Using @code{runtest}
|
581 |
|
|
@cindex invoking
|
582 |
|
|
@cindex running
|
583 |
|
|
@cindex command line options
|
584 |
|
|
@cindex options
|
585 |
|
|
|
586 |
|
|
@cindex @code{runtest} description
|
587 |
|
|
@cindex DejaGnu test driver
|
588 |
|
|
@code{runtest} is the executable test driver for DejaGnu. You can
|
589 |
|
|
specify two kinds of things on the @code{runtest} command line: command
|
590 |
|
|
line options, and Tcl variables for the test scripts. The options are
|
591 |
|
|
listed alphabetically below.
|
592 |
|
|
|
593 |
|
|
@cindex exit code from @code{runtest}
|
594 |
|
|
@cindex @code{runtest} exit code
|
595 |
|
|
@code{runtest} returns an exit code of @code{1} if any test
|
596 |
|
|
has an unexpected result; otherwise (if all tests pass or fail as
|
597 |
|
|
expected) it returns @code{0} as the exit code.
|
598 |
|
|
|
599 |
|
|
@code{runtest} flags the outcome of each test as one of these cases.
|
600 |
|
|
(@xref{Posix,,A POSIX conforming test framework}, for a discussion of
|
601 |
|
|
how @sc{posix} specifies the meanings of these cases.)
|
602 |
|
|
|
603 |
|
|
@table @code
|
604 |
|
|
@item PASS
|
605 |
|
|
@kindex PASS
|
606 |
|
|
@cindex successful test
|
607 |
|
|
@cindex test, successful
|
608 |
|
|
The most desirable outcome: the test succeeded, and was expected to
|
609 |
|
|
succeed.
|
610 |
|
|
|
611 |
|
|
@item XPASS
|
612 |
|
|
@kindex XPASS
|
613 |
|
|
@cindex successful test, unexpected
|
614 |
|
|
@cindex unexpected success
|
615 |
|
|
A pleasant kind of failure: a test was expected to fail, but succeeded.
|
616 |
|
|
This may indicate progress; inspect the test case to determine whether
|
617 |
|
|
you should amend it to stop expecting failure.
|
618 |
|
|
|
619 |
|
|
@item FAIL
|
620 |
|
|
@kindex FAIL
|
621 |
|
|
@cindex failing test, unexpected
|
622 |
|
|
@cindex test, failing
|
623 |
|
|
A test failed, although it was expected to succeed. This may indicate
|
624 |
|
|
regress; inspect the test case and the failing software to locate the bug.
|
625 |
|
|
|
626 |
|
|
@item XFAIL
|
627 |
|
|
@kindex XFAIL
|
628 |
|
|
@cindex expected failure
|
629 |
|
|
@cindex failing test, expected
|
630 |
|
|
A test failed, but it was expected to fail. This result indicates no
|
631 |
|
|
change in a known bug. If a test fails because the operating system
|
632 |
|
|
where the test runs lacks some facility required by the test, the
|
633 |
|
|
outcome is @code{UNSUPPORTED} instead.
|
634 |
|
|
|
635 |
|
|
@item UNRESOLVED
|
636 |
|
|
@kindex UNRESOLVED
|
637 |
|
|
@cindex test, unresolved outcome
|
638 |
|
|
Output from a test requires manual inspection; the test suite could not
|
639 |
|
|
automatically determine the outcome. For example, your tests can report
|
640 |
|
|
this outcome is when a test does not complete as expected.
|
641 |
|
|
|
642 |
|
|
@item UNTESTED
|
643 |
|
|
@kindex UNTESTED
|
644 |
|
|
@cindex untested properties
|
645 |
|
|
A test case is not yet complete, and in particular cannot yet produce a
|
646 |
|
|
@code{PASS} or @code{FAIL}. You can also use this outcome in dummy
|
647 |
|
|
``tests'' that note explicitly the absence of a real test case
|
648 |
|
|
for a particular property.
|
649 |
|
|
|
650 |
|
|
@item UNSUPPORTED
|
651 |
|
|
@kindex UNSUPPORTED
|
652 |
|
|
@cindex unsupported test
|
653 |
|
|
@cindex test, unsupported
|
654 |
|
|
A test depends on a conditionally available feature that does not exist
|
655 |
|
|
(in the configured testing environment). For example, you can use this
|
656 |
|
|
outcome to report on a test case that does not work on a particular
|
657 |
|
|
target because its operating system support does not include a required
|
658 |
|
|
subroutine.
|
659 |
|
|
@end table
|
660 |
|
|
|
661 |
|
|
@code{runtest} may also display the following messages:
|
662 |
|
|
|
663 |
|
|
@table @code
|
664 |
|
|
@item ERROR
|
665 |
|
|
@kindex ERROR
|
666 |
|
|
@cindex problem, detected by test case
|
667 |
|
|
@cindex test case cannot run
|
668 |
|
|
Indicates a major problem (detected by the test case itself) in running
|
669 |
|
|
the test. This is usually an unrecoverable error, such as a missing file
|
670 |
|
|
or loss of communication to the target. (@sc{posix} test suites should
|
671 |
|
|
not emit this message; use @code{UNSUPPORTED}, @code{UNTESTED}, or
|
672 |
|
|
@code{UNRESOLVED} instead, as appropriate.)
|
673 |
|
|
|
674 |
|
|
@item WARNING
|
675 |
|
|
@kindex WARNING
|
676 |
|
|
@cindex test case warnings
|
677 |
|
|
Indicates a possible problem in running the test. Usually warnings
|
678 |
|
|
correspond to recoverable errors, or display an important message about
|
679 |
|
|
the following tests.
|
680 |
|
|
|
681 |
|
|
@item NOTE
|
682 |
|
|
@kindex NOTE
|
683 |
|
|
@cindex test case messages
|
684 |
|
|
An informational message about the test case.
|
685 |
|
|
@end table
|
686 |
|
|
|
687 |
|
|
This is the full set of command line options that @code{runtest}
|
688 |
|
|
recognizes. Arguments may be abbreviated to the shortest unique string.
|
689 |
|
|
|
690 |
|
|
@cindex @code{runtest} option list
|
691 |
|
|
@cindex option list, @code{runtest}
|
692 |
|
|
@smallexample
|
693 |
|
|
runtest --tool @var{tool} [ @var{testsuite}.exp @dots{} ]
|
694 |
|
|
[ @var{testsuite}.exp="testfile1 @dots{}" ]
|
695 |
|
|
[ @var{tclvar}=@var{value}@dots{} ]
|
696 |
|
|
[ --all ] [ --baud @var{baud-rate} ] [ --connect @var{type} ]
|
697 |
|
|
[ --debug ] [ --help ] [ --host @var{string} ]
|
698 |
|
|
[ --mail "@var{name} @dots{}" ] [ --name @var{string} ]
|
699 |
|
|
[ --name @var{name} ] [ --outdir @var{path} ]
|
700 |
|
|
[ --objdir @var{path} ] [ --reboot ]
|
701 |
|
|
[ --srcdir @var{path} ] [ --strace @var{n} ]
|
702 |
|
|
[ --target @var{string} --build @var{string} ]
|
703 |
|
|
[ -v | --verbose ] [ -V | --version ] [ --D@var{n} ]
|
704 |
|
|
@end smallexample
|
705 |
|
|
|
706 |
|
|
@table @code
|
707 |
|
|
@item --tool @var{tool}
|
708 |
|
|
@cindex selecting tests for a tool
|
709 |
|
|
@cindex @code{--tool} (@code{runtest} option)
|
710 |
|
|
@var{tool} specifies what set of tests to run, and what initialization
|
711 |
|
|
module to use. @var{tool} is used @emph{only} for these two purposes:
|
712 |
|
|
it is @emph{not} used to name the executable program to test.
|
713 |
|
|
Executable tool names (and paths) are recorded in @file{site.exp}
|
714 |
|
|
(@pxref{Config Values,,Configuration dependent values}), and you can
|
715 |
|
|
override them by specifying Tcl variables on the command line.
|
716 |
|
|
|
717 |
|
|
For example, including @samp{--tool gcc} on the @code{runtest} command
|
718 |
|
|
line runs tests from all test subdirectories whose names match
|
719 |
|
|
@file{gcc.*}, and uses one of the initialization modules named
|
720 |
|
|
@file{config/*-gcc.exp}. To specify the name of the compiler (perhaps
|
721 |
|
|
as an alternative path to what @code{runtest} would use by default), use
|
722 |
|
|
@samp{GCC=@var{binname}} on the @code{runtest} command line.
|
723 |
|
|
|
724 |
|
|
@item @var{testsuite}.exp @dots{}
|
725 |
|
|
@cindex selecting a range of tests
|
726 |
|
|
@cindex tests, running specifically
|
727 |
|
|
@cindex naming tests to run
|
728 |
|
|
Specify the names of testsuites to run.
|
729 |
|
|
By default, @code{runtest} runs all tests for the tool, but you can
|
730 |
|
|
restrict it to particular testsuites by giving the names of the @samp{.exp}
|
731 |
|
|
@code{expect} scripts that control them.
|
732 |
|
|
|
733 |
|
|
@var{testsuite}.exp may not include path information; use plain filenames.
|
734 |
|
|
|
735 |
|
|
@item @var{testfile}.exp="testfile1 @dots{}"
|
736 |
|
|
@cindex selecting a range of tests
|
737 |
|
|
@cindex tests, running specifically
|
738 |
|
|
@cindex naming tests to run
|
739 |
|
|
Specify a subset of tests in a suite to run.
|
740 |
|
|
For compiler or assembler tests, which often use a single @samp{.exp}
|
741 |
|
|
script covering many different source files, this option allows you to
|
742 |
|
|
further restrict the tests by listing particular source files to compile.
|
743 |
|
|
Some tools even support wildcards here. The wildcards supported depend
|
744 |
|
|
upon the tool, but typically they are @code{?}, @code{*}, and @code{[chars]}.
|
745 |
|
|
|
746 |
|
|
@item @var{tclvar}=@var{value}
|
747 |
|
|
@kindex @var{tclvar}=@var{value}
|
748 |
|
|
@cindex Tcl variables, defining for @code{runtest}
|
749 |
|
|
@cindex command line Tcl variable definition
|
750 |
|
|
@cindex @code{runtest}, variable defns on cmdline
|
751 |
|
|
You can define Tcl variables for use by your test scripts in the same
|
752 |
|
|
style used with @code{make} for environment variables. For example,
|
753 |
|
|
@samp{runtest GDB=gdb.old} defines a variable called @samp{GDB}; when
|
754 |
|
|
your scripts refer to @samp{$GDB} in this run, they use the value
|
755 |
|
|
@samp{gdb.old}.
|
756 |
|
|
|
757 |
|
|
The default Tcl variables used for most tools are defined in the main
|
758 |
|
|
DejaGnu @code{Makefile}; their values are captured in the
|
759 |
|
|
@file{site.exp} file. @xref{Config Values,,Configuration dependent
|
760 |
|
|
values}.
|
761 |
|
|
|
762 |
|
|
@item --all
|
763 |
|
|
@cindex @code{--all} (@code{runtest} option)
|
764 |
|
|
@cindex test output, displaying all
|
765 |
|
|
Display all test output. By default, @code{runtest} shows only the
|
766 |
|
|
output of tests that produce unexpected results; that is, tests with
|
767 |
|
|
status @samp{FAIL} (unexpected failure), @samp{XPASS} (unexpected
|
768 |
|
|
success), or @samp{ERROR} (a severe error in the test case itself).
|
769 |
|
|
Specify @samp{--all} to see output for tests with status @samp{PASS}
|
770 |
|
|
(success, as expected) @samp{XFAIL} (failure, as expected), or
|
771 |
|
|
@samp{WARNING} (minor error in the test case itself).
|
772 |
|
|
|
773 |
|
|
@item --baud @var{baud-rate}
|
774 |
|
|
@itemx -b @var{baud-rate}
|
775 |
|
|
@cindex baud rate, specifying
|
776 |
|
|
@cindex bps, specifying
|
777 |
|
|
@cindex @code{--baud} (@code{runtest} option)
|
778 |
|
|
@cindex @code{-b} (@code{runtest} option)
|
779 |
|
|
Set the default baud rate to something other than 9600. (Some serial
|
780 |
|
|
interface programs, like @code{tip}, use a separate initialization file
|
781 |
|
|
instead of this value.)
|
782 |
|
|
|
783 |
|
|
@item --connect @var{type}
|
784 |
|
|
@cindex connecting to target
|
785 |
|
|
@cindex @code{--connect} (@code{runtest} option)
|
786 |
|
|
@cindex remote testbed, connecting to
|
787 |
|
|
@cindex @code{rlogin}, remote testing via
|
788 |
|
|
@cindex @code{telnet}, remote testing via
|
789 |
|
|
@cindex @code{rsh}, remote testing via
|
790 |
|
|
@cindex @code{tip}, remote testing via
|
791 |
|
|
@cindex @code{kermit}, remote testing via
|
792 |
|
|
@cindex @code{mondfe}, remote testing via
|
793 |
|
|
@cindex remote testing via @code{rlogin}
|
794 |
|
|
@cindex remote testing via @code{telnet}
|
795 |
|
|
@cindex remote testing via @code{rsh}
|
796 |
|
|
@cindex remote testing via @code{tip}
|
797 |
|
|
@cindex remote testing via @code{kermit}
|
798 |
|
|
@cindex remote testing via @code{mondfe}
|
799 |
|
|
Connect to a target testing environment as specified by @var{type}, if
|
800 |
|
|
the target is not the computer running @code{runtest}. For example, use
|
801 |
|
|
@samp{--connect} to change the program used to connect to a ``bare
|
802 |
|
|
board'' boot monitor. The choices for @var{type} in the DejaGnu 1.0
|
803 |
|
|
distribution are @samp{rlogin}, @samp{telnet}, @samp{rsh}, @samp{tip},
|
804 |
|
|
@samp{kermit}, and @samp{mondfe}.
|
805 |
|
|
|
806 |
|
|
@noindent
|
807 |
|
|
The default for this option depends on the configuration (@pxref{Cross
|
808 |
|
|
Targets,,Remote targets supported}). The default is chosen to be the
|
809 |
|
|
most convenient communication method available, but often other
|
810 |
|
|
alternatives work as well; you may find it useful to try alternative
|
811 |
|
|
connect methods if you suspect a communication problem with your testing
|
812 |
|
|
target.
|
813 |
|
|
|
814 |
|
|
@item --debug
|
815 |
|
|
@cindex @code{--debug} (@code{runtest} option)
|
816 |
|
|
@cindex debug log for test cases
|
817 |
|
|
@cindex test cases, debug log
|
818 |
|
|
@cindex @code{dbg.log} file
|
819 |
|
|
Turns on the @code{expect} internal debugging output. Debugging output
|
820 |
|
|
is displayed as part of the @code{runtest} output, and logged to a file
|
821 |
|
|
called @file{dbg.log}. The extra debugging output does @emph{not}
|
822 |
|
|
appear on standard output, unless the verbose level is greater than 2
|
823 |
|
|
(for instance, to see debug output immediately, specify @samp{--debug -v
|
824 |
|
|
-v}). The debugging output shows all attempts at matching the test
|
825 |
|
|
output of the tool with the scripted patterns describing expected
|
826 |
|
|
output. The output generated with @samp{--strace} also goes into
|
827 |
|
|
@file{dbg.log}.
|
828 |
|
|
|
829 |
|
|
@item --help
|
830 |
|
|
@itemx -he
|
831 |
|
|
@cindex @code{--help} (@code{runtest} option)
|
832 |
|
|
@cindex help with @code{runtest}
|
833 |
|
|
@cindex @code{runtest}, listing options
|
834 |
|
|
Prints out a short summary of the @code{runtest} options, then exits
|
835 |
|
|
(even if you also specify other options).
|
836 |
|
|
|
837 |
|
|
@item --host @var{string}
|
838 |
|
|
@cindex @code{--host} (@code{runtest} option)
|
839 |
|
|
@cindex specifying the host config name
|
840 |
|
|
@cindex host config name, changing
|
841 |
|
|
@var{string} is a full configuration ``triple'' name as used by
|
842 |
|
|
@code{configure}. Use this option to override the default string
|
843 |
|
|
recorded by your configuration's choice of host. This choice does not
|
844 |
|
|
change how anything is actually configured unless --build is also
|
845 |
|
|
specified; it affects @emph{only} DejaGnu procedures that compare the
|
846 |
|
|
host string with particular values. The procedures @code{ishost},
|
847 |
|
|
@code{istarget}, @code{isnative}, and @code{setup_xfail} are affected by
|
848 |
|
|
@samp{--host}. In this usage, @code{host} refers to the machine that the
|
849 |
|
|
tests are to be run on, which may not be the same as the @code{build}
|
850 |
|
|
machine. If @code{--build} is also specified, then @code{--host} refers
|
851 |
|
|
to the machine that the tests wil, be run on, not the machine DejaGnu is
|
852 |
|
|
run on.
|
853 |
|
|
|
854 |
|
|
@item --build @var{string}
|
855 |
|
|
@cindex @code{--build} (@code{runtest} option)
|
856 |
|
|
@cindex specifying the build config name
|
857 |
|
|
@cindex build config name, changing
|
858 |
|
|
@var{string} is a full configuration ``triple'' name as used by
|
859 |
|
|
@code{configure}. This is the type of machine DejaGnu and the tools to
|
860 |
|
|
be tested are built on. For a normal cross this is the same as the host,
|
861 |
|
|
but for a canadian cross, they are seperate.
|
862 |
|
|
|
863 |
|
|
@item --name @var{name}
|
864 |
|
|
@cindex specifying target name
|
865 |
|
|
@cindex target machine name
|
866 |
|
|
@cindex @code{--name} (@code{runtest} option)
|
867 |
|
|
@var{name} is a name for the particular testing target machine (for
|
868 |
|
|
cross testing). If the testing target has IP network support (for
|
869 |
|
|
example, @code{RPC} or @code{NFS}), this is the network name for the
|
870 |
|
|
target itself. (@var{name} is @emph{not the configuration string} you
|
871 |
|
|
specify as a target with @code{configure}; the @samp{--name} option
|
872 |
|
|
names a particular target, rather than describing a class of targets.)
|
873 |
|
|
For targets that connect in other ways, the meaning of the @var{name}
|
874 |
|
|
string depends on the connection method. @xref{Cross Targets,,Remote
|
875 |
|
|
targets supported}.
|
876 |
|
|
|
877 |
|
|
@item --name @var{string}
|
878 |
|
|
@cindex remote test machine name
|
879 |
|
|
@cindex name for remote test machine
|
880 |
|
|
Specify a network name of testing target or its host. The particular
|
881 |
|
|
names that are meaningful with @samp{--name} will depend on your site
|
882 |
|
|
configuration, and on the connection protocol: for example, @code{tip}
|
883 |
|
|
connections require names from a serial line configuration file (usually
|
884 |
|
|
called @file{/etc/remote}), while @code{telnet} connections use IP
|
885 |
|
|
hostnames.
|
886 |
|
|
|
887 |
|
|
@item --objdir @var{path}
|
888 |
|
|
@cindex @code{--objdir} (@code{runtest} option)
|
889 |
|
|
@cindex object directory
|
890 |
|
|
@cindex test programs, auxiliary
|
891 |
|
|
@cindex auxiliary test programs
|
892 |
|
|
Use @var{path} as the top directory containing any auxiliary compiled
|
893 |
|
|
test code. This defaults to @file{.}. Use this option to locate
|
894 |
|
|
pre-compiled test code. You can normally prepare any auxiliary files
|
895 |
|
|
needed with @code{make}.
|
896 |
|
|
|
897 |
|
|
@item --outdir @var{path}
|
898 |
|
|
@cindex output directory
|
899 |
|
|
@cindex @code{--outdir} (@code{runtest} option)
|
900 |
|
|
@cindex log files, where to write
|
901 |
|
|
Write output logs in directory @var{path}. The default is @samp{.}, the
|
902 |
|
|
directory where you start @code{runtest}. This option affects only the
|
903 |
|
|
summary and the detailed log files @file{@var{tool}.sum} and
|
904 |
|
|
@file{@var{tool}.log}. The DejaGnu debug log @file{dbg.log} always
|
905 |
|
|
appears (when requested) in the local directory.
|
906 |
|
|
|
907 |
|
|
@item --reboot
|
908 |
|
|
@cindex rebooting remote targets
|
909 |
|
|
@cindex @code{--reboot} (@code{runtest} option)
|
910 |
|
|
Reboot the target board when @code{runtest} initializes.
|
911 |
|
|
Usually, when running tests on a separate target board, it is safer to
|
912 |
|
|
reboot the target to be certain of its state. However, when developing
|
913 |
|
|
test scripts, rebooting takes a lot of time.
|
914 |
|
|
|
915 |
|
|
@item --srcdir @var{path}
|
916 |
|
|
@cindex source directory
|
917 |
|
|
@cindex @code{--srcdir} (@code{runtest} option)
|
918 |
|
|
Use @var{path} as the top directory for test scripts to run.
|
919 |
|
|
@code{runtest} looks in this directory for any subdirectory whose name
|
920 |
|
|
begins with the toolname (specified with @samp{--tool}). For instance,
|
921 |
|
|
with @samp{--tool gdb}, @code{runtest} uses tests in subdirectories
|
922 |
|
|
@file{gdb.*} (with the usual shell-like filename expansion). If you do
|
923 |
|
|
not use @samp{--srcdir}, @code{runtest} looks for test directories under
|
924 |
|
|
the current working directory.
|
925 |
|
|
|
926 |
|
|
@item --strace @var{n}
|
927 |
|
|
@cindex @code{--strace} (@code{runtest} option)
|
928 |
|
|
@cindex tracing Tcl commands
|
929 |
|
|
@cindex @code{expect} internal tracing
|
930 |
|
|
Turn on internal tracing for @code{expect}, to @var{n} levels deep. By
|
931 |
|
|
adjusting the level, you can control the extent to which your output
|
932 |
|
|
expands multi-level Tcl statements. This allows you to ignore some
|
933 |
|
|
levels of @code{case} or @code{if} statements. Each procedure call or
|
934 |
|
|
control structure counts as one ``level''.
|
935 |
|
|
|
936 |
|
|
The output is recorded in the same file, @file{dbg.log}, used for output
|
937 |
|
|
from @samp{--debug}.
|
938 |
|
|
|
939 |
|
|
@item --target @var{string}
|
940 |
|
|
@cindex @code{--target} (@code{runtest} option)
|
941 |
|
|
@cindex specifying the target configuration
|
942 |
|
|
@cindex target configuration, specifying
|
943 |
|
|
Use this option to override the default setting (running native tests).
|
944 |
|
|
@var{string} is a full configuration ``triple''
|
945 |
|
|
name@footnote{Configuration triples have the form
|
946 |
|
|
@samp{@var{cpu}-@var{vendor}-@var{os}}.} as used by @code{configure}.
|
947 |
|
|
This option changes the configuration @code{runtest} uses for the
|
948 |
|
|
default tool names, and other setup information. @xref{Using
|
949 |
|
|
configure,,Using @code{configure}, configure.info, Cygnus configure},
|
950 |
|
|
for details about @code{configure} names.
|
951 |
|
|
|
952 |
|
|
@item --verbose
|
953 |
|
|
@itemx -v
|
954 |
|
|
@cindex @code{--verbose} (@code{runtest} option)
|
955 |
|
|
@cindex @code{-v} (@code{runtest} option)
|
956 |
|
|
@cindex turning on output
|
957 |
|
|
@cindex output, additional
|
958 |
|
|
Turns on more output. Repeating this option increases the amount of
|
959 |
|
|
output displayed. Level one (@samp{-v}) is simply test output. Level
|
960 |
|
|
two (@samp{-v -v}) shows messages on options, configuration, and process
|
961 |
|
|
control. Verbose messages appear in the detailed (@file{*.log}) log
|
962 |
|
|
file, but not in the summary (@file{*.sum}) log file.
|
963 |
|
|
|
964 |
|
|
@item --version
|
965 |
|
|
@itemx -V
|
966 |
|
|
@cindex @code{-V} (@code{runtest} option)
|
967 |
|
|
@cindex @code{--version} (@code{runtest} option)
|
968 |
|
|
@cindex version numbers
|
969 |
|
|
Prints out the version numbers of DejaGnu, @code{expect} and Tcl, and
|
970 |
|
|
exits without running any tests.
|
971 |
|
|
|
972 |
|
|
@item -D0
|
973 |
|
|
@itemx -D1
|
974 |
|
|
@cindex starting the tcl debugger
|
975 |
|
|
@cindex tcl debugger
|
976 |
|
|
@c FIXME!!! we should say a *lot* more about this debugger
|
977 |
|
|
Start the internal Tcl debugger. The Tcl debugger supports breakpoints,
|
978 |
|
|
single stepping, and other common debugging activities. (See @cite{A
|
979 |
|
|
Debugger for Tcl Applications} by Don Libes. @footnote{Distributed in
|
980 |
|
|
PostScript form with @code{expect} as the file@*
|
981 |
|
|
@file{expect/tcl-debug.ps}.})
|
982 |
|
|
|
983 |
|
|
If you specify @samp{-D1}, the @code{expect} shell stops at a breakpoint
|
984 |
|
|
as soon as DejaGnu invokes it.
|
985 |
|
|
|
986 |
|
|
If you specify @samp{-D0}, DejaGnu starts as usual, but you can enter
|
987 |
|
|
the debugger by sending an interrupt (e.g. by typing @key{C-c}).
|
988 |
|
|
@end table
|
989 |
|
|
|
990 |
|
|
@node Customizing
|
991 |
|
|
@chapter Setting @code{runtest} defaults
|
992 |
|
|
|
993 |
|
|
@kindex site.exp
|
994 |
|
|
@cindex variables of DejaGnu, defaults
|
995 |
|
|
The site configuration file, @file{site.exp}, captures
|
996 |
|
|
configuration-dependent values and propagates them to the DejaGnu test
|
997 |
|
|
environment using Tcl variables. This ties the DejaGnu test scripts
|
998 |
|
|
into the @code{configure} and @code{make} programs.
|
999 |
|
|
|
1000 |
|
|
@cindex @file{site.exp}, multiple
|
1001 |
|
|
@cindex overriding @file{site.exp}
|
1002 |
|
|
DejaGnu supports more than one @file{site.exp} file. The multiple
|
1003 |
|
|
instances of @file{site.exp} are loaded in a fixed order built into
|
1004 |
|
|
DejaGnu (the more local last). The first file loaded is the optional
|
1005 |
|
|
@code{~/.dejagnurc}, then the local files, and finally the global file.
|
1006 |
|
|
|
1007 |
|
|
@enumerate
|
1008 |
|
|
@item
|
1009 |
|
|
There is am optional ``master'' @file{site.exp}, capturing configuration values
|
1010 |
|
|
that apply to DejaGnu across the board, in each configuration-specific
|
1011 |
|
|
subdirectory of the DejaGnu library directory. @code{runtest} loads
|
1012 |
|
|
these values first. @xref{Installation,,Configuring and Installing
|
1013 |
|
|
DejaGnu}. The master @file{site.exp} contains the default values for
|
1014 |
|
|
all targets and hosts supported by DejaGnu. This master file is
|
1015 |
|
|
identified by setting the environment variable @code{DEJAGNU} to the
|
1016 |
|
|
name of the file. This is also refered to as the ``global'' config file.
|
1017 |
|
|
|
1018 |
|
|
@item
|
1019 |
|
|
Any directory containing a configured test suite also has a
|
1020 |
|
|
@file{site.exp}, capturing configuration values specific to the tool
|
1021 |
|
|
under test. Since @code{runtest} loads these values last, the
|
1022 |
|
|
individual test configuration can either rely on and use, or override,
|
1023 |
|
|
any of the global values from the ``master'' @file{site.exp}.
|
1024 |
|
|
|
1025 |
|
|
You can usually generate or update the testsuite @file{site.exp} by
|
1026 |
|
|
typing @samp{make site.exp} in the test suite directory, after the test
|
1027 |
|
|
suite is configured.
|
1028 |
|
|
|
1029 |
|
|
@item
|
1030 |
|
|
You can also have a file in your home directory called
|
1031 |
|
|
@code{.dejagnurc}. This gets loaded first before the other config
|
1032 |
|
|
files. Usually this is used for personal stuff, like setting
|
1033 |
|
|
@code{all_flag} so all the output gets printed, or verbosity levels.
|
1034 |
|
|
@end enumerate
|
1035 |
|
|
|
1036 |
|
|
You can further override the default values in a user-editable section
|
1037 |
|
|
of any @file{site.exp}, or by setting variables on the @code{runtest}
|
1038 |
|
|
command line.
|
1039 |
|
|
|
1040 |
|
|
@menu
|
1041 |
|
|
* Config Values:: Variables used in the configuration file.
|
1042 |
|
|
* Master Config File:: The master configuration file.
|
1043 |
|
|
* Local Config File:: The local configuration file.
|
1044 |
|
|
* Personal Config File:: The personal configuration file.
|
1045 |
|
|
@end menu
|
1046 |
|
|
|
1047 |
|
|
@node Config Values, Master Config File, , Customizing
|
1048 |
|
|
@subsection Config Variables
|
1049 |
|
|
@cindex configuration dependent defaults
|
1050 |
|
|
@cindex setting defaults for DejaGnu variables
|
1051 |
|
|
|
1052 |
|
|
@c NOTE: default values are given via @code{"fubar"} rather than the
|
1053 |
|
|
@c more conventional @samp{fubar} to permit a consistent and clear
|
1054 |
|
|
@c notation for the empty string (@code{""}), which will work exactly as
|
1055 |
|
|
@c typed.
|
1056 |
|
|
|
1057 |
|
|
DejaGnu uses a named array in Tcl to hold all the info for each
|
1058 |
|
|
machine. In the case of a canadian cross, this means host information as
|
1059 |
|
|
well as target information. The named array is called
|
1060 |
|
|
@code{target_info}, and it has two indices. The following fields are
|
1061 |
|
|
part of the array.
|
1062 |
|
|
|
1063 |
|
|
@table @code
|
1064 |
|
|
@item name
|
1065 |
|
|
The name of the target. (mostly for error messages) This
|
1066 |
|
|
should also be the string used for this target's array.
|
1067 |
|
|
It should also be the same as the linker script so we
|
1068 |
|
|
can find them dynamically. This should be the same as the argument used
|
1069 |
|
|
for @code{push_target@{@}}.
|
1070 |
|
|
|
1071 |
|
|
@item ldflags
|
1072 |
|
|
This is the linker flags required to produce a fully linked
|
1073 |
|
|
executable. For @code{libgloss} supported targets this is usually just
|
1074 |
|
|
the name of the linker script.
|
1075 |
|
|
|
1076 |
|
|
@item config
|
1077 |
|
|
The target canonical for this target. This is used by some init files to
|
1078 |
|
|
make sure the target is supported.
|
1079 |
|
|
|
1080 |
|
|
@item cflags
|
1081 |
|
|
The flags required to produce an object file from a source file.
|
1082 |
|
|
|
1083 |
|
|
@item connect
|
1084 |
|
|
This is the connectmode for this target. This is for both IP and
|
1085 |
|
|
serial connections. Typically this is either @code{telnet},
|
1086 |
|
|
@code{rlogin}, or @code{rsh}.
|
1087 |
|
|
|
1088 |
|
|
@item target
|
1089 |
|
|
This is the hostname of the target. This is for TCP/IP based connections,
|
1090 |
|
|
and is also used for version of tip that use /etc/remote.
|
1091 |
|
|
|
1092 |
|
|
@item serial
|
1093 |
|
|
This is the serial port. This is typically /dev/tty? or com?:.
|
1094 |
|
|
|
1095 |
|
|
@item netport
|
1096 |
|
|
This is the IP port. This is commonly used for telneting to target
|
1097 |
|
|
boards that are connected to a terminal server. In that case the IP port
|
1098 |
|
|
specifies the which serial port to use.
|
1099 |
|
|
|
1100 |
|
|
@item baud
|
1101 |
|
|
This is the baud rate for a serial port connection.
|
1102 |
|
|
|
1103 |
|
|
@item x10
|
1104 |
|
|
This is the parameters for an x10 controller. These are simple devices
|
1105 |
|
|
that let us power cycle or reset a target board remotely.
|
1106 |
|
|
|
1107 |
|
|
@item fileid
|
1108 |
|
|
This is the fileid or spawn id of of the connection.
|
1109 |
|
|
|
1110 |
|
|
@item prompt
|
1111 |
|
|
a glob style pattern to recognize the prompt.
|
1112 |
|
|
|
1113 |
|
|
@item abbrev
|
1114 |
|
|
abbreviation for tool init files.
|
1115 |
|
|
|
1116 |
|
|
@item ioport
|
1117 |
|
|
This is the port for I/O on dual port systems. In this configuration,
|
1118 |
|
|
the main serial port @code{0} is usually used for stdin and stdout,
|
1119 |
|
|
which the second serial port can be used for debugging.
|
1120 |
|
|
@end table
|
1121 |
|
|
|
1122 |
|
|
The first index into the array is the same value as used in the
|
1123 |
|
|
@code{name} field. This is usually a short version of the name of the
|
1124 |
|
|
target board. For an example, here's the settings I use for my
|
1125 |
|
|
@code{Motorola's} @code{IDP} board and my @code{Motorola} 6U VME
|
1126 |
|
|
@code{MVME135-1} board. (both m68k targets)
|
1127 |
|
|
|
1128 |
|
|
@cartouche
|
1129 |
|
|
@smallexample
|
1130 |
|
|
# IDP board
|
1131 |
|
|
set target_info(idp,name) "idp"
|
1132 |
|
|
set target_info(idp,ldflags) "-Tidp.ld"
|
1133 |
|
|
set target_info(idp,config) m68k-unknown-aout
|
1134 |
|
|
set target_info(idp,cflags) ""
|
1135 |
|
|
set target_info(idp,connect) telnet
|
1136 |
|
|
set target_info(idp,target) "s7"
|
1137 |
|
|
set target_info(idp,serial) "tstty7"
|
1138 |
|
|
set target_info(idp,netport) "wharfrat:1007"
|
1139 |
|
|
set target_info(idp,baud) "9600"
|
1140 |
|
|
# MVME 135 board
|
1141 |
|
|
set target_info(idp,name) "mvme"
|
1142 |
|
|
set target_info(idp,ldflags) "-Tmvme.ld"
|
1143 |
|
|
set target_info(idp,config) m68k-unknown-aout
|
1144 |
|
|
set target_info(idp,cflags) ""
|
1145 |
|
|
set target_info(idp,connect) telnet
|
1146 |
|
|
set target_info(idp,target) "s8"
|
1147 |
|
|
set target_info(idp,serial) "tstty8"
|
1148 |
|
|
set target_info(idp,netport) "wharfrat:1008"
|
1149 |
|
|
set target_info(idp,baud) "9600"
|
1150 |
|
|
@end smallexample
|
1151 |
|
|
@end cartouche
|
1152 |
|
|
|
1153 |
|
|
DejaGnu can use this information to switch between multiple targets in
|
1154 |
|
|
one test run. This is done through the use of the @code{push_target}
|
1155 |
|
|
procedure, which is discussed elsewhere.
|
1156 |
|
|
@c FIXME: write that section and put an xref here
|
1157 |
|
|
|
1158 |
|
|
This array can also hold information for a remote host, which is used
|
1159 |
|
|
when testing a candain cross. In this case, the only thing different is
|
1160 |
|
|
the index is just @code{host}. Here's the settings I use to run tests
|
1161 |
|
|
on my NT machine while running DejaGnu on a Unix machine. (in this case
|
1162 |
|
|
a Linux box)
|
1163 |
|
|
|
1164 |
|
|
@cartouche
|
1165 |
|
|
@smallexample
|
1166 |
|
|
set target_info(host,name) "nt-host"
|
1167 |
|
|
set target_info(host,config) "386-unknown-winnt"
|
1168 |
|
|
set target_info(host,connect) "telnet"
|
1169 |
|
|
set target_info(host,target) "ripple"
|
1170 |
|
|
@end smallexample
|
1171 |
|
|
@end cartouche
|
1172 |
|
|
|
1173 |
|
|
There is more info on how to use these variables in the sections on the
|
1174 |
|
|
config files. @xref{Master Config File,,Configuration Files}.
|
1175 |
|
|
|
1176 |
|
|
@cindex option defaults
|
1177 |
|
|
@cindex @code{runtest} option defaults
|
1178 |
|
|
@cindex variables for option defaults
|
1179 |
|
|
@cindex defaults, option
|
1180 |
|
|
In the user editable second section of @file{site.exp}, you can not only
|
1181 |
|
|
override the configuration variables captured in the first section, but
|
1182 |
|
|
also specify default values for all the @code{runtest} command line
|
1183 |
|
|
options. Save for @samp{--debug}, @samp{--help}, and @samp{--version},
|
1184 |
|
|
each command line option has an associated Tcl variable. Use the Tcl
|
1185 |
|
|
@code{set} command to specify a new default value (as for the
|
1186 |
|
|
configuration variables). The following table describes the
|
1187 |
|
|
correspondence between command line options and variables you can set in
|
1188 |
|
|
@file{site.exp}. @xref{Invoking runtest,,Running the Tests}, for
|
1189 |
|
|
explanations of the command-line options.
|
1190 |
|
|
|
1191 |
|
|
@kindex all_flag
|
1192 |
|
|
@kindex baud
|
1193 |
|
|
@kindex reboot
|
1194 |
|
|
@kindex outdir
|
1195 |
|
|
@kindex objdir
|
1196 |
|
|
@kindex runtests
|
1197 |
|
|
@kindex ignoretests
|
1198 |
|
|
@kindex srcdir
|
1199 |
|
|
@kindex tracelevel
|
1200 |
|
|
@kindex targetname
|
1201 |
|
|
@kindex connectmode
|
1202 |
|
|
@kindex tool
|
1203 |
|
|
@kindex target_triplet
|
1204 |
|
|
@kindex host_triplet
|
1205 |
|
|
@kindex build_triplet
|
1206 |
|
|
@kindex verbose
|
1207 |
|
|
|
1208 |
|
|
@cindex command line option variables
|
1209 |
|
|
@cindex Tcl variables for option defaults
|
1210 |
|
|
@cindex default options, controlling
|
1211 |
|
|
@cindex options, Tcl variables for defaults
|
1212 |
|
|
|
1213 |
|
|
@ifinfo
|
1214 |
|
|
@display
|
1215 |
|
|
runtest Tcl
|
1216 |
|
|
option variable description
|
1217 |
|
|
__________ ________ ___________________________________________
|
1218 |
|
|
|
1219 |
|
|
--all all_flag display all test results if set
|
1220 |
|
|
|
1221 |
|
|
--baud baud set the default baud rate to something other
|
1222 |
|
|
than 9600.
|
1223 |
|
|
--connect connectmode @samp{rlogin}, @samp{telnet}, @samp{rsh},
|
1224 |
|
|
@samp{kermit}, @samp{tip}, or @samp{mondfe}
|
1225 |
|
|
|
1226 |
|
|
--outdir outdir directory for @file{@var{tool}.sum} and @file{@var{tool}.log}
|
1227 |
|
|
|
1228 |
|
|
--objdir objdir directory for pre-compiled binaries
|
1229 |
|
|
|
1230 |
|
|
--reboot reboot reboot the target if set to @code{"1"};
|
1231 |
|
|
do not reboot if set to @code{"0"} (the default)
|
1232 |
|
|
|
1233 |
|
|
--srcdir srcdir directory of test subdirectories
|
1234 |
|
|
|
1235 |
|
|
--strace tracelevel a number: Tcl trace depth
|
1236 |
|
|
|
1237 |
|
|
--tool tool name of tool to test; identifies init, test subdir
|
1238 |
|
|
|
1239 |
|
|
--verbose verbose verbosity level. As option, use multiple times;
|
1240 |
|
|
as variable, set a number, 0 or greater
|
1241 |
|
|
--target target_triplet The canonical configuration string for the target.
|
1242 |
|
|
--host host_triplet The canonical configuration string for the host.
|
1243 |
|
|
--build build_triplet The canonical configuration string for the
|
1244 |
|
|
build host.
|
1245 |
|
|
|
1246 |
|
|
@end display
|
1247 |
|
|
@end ifinfo
|
1248 |
|
|
|
1249 |
|
|
@tex
|
1250 |
|
|
\vbox{\halign{\hfil \tt #\quad &\quad\tt #\hfil &\hbox{\vtop{{\raggedright\parindent=0pt\parskip=5pt\hsize=2.75in\rm#\strut\par}}}\hfill\cr
|
1251 |
|
|
\cr
|
1252 |
|
|
{\it runtest}&{\it Tcl}\cr
|
1253 |
|
|
{\it option}&{\it variable}&{\it description}\cr
|
1254 |
|
|
\noalign{\hrule width\hsize}\cr
|
1255 |
|
|
--all &all\_flag &display all test results if set\cr
|
1256 |
|
|
--baud &baud &set the default baud rate to something other
|
1257 |
|
|
than 9600.\cr
|
1258 |
|
|
--connect &connectmode &@samp{rlogin}, @samp{telnet}, @samp{rsh},
|
1259 |
|
|
@samp{kermit}, @samp{tip}, or @samp{mondfe}\cr
|
1260 |
|
|
--mail &mailing\_list&address list for mailing test output\cr
|
1261 |
|
|
--name &targetname &network name of testing target or its host\cr
|
1262 |
|
|
--outdir &outdir &directory for @file{@var{tool}.sum} and @file{@var{tool}.log}\cr
|
1263 |
|
|
--objdir &objdir &directory for compiled binaries\cr
|
1264 |
|
|
--reboot &reboot &reboot the target if set to @code{"1"};
|
1265 |
|
|
do not reboot if set to @code{"0"} (the default)\cr
|
1266 |
|
|
--srcdir &srcdir &directory of test subdirectories\cr
|
1267 |
|
|
--strace &tracelevel &a number: Tcl trace depth\cr
|
1268 |
|
|
--tool &tool &name of tool to test; identifies init, test subdir\cr
|
1269 |
|
|
--verbose &verbose &verbosity level. As option, use multiple times;
|
1270 |
|
|
as variable, set a number, 0 or greater\cr
|
1271 |
|
|
--target &target\_triplet
|
1272 |
|
|
&The canonical configuration string for the target.\cr
|
1273 |
|
|
--host &host\_triplet &The canonical configuration string for the host.\cr
|
1274 |
|
|
--build &build\_triplet &The canonical configuration string for the
|
1275 |
|
|
build host.\cr
|
1276 |
|
|
}}
|
1277 |
|
|
@end tex
|
1278 |
|
|
|
1279 |
|
|
@node Master Config File, Local Config File, Config Values, Customizing
|
1280 |
|
|
@subsection Master Config File
|
1281 |
|
|
@cindex master @file{site.exp}
|
1282 |
|
|
@cindex @file{site.exp} for all of DejaGnu
|
1283 |
|
|
The master config file is where all the target specific config variables
|
1284 |
|
|
get set for a whole site get set. The idea is that for a centralized
|
1285 |
|
|
testing lab where people have to share a target between multiple
|
1286 |
|
|
developers. There are settings for both remote targets and remote hosts.
|
1287 |
|
|
Here's an example of a Master Config File (also called the Global config
|
1288 |
|
|
file) for a @emph{canadian cross}. A canadian cross is when you build
|
1289 |
|
|
and test a cross compiler on a machine other than the one it's to be
|
1290 |
|
|
hosted on.
|
1291 |
|
|
|
1292 |
|
|
Here we have the config settings for our California office. Note that
|
1293 |
|
|
all config values are site dependant. Here we have two sets of values
|
1294 |
|
|
that we use for testing m68k-aout cross compilers. As both of these
|
1295 |
|
|
target boards has a different debugging protocol, we test on both of
|
1296 |
|
|
them in sequence.
|
1297 |
|
|
|
1298 |
|
|
@cartouche
|
1299 |
|
|
@smallexample
|
1300 |
|
|
global CFLAGS
|
1301 |
|
|
global CXXFLAGS
|
1302 |
|
|
|
1303 |
|
|
case "$target_triplet" in @{
|
1304 |
|
|
@{ "native" @} @{
|
1305 |
|
|
set target_abbrev unix
|
1306 |
|
|
@}
|
1307 |
|
|
@{ "m68*-unknown-aout" @} @{
|
1308 |
|
|
set target_abbrev "rom68k"
|
1309 |
|
|
# IDP target # IDP board with rom68k monitor
|
1310 |
|
|
set target_info(idp,name) "idp"
|
1311 |
|
|
set target_info(idp,ldflags) "-Tidp.ld"
|
1312 |
|
|
set target_info(idp,config) m68k-unknown-aout
|
1313 |
|
|
set target_info(idp,cflags) ""
|
1314 |
|
|
set target_info(idp,connect) telnet
|
1315 |
|
|
set target_info(idp,target) "s7"
|
1316 |
|
|
set target_info(idp,serial) "tstty12"
|
1317 |
|
|
set target_info(idp,netport) "truckin:1007"
|
1318 |
|
|
set target_info(idp,baud) "9600"
|
1319 |
|
|
# MVME target # Motorola MVME 135 with BUG monitor
|
1320 |
|
|
set target_info(mvme,name) "mvme"
|
1321 |
|
|
set target_info(mvme,ldflags) "-Tmvme.ld"
|
1322 |
|
|
set target_info(mvme,config) m68k-unknown-aout
|
1323 |
|
|
set target_info(mvme,cflags) ""
|
1324 |
|
|
set target_info(mvme,connect) telnet
|
1325 |
|
|
set target_info(mvme,target) "s4"
|
1326 |
|
|
set target_info(mvme,serial) "tstty8"
|
1327 |
|
|
set target_info(mvme,netport) "truckin:1004"
|
1328 |
|
|
set target_info(mvme,baud) "9600"
|
1329 |
|
|
@}
|
1330 |
|
|
@}
|
1331 |
|
|
@end smallexample
|
1332 |
|
|
@end cartouche
|
1333 |
|
|
|
1334 |
|
|
In this case, we have support for several remote hosts for
|
1335 |
|
|
our m68k-aout cross compiler. Typically the remote Unix hosts run
|
1336 |
|
|
DejaGnu locally, but we also use them for debugging the testsuites when
|
1337 |
|
|
we find problems in running on remote hosts. Expect won't run on NT, so
|
1338 |
|
|
DejaGnu is run on the local build machine, and it'll connect to the NT
|
1339 |
|
|
host and run all the tests for this cross compiler on that host.
|
1340 |
|
|
|
1341 |
|
|
@smallexample
|
1342 |
|
|
@cartouche
|
1343 |
|
|
case "$host_triplet" in @{
|
1344 |
|
|
"native" @{
|
1345 |
|
|
@}
|
1346 |
|
|
"i?86-*-linux*" @{ # Linux host
|
1347 |
|
|
set target_info(host,name) "linux-host"
|
1348 |
|
|
set target_info(host,config) $host_triplet
|
1349 |
|
|
set target_info(host,connect) rlogin
|
1350 |
|
|
set target_info(host,target) chinadoll
|
1351 |
|
|
@}
|
1352 |
|
|
"i?86-*-winnt # NT host
|
1353 |
|
|
set target_info(host,name) "nt-host"
|
1354 |
|
|
set target_info(host,config) i386-unknown-winnt
|
1355 |
|
|
set target_info(host,connect) telnet
|
1356 |
|
|
set target_info(host,target) ripple
|
1357 |
|
|
@}
|
1358 |
|
|
"hppa*-hp-hpux*" @{ # HP-UX host
|
1359 |
|
|
set target_info(host,name) "hpux-host"
|
1360 |
|
|
set target_info(host,config) $host_triplet
|
1361 |
|
|
set target_info(host,connect) rlogin
|
1362 |
|
|
set target_info(host,target) slipknot
|
1363 |
|
|
@}
|
1364 |
|
|
"sparc-sun-sunos*" @{ # SunOS (sun4)
|
1365 |
|
|
set target_info(host,name) "sunos-host"
|
1366 |
|
|
set target_info(host,config) $host_triplet
|
1367 |
|
|
set target_info(host,connect) rlogin
|
1368 |
|
|
set target_info(host,target) darkstar
|
1369 |
|
|
@}
|
1370 |
|
|
@}
|
1371 |
|
|
@end cartouche
|
1372 |
|
|
@end smallexample
|
1373 |
|
|
|
1374 |
|
|
@node Local Config File, Personal Config File, Master Config File, Customizing
|
1375 |
|
|
@subsection Local Config File
|
1376 |
|
|
@cindex local @file{site.exp}
|
1377 |
|
|
@cindex @file{site.exp} for each tool
|
1378 |
|
|
It is usually more convenient to keep these ``manual overrides'' in the
|
1379 |
|
|
@file{site.exp} local to each test directory, rather than in the
|
1380 |
|
|
``master'' @file{site.exp} in the DejaGnu library.
|
1381 |
|
|
|
1382 |
|
|
All local @file{site.exp} usually files have two sections, separated by
|
1383 |
|
|
comment text. The first section is the part that is generated by
|
1384 |
|
|
@code{make}. It is essentially a collection of Tcl variable definitions
|
1385 |
|
|
based on @file{Makefile} environment variables. Since they are generated
|
1386 |
|
|
by @code{make}, they contain the values as specified by
|
1387 |
|
|
@code{configure}. (You can also customize these values by using the
|
1388 |
|
|
@samp{--site} option to @code{configure}.) In particular, this section
|
1389 |
|
|
contains the @file{Makefile} variables for host and target configuration
|
1390 |
|
|
data. Do not edit this first section; if you do, your changes are replaced
|
1391 |
|
|
next time you run @code{make}.
|
1392 |
|
|
|
1393 |
|
|
The first section starts with:
|
1394 |
|
|
|
1395 |
|
|
@cartouche
|
1396 |
|
|
@smallexample
|
1397 |
|
|
## these variables are automatically generated by make ##
|
1398 |
|
|
# Do not edit here. If you wish to override these values
|
1399 |
|
|
# add them to the last section
|
1400 |
|
|
@end smallexample
|
1401 |
|
|
@end cartouche
|
1402 |
|
|
|
1403 |
|
|
In the second section, you can override any default values (locally to
|
1404 |
|
|
DejaGnu) for all the variables. The
|
1405 |
|
|
second section can also contain your preferred defaults for all the
|
1406 |
|
|
command line options to @code{runtest}. This allows you to easily
|
1407 |
|
|
customize @code{runtest} for your preferences in each configured
|
1408 |
|
|
test-suite tree, so that you need not type options repeatedly on the
|
1409 |
|
|
command line. (The second section may also be empty, if you do not wish
|
1410 |
|
|
to override any defaults.)
|
1411 |
|
|
|
1412 |
|
|
The first section ends with this line:
|
1413 |
|
|
|
1414 |
|
|
@cartouche
|
1415 |
|
|
@smallexample
|
1416 |
|
|
## All variables above are generated by configure. Do Not Edit ##
|
1417 |
|
|
@end smallexample
|
1418 |
|
|
@end cartouche
|
1419 |
|
|
|
1420 |
|
|
You can make any changes under this line. If you wish to redefine a
|
1421 |
|
|
variable in the top section, then just put a duplicate value in this
|
1422 |
|
|
second section. Usually the values defined in this config file are
|
1423 |
|
|
related to the configuration of the test run. This is the ideal place to
|
1424 |
|
|
set the variables @code{host_triplet}, @code{build_triplet},
|
1425 |
|
|
@code{target_triplet}. All other variables are tool dependant. ie for
|
1426 |
|
|
testing a compiler, the value for @var{CC} might be set to a freshly
|
1427 |
|
|
built binary, as opposed to one in the user's path.
|
1428 |
|
|
|
1429 |
|
|
@node Personal Config File, , Local Config File, Customizing
|
1430 |
|
|
@subsection Personal Config File
|
1431 |
|
|
@cindex personal config @file{site.exp}
|
1432 |
|
|
@cindex @file{site.exp} for each person
|
1433 |
|
|
The personal config file is used to customize @code{runtest's} behaviour
|
1434 |
|
|
for each person. It's typically used to set the user prefered setting
|
1435 |
|
|
for verbosity, and any experimental Tcl procedures. My personal
|
1436 |
|
|
@file{~/.dejagnurc} file looks like:
|
1437 |
|
|
|
1438 |
|
|
@cartouche
|
1439 |
|
|
@smallexample
|
1440 |
|
|
set all_flag 1
|
1441 |
|
|
set RLOGIN /usr/ucb/rlogin
|
1442 |
|
|
set RSH /usr/ucb/rsh
|
1443 |
|
|
@end smallexample
|
1444 |
|
|
@end cartouche
|
1445 |
|
|
|
1446 |
|
|
Here I set @code{all_flag} so I see all the test cases that PASS along
|
1447 |
|
|
with the ones that FAIL. I also set @var{RLOGIN} and @code{RSH} to the
|
1448 |
|
|
BSD version. I have @code{kerberos} installed, and when I rlogin to a
|
1449 |
|
|
target board, it usually isn't supported. So I use the non secure
|
1450 |
|
|
versions of these programs rather than the default that's in my path.
|
1451 |
|
|
|
1452 |
|
|
@node Internals
|
1453 |
|
|
@chapter The DejaGnu Implementation
|
1454 |
|
|
@cindex operating principles
|
1455 |
|
|
@cindex internal details
|
1456 |
|
|
|
1457 |
|
|
DejaGnu is entirely written in @code{expect}, which uses Tcl as a
|
1458 |
|
|
command language. @code{expect} serves as a very programmable shell;
|
1459 |
|
|
you can run any program, as with the usual Unix command shells---but
|
1460 |
|
|
once the program is started, your @code{expect} script has fully
|
1461 |
|
|
programmable control of its input and output. This does not just apply
|
1462 |
|
|
to the programs under test; @code{expect} can also run any auxiliary
|
1463 |
|
|
program, such as @code{diff} or @code{sh}, with full control over its
|
1464 |
|
|
input and output.
|
1465 |
|
|
|
1466 |
|
|
DejaGnu itself is merely a framework for the set of test suites
|
1467 |
|
|
distributed separately for each @sc{gnu} tool. Future releases of
|
1468 |
|
|
@sc{gnu} tools will include even more tests, developed throughout the
|
1469 |
|
|
free software community.
|
1470 |
|
|
|
1471 |
|
|
@kindex runtest.exp
|
1472 |
|
|
@code{runtest} is the glue to tie together and manage the test scripts.
|
1473 |
|
|
The @code{runtest} program is actually a simple Bourne shell script that
|
1474 |
|
|
locates a copy of the @code{expect} shell and then starts the main Tcl
|
1475 |
|
|
code, @code{runtest.exp}. @code{runtest.exp} itself has these essential
|
1476 |
|
|
functions:
|
1477 |
|
|
|
1478 |
|
|
@enumerate
|
1479 |
|
|
@item
|
1480 |
|
|
Parse the command line options, load the library files, and load the
|
1481 |
|
|
default configuration files.
|
1482 |
|
|
|
1483 |
|
|
@item
|
1484 |
|
|
Locating the individual test scripts. @code{runtest.exp} locates the tests
|
1485 |
|
|
by exploiting a straightforward naming convention based on the string
|
1486 |
|
|
you specify with the @samp{--tool} option.
|
1487 |
|
|
|
1488 |
|
|
@item
|
1489 |
|
|
Providing an extended test environment, by defining additional Tcl
|
1490 |
|
|
procedures beyond those already in @code{expect}.
|
1491 |
|
|
|
1492 |
|
|
@item
|
1493 |
|
|
Locating target-dependent functions, to standardize the test environment
|
1494 |
|
|
across a wide variety of test platforms.
|
1495 |
|
|
@end enumerate
|
1496 |
|
|
|
1497 |
|
|
@menu
|
1498 |
|
|
* Names:: Conventions for using tool names
|
1499 |
|
|
* Init Module:: Initialization module
|
1500 |
|
|
* DejaGnu Builtins:: DejaGnu provides these Tcl procedures
|
1501 |
|
|
* Target Dependent:: Procedures supplied by the init module
|
1502 |
|
|
* Cross Targets:: Remote targets supported
|
1503 |
|
|
* Input Files:: The files DejaGnu depends on
|
1504 |
|
|
* Output Files:: The files DejaGnu produces
|
1505 |
|
|
@end menu
|
1506 |
|
|
|
1507 |
|
|
@node Names
|
1508 |
|
|
@section Conventions for using tool names
|
1509 |
|
|
|
1510 |
|
|
@cindex @code{--tool} and naming conventions
|
1511 |
|
|
@cindex tool names and naming conventions
|
1512 |
|
|
@cindex naming conventions
|
1513 |
|
|
DejaGnu uses @samp{$tool}, the name of the tool under test, to tie
|
1514 |
|
|
together the testing configuration in a straightforward but flexible
|
1515 |
|
|
way. If there is only one testsuite for a particular application, then
|
1516 |
|
|
@samp{$tool} is optional.
|
1517 |
|
|
|
1518 |
|
|
@samp{$tool} is @emph{not} used to invoke the tool, since sites that run
|
1519 |
|
|
multiple configurations of a particular tool often call each
|
1520 |
|
|
configuration by a different name. @code{runtest} uses the
|
1521 |
|
|
configuration-dependent variables captured in @file{site.exp} to
|
1522 |
|
|
determine how to call each tool.
|
1523 |
|
|
|
1524 |
|
|
@cindex directory names and @code{--tool}
|
1525 |
|
|
@cindex test directories, naming
|
1526 |
|
|
@code{runtest} uses tool names to find directories containing tests.
|
1527 |
|
|
@code{runtest} scans the source directory (specified with
|
1528 |
|
|
@code{--srcdir}) for all directories whose names start with the tool
|
1529 |
|
|
name. It is a common practice to put a period after the tool part of the
|
1530 |
|
|
name. For instance, directories that start with
|
1531 |
|
|
@samp{g++.} contain @sc{g++} tests. To add a new test, just put it in
|
1532 |
|
|
any directory (create an entirely new directory, if you wish) whose name
|
1533 |
|
|
follows this convention.
|
1534 |
|
|
|
1535 |
|
|
@cindex @code{exp} filename suffix
|
1536 |
|
|
@cindex test filename
|
1537 |
|
|
@cindex filename for test files
|
1538 |
|
|
A test is any file in an appropriately named subdirectory whose name
|
1539 |
|
|
ends in @samp{.exp} (the conventional way of naming @code{expect}
|
1540 |
|
|
scripts). These simple naming conventions make it as simple as possible
|
1541 |
|
|
to install new tests: all you must do is put the test in the right
|
1542 |
|
|
directory.
|
1543 |
|
|
|
1544 |
|
|
@cindex order of tests
|
1545 |
|
|
@cindex tests, running order
|
1546 |
|
|
@code{runtest} sorts the tests in each subdirectory by name (using the
|
1547 |
|
|
Tcl @code{lsort} command) and runs them in the resulting order.
|
1548 |
|
|
|
1549 |
|
|
@node Init Module
|
1550 |
|
|
@section Initialization module
|
1551 |
|
|
@cindex tool initialization
|
1552 |
|
|
@cindex setting up targets
|
1553 |
|
|
|
1554 |
|
|
@c FIXME! should this node be merged with "Target dependent"?
|
1555 |
|
|
|
1556 |
|
|
@cindex init file, purpose
|
1557 |
|
|
@cindex starting interactive tools
|
1558 |
|
|
@cindex initialization
|
1559 |
|
|
The initialization module (or ``init file'') has two purposes: to
|
1560 |
|
|
provide tool and target dependent procedures, and to start up an
|
1561 |
|
|
interactive tool to the point where it is ready to operate. The latter
|
1562 |
|
|
includes establishing communications with the target. All the tests for
|
1563 |
|
|
interactive programs assume that the tool is already running and
|
1564 |
|
|
communicating. Initialization modules for non-interactive programs may
|
1565 |
|
|
only need to supply the support functions.
|
1566 |
|
|
|
1567 |
|
|
@cindex init file name
|
1568 |
|
|
@cindex name, initialization module
|
1569 |
|
|
Each test suite directory must contain (in its @file{config}
|
1570 |
|
|
subdirectory) a separate initialization module for each target. The
|
1571 |
|
|
appropriate init file is can be named several ways. The prefered name is
|
1572 |
|
|
the @emph{os} part of the canonical configuration name with @code{.exp}
|
1573 |
|
|
as the suffix. An example would be that for an @code{m68k-coff} system,
|
1574 |
|
|
the @code{target_os} part would be @code{coff}. The next way is for
|
1575 |
|
|
system where there are short filenames, or a shortcut is desired to
|
1576 |
|
|
refer to the OS name for that target. This is uses the value of
|
1577 |
|
|
@code{$target_abbrev} rather than the @code{target_os}.
|
1578 |
|
|
|
1579 |
|
|
The final file looked for is simply @file{default.exp}. If there is only
|
1580 |
|
|
one operating system to support, then this file can be used. It's main
|
1581 |
|
|
purpose is to offer some support for new operating systems, or for
|
1582 |
|
|
unsupported cross targets. The last file looked for is
|
1583 |
|
|
@file{unknown.exp}. This is usually limited to error handling for
|
1584 |
|
|
unsupported targets. It's whole contents is typically.
|
1585 |
|
|
|
1586 |
|
|
@cartouche
|
1587 |
|
|
@smallexample
|
1588 |
|
|
perror "Sorry, there is no support for this target"
|
1589 |
|
|
exit 1
|
1590 |
|
|
@end smallexample
|
1591 |
|
|
@end cartouche
|
1592 |
|
|
|
1593 |
|
|
At the beginning of the init file, you must first determine the proper
|
1594 |
|
|
executable name of the tool to execute, since the actual name of the
|
1595 |
|
|
tool to be tested my vary from system to system. Here's an example
|
1596 |
|
|
for the @sc{GNU} C compiler.
|
1597 |
|
|
|
1598 |
|
|
@cartouche
|
1599 |
|
|
@smallexample
|
1600 |
|
|
global AR
|
1601 |
|
|
# look for the archiver ar
|
1602 |
|
|
if ![info exists AR] @{
|
1603 |
|
|
set AR [findfile $base_dir/../../binutils/ar $base_dir/../../binutils/ar [tr
|
1604 |
|
|
ansform ar]]
|
1605 |
|
|
verbose "AR defaulting to $AR" 2
|
1606 |
|
|
@}
|
1607 |
|
|
@}
|
1608 |
|
|
|
1609 |
|
|
global CFLAGS
|
1610 |
|
|
if ![info exists CFLAGS] then @{
|
1611 |
|
|
set CFLAGS ""
|
1612 |
|
|
@}
|
1613 |
|
|
@end smallexample
|
1614 |
|
|
@end cartouche
|
1615 |
|
|
|
1616 |
|
|
It is always a good idea to first check the variable, and only set it if
|
1617 |
|
|
it has not yet been defined. Often the proper value of @code{AR} is set
|
1618 |
|
|
on the command line that invokes @file{runtest}.
|
1619 |
|
|
|
1620 |
|
|
@kindex findfile
|
1621 |
|
|
The @code{findfile} procedure takes as it's first argument a file name
|
1622 |
|
|
to look for. The second argument is returned if the file is found, and
|
1623 |
|
|
the third argument is returned if the file is not found. @code{base_dir}
|
1624 |
|
|
is set internally by DejaGnu to the top level directory of the object
|
1625 |
|
|
tree.
|
1626 |
|
|
|
1627 |
|
|
@kindex transform
|
1628 |
|
|
The @code{transform} procedure takes as its argument the native name of
|
1629 |
|
|
a tool (such as @samp{gcc} for the compiler), and returns the name as
|
1630 |
|
|
configured for that tool in the current installation. (For example, a
|
1631 |
|
|
cross-compiling version of @sc{gnu} CC that generates MIPS code may be
|
1632 |
|
|
installed with a name like @code{mips-idt-ecoff-gcc}.)
|
1633 |
|
|
|
1634 |
|
|
In a test running native, writing the Tcl code for initialization is
|
1635 |
|
|
usually quite simple. For cross configurations, however, more elaborate
|
1636 |
|
|
instructions are usually needed to describe how to talk to a remote
|
1637 |
|
|
target.
|
1638 |
|
|
|
1639 |
|
|
Each initialization module defines up to four procedures with standard
|
1640 |
|
|
names and purposes. The names of these procedures begin with
|
1641 |
|
|
@samp{$tool}, the string that identifies tests for a particular tool:
|
1642 |
|
|
@code{$tool_start}, @code{$tool_load}, @code{$tool_exit}, and
|
1643 |
|
|
@code{$tool_version}. For example, the start procedure for @sc{gdb} is
|
1644 |
|
|
called @code{gdb_start}. (Since start procedures are used differently
|
1645 |
|
|
for batch and interactive tools, however, @code{runtest} itself never
|
1646 |
|
|
calls the start procedure. Init files for interactive tools are
|
1647 |
|
|
expected to end by running the start procedure.)
|
1648 |
|
|
|
1649 |
|
|
@cindex utilities, loading from init file
|
1650 |
|
|
@cindex defaults, setting in init file
|
1651 |
|
|
The initialization module is also a good place to call @code{load_lib}
|
1652 |
|
|
to get any collections of utility procedures meant for a family of test
|
1653 |
|
|
cases, and to set up default values for any additional Tcl variables
|
1654 |
|
|
needed for a specific set of tests.
|
1655 |
|
|
|
1656 |
|
|
@xref{Target Dependent,,Target dependent procedures}, for full
|
1657 |
|
|
descriptions of these procedures.
|
1658 |
|
|
|
1659 |
|
|
@node DejaGnu Builtins
|
1660 |
|
|
@section DejaGnu procedures
|
1661 |
|
|
@cindex built in procedures, DejaGnu
|
1662 |
|
|
|
1663 |
|
|
DejaGnu provides these Tcl procedures for use in test scripts.
|
1664 |
|
|
You can also use any standard @code{expect} or Tcl function. These
|
1665 |
|
|
procedures are stored in libraries, which DejaGnu loads at
|
1666 |
|
|
runtime. Here's explanation of the library procedures that get loaded at
|
1667 |
|
|
runtime. All other librarys are optional, and need to be loaded by the
|
1668 |
|
|
testsuite.
|
1669 |
|
|
|
1670 |
|
|
@menu
|
1671 |
|
|
* framework.exp:: Core Internal Procedures.
|
1672 |
|
|
* remote.exp:: Procedures for remote communication.
|
1673 |
|
|
* utils.exp:: Utility procedures.
|
1674 |
|
|
* target.exp:: Cross target procedures.
|
1675 |
|
|
* debugger.exp:: Procedures for debugging your Tcl code.
|
1676 |
|
|
@end menu
|
1677 |
|
|
|
1678 |
|
|
@node framework.exp, remote.exp, ,DejaGnu Builtins
|
1679 |
|
|
@subsection Core Internal Procedures
|
1680 |
|
|
@cindex Core Internal Procedures
|
1681 |
|
|
|
1682 |
|
|
@xref{Posix,,A POSIX conforming test framework}, for more detailed
|
1683 |
|
|
explanations of the test outcomes (@samp{FAIL}, @samp{PASS},
|
1684 |
|
|
@samp{UNTESTED}, @samp{UNRESOLVED}, @samp{UNSUPPORTED}).
|
1685 |
|
|
|
1686 |
|
|
@ftable @code
|
1687 |
|
|
@item perror "@var{string} @var{number}"
|
1688 |
|
|
@cindex test case, ERROR in
|
1689 |
|
|
@kindex ERROR
|
1690 |
|
|
Declares a severe error in the testing framework itself.
|
1691 |
|
|
@code{perror} writes in the log files a message beginning with
|
1692 |
|
|
@samp{ERROR}, appending the argument @var{string}. If the optional
|
1693 |
|
|
@var{number} is supplied, then this is used to set the internal count of
|
1694 |
|
|
errors to that value.
|
1695 |
|
|
|
1696 |
|
|
As a side effect, @code{perror} also changes the effect of the next
|
1697 |
|
|
@code{pass} or @code{fail} command: the test outcome becomes
|
1698 |
|
|
@samp{UNRESOLVED}, since an automatic @samp{PASS} or @samp{FAIL} cannot
|
1699 |
|
|
be trusted after a severe error in the test framework. If the optional
|
1700 |
|
|
numeric value is @samp{0}, then there are no further side effects to
|
1701 |
|
|
calling this function, and the following test outcome doesn't become
|
1702 |
|
|
@samp{UNRESOLVED}. This can be used for errors with no known side
|
1703 |
|
|
effects.
|
1704 |
|
|
|
1705 |
|
|
@item warning "@var{string} @var{number}"
|
1706 |
|
|
@cindex test case, WARNING in
|
1707 |
|
|
@kindex WARNING
|
1708 |
|
|
Declares detection of a minor error in the test case itself.
|
1709 |
|
|
@code{warning} writes in the log files a message beginning with
|
1710 |
|
|
@samp{WARNING}, appending the argument @var{string}. Use @code{warning}
|
1711 |
|
|
rather than @code{error} for cases (such as communication failure
|
1712 |
|
|
to be followed by a retry) where the test case can recover from the
|
1713 |
|
|
error. If the optional @var{number} is supplied, then this is used to
|
1714 |
|
|
set the internal count of warnings to that value.
|
1715 |
|
|
|
1716 |
|
|
As a side effect, @code{warning_threshold} or more calls to
|
1717 |
|
|
@code{warning} in a single test case also changes the effect of the next
|
1718 |
|
|
@code{pass} or @code{fail} command: the test outcome becomes
|
1719 |
|
|
@samp{UNRESOLVED} since an automatic @samp{PASS} or @samp{FAIL} may not
|
1720 |
|
|
be trustworthy after many warnings. If the optional numeric value is
|
1721 |
|
|
@samp{0}, then there are no further side effects to calling this
|
1722 |
|
|
function, and the following test outcome doesn't become
|
1723 |
|
|
@samp{UNRESOLVED}. This can be used for errors with no known side
|
1724 |
|
|
effects.
|
1725 |
|
|
|
1726 |
|
|
@item note "@var{string}"
|
1727 |
|
|
@cindex test case, informational messages
|
1728 |
|
|
@kindex NOTE
|
1729 |
|
|
Appends an informational message to the log file.
|
1730 |
|
|
@code{note} writes in the log files a message beginning with
|
1731 |
|
|
@samp{NOTE}, appending the argument @var{string}. Use @code{note}
|
1732 |
|
|
sparingly. @code{verbose} should be used for most such messages,
|
1733 |
|
|
but in cases where a message is needed in the log file regardless of
|
1734 |
|
|
the verbosity level use @code{note}.
|
1735 |
|
|
|
1736 |
|
|
@item pass "@var{string}"
|
1737 |
|
|
@cindex test case, declaring success
|
1738 |
|
|
Declares a test to have passed. @code{pass} writes in the
|
1739 |
|
|
log files a message beginning with @samp{PASS} (or @code{XPASS}, if
|
1740 |
|
|
failure was expected), appending the argument @var{string}.
|
1741 |
|
|
|
1742 |
|
|
@item fail "@var{string}"
|
1743 |
|
|
@cindex test case, declaring failure
|
1744 |
|
|
Declares a test to have failed. @code{fail} writes in the
|
1745 |
|
|
log files a message beginning with @samp{FAIL} (or @code{XFAIL}, if
|
1746 |
|
|
failure was expected), appending the argument @var{string}.
|
1747 |
|
|
|
1748 |
|
|
@item unresolved "@var{string}"
|
1749 |
|
|
@cindex test case, declaring ambiguity
|
1750 |
|
|
Declares a test to have an unresolved outcome. @code{unresolved} writes
|
1751 |
|
|
in the log file a message beginning with @samp{UNRESOLVED}, appending
|
1752 |
|
|
the argument @var{string}. This usually means the test did not execute
|
1753 |
|
|
as expected, and a human being must go over results to determine if it
|
1754 |
|
|
passed or failed (and to improve the test case).
|
1755 |
|
|
|
1756 |
|
|
@item untested "@var{string}"
|
1757 |
|
|
@cindex test case, declaring no test
|
1758 |
|
|
Declares a test was not run. @code{untested} writes in the log file a
|
1759 |
|
|
message beginning with @samp{UNTESTED}, appending the argument
|
1760 |
|
|
@var{string}. For example, you might use this in a dummy test whose
|
1761 |
|
|
only role is to record that a test does not yet exist for some feature.
|
1762 |
|
|
|
1763 |
|
|
@item unsupported "@var{string}"
|
1764 |
|
|
@cindex test case, declaring no support
|
1765 |
|
|
Declares that a test case depends on some facility that does not exist
|
1766 |
|
|
in the testing environment. @code{unsupported} writes in the log file a
|
1767 |
|
|
message beginning with @samp{UNSUPPORTED}, appending the argument
|
1768 |
|
|
@var{string}.
|
1769 |
|
|
|
1770 |
|
|
@item get_warning_threshold
|
1771 |
|
|
@cindex test case, WARNING threshold
|
1772 |
|
|
Returns the current value of @code{warning_threshold}.
|
1773 |
|
|
The default value is 3.
|
1774 |
|
|
|
1775 |
|
|
@item set_warning_threshold @var{threshold}
|
1776 |
|
|
@cindex test case, WARNING threshold
|
1777 |
|
|
Sets the value of @code{warning_threshold}.
|
1778 |
|
|
A value of @code{0} disables it: calls to @code{warning} will not turn
|
1779 |
|
|
a @samp{PASS} or @samp{FAIL} into an @samp{UNRESOLVED}.
|
1780 |
|
|
|
1781 |
|
|
@item transform "@var{toolname}"
|
1782 |
|
|
@cindex transform tool name
|
1783 |
|
|
@cindex installed tool name
|
1784 |
|
|
@cindex tool name, as installed
|
1785 |
|
|
@cindex name transformations
|
1786 |
|
|
Generates a string for the name of a tool as it was configured and
|
1787 |
|
|
installed, given its native name (as the argument @var{toolname}).
|
1788 |
|
|
This makes the assumption that all tools are installed using the same
|
1789 |
|
|
naming conventions: it extrapolates from the invocation name for
|
1790 |
|
|
@file{runtest}. For example, if you call @code{runtest} as
|
1791 |
|
|
@file{m68k-vxworks-runtest}, the result of @w{@samp{ transform "gcc" }}
|
1792 |
|
|
is @samp{m68k-vxworks-gcc}.
|
1793 |
|
|
|
1794 |
|
|
@item ishost "@var{host}"
|
1795 |
|
|
@cindex host configuration test
|
1796 |
|
|
Tests for a particular @emph{host} environment. If the currently
|
1797 |
|
|
configured host matches the argument string, the result is @code{1};
|
1798 |
|
|
otherwise the result is @code{0}. @var{host} must be a full three-part
|
1799 |
|
|
@code{configure} host name; in particular, you may not use the shorter
|
1800 |
|
|
nicknames supported by @code{configure} (but you can use wildcard
|
1801 |
|
|
characters, using shell syntax, to specify sets of names).
|
1802 |
|
|
|
1803 |
|
|
@item istarget "@var{target}"
|
1804 |
|
|
@cindex target configuration test
|
1805 |
|
|
Tests for a particular @emph{target} environment. If the currently
|
1806 |
|
|
configured target matches the argument string, the result is @code{1};
|
1807 |
|
|
otherwise the result is @code{0}. @var{target} must be a full
|
1808 |
|
|
three-part @code{configure} target name; in particular, you may not use
|
1809 |
|
|
the shorter nicknames supported by @code{configure} (but you can use
|
1810 |
|
|
wildcard characters, using shell syntax, to specify sets of names). If it is
|
1811 |
|
|
passed a @code{NULL} string, then it returns the name of the build
|
1812 |
|
|
canonical configuration.
|
1813 |
|
|
|
1814 |
|
|
@item isbuild "@var{host}"
|
1815 |
|
|
@cindex build host configuration test
|
1816 |
|
|
Tests for a particular @emph{build host} environment. If the currently
|
1817 |
|
|
configured host matches the argument string, the result is @code{1};
|
1818 |
|
|
otherwise the result is @code{0}. @var{host} must be a full three-part
|
1819 |
|
|
@code{configure} host name; in particular, you may not use the shorter
|
1820 |
|
|
nicknames supported by @code{configure} (but you can use wildcard
|
1821 |
|
|
characters, using shell syntax, to specify sets of names). If it is
|
1822 |
|
|
passed a @code{NULL} string, then it returns the name of the build
|
1823 |
|
|
canonical configuration.
|
1824 |
|
|
|
1825 |
|
|
item is3way "@var{host}"
|
1826 |
|
|
@cindex canadian cross configuration test
|
1827 |
|
|
Tests for a canadian cross. This is when the tests will be run on a
|
1828 |
|
|
remotly hosted cross compiler. If it is a canadian cross, then the
|
1829 |
|
|
result is @code{1}; otherwise the result is @code{0}.
|
1830 |
|
|
|
1831 |
|
|
@item isnative
|
1832 |
|
|
@cindex native configuration test
|
1833 |
|
|
Tests whether the current configuration has the same host and target.
|
1834 |
|
|
When it runs in a @emph{native} configuration this procedure returns a
|
1835 |
|
|
@code{1}; otherwise it returns a @code{0}.
|
1836 |
|
|
|
1837 |
|
|
@item load_lib "@var{library-file}"
|
1838 |
|
|
@cindex load library file
|
1839 |
|
|
Loads the file @var{library-file} by searching a fixed path built into
|
1840 |
|
|
@code{runtest}. If DejaGnu has been installed, it looks in a path
|
1841 |
|
|
starting with the installed library directory. If you are running
|
1842 |
|
|
DejaGnu directly from a source directory, without first running
|
1843 |
|
|
@samp{make install}, this path defaults to the current directory. In
|
1844 |
|
|
either case, it then looks in the current directory for a directory
|
1845 |
|
|
called @code{lib}. If there are duplicate definitions, the last one
|
1846 |
|
|
loaded takes precedence over the earlier ones.
|
1847 |
|
|
|
1848 |
|
|
@item setup_xfail "@var{config} @r{[}@var{bugid}@r{]}"
|
1849 |
|
|
@c two spaces above to make it absolutely clear there's whitespace---a
|
1850 |
|
|
@c crude sort of italic correction!
|
1851 |
|
|
@cindex test case, expecting failure
|
1852 |
|
|
@cindex failure, expected
|
1853 |
|
|
@cindex expected failure
|
1854 |
|
|
Declares that the test is expected to fail on a particular set of
|
1855 |
|
|
configurations. The @var{config} argument must be a list of full
|
1856 |
|
|
three-part @code{configure} target name; in particular, you may not use
|
1857 |
|
|
the shorter nicknames supported by @code{configure} (but you can use the
|
1858 |
|
|
common shell wildcard characters to specify sets of names). The
|
1859 |
|
|
@var{bugid} argument is optional, and used only in the logging file
|
1860 |
|
|
output; use it as a link to a bug-tracking system such as @sc{gnats}
|
1861 |
|
|
(@pxref{Overview,, Overview, gnats.info, Tracking Bugs With GNATS}).
|
1862 |
|
|
|
1863 |
|
|
@cindex @code{XFAIL}, producing
|
1864 |
|
|
@cindex @code{XPASS}, producing
|
1865 |
|
|
Once you use @code{setup_xfail}, the @code{fail} and @code{pass}
|
1866 |
|
|
procedures produce the messages @samp{XFAIL} and @samp{XPASS}
|
1867 |
|
|
respectively, allowing you to distinguish expected failures (and
|
1868 |
|
|
unexpected success!) from other test outcomes.
|
1869 |
|
|
|
1870 |
|
|
@emph{Warning:} you must clear the expected failure after using
|
1871 |
|
|
@code{setup_xfail} in a test case. Any call to @code{pass} or
|
1872 |
|
|
@code{fail} clears the expected failure implicitly; if the test has some
|
1873 |
|
|
other outcome, e.g. an error, you can call @code{clear_xfail} to clear
|
1874 |
|
|
the expected failure explicitly. Otherwise, the expected-failure
|
1875 |
|
|
declaration applies to whatever test runs next, leading to surprising
|
1876 |
|
|
results.
|
1877 |
|
|
|
1878 |
|
|
@item check_conditional_xfail @var{message} @var{targets} @var{includes} @var{excludes}
|
1879 |
|
|
@cindex test case, expecting a conditional failure
|
1880 |
|
|
@cindex failure, conditional expected
|
1881 |
|
|
@cindex conditional expected failure
|
1882 |
|
|
|
1883 |
|
|
This procedure adds a condition xfail, based on compiler options used to
|
1884 |
|
|
create a test case executable. If an include options is found in the
|
1885 |
|
|
compiler flags, and it's the right architecture, it'll trigger an
|
1886 |
|
|
XFAIL. Otherwise it'll produce an ordinary FAIL. You can also specify
|
1887 |
|
|
flags to exclude. This makes a result be a FAIL, even if the included
|
1888 |
|
|
options are found. To set the conditional, set the variable
|
1889 |
|
|
@var{compiler_conditional_xfail_data} to the fields "[message string] [targets
|
1890 |
|
|
list] [includes list] [excludes list]" (descriptions below). This is the
|
1891 |
|
|
checked at pass/fail decision time, so there is no need to call the
|
1892 |
|
|
procedure yourself, unless you wish to know if it gets triggered. After
|
1893 |
|
|
a pass/fail, the variable is reset, so it doesn't effect other tests.
|
1894 |
|
|
|
1895 |
|
|
The parameters are:
|
1896 |
|
|
|
1897 |
|
|
@table @code
|
1898 |
|
|
@item message
|
1899 |
|
|
is the message to print with the normal test result
|
1900 |
|
|
|
1901 |
|
|
@item targets
|
1902 |
|
|
is a string with the targets to activate this conditional on.
|
1903 |
|
|
|
1904 |
|
|
@item includes
|
1905 |
|
|
is a list of sets of options to search for in the compiler options to
|
1906 |
|
|
activate this conditional. If any set of the options matches, then this
|
1907 |
|
|
conditional is true.
|
1908 |
|
|
|
1909 |
|
|
@item excludes
|
1910 |
|
|
is a list of sets of options to search for in the compiler options to
|
1911 |
|
|
activate this conditional. If any set of the options matches,
|
1912 |
|
|
(regardless of whether any of the include sets match) then this
|
1913 |
|
|
conditional is de-activated.
|
1914 |
|
|
@end table
|
1915 |
|
|
|
1916 |
|
|
returns:
|
1917 |
|
|
|
1918 |
|
|
@table @code
|
1919 |
|
|
@item 1
|
1920 |
|
|
if the conditional is true
|
1921 |
|
|
@item 0
|
1922 |
|
|
if the conditional is false
|
1923 |
|
|
@end table
|
1924 |
|
|
|
1925 |
|
|
An example of setting the variable would be:
|
1926 |
|
|
|
1927 |
|
|
@cartouche
|
1928 |
|
|
@smallexample
|
1929 |
|
|
set compiler_conditional_xfail_data @{@ \
|
1930 |
|
|
"I sure wish I knew why this was hosed" \
|
1931 |
|
|
"sparc*-sun*-* *-pc-*-*" \
|
1932 |
|
|
@{@"-Wall -v" "-O3"@}@ \
|
1933 |
|
|
@{@"-O1" "-Map" @}@ \
|
1934 |
|
|
@}@
|
1935 |
|
|
@end smallexample
|
1936 |
|
|
@end cartouche
|
1937 |
|
|
|
1938 |
|
|
What this does is it matches only for these two targets if "-Wall -v" or
|
1939 |
|
|
"-O3" is set, but neither "-O1" or "-Map" is set.
|
1940 |
|
|
|
1941 |
|
|
For a set to match, the options specified are searched for independantly of
|
1942 |
|
|
each other, so a "-Wall -v" matches either "-Wall -v" or "-v -Wall". A space
|
1943 |
|
|
seperates the options in the string. Glob-style regular expressions are also
|
1944 |
|
|
permitted.
|
1945 |
|
|
|
1946 |
|
|
@item clear_xfail @var{config}
|
1947 |
|
|
@cindex cancelling expected failure
|
1948 |
|
|
@cindex expected failure, cancelling
|
1949 |
|
|
Cancel an expected failure (previously declared with @code{setup_xfail})
|
1950 |
|
|
for a particular set of configurations. The @var{config} argument is a
|
1951 |
|
|
list of configuration target names. It is only necessary to call
|
1952 |
|
|
@code{clear_xfail} if a test case ends without calling either
|
1953 |
|
|
@code{pass} or @code{fail}, after calling @code{setup_xfail}.
|
1954 |
|
|
|
1955 |
|
|
@item verbose @r{[}-log@r{]} @r{[}-n@r{]} @r{[}--@r{]} "@var{string}" @var{number}
|
1956 |
|
|
@cindex @code{verbose} builtin function
|
1957 |
|
|
Test cases can use this function to issue helpful messages depending on
|
1958 |
|
|
the number of @samp{--verbose} options on the @code{runtest} command
|
1959 |
|
|
line. It prints @var{string} if the value of the variable
|
1960 |
|
|
@code{verbose} is higher than or equal to the optional @var{number}. The
|
1961 |
|
|
default value for @var{number} is 1. Use the optional @samp{-log} argument
|
1962 |
|
|
to cause @var{string} to always be added to the log file, even if it won't
|
1963 |
|
|
be printed. Use the optional @samp{-n} argument to print @var{string}
|
1964 |
|
|
without a trailing newline. Use the optional @samp{--} argument if
|
1965 |
|
|
@var{string} begins with "-".
|
1966 |
|
|
|
1967 |
|
|
@end ftable
|
1968 |
|
|
|
1969 |
|
|
@noindent
|
1970 |
|
|
@node remote.exp, utils.exp, framework.exp, DejaGnu Builtins
|
1971 |
|
|
@subsection Remote Communication Procedures
|
1972 |
|
|
|
1973 |
|
|
@kindex remote.exp
|
1974 |
|
|
@kindex lib/remote.exp
|
1975 |
|
|
@cindex remote connection procedures
|
1976 |
|
|
@cindex communications procedures
|
1977 |
|
|
@file{lib/remote.exp} defines these functions, for establishing and
|
1978 |
|
|
managing communications:
|
1979 |
|
|
|
1980 |
|
|
@emph{Procedures to establish a connection:} Each of these procedures
|
1981 |
|
|
tries to establish the connection up to three times before returning.
|
1982 |
|
|
Warnings (if retries will continue) or errors (if the attempt is
|
1983 |
|
|
abandoned) report on communication failures. The result for any of
|
1984 |
|
|
these procedures is either @code{-1}, when the connection cannot be
|
1985 |
|
|
established, or the spawn ID returned by the @code{expect} command
|
1986 |
|
|
@code{spawn}.
|
1987 |
|
|
|
1988 |
|
|
It use the value of the @code{connect} field in the @code{target_info}
|
1989 |
|
|
array (was @code{connectmode} as the type of connection to make. Current
|
1990 |
|
|
supported connection types are tip, kermit, telnet, rsh, rlogin, and
|
1991 |
|
|
netdata. If the @code{--reboot} option was used on the runtest command
|
1992 |
|
|
line, then the target is rebooted before the connection is made.
|
1993 |
|
|
|
1994 |
|
|
@ftable @code
|
1995 |
|
|
|
1996 |
|
|
@item remote_open @var{type}
|
1997 |
|
|
@cindex Opening a remote connection
|
1998 |
|
|
@emph{Remote Connection Procedure.} This is passed @emph{host} or
|
1999 |
|
|
@emph{target}. Host or target refers to whether it is a connection to a
|
2000 |
|
|
remote target, or a remote host. This opens the connection to the
|
2001 |
|
|
desired target or host using the default values in the configuration
|
2002 |
|
|
system. It returns that @code{spawn_id} of the process that manages the
|
2003 |
|
|
connection. This value can be used in @code{expect} or @code{exp_send}
|
2004 |
|
|
statements, or passed to other procedures that need the connection
|
2005 |
|
|
process's id. This also sets the @code{fileid} field in the
|
2006 |
|
|
@code{target_info} array.
|
2007 |
|
|
|
2008 |
|
|
|
2009 |
|
|
@item remote_close @var{shellid}
|
2010 |
|
|
@cindex Closing a remote connection
|
2011 |
|
|
@emph{shellid} is value returned by a call to @code{remote_open}. This
|
2012 |
|
|
closes the connection to the target so resources can be used by
|
2013 |
|
|
others. This parameter can be left off if the @code{fileid} field in the
|
2014 |
|
|
@code{target_info} array is set.
|
2015 |
|
|
|
2016 |
|
|
@item telnet @var{hostname} @var{port}
|
2017 |
|
|
@itemx rlogin @var{hostname}
|
2018 |
|
|
@itemx rsh @var{hostname}
|
2019 |
|
|
@cindex IP network procedures
|
2020 |
|
|
@cindex network (IP) procedures
|
2021 |
|
|
@emph{IP network procedures.} @var{hostname} refers to the IP address or
|
2022 |
|
|
name (for example, an entry in @file{/etc/hosts}) for this target. The
|
2023 |
|
|
procedure names reflect the Unix utility used to establish a
|
2024 |
|
|
connection. The optional @var{port} is used to specify the IP port
|
2025 |
|
|
number. The value of the @code{netport} field in the @code{target_info}
|
2026 |
|
|
array is used. (was @code{$netport}) This value has two parts, the
|
2027 |
|
|
hostname and the port number, seperated by a @emph{:}. If @code{host} or
|
2028 |
|
|
@code{target} is used in the @code{hostname} field, than the config
|
2029 |
|
|
array is used for all information.
|
2030 |
|
|
|
2031 |
|
|
@item tip @var{port}
|
2032 |
|
|
@cindex serial line connection, @code{tip}
|
2033 |
|
|
@emph{Serial line procedure.} Connect using the Unix utility @code{tip}.
|
2034 |
|
|
@var{port} must be a name from the @code{tip} configuration file
|
2035 |
|
|
@file{/etc/remote}. Often, this is called @samp{hardwire}, or something
|
2036 |
|
|
like @samp{ttya}. This file holds all the configuration data for
|
2037 |
|
|
the serial port. The value of the @code{serial} field in the
|
2038 |
|
|
@code{target_info} array is used. (was @code{$serialport}) If
|
2039 |
|
|
@code{host} or @code{target} is used in the @code{port} field, than
|
2040 |
|
|
the config array is used for all information.
|
2041 |
|
|
|
2042 |
|
|
@item kermit @var{port} @var{bps}
|
2043 |
|
|
@cindex serial line connection, @code{kermit}
|
2044 |
|
|
@emph{Serial line procedure.} Connect using the program @code{kermit}.
|
2045 |
|
|
@var{port} is the device name, e.g. @file{/dev/ttyb}. @var{bps} is
|
2046 |
|
|
the line speed to use (in bits per second) for the connection. The value
|
2047 |
|
|
of the @code{serial} field in the @code{target_info} array is used. (was
|
2048 |
|
|
@code{$serialport}) If @code{host} or @code{target} is used in the
|
2049 |
|
|
@code{port} field, than the config array is used for all information.
|
2050 |
|
|
|
2051 |
|
|
@end ftable
|
2052 |
|
|
|
2053 |
|
|
@noindent
|
2054 |
|
|
@emph{Procedures to manage a connection:}
|
2055 |
|
|
|
2056 |
|
|
@ftable @code
|
2057 |
|
|
@item tip_download @var{spawnid} @var{file}
|
2058 |
|
|
@cindex download, @code{tip}
|
2059 |
|
|
@cindex serial download, @code{tip}
|
2060 |
|
|
Download @file{@var{file}} to the process @var{spawnid} (the value
|
2061 |
|
|
returned when the connection was established), using the @code{~put}
|
2062 |
|
|
command under @code{tip}. Most often used for single board computers
|
2063 |
|
|
that require downloading programs in @sc{ascii} S-records. Returns
|
2064 |
|
|
@code{1} if an error occurs, @code{0} otherwise.
|
2065 |
|
|
|
2066 |
|
|
@item exit_remote_shell @var{spawnid}
|
2067 |
|
|
@cindex terminating remote connection
|
2068 |
|
|
@cindex remote connection, ending
|
2069 |
|
|
Exits a remote process started by any of the connection procedures.
|
2070 |
|
|
@var{spawnid} is the result of the connection procedure that started the
|
2071 |
|
|
remote process.
|
2072 |
|
|
|
2073 |
|
|
@item download @var{file} @r{[} @var{spawnid} @r{]}
|
2074 |
|
|
@cindex download a file
|
2075 |
|
|
After you establish a connection to a target, you can download programs
|
2076 |
|
|
using this command. @code{download} reads in @var{file} (object code in
|
2077 |
|
|
S-record format) and writes it to the device controlling this
|
2078 |
|
|
@var{spawnid}. (From the point of view of the target, the S-record file
|
2079 |
|
|
comes in via standard input.)
|
2080 |
|
|
|
2081 |
|
|
If you have more than one target active, you can use the optional argument
|
2082 |
|
|
@var{spawnid} to specify an alternative target (the default is the most
|
2083 |
|
|
recently established @var{spawnid}.)
|
2084 |
|
|
@end ftable
|
2085 |
|
|
|
2086 |
|
|
@noindent
|
2087 |
|
|
@node utils.exp, target.exp, remote.exp, DejaGnu Builtins
|
2088 |
|
|
@subsection Utility Procedures
|
2089 |
|
|
|
2090 |
|
|
@kindex utils.exp
|
2091 |
|
|
@kindex lib/utils.exp
|
2092 |
|
|
@file{lib/utils.exp} defines these utility procedures:
|
2093 |
|
|
|
2094 |
|
|
@ftable @code
|
2095 |
|
|
@item getdirs @var{dir}
|
2096 |
|
|
@itemx getdirs @var{dir} @var{pattern}
|
2097 |
|
|
@cindex directories matching a pattern
|
2098 |
|
|
@cindex pattern match, directory
|
2099 |
|
|
Returns a list of all the directories in the single directory @var{dir}
|
2100 |
|
|
that match @var{pattern}. If you do not specify @var{pattern},
|
2101 |
|
|
@code{getdirs} assumes @samp{*}. You may use the common shell wildcard
|
2102 |
|
|
characters in @var{pattern}. If no directories match the pattern, then a
|
2103 |
|
|
@code{NULL} string is returned.
|
2104 |
|
|
|
2105 |
|
|
@item find @var{dir} @var{pattern}
|
2106 |
|
|
@cindex files matching a pattern
|
2107 |
|
|
@cindex pattern match, filenames
|
2108 |
|
|
Search for files whose names match @var{pattern} (using shell wildcard
|
2109 |
|
|
characters for filename expansion). Search subdirectories recursively,
|
2110 |
|
|
starting at @var{dir}. The result is the list of files whose names
|
2111 |
|
|
match; if no files match, the result is empty. Filenames in the result
|
2112 |
|
|
include all intervening subdirectory names. If no files match the
|
2113 |
|
|
pattern, then a @code{NULL} string is returned.
|
2114 |
|
|
|
2115 |
|
|
@item which @var{binary}
|
2116 |
|
|
@cindex path lookup
|
2117 |
|
|
Searches the execution path for an executable file @var{binary}, like
|
2118 |
|
|
the the BSD @code{which} utility. This procedure uses the shell
|
2119 |
|
|
environment variable @samp{PATH}. It returns @code{0} if the binary is
|
2120 |
|
|
not in the path, or if there is no @samp{PATH} environment variable. If
|
2121 |
|
|
@var{binary} is in the path, it returns the full path to @var{binary}.
|
2122 |
|
|
|
2123 |
|
|
@item grep @var{filename} @var{regexp}
|
2124 |
|
|
@item grep @var{filename} @var{regexp} line
|
2125 |
|
|
@cindex regular expression, file contents
|
2126 |
|
|
@cindex searching file contents
|
2127 |
|
|
Search the file called @var{filename} (a fully specified path) for lines
|
2128 |
|
|
that contain a match for regular expression @var{regexp}. The result is
|
2129 |
|
|
a list of all the lines that match. If no lines match, the result is an
|
2130 |
|
|
empty string. Specify @var{regexp} using the standard regular
|
2131 |
|
|
expression style used by the Unix utility program @code{grep}.
|
2132 |
|
|
|
2133 |
|
|
Use the optional third argument @samp{line} to start lines in the result
|
2134 |
|
|
with the line number in @var{filename}. (This argument is simply an
|
2135 |
|
|
option flag; type it just as shown---@samp{line}.)
|
2136 |
|
|
|
2137 |
|
|
@item diff @var{filename} @var{filename}
|
2138 |
|
|
@cindex finding file differences
|
2139 |
|
|
@cindex comparing files
|
2140 |
|
|
Compares the two files and returns a 1 if they match, or a 0 if they
|
2141 |
|
|
don't. If @code{verbose} is set, then it'll print the differences to the
|
2142 |
|
|
screen.
|
2143 |
|
|
|
2144 |
|
|
@item slay @var{name}
|
2145 |
|
|
@cindex slaying processes
|
2146 |
|
|
This look in the process table for @var{name} and send it a unix
|
2147 |
|
|
@code{SIGINT}, killing the process.
|
2148 |
|
|
|
2149 |
|
|
@item absolute @var{path}
|
2150 |
|
|
@cindex converting relative paths to absolute
|
2151 |
|
|
This procedure takes the relative @var{path}, and converts it to an
|
2152 |
|
|
absolute path.
|
2153 |
|
|
|
2154 |
|
|
@item psource @var{filename}
|
2155 |
|
|
@cindex sourcing Tcl files
|
2156 |
|
|
This sources the file @var{filename}, and traps all errors. It also
|
2157 |
|
|
ignores all extraneous output. If there was an error it returns a 1,
|
2158 |
|
|
otherwise it returns a 0.
|
2159 |
|
|
|
2160 |
|
|
@item prune @var{list} @var{pattern}
|
2161 |
|
|
@cindex list, pruning
|
2162 |
|
|
Remove elements of the Tcl list @var{list}. Elements are fields
|
2163 |
|
|
delimited by spaces. The result is a copy of @var{list}, without any
|
2164 |
|
|
elements that match @var{pattern}. You can use the common shell
|
2165 |
|
|
wildcard characters to specify @var{pattern}.
|
2166 |
|
|
|
2167 |
|
|
@item setenv @var{var} @var{val}
|
2168 |
|
|
@cindex setting environment variables
|
2169 |
|
|
Sets the variable @var{var} to the value @var{val}.
|
2170 |
|
|
|
2171 |
|
|
@item unsetenv @var{var}
|
2172 |
|
|
@cindex unsetting environment variables
|
2173 |
|
|
Unsets the environment variable @var{var}
|
2174 |
|
|
|
2175 |
|
|
@item getenv @var{var}
|
2176 |
|
|
@cindex getting environment variables
|
2177 |
|
|
returns the value of @var{var} in the environment if it exists,
|
2178 |
|
|
otherwise it returns @code{NULL}.
|
2179 |
|
|
|
2180 |
|
|
@item runtest_file_p @var{runtests} @var{testcase}
|
2181 |
|
|
@cindex selecting a range of tests
|
2182 |
|
|
@cindex tests, running specifically
|
2183 |
|
|
Search @var{runtests} for @var{testcase} and return 1 if found, 0 if not.
|
2184 |
|
|
@var{runtests} is a list of two elements. The first is the pathname of
|
2185 |
|
|
the testsuite expect script running. The second is a copy of what was
|
2186 |
|
|
on the right side of the @code{=} if @samp{foo.exp="@dots{}"} was specified,
|
2187 |
|
|
or an empty string if no such argument is present.
|
2188 |
|
|
This is used by tools like compilers where each testcase is a file.
|
2189 |
|
|
|
2190 |
|
|
@item prune_system_crud @var{system} @var{text}
|
2191 |
|
|
@cindex pruning system output, examining program output
|
2192 |
|
|
For system @var{system}, delete text the host or target operating system might
|
2193 |
|
|
issue that will interfere with pattern matching of program output in
|
2194 |
|
|
@var{text}. An example is the message that is printed if a shared library
|
2195 |
|
|
is out of date.
|
2196 |
|
|
|
2197 |
|
|
@end ftable
|
2198 |
|
|
|
2199 |
|
|
@noindent
|
2200 |
|
|
@node target.exp, debugger.exp, utils.exp, DejaGnu Builtins
|
2201 |
|
|
@subsection Cross target procedure
|
2202 |
|
|
|
2203 |
|
|
@kindex target.exp
|
2204 |
|
|
@kindex lib/target.exp
|
2205 |
|
|
@file{lib/target.exp} defines these utility procedures:
|
2206 |
|
|
|
2207 |
|
|
@ftable @code
|
2208 |
|
|
|
2209 |
|
|
@item push_target @emph{name}
|
2210 |
|
|
@cindex set current target
|
2211 |
|
|
This makes the target named @emph{name} be the current target
|
2212 |
|
|
connection. The value of @emph{name} is an index into the
|
2213 |
|
|
@code{target_info} array and is set in the global config file.
|
2214 |
|
|
|
2215 |
|
|
@item pop_target
|
2216 |
|
|
@cindex unset current target
|
2217 |
|
|
This unsets the current target connection.
|
2218 |
|
|
|
2219 |
|
|
@item list_targets
|
2220 |
|
|
@cindex lists supported targets
|
2221 |
|
|
This lists all the supported targets for this architecture.
|
2222 |
|
|
|
2223 |
|
|
@item push_host @emph{name}
|
2224 |
|
|
@cindex set current host
|
2225 |
|
|
This makes the host named @emph{name} be the current remote host
|
2226 |
|
|
connection. The value of @emph{name} is an index into the
|
2227 |
|
|
@code{target_info} array and is set in the global config file.
|
2228 |
|
|
|
2229 |
|
|
@item pop_host
|
2230 |
|
|
@cindex unset current host
|
2231 |
|
|
This unsets the current host connection.
|
2232 |
|
|
|
2233 |
|
|
@c @item compile @emph{file}
|
2234 |
|
|
@cindex compile a file
|
2235 |
|
|
This invokes the compiler as set by @code{CC} to compile the file
|
2236 |
|
|
@emph{file}. The default options for many cross compilation targets are
|
2237 |
|
|
@emph{guessed} by DejaGnu, and these options can be added to by passing
|
2238 |
|
|
in more parameters as arguments to @code{compile}. Optionally, this will
|
2239 |
|
|
also use the value of the @code{cflags} field in the target config
|
2240 |
|
|
array. If the host is not the same as the build machines, then then
|
2241 |
|
|
compiler is run on the remote host using @code{execute_anywhere}.
|
2242 |
|
|
|
2243 |
|
|
@c @item archive @emph{file}
|
2244 |
|
|
@cindex archive object files
|
2245 |
|
|
This produces an archive file. Any parameters passed to @code{archive}
|
2246 |
|
|
are used in addition to the default flags. Optionally, this will
|
2247 |
|
|
also use the value of the @code{arflags} field in the target config
|
2248 |
|
|
array. If the host is not the same as the build machines, then then
|
2249 |
|
|
archiver is run on the remote host using @code{execute_anywhere}.
|
2250 |
|
|
|
2251 |
|
|
@c @item ranlib @emph{file}
|
2252 |
|
|
@cindex ranlib a file
|
2253 |
|
|
This generates an index for the archive file for systems that aren't
|
2254 |
|
|
POSIX yet. Any parameters passed to @code{ranlib} are used in for the
|
2255 |
|
|
flags.
|
2256 |
|
|
|
2257 |
|
|
@item execute_anywhere @emph{cmdline}
|
2258 |
|
|
@cindex executing commands remotely
|
2259 |
|
|
This executes the @emph{cmdline} on the proper host. This should be used
|
2260 |
|
|
as a replacement for the Tcl command @code{exec} as this version
|
2261 |
|
|
utilizes the target config info to execute this command on the build
|
2262 |
|
|
machine or a remote host. All config information for the remote host
|
2263 |
|
|
must be setup to have this command work. If this is a canadian cross,
|
2264 |
|
|
(where we test a cross compiler that runs on a different host then where
|
2265 |
|
|
DejaGnu is running) then a connection is made to the remote host and
|
2266 |
|
|
the command is executed there. It returns either @emph{REMOTERROR} (for
|
2267 |
|
|
an error) or the output produced when the command was executed. This is
|
2268 |
|
|
used for running the tool to be tested, not a test case.
|
2269 |
|
|
|
2270 |
|
|
@end ftable
|
2271 |
|
|
|
2272 |
|
|
@node debugger.exp, , target.exp, DejaGnu Builtins
|
2273 |
|
|
@subsection Debugging Procedures
|
2274 |
|
|
|
2275 |
|
|
@kindex debugger.exp
|
2276 |
|
|
@kindex lib/debugger.exp
|
2277 |
|
|
@file{lib/debugger.exp} defines these utility procedures:
|
2278 |
|
|
|
2279 |
|
|
@ftable @code
|
2280 |
|
|
|
2281 |
|
|
@item dumpvars @emph{expr}
|
2282 |
|
|
@cindex Print global variable values
|
2283 |
|
|
This takes a csh style regular expression (glob rules) and prints the
|
2284 |
|
|
values of the global variable names that match. It is abbreviated as
|
2285 |
|
|
@code{dv}
|
2286 |
|
|
|
2287 |
|
|
@item dumplocals @emph{expr}
|
2288 |
|
|
@cindex Print local variable value
|
2289 |
|
|
This takes a csh style regular expression (glob rules) and prints the
|
2290 |
|
|
values of the local variable names that match. It is abbreviated as
|
2291 |
|
|
@code{dl}.
|
2292 |
|
|
|
2293 |
|
|
@item dumprocs @emph{expr}
|
2294 |
|
|
@cindex Print procedure bodies
|
2295 |
|
|
This takes a csh style regular expression (glob rules) and prints the
|
2296 |
|
|
body of all procs that match. It is abbreviated as @code{dp}
|
2297 |
|
|
|
2298 |
|
|
@item dumpwatch @emph{expr}
|
2299 |
|
|
@cindex Print watchpoints
|
2300 |
|
|
This takes a csh style regular expression (glob rules) and prints all
|
2301 |
|
|
the watchpoints. It is abbreviated as @code{dw}.
|
2302 |
|
|
|
2303 |
|
|
@c FIXME: finish these when the code is fixed.
|
2304 |
|
|
@c @item watcharray @emph{element} @emph{type}
|
2305 |
|
|
@c @cindex Set a watchpoint on an array
|
2306 |
|
|
@c This sets an watchpoint of the @emph{element-type} on the
|
2307 |
|
|
@c @item watchvar v null type
|
2308 |
|
|
@c @cindex Set a watchpoint on a variable
|
2309 |
|
|
|
2310 |
|
|
@item watchunset @emph{var}
|
2311 |
|
|
@cindex Watch when a variable is unset
|
2312 |
|
|
This breaks program execution when the variable @emph{var} is unset. It
|
2313 |
|
|
is abbreviated as @code{wu}.
|
2314 |
|
|
|
2315 |
|
|
@item watchwrite @emph{var}
|
2316 |
|
|
@cindex Watch when a variable is written
|
2317 |
|
|
This breaks program execution when the variable @emph{var} is
|
2318 |
|
|
written. It is abbreviated as @code{ww}.
|
2319 |
|
|
|
2320 |
|
|
@item watchread @emph{var}
|
2321 |
|
|
@cindex Watch when a variable is read
|
2322 |
|
|
This breaks program execution when the variable @emph{var} is read. It
|
2323 |
|
|
is abbreviated as @code{wr}.
|
2324 |
|
|
|
2325 |
|
|
@item watchdel @emph{watch}
|
2326 |
|
|
@cindex Delete a watchpoint.
|
2327 |
|
|
This deletes a the watchpoint for @emph{watch}. It is abbreviated as
|
2328 |
|
|
@code{wd}.
|
2329 |
|
|
|
2330 |
|
|
@item print @emph{var}
|
2331 |
|
|
@cindex Printing variable values
|
2332 |
|
|
This prints the value of the variable @emph{var}. It is abbreviated as
|
2333 |
|
|
@code{p}.
|
2334 |
|
|
|
2335 |
|
|
@item quit
|
2336 |
|
|
@cindex Quiting DejaGnu
|
2337 |
|
|
This makes runtest exit. It is abbreviated as @code{q}.
|
2338 |
|
|
|
2339 |
|
|
@item bt
|
2340 |
|
|
@cindex Print a backtrace
|
2341 |
|
|
This prints a backtrace of the executed Tcl commands.
|
2342 |
|
|
|
2343 |
|
|
@end ftable
|
2344 |
|
|
|
2345 |
|
|
@node Target Dependent
|
2346 |
|
|
@section Target dependent procedures
|
2347 |
|
|
@cindex target dependent procedures
|
2348 |
|
|
|
2349 |
|
|
@c FIXME? These may be renamed to just "start", "load", "exit", and
|
2350 |
|
|
@c "version" eventually.
|
2351 |
|
|
|
2352 |
|
|
Each combination of target and tool requires some target-dependent
|
2353 |
|
|
procedures. The names of these procedures have a common form: the tool
|
2354 |
|
|
name, followed by an underbar @samp{_}, and finally a suffix describing
|
2355 |
|
|
the procedure's purpose. For example, a procedure to extract the
|
2356 |
|
|
version from @sc{gdb} is called @samp{gdb_version}. @xref{Init Module,,
|
2357 |
|
|
Initialization Module}, for a discussion of how DejaGnu arranges to find
|
2358 |
|
|
the right procedures for each target.
|
2359 |
|
|
|
2360 |
|
|
@code{runtest} itself calls only two of these procedures,
|
2361 |
|
|
@code{@var{tool}_exit} and @code{@var{tool}_version}; these procedures use
|
2362 |
|
|
no arguments.
|
2363 |
|
|
|
2364 |
|
|
The other two procedures, @code{@var{tool}_start} and
|
2365 |
|
|
@code{@var{tool}_load}, are only called by the test suites themselves
|
2366 |
|
|
(or by testsuite-specific initialization code); they may take arguments
|
2367 |
|
|
or not, depending on the conventions used within each test suite.
|
2368 |
|
|
|
2369 |
|
|
@ftable @code
|
2370 |
|
|
@item @var{tool}_start
|
2371 |
|
|
@cindex start procedure, tested tools
|
2372 |
|
|
Starts a particular tool. For an interactive tool,
|
2373 |
|
|
@code{@var{tool}_start} starts and initializes the tool, leaving the
|
2374 |
|
|
tool up and running for the test cases; an example is @code{gdb_start},
|
2375 |
|
|
the start function for @sc{gdb}. For a batch oriented tool,
|
2376 |
|
|
@code{@var{tool}_start} is optional; the recommended convention is to
|
2377 |
|
|
let @code{@var{tool}_start} run the tool, leaving the output in a
|
2378 |
|
|
variable called @code{comp_output}. Test scripts can then analyze
|
2379 |
|
|
@samp{$comp_output} to determine the test results. An example of this
|
2380 |
|
|
second kind of start function is @code{gcc_start}, the start function
|
2381 |
|
|
for @sc{gcc}.
|
2382 |
|
|
|
2383 |
|
|
@code{runtest} itself @emph{does not call} @code{@var{tool}_start}. The
|
2384 |
|
|
initialization module @file{@var{tool}_init.exp} must call
|
2385 |
|
|
@code{@var{tool}_start} for interactive tools; for batch-oriented tools,
|
2386 |
|
|
each individual test script calls @code{@var{tool}_start} (or makes
|
2387 |
|
|
other arrangements to run the tool).
|
2388 |
|
|
|
2389 |
|
|
@item @var{tool}_load
|
2390 |
|
|
@cindex load procedure, tested tools
|
2391 |
|
|
Loads something into a tool. For an interactive tool, this conditions
|
2392 |
|
|
the tool for a particular test case; for example, @code{gdb_load} loads
|
2393 |
|
|
a new executable file into the debugger. For batch oriented tools,
|
2394 |
|
|
@code{@var{tool}_load} may do nothing---though, for example, the
|
2395 |
|
|
@sc{gcc} support uses @code{gcc_load} to load and run a binary on the
|
2396 |
|
|
target environment. Conventionally, @code{@var{tool}_load} leaves the
|
2397 |
|
|
output of any program it runs in a variable called @samp{exec_output}.
|
2398 |
|
|
Writing @code{@var{tool}_load} can be the most complex part of extending
|
2399 |
|
|
DejaGnu to a new tool or a new target, if it requires much communication
|
2400 |
|
|
coding or file downloading.
|
2401 |
|
|
|
2402 |
|
|
Test scripts call @code{@var{tool}_load}.
|
2403 |
|
|
|
2404 |
|
|
@item @var{tool}_exit
|
2405 |
|
|
@cindex exit procedure, tested tools
|
2406 |
|
|
Cleans up (if necessary) before @code{runtest} exits. For interactive
|
2407 |
|
|
tools, this usually ends the interactive session. You can also use
|
2408 |
|
|
@code{@var{tool}_exit} to remove any temporary files left over from the
|
2409 |
|
|
tests.
|
2410 |
|
|
|
2411 |
|
|
@code{runtest} calls @code{@var{tool}_exit}.
|
2412 |
|
|
|
2413 |
|
|
@item @var{tool}_version
|
2414 |
|
|
@cindex version procedure, tested tools
|
2415 |
|
|
Prints the version label and number for @var{tool}. This is called by
|
2416 |
|
|
the DejaGnu procedure that prints the final summary report. The output
|
2417 |
|
|
should consist of the full path name used for the tested tool, and its
|
2418 |
|
|
version number.
|
2419 |
|
|
|
2420 |
|
|
@code{runtest} calls @code{@var{tool}_version}.
|
2421 |
|
|
@end ftable
|
2422 |
|
|
|
2423 |
|
|
The usual convention for return codes from any of these procedures
|
2424 |
|
|
(although it is not required by @code{runtest}) is to return @code{0} if
|
2425 |
|
|
the procedure succeeded, @code{1} if it failed, and @code{-1} if there
|
2426 |
|
|
was a communication error.
|
2427 |
|
|
|
2428 |
|
|
@node Cross Targets
|
2429 |
|
|
@section Remote targets supported
|
2430 |
|
|
|
2431 |
|
|
@cindex targets
|
2432 |
|
|
@cindex remote testing
|
2433 |
|
|
The DejaGnu distribution includes support for the following remote
|
2434 |
|
|
targets. You can set the target name and the connect mode in the
|
2435 |
|
|
@file{site.exp} file (using the Tcl variables @samp{targetname} and
|
2436 |
|
|
@samp{connectmode}, respectively), or on the @code{runtest} command line
|
2437 |
|
|
(using @samp{--name} and @samp{--connect}).
|
2438 |
|
|
|
2439 |
|
|
@table @strong
|
2440 |
|
|
@item @sc{amd} 29000, with UDI protocol
|
2441 |
|
|
Configure DejaGnu for target @samp{a29k-amd-udi}. (Cygnus
|
2442 |
|
|
@code{configure} also recognizes the abbreviation @samp{udi29k}.) Then,
|
2443 |
|
|
to run tests, use the @code{runtest} target name to specify whether you
|
2444 |
|
|
want to use a simulator, or a particular hardware board. The particular
|
2445 |
|
|
string to use with @samp{--name} will depend on your UDI setup file,
|
2446 |
|
|
@file{udi_soc} (if @file{udi_soc} is not in your working directory, the
|
2447 |
|
|
environment variable @samp{UDICONF} should contain a path to this file).
|
2448 |
|
|
For example, if your UDI setup file includes these lines:
|
2449 |
|
|
@end table
|
2450 |
|
|
@c table "ends" *only* to allow wider example below
|
2451 |
|
|
|
2452 |
|
|
@cartouche
|
2453 |
|
|
@smallexample
|
2454 |
|
|
iss AF_UNIX * isstip -r /home/gnu/29k/src/osboot/sim/osboot
|
2455 |
|
|
mon AF_UNIX * montip -t serial -baud 9600 -com /dev/ttyb
|
2456 |
|
|
@end smallexample
|
2457 |
|
|
@end cartouche
|
2458 |
|
|
|
2459 |
|
|
@table @strong
|
2460 |
|
|
@item @w{ }
|
2461 |
|
|
@c fake out table/item into continuing w/same margin as before
|
2462 |
|
|
You can use @samp{--name iss} to run tests on the simulator, and
|
2463 |
|
|
@samp{--name mon} to run tests on the 29K hardware. See the
|
2464 |
|
|
manufacturer's manuals for more information on UDI and @file{udi_soc}.
|
2465 |
|
|
@c FIXME! Is there a better ref than "the manufacturer's manuals"?
|
2466 |
|
|
|
2467 |
|
|
@kindex mondfe
|
2468 |
|
|
The default connect protocol is @samp{mondfe} with either back end.
|
2469 |
|
|
@code{mondfe} is the only shell DejaGnu supports for UDI targets.
|
2470 |
|
|
@code{mondfe} is an @sc{amd} specific monitor program freely available
|
2471 |
|
|
from @sc{amd}.
|
2472 |
|
|
|
2473 |
|
|
@emph{Warning:} This target requires @sc{gdb} version 4.7.2 (or
|
2474 |
|
|
greater). Earlier versions of @sc{gdb} do not fully support the
|
2475 |
|
|
@code{load} command on this target, so DejaGnu has no way to load
|
2476 |
|
|
executable files from the debugger.
|
2477 |
|
|
|
2478 |
|
|
@item Motorola 680x0 boards, a.out or @sc{coff} object format
|
2479 |
|
|
Configure DejaGnu for any remote target matching @samp{m68k-*}.
|
2480 |
|
|
|
2481 |
|
|
@emph{Warning:} Most @samp{m68k-*} configurations run all tests only for
|
2482 |
|
|
native testing (when the target is the same as the host). When you
|
2483 |
|
|
specify most of these targets for a cross configuration, you will only be
|
2484 |
|
|
able to use tests that run completely within the host (for example,
|
2485 |
|
|
tests of the binary utilities such as the archiver; or compiler tests
|
2486 |
|
|
that only generate code rather than running it).
|
2487 |
|
|
|
2488 |
|
|
To run a.out or @sc{coff} binaries on a remote M68K, you must configure
|
2489 |
|
|
DejaGnu for a particular target board. @samp{m68k-abug} is an example.
|
2490 |
|
|
(In general for an embedded environment, because it does not have absolute
|
2491 |
|
|
addresses, a.out is not a good choice for output format in any case; most
|
2492 |
|
|
often S-records or Hex-32 are used instead.)
|
2493 |
|
|
|
2494 |
|
|
@item Motorola 68K MVME 135 board running ABug boot monitor
|
2495 |
|
|
Configure for @samp{m68k-abug-aout} or @samp{m68k-abug-coff} (as a
|
2496 |
|
|
target). This boot monitor can only download S-records; therefore, the
|
2497 |
|
|
DejaGnu tests for this environment require a linker command script to
|
2498 |
|
|
convert either output format to S-records, setting the default addresses
|
2499 |
|
|
for @code{.text}, @code{.bss}, and @code{.data}.
|
2500 |
|
|
|
2501 |
|
|
With this configuration, the default for @samp{--connect} is @samp{tip}.
|
2502 |
|
|
@samp{tip} is the only communications protocol supported for connecting
|
2503 |
|
|
to @samp{m68k-abug-*} targets. @samp{tip} uses an @sc{ascii} downloader
|
2504 |
|
|
(the @code{~put} command) to load S-records into the target board. The
|
2505 |
|
|
@samp{--name} string must be a machine name that @code{tip}
|
2506 |
|
|
understands (for example, on some @code{tip} implementations it must be
|
2507 |
|
|
an entry from the initialization file for @code{tip}; this file is
|
2508 |
|
|
sometimes called @file{/etc/remote}).
|
2509 |
|
|
|
2510 |
|
|
See your system documentation for information on how to create new
|
2511 |
|
|
entries in @file{/etc/remote}. (Some @sc{unix} systems are distributed
|
2512 |
|
|
with at least one default entry with a name resembling @samp{hardwire};
|
2513 |
|
|
if your system has one, you can edit it, or make a modified copy with a
|
2514 |
|
|
new name.) When you have a working @file{/etc/remote} entry
|
2515 |
|
|
@var{abugtarget}, you should be able to type @samp{tip
|
2516 |
|
|
@var{abugtarget}}, and get the prompt @samp{135ABUG>} from the board.
|
2517 |
|
|
Use the same @var{abugtarget} string with @samp{runtest --name}.
|
2518 |
|
|
|
2519 |
|
|
@item Motorola IDP board running the rom68k boot monitor
|
2520 |
|
|
@c FIXME 1: this doesn't really say anything! OK, so functionality is
|
2521 |
|
|
@c the same. Is object code the same (srecords)? Do we configure with
|
2522 |
|
|
@c the same triplets? What is the default for --connect? Is
|
2523 |
|
|
@c any comms method other than tip supported? What prompt to expect
|
2524 |
|
|
@c when tip connected?
|
2525 |
|
|
@c FIXME 2: should @code{BUG} below be @code{ABUG}?
|
2526 |
|
|
This is the same in functionality as the MVME board running the
|
2527 |
|
|
@code{BUG} boot monitor. Only the monitor commands and the addresses are
|
2528 |
|
|
different.
|
2529 |
|
|
|
2530 |
|
|
@item VxWorks (Motorola 68K or Intel 960)
|
2531 |
|
|
Configure DejaGnu for either @samp{m68k-wrs-vxworks} (abbreviated
|
2532 |
|
|
@samp{vxworks68}) or @samp{i960-wrs-vxworks} (abbreviated
|
2533 |
|
|
@samp{vxworks960}). Since both targets support IP addressing, specify
|
2534 |
|
|
the network address (for example, a host name from @file{/etc/hosts})
|
2535 |
|
|
with @samp{--name}.
|
2536 |
|
|
|
2537 |
|
|
The default connect protocol is @samp{rlogin}, but you can use any of
|
2538 |
|
|
@samp{--connect rlogin}, @samp{--connect telnet}, or @samp{--connect
|
2539 |
|
|
rsh}.
|
2540 |
|
|
|
2541 |
|
|
Test scripts need no special code to load programs into these targets;
|
2542 |
|
|
since VxWorks supports NFS, all you must do is ensure test programs are
|
2543 |
|
|
on an exported filesystem.
|
2544 |
|
|
|
2545 |
|
|
@cindex VxWorks, link with @samp{-r}
|
2546 |
|
|
When you compile for VxWorks, use the linker @samp{-r} option to make
|
2547 |
|
|
the linker output relocatable---at least if you want to use library
|
2548 |
|
|
routines. Many standard C routines are included in VxWorks; often no
|
2549 |
|
|
additional libraries are needed. See your VxWorks system documentation
|
2550 |
|
|
for additional details.
|
2551 |
|
|
@end table
|
2552 |
|
|
|
2553 |
|
|
@node Input Files
|
2554 |
|
|
@section The files DejaGnu reads
|
2555 |
|
|
@cindex input files
|
2556 |
|
|
|
2557 |
|
|
The @code{runtest} program used to invoke DejaGnu is a short shell
|
2558 |
|
|
script generated by @code{make} during the configuration process. Its
|
2559 |
|
|
main task is to read the main test framework driver, @file{runtest.exp}.
|
2560 |
|
|
|
2561 |
|
|
@file{runtest.exp}, in turn, reads @code{expect} code from certain other
|
2562 |
|
|
files, in this order:
|
2563 |
|
|
|
2564 |
|
|
@enumerate
|
2565 |
|
|
@item
|
2566 |
|
|
Each of the @file{site.exp} local definition files available.
|
2567 |
|
|
@xref{Customizing,,Setting @code{runtest} defaults}, for details.
|
2568 |
|
|
|
2569 |
|
|
@item
|
2570 |
|
|
@file{lib/utils.exp}, a collection of utility procedures. @xref{DejaGnu
|
2571 |
|
|
Builtins,,DejaGnu Builtins}, for descriptions of these procedures.
|
2572 |
|
|
|
2573 |
|
|
@item
|
2574 |
|
|
@file{lib/framework.exp}, a file of subroutines meant for @code{runtest}
|
2575 |
|
|
itself rather than for general-purpose use in both @code{runtest} and
|
2576 |
|
|
test suites.
|
2577 |
|
|
|
2578 |
|
|
@item
|
2579 |
|
|
@file{debugger.exp}, Don Libes' Tcl Debugger. (See @cite{A Debugger for
|
2580 |
|
|
Tcl Applications} by Don Libes. This paper is distributed with
|
2581 |
|
|
@code{expect} in PostScript form as the file
|
2582 |
|
|
@file{expect/tcl-debug.ps}.)
|
2583 |
|
|
|
2584 |
|
|
@item
|
2585 |
|
|
@file{lib/remote.exp}, a collection of subroutines meant for connecting
|
2586 |
|
|
to remote machines.
|
2587 |
|
|
|
2588 |
|
|
@item
|
2589 |
|
|
@file{lib/target.exp}, a collection of subroutines used for the
|
2590 |
|
|
configuration systems in DejaGnu. These procedures typically manipulate
|
2591 |
|
|
or utilize the configuration system.
|
2592 |
|
|
|
2593 |
|
|
@item
|
2594 |
|
|
@c FIXME! A comment in runtest.exp claims a system default is used if
|
2595 |
|
|
@c no tool-specific init file is not available; I couldn't see where
|
2596 |
|
|
@c the program flow actually does this, though---pesch 30jul1993.
|
2597 |
|
|
An initialization file @code{@var{tool}_init.exp}. @xref{Init
|
2598 |
|
|
Module,,Initialization module}, for more discussion of init files.
|
2599 |
|
|
@end enumerate
|
2600 |
|
|
|
2601 |
|
|
@c This hard page break is mainly intended for smallbook formatting;
|
2602 |
|
|
@c some examples in this section come out better if this starts at a
|
2603 |
|
|
@c page boundary.
|
2604 |
|
|
@page
|
2605 |
|
|
@node Output Files
|
2606 |
|
|
@section The files DejaGnu writes
|
2607 |
|
|
@cindex output files
|
2608 |
|
|
|
2609 |
|
|
@code{runtest} always writes two kinds of output files: summary logs and
|
2610 |
|
|
detailed logs. The contents of both of these are determined by your
|
2611 |
|
|
tests.
|
2612 |
|
|
|
2613 |
|
|
For troubleshooting, a third kind of output file is useful: use
|
2614 |
|
|
@samp{--debug} to request an output file showing details of what
|
2615 |
|
|
@code{expect} is doing internally.
|
2616 |
|
|
|
2617 |
|
|
@menu
|
2618 |
|
|
* Summary:: Files that summarize tests
|
2619 |
|
|
* Detail:: Files that contain complete test results
|
2620 |
|
|
* Debug:: Logging expect internal actions
|
2621 |
|
|
@end menu
|
2622 |
|
|
|
2623 |
|
|
@node Summary
|
2624 |
|
|
@subsection Summary log
|
2625 |
|
|
@cindex summary log
|
2626 |
|
|
|
2627 |
|
|
@code{runtest} always produces a summary output file
|
2628 |
|
|
@file{@var{tool}.sum}. This summary shows the names of all test files
|
2629 |
|
|
run; for each test file, one line of output from each @code{pass}
|
2630 |
|
|
command (showing status @samp{PASS} or @samp{XPASS}) or @code{fail}
|
2631 |
|
|
command (status @samp{FAIL} or @samp{XFAIL}); trailing summary
|
2632 |
|
|
statistics that count passing and failing tests (expected and
|
2633 |
|
|
unexpected); and the full pathname and version number of the tool
|
2634 |
|
|
tested. (All possible outcomes, and all errors, are always reflected in
|
2635 |
|
|
the summary output file, regardless of whether or not you specify
|
2636 |
|
|
@samp{--all}.)
|
2637 |
|
|
|
2638 |
|
|
If any of your tests use the procedures @code{unresolved},
|
2639 |
|
|
@code{unsupported}, or @code{untested}, the summary output also
|
2640 |
|
|
tabulates the corresponding outcomes.
|
2641 |
|
|
|
2642 |
|
|
For example, after @samp{runtest --tool binutils}, look for a summary
|
2643 |
|
|
log in @file{binutils.sum}. Normally, @code{runtest} writes this file
|
2644 |
|
|
in your current working directory; use the @samp{--outdir} option to
|
2645 |
|
|
select a different directory.
|
2646 |
|
|
|
2647 |
|
|
@need 3500
|
2648 |
|
|
@noindent
|
2649 |
|
|
Here is a short sample summary log:
|
2650 |
|
|
|
2651 |
|
|
@cartouche
|
2652 |
|
|
@smallexample
|
2653 |
|
|
Test Run By rob on Mon May 25 21:40:57 PDT 1992
|
2654 |
|
|
=== gdb tests ===
|
2655 |
|
|
Running ./gdb.t00/echo.exp ...
|
2656 |
|
|
PASS: Echo test
|
2657 |
|
|
Running ./gdb.all/help.exp ...
|
2658 |
|
|
PASS: help add-symbol-file
|
2659 |
|
|
PASS: help aliases
|
2660 |
|
|
PASS: help breakpoint "bre" abbreviation
|
2661 |
|
|
FAIL: help run "r" abbreviation
|
2662 |
|
|
Running ./gdb.t10/crossload.exp ...
|
2663 |
|
|
PASS: m68k-elf (elf-big) explicit format; loaded
|
2664 |
|
|
XFAIL: mips-ecoff (ecoff-bigmips) "ptype v_signed_char" signed
|
2665 |
|
|
C types
|
2666 |
|
|
=== gdb Summary ===
|
2667 |
|
|
# of expected passes 5
|
2668 |
|
|
# of expected failures 1
|
2669 |
|
|
# of unexpected failures 1
|
2670 |
|
|
/usr/latest/bin/gdb version 4.6.5 -q
|
2671 |
|
|
@end smallexample
|
2672 |
|
|
@end cartouche
|
2673 |
|
|
|
2674 |
|
|
@node Detail
|
2675 |
|
|
@subsection Detailed log
|
2676 |
|
|
@cindex detailed log
|
2677 |
|
|
|
2678 |
|
|
@code{runtest} also saves a detailed log file @file{@var{tool}.log},
|
2679 |
|
|
showing any output generated by tests as well as the summary output.
|
2680 |
|
|
For example, after @samp{runtest --tool binutils}, look for a detailed
|
2681 |
|
|
log in @file{binutils.log}. Normally, @code{runtest} writes this file
|
2682 |
|
|
in your current working directory; use the @samp{--outdir} option to
|
2683 |
|
|
select a different directory.
|
2684 |
|
|
|
2685 |
|
|
@need 4000
|
2686 |
|
|
@noindent
|
2687 |
|
|
Here is a brief example showing a detailed log for @sc{g++} tests:
|
2688 |
|
|
|
2689 |
|
|
@cartouche
|
2690 |
|
|
@smallexample
|
2691 |
|
|
Test Run By rob on Mon May 25 21:40:43 PDT 1992
|
2692 |
|
|
|
2693 |
|
|
=== g++ tests ===
|
2694 |
|
|
|
2695 |
|
|
--- Running ./g++.other/t01-1.exp ---
|
2696 |
|
|
PASS: operate delete
|
2697 |
|
|
|
2698 |
|
|
--- Running ./g++.other/t01-2.exp ---
|
2699 |
|
|
FAIL: i960 bug EOF
|
2700 |
|
|
p0000646.C: In function `int warn_return_1 ()':
|
2701 |
|
|
p0000646.C:109: warning: control reaches end of non-void function
|
2702 |
|
|
p0000646.C: In function `int warn_return_arg (int)':
|
2703 |
|
|
p0000646.C:117: warning: control reaches end of non-void function
|
2704 |
|
|
p0000646.C: In function `int warn_return_sum (int, int)':
|
2705 |
|
|
p0000646.C:125: warning: control reaches end of non-void function
|
2706 |
|
|
p0000646.C: In function `struct foo warn_return_foo ()':
|
2707 |
|
|
p0000646.C:132: warning: control reaches end of non-void function
|
2708 |
|
|
|
2709 |
|
|
--- Running ./g++.other/t01-4.exp ---
|
2710 |
|
|
FAIL: abort
|
2711 |
|
|
900403_04.C:8: zero width for bit-field `foo'
|
2712 |
|
|
--- Running ./g++.other/t01-3.exp ---
|
2713 |
|
|
FAIL: segment violation
|
2714 |
|
|
900519_12.C:9: parse error before `;'
|
2715 |
|
|
900519_12.C:12: Segmentation violation
|
2716 |
|
|
/usr/latest/bin/gcc: Internal compiler error: program cc1plus got
|
2717 |
|
|
fatal signal
|
2718 |
|
|
|
2719 |
|
|
=== g++ Summary ===
|
2720 |
|
|
|
2721 |
|
|
# of expected passes 1
|
2722 |
|
|
# of expected failures 3
|
2723 |
|
|
/usr/ps/bin/g++ version cygnus-2.0.1
|
2724 |
|
|
@end smallexample
|
2725 |
|
|
@end cartouche
|
2726 |
|
|
|
2727 |
|
|
@node Debug
|
2728 |
|
|
@subsection Logging @code{expect} internal actions
|
2729 |
|
|
@cindex debug log
|
2730 |
|
|
|
2731 |
|
|
With the @samp{--debug} option, you can request a log file showing the
|
2732 |
|
|
output from @code{expect} itself, running in debugging mode. This file
|
2733 |
|
|
(@file{dbg.log}, in the directory where you start @code{runtest}) shows
|
2734 |
|
|
each pattern @code{expect} considers in analyzing test output.
|
2735 |
|
|
|
2736 |
|
|
This file reflects each @code{send} command, showing the string sent as
|
2737 |
|
|
input to the tool under test; and each @code{expect} command, showing
|
2738 |
|
|
each pattern it compares with the tool output.
|
2739 |
|
|
|
2740 |
|
|
The log messages for @code{expect} begin with a message of the form
|
2741 |
|
|
|
2742 |
|
|
@smallexample
|
2743 |
|
|
expect: does @{@var{tool output}@} (spawn_id @var{n}) match pattern
|
2744 |
|
|
@{@var{expected pattern}@}?
|
2745 |
|
|
@end smallexample
|
2746 |
|
|
|
2747 |
|
|
@noindent
|
2748 |
|
|
For every unsuccessful match, @code{expect} issues a @samp{no} after
|
2749 |
|
|
this message; if other patterns are specified for the same
|
2750 |
|
|
@code{expect} command, they are reflected also, but without the first
|
2751 |
|
|
part of the message (@samp{expect@dots{}match pattern}).
|
2752 |
|
|
|
2753 |
|
|
When @code{expect} finds a match, the log for the successful match ends
|
2754 |
|
|
with @samp{yes}, followed by a record of the @code{expect} variables set
|
2755 |
|
|
to describe a successful match. Here is an excerpt from the debugging
|
2756 |
|
|
log for a @sc{gdb} test:
|
2757 |
|
|
|
2758 |
|
|
@c FIXME! Why is the second spawn_id shown 0 rather than 6?
|
2759 |
|
|
@cartouche
|
2760 |
|
|
@smallexample
|
2761 |
|
|
send: sent @{break gdbme.c:34\n@} to spawn id 6
|
2762 |
|
|
expect: does @{@} (spawn_id 6) match pattern @{Breakpoint.*at.* file
|
2763 |
|
|
gdbme.c, line 34.*\(gdb\) $@}? no
|
2764 |
|
|
@{.*\(gdb\) $@}? no
|
2765 |
|
|
expect: does @{@} (spawn_id 0) match pattern @{<return>@}? no
|
2766 |
|
|
@{\(y or n\) @}? no
|
2767 |
|
|
@{buffer_full@}? no
|
2768 |
|
|
@{virtual@}? no
|
2769 |
|
|
@{memory@}? no
|
2770 |
|
|
@{exhausted@}? no
|
2771 |
|
|
@{Undefined@}? no
|
2772 |
|
|
@{command@}? no
|
2773 |
|
|
break gdbme.c:34
|
2774 |
|
|
Breakpoint 8 at 0x23d8: file gdbme.c, line 34.
|
2775 |
|
|
(gdb) expect: does @{break gdbme.c:34\r\nBreakpoint 8 at 0x23d8:
|
2776 |
|
|
file gdbme.c, line 34.\r\n(gdb) @} (spawn_id 6) match pattern
|
2777 |
|
|
@{Breakpoint.*at.* file gdbme.c, line 34.*\(gdb\) $@}? yes
|
2778 |
|
|
expect: set expect_out(0,start) @{18@}
|
2779 |
|
|
expect: set expect_out(0,end) @{71@}
|
2780 |
|
|
expect: set expect_out(0,string) @{Breakpoint 8 at 0x23d8: file
|
2781 |
|
|
gdbme.c, line 34.\r\n(gdb) @}
|
2782 |
|
|
expect: set expect_out(spawn_id) @{6@}
|
2783 |
|
|
expect: set expect_out(buffer) @{break gdbme.c:34\r\nBreakpoint 8
|
2784 |
|
|
at 0x23d8: file gdbme.c, line 34.\r\n(gdb) @}
|
2785 |
|
|
PASS: 70 0 breakpoint line number in file
|
2786 |
|
|
@end smallexample
|
2787 |
|
|
@end cartouche
|
2788 |
|
|
|
2789 |
|
|
@noindent
|
2790 |
|
|
This example exhibits three properties of @code{expect} and DejaGnu that
|
2791 |
|
|
might be surprising at first glance:
|
2792 |
|
|
|
2793 |
|
|
@itemize @bullet
|
2794 |
|
|
@item
|
2795 |
|
|
Empty output for the first attempted match. The first set of attempted
|
2796 |
|
|
matches shown ran against the output @samp{@{@}}---that is, no output.
|
2797 |
|
|
@code{expect} begins attempting to match the patterns supplied
|
2798 |
|
|
immediately; often, the first pass is against incomplete output (or
|
2799 |
|
|
completely before all output, as in this case).
|
2800 |
|
|
|
2801 |
|
|
@item
|
2802 |
|
|
Interspersed tool output. The beginning of the log entry for the second
|
2803 |
|
|
attempted match may be hard to spot: this is because the prompt
|
2804 |
|
|
@samp{(gdb) } appears on the same line, just before the @samp{expect:}
|
2805 |
|
|
that marks the beginning of the log entry.
|
2806 |
|
|
|
2807 |
|
|
@item
|
2808 |
|
|
Fail-safe patterns. Many of the patterns tested are fail-safe patterns
|
2809 |
|
|
provided by @sc{gdb} testing utilities, to reduce possible
|
2810 |
|
|
indeterminacy. It is useful to anticipate potential variations
|
2811 |
|
|
caused by extreme system conditions (@sc{gdb} might issue the message
|
2812 |
|
|
@samp{virtual memory exhausted} in rare circumstances), or by changes in
|
2813 |
|
|
the tested program (@samp{Undefined command} is the likeliest outcome if
|
2814 |
|
|
the name of a tested command changes).
|
2815 |
|
|
|
2816 |
|
|
The pattern @samp{@{<return>@}} is a particularly interesting fail-safe
|
2817 |
|
|
to notice; it checks for an unexpected @key{RET} prompt. This may
|
2818 |
|
|
happen, for example, if the tested tool can filter output through a
|
2819 |
|
|
pager.
|
2820 |
|
|
|
2821 |
|
|
These fail-safe patterns (like the debugging log itself) are primarily
|
2822 |
|
|
useful while developing test scripts. Use the @code{error} procedure to
|
2823 |
|
|
make the actions for fail-safe patterns produce messages starting with
|
2824 |
|
|
@samp{ERROR} on the @code{runtest} standard output, and in the detailed
|
2825 |
|
|
log file.
|
2826 |
|
|
@end itemize
|
2827 |
|
|
|
2828 |
|
|
@node Tests
|
2829 |
|
|
@chapter How To Write a Test Cases
|
2830 |
|
|
@cindex writing a test case
|
2831 |
|
|
@cindex test case, writing
|
2832 |
|
|
|
2833 |
|
|
@menu
|
2834 |
|
|
* Writing:: Writing a test case
|
2835 |
|
|
* Debugging:: Debugging a test case
|
2836 |
|
|
* Adding:: Adding a test case to a test suite
|
2837 |
|
|
* Hints:: Hints on writing a test case
|
2838 |
|
|
* Variables:: Special variables used by test cases
|
2839 |
|
|
@end menu
|
2840 |
|
|
|
2841 |
|
|
@node Writing
|
2842 |
|
|
@section Writing a test case
|
2843 |
|
|
|
2844 |
|
|
The easiest way to prepare a new test case is to base it on an existing
|
2845 |
|
|
one for a similar situation. There are two major categories of tests:
|
2846 |
|
|
batch or interactive. Batch oriented tests are usually easier to write.
|
2847 |
|
|
|
2848 |
|
|
The @sc{gcc} tests are a good example of batch oriented tests. All
|
2849 |
|
|
@sc{gcc} tests consist primarily of a call to a single common procedure,
|
2850 |
|
|
since all the tests either have no output, or only have a few warning
|
2851 |
|
|
messages when successfully compiled. Any non-warning output is a test
|
2852 |
|
|
failure. All the C code needed is kept in the test directory. The test
|
2853 |
|
|
driver, written in @code{expect}, need only get a listing of all the C
|
2854 |
|
|
files in the directory, and compile them all using a generic procedure.
|
2855 |
|
|
This procedure and a few others supporting for these tests are kept in
|
2856 |
|
|
the library module @file{lib/c-torture.exp} in the @sc{gcc} test suite.
|
2857 |
|
|
Most tests of this kind use very few @code{expect} features, and are
|
2858 |
|
|
coded almost purely in Tcl.
|
2859 |
|
|
|
2860 |
|
|
@noindent
|
2861 |
|
|
Writing the complete suite of C tests, then, consisted of these steps:
|
2862 |
|
|
|
2863 |
|
|
@enumerate
|
2864 |
|
|
@item
|
2865 |
|
|
@cindex Granlund, Torbjorn
|
2866 |
|
|
@cindex C torture test
|
2867 |
|
|
Copying all the C code into the test directory. These tests were based on
|
2868 |
|
|
the C-torture test created by Torbjorn Granlund (on behalf of the Free
|
2869 |
|
|
Software Foundation) for @sc{gcc} development.
|
2870 |
|
|
|
2871 |
|
|
@item
|
2872 |
|
|
Writing (and debugging) the generic @code{expect} procedures for
|
2873 |
|
|
compilation.
|
2874 |
|
|
|
2875 |
|
|
@item
|
2876 |
|
|
Writing the simple test driver: its main task is to search the directory
|
2877 |
|
|
(using the Tcl procedure @code{glob} for filename expansion with
|
2878 |
|
|
wildcards) and call a Tcl procedure with each filename. It also checks
|
2879 |
|
|
for a few errors from the testing procedure.
|
2880 |
|
|
@end enumerate
|
2881 |
|
|
|
2882 |
|
|
Testing interactive programs is intrinsically more complex. Tests for most
|
2883 |
|
|
interactive programs require some trial and error before they are complete.
|
2884 |
|
|
|
2885 |
|
|
However, some interactive programs can be tested in a simple fashion
|
2886 |
|
|
reminiscent of batch tests. For example, prior to the creation of
|
2887 |
|
|
DejaGnu, the @sc{gdb} distribution already included a wide-ranging
|
2888 |
|
|
testing procedure. This procedure was very robust, and had already
|
2889 |
|
|
undergone much more debugging and error checking than many recent
|
2890 |
|
|
DejaGnu test cases. Accordingly, the best approach was simply to
|
2891 |
|
|
encapsulate the existing @sc{gdb} tests, for reporting purposes.
|
2892 |
|
|
Thereafter, new @sc{gdb} tests built up a family of @code{expect}
|
2893 |
|
|
procedures specialized for @sc{gdb} testing.
|
2894 |
|
|
|
2895 |
|
|
@file{gdb.t10/crossload.exp} is a good example of an interactive test.
|
2896 |
|
|
@c FIXME! Check what *kind* of example it is---work-intensive, or generic...
|
2897 |
|
|
|
2898 |
|
|
@node Debugging
|
2899 |
|
|
@section Debugging a test case
|
2900 |
|
|
@cindex debugging a test case
|
2901 |
|
|
@cindex test case, debugging
|
2902 |
|
|
|
2903 |
|
|
@noindent
|
2904 |
|
|
These are the kinds of debugging information available from DejaGnu:
|
2905 |
|
|
|
2906 |
|
|
@enumerate
|
2907 |
|
|
@item
|
2908 |
|
|
Output controlled by test scripts themselves, explicitly allowed for by
|
2909 |
|
|
the test author. This kind of debugging output appears in the detailed
|
2910 |
|
|
output recorded in the @file{@var{tool}.log} file. To do the same for
|
2911 |
|
|
new tests, use the @code{verbose} procedure (which in turn uses the
|
2912 |
|
|
variable also called @code{verbose}) to control how much output to
|
2913 |
|
|
generate. This will make it easier for other people running the test to
|
2914 |
|
|
debug it if necessary. Whenever possible, if @samp{$verbose} is
|
2915 |
|
|
@code{0}, there should be no output other than the output from
|
2916 |
|
|
@code{pass}, @code{fail}, @code{error}, and @code{warning}. Then, to
|
2917 |
|
|
whatever extent is appropriate for the particular test, allow
|
2918 |
|
|
successively higher values of @samp{$verbose} to generate more
|
2919 |
|
|
information. Be kind to other programmers who use your tests: provide
|
2920 |
|
|
for a lot of debugging information.
|
2921 |
|
|
|
2922 |
|
|
@item
|
2923 |
|
|
Output from the internal debugging functions of Tcl and @code{expect}.
|
2924 |
|
|
There is a command line options for each; both forms of debugging output
|
2925 |
|
|
are recorded in the file @code{dbg.log} in the current directory.
|
2926 |
|
|
|
2927 |
|
|
Use @samp{--debug} for information from the @code{expect} level; it
|
2928 |
|
|
generates displays of the @code{expect} attempts to match the tool
|
2929 |
|
|
output with the patterns specified (@pxref{Debug,,Debug Log}). This
|
2930 |
|
|
output can be very helpful while developing test scripts, since it shows
|
2931 |
|
|
precisely the characters received. Iterating between the latest attempt
|
2932 |
|
|
at a new test script and the corresponding @file{dbg.log} can allow you
|
2933 |
|
|
to create the final patterns by ``cut and paste''. This is sometimes
|
2934 |
|
|
the best way to write a test case.
|
2935 |
|
|
|
2936 |
|
|
Use @samp{--strace} to see more detail at the Tcl level; this shows how Tcl
|
2937 |
|
|
procedure definitions expand, as they execute. The associated number
|
2938 |
|
|
controls the depth of definitions expanded; see the discussion of
|
2939 |
|
|
@samp{--strace} in @ref{Invoking runtest,,Running the Tests}.
|
2940 |
|
|
|
2941 |
|
|
@item
|
2942 |
|
|
Finally, if the value of @samp{verbose} is 3 or greater, @code{runtest}
|
2943 |
|
|
turns on the @code{expect} command @code{log_user}. This command prints
|
2944 |
|
|
all @code{expect} actions to the @code{expect} standard output, to the
|
2945 |
|
|
detailed log file, and (if @samp{--debug} is on) to @file{dbg.log}.
|
2946 |
|
|
@end enumerate
|
2947 |
|
|
|
2948 |
|
|
@node Adding
|
2949 |
|
|
@section Adding a test case to a test suite
|
2950 |
|
|
@cindex adding a test case
|
2951 |
|
|
|
2952 |
|
|
There are two slightly different ways to add a test case. One is to add
|
2953 |
|
|
the test case to an existing directory. The other is to create a new
|
2954 |
|
|
directory to hold your test. The existing test directories represent
|
2955 |
|
|
several styles of testing, all of which are slightly different; examine
|
2956 |
|
|
the directories for the tool of interest to see which (if any) is most
|
2957 |
|
|
suitable.
|
2958 |
|
|
|
2959 |
|
|
Adding a @sc{gcc} test can be very simple: just add the C code to any
|
2960 |
|
|
directory beginning with @samp{gcc.} and it runs on the next
|
2961 |
|
|
@samp{runtest --tool gcc}.
|
2962 |
|
|
|
2963 |
|
|
To add a test to @sc{gdb}, first add any source code you will need to
|
2964 |
|
|
the test directory. Then you can either create a new @code{expect} file,
|
2965 |
|
|
or add your test to an existing one (any file with a @samp{.exp}
|
2966 |
|
|
suffix). Creating a new @samp{.exp} file is probably a better idea if
|
2967 |
|
|
the test is significantly different from existing tests. Adding it as a
|
2968 |
|
|
separate file also makes upgrading easier. If the C code has to be
|
2969 |
|
|
already compiled before the test will run, then you'll have to add it to
|
2970 |
|
|
the @file{Makefile.in} file for that test directory, then run
|
2971 |
|
|
@code{configure} and @code{make}.
|
2972 |
|
|
|
2973 |
|
|
Adding a test by creating a new directory is very similar:
|
2974 |
|
|
|
2975 |
|
|
@enumerate
|
2976 |
|
|
@item
|
2977 |
|
|
Create the new directory. All subdirectory names begin with the name of
|
2978 |
|
|
the tool to test; e.g. @sc{g++} tests might be in a directory called
|
2979 |
|
|
@file{g++.other}. There can be multiple test directories that start with
|
2980 |
|
|
the same tool name (such as @samp{g++}).
|
2981 |
|
|
|
2982 |
|
|
@item
|
2983 |
|
|
Add the new directory name to the @samp{configdirs} definition in the
|
2984 |
|
|
@file{configure.in} file for the test suite directory. This way when
|
2985 |
|
|
@code{make} and @code{configure} next run, they include the new directory.
|
2986 |
|
|
|
2987 |
|
|
@item
|
2988 |
|
|
Add the new test case to the directory, as above.
|
2989 |
|
|
|
2990 |
|
|
@item
|
2991 |
|
|
To add support in the new directory for configure and make, you must
|
2992 |
|
|
also create a @code{Makefile.in} and a @code{configure.in}. @xref{What
|
2993 |
|
|
Configure Does,,What Configure Does, configure.info, Cygnus Configure}.
|
2994 |
|
|
@end enumerate
|
2995 |
|
|
|
2996 |
|
|
@c FIXME! Expand this sentence to at least a section, maybe a chapter...
|
2997 |
|
|
@c The @file{admin} directory contains templates for a few common forms
|
2998 |
|
|
@c of test.
|
2999 |
|
|
|
3000 |
|
|
@node Hints
|
3001 |
|
|
@section Hints on writing a test case
|
3002 |
|
|
@cindex hints on test case writing
|
3003 |
|
|
|
3004 |
|
|
There may be useful existing procedures already written for your test in
|
3005 |
|
|
the @file{lib} directory of the DejaGnu distribution. @xref{DejaGnu
|
3006 |
|
|
Builtins,,DejaGnu Builtins}.
|
3007 |
|
|
|
3008 |
|
|
It is safest to write patterns that match @emph{all} the output
|
3009 |
|
|
generated by the tested program; this is called @dfn{closure}. If a
|
3010 |
|
|
pattern does not match the entire output, any output that remains will
|
3011 |
|
|
be examined by the @emph{next} @code{expect} command. In this
|
3012 |
|
|
situation, the precise boundary that determines which @code{expect}
|
3013 |
|
|
command sees what is very sensitive to timing between the @code{expect}
|
3014 |
|
|
task and the task running the tested tool. As a result, the test may
|
3015 |
|
|
sometimes appear to work, but is likely to have unpredictable results.
|
3016 |
|
|
(This problem is particularly likely for interactive tools, but can also
|
3017 |
|
|
affect batch tools---especially for tests that take a long time to finish.)
|
3018 |
|
|
The best way to ensure closure is to use the @samp{-re} option for the
|
3019 |
|
|
@code{expect} command to write the pattern as a full regular
|
3020 |
|
|
expressions; then you can match the end of output using a @samp{$}. It
|
3021 |
|
|
is also a good idea to write patterns that match all available output by
|
3022 |
|
|
using @samp{.*\} after the text of interest; this will also match any
|
3023 |
|
|
intervening blank lines. Sometimes an alternative is to match end of
|
3024 |
|
|
line using @samp{\r} or @samp{\n}, but this is usually too dependent on
|
3025 |
|
|
terminal settings.
|
3026 |
|
|
@c FIXME!! explain what "end of output" means for interactive task.
|
3027 |
|
|
@c (Timeout or EOF, right?)
|
3028 |
|
|
|
3029 |
|
|
Always escape punctuation, such as @samp{(} or @samp{"}, in your
|
3030 |
|
|
patterns; for example, write @samp{\(}. If you forget to escape
|
3031 |
|
|
punctuation, you will usually see an error message like @samp{extra
|
3032 |
|
|
characters after close-quote}.
|
3033 |
|
|
|
3034 |
|
|
If you have trouble understanding why a pattern does not match the
|
3035 |
|
|
program output, try using the @samp{--debug} option to @code{runtest},
|
3036 |
|
|
and examine the debug log carefully. @xref{Debug,,Debug Log}.
|
3037 |
|
|
|
3038 |
|
|
Be careful not to neglect output generated by setup rather than by the
|
3039 |
|
|
interesting parts of a test case. For example, while testing @sc{gdb},
|
3040 |
|
|
I issue a send @samp{set height 0\n} command. The purpose is simply to
|
3041 |
|
|
make sure @sc{gdb} never calls a paging program. The @samp{set height}
|
3042 |
|
|
command in @sc{gdb} does not generate any output; but running @emph{any}
|
3043 |
|
|
command makes @sc{gdb} issue a new @samp{(gdb) } prompt. If there were
|
3044 |
|
|
no @code{expect} command to match this prompt, the output @samp{(gdb) }
|
3045 |
|
|
begins the text seen by the next @code{expect} command---which might
|
3046 |
|
|
make @emph{that} pattern fail to match.
|
3047 |
|
|
|
3048 |
|
|
To preserve basic sanity, I also recommended that no test ever pass if
|
3049 |
|
|
there was any kind of problem in the test case. To take an extreme
|
3050 |
|
|
case, tests that pass even when the tool will not spawn are misleading.
|
3051 |
|
|
Ideally, a test in this sort of situation should not fail either.
|
3052 |
|
|
Instead, print an error message by calling one of the DejaGnu procedures
|
3053 |
|
|
@code{error} or @code{warning}.
|
3054 |
|
|
|
3055 |
|
|
@node Variables
|
3056 |
|
|
@section Special variables used by test cases
|
3057 |
|
|
@cindex special variables
|
3058 |
|
|
|
3059 |
|
|
@cindex variables for all tests
|
3060 |
|
|
Your test cases can use these variables, with conventional meanings (as
|
3061 |
|
|
well as the variables saved in @file{site.exp}
|
3062 |
|
|
@pxref{Customizing,,Setting @code{runtest} defaults}):
|
3063 |
|
|
|
3064 |
|
|
@quotation
|
3065 |
|
|
@emph{These variables are available to all test cases.}
|
3066 |
|
|
@end quotation
|
3067 |
|
|
|
3068 |
|
|
@ftable @code
|
3069 |
|
|
@item prms_id
|
3070 |
|
|
@cindex PRMS bug number
|
3071 |
|
|
@cindex GNATS bug number
|
3072 |
|
|
@cindex bug number
|
3073 |
|
|
The tracking system (e.g. @sc{gnats}) number identifying a corresponding
|
3074 |
|
|
bugreport. (@samp{0} if you do not specify it in the test script.)
|
3075 |
|
|
|
3076 |
|
|
@item bug_id
|
3077 |
|
|
@cindex bug number, extra
|
3078 |
|
|
An optional bug id; may reflect a bug identification from another
|
3079 |
|
|
organization. (@samp{0} if you do not specify it.)
|
3080 |
|
|
|
3081 |
|
|
@item subdir
|
3082 |
|
|
@cindex current test subdirectory
|
3083 |
|
|
The subdirectory for the current test case.
|
3084 |
|
|
@end ftable
|
3085 |
|
|
|
3086 |
|
|
@quotation
|
3087 |
|
|
@emph{These variables should never be changed. They appear in most
|
3088 |
|
|
tests.}
|
3089 |
|
|
@end quotation
|
3090 |
|
|
|
3091 |
|
|
@ftable @code
|
3092 |
|
|
@item expect_out(buffer)
|
3093 |
|
|
@cindex last command output
|
3094 |
|
|
The output from the last command. This is an internal variable set by
|
3095 |
|
|
@code{expect}.
|
3096 |
|
|
|
3097 |
|
|
@item exec_output
|
3098 |
|
|
This is the output from a @code{@var{tool}_load} command. This only
|
3099 |
|
|
applies to tools like @sc{gcc} and @sc{gas} which produce an object
|
3100 |
|
|
file that must in turn be executed to complete a test.
|
3101 |
|
|
|
3102 |
|
|
@item comp_output
|
3103 |
|
|
This is the output from a @code{@var{tool}_start} command. This is
|
3104 |
|
|
conventionally used for batch oriented programs, like @sc{gcc} and
|
3105 |
|
|
@sc{gas}, that may produce interesting output (warnings, errors) without
|
3106 |
|
|
further interaction.
|
3107 |
|
|
@end ftable
|
3108 |
|
|
|
3109 |
|
|
@node Extending
|
3110 |
|
|
@chapter New Tools, Targets, or Hosts
|
3111 |
|
|
|
3112 |
|
|
The most common ways to extend the DejaGnu framework are: adding a suite
|
3113 |
|
|
of tests for a new tool to be tested; adding support for testing on a
|
3114 |
|
|
new target; and porting @code{runtest} to a new host.
|
3115 |
|
|
|
3116 |
|
|
@menu
|
3117 |
|
|
* Adding Tools:: How to add tests for a new tool
|
3118 |
|
|
* Adding Targets:: How to add a new target
|
3119 |
|
|
* Porting:: Porting DejaGnu to a new host
|
3120 |
|
|
@end menu
|
3121 |
|
|
|
3122 |
|
|
@node Adding Tools
|
3123 |
|
|
@section Writing tests for a new tool
|
3124 |
|
|
|
3125 |
|
|
In general, the best way to learn how to write (code or even prose) is
|
3126 |
|
|
to read something similar. This principle applies to test cases and to
|
3127 |
|
|
test suites. Unfortunately, well-established test suites have a way of
|
3128 |
|
|
developing their own conventions: as test writers become more
|
3129 |
|
|
experienced with DejaGnu and with Tcl, they accumulate more utilities,
|
3130 |
|
|
and take advantage of more and more features of @code{expect} and Tcl in
|
3131 |
|
|
general.
|
3132 |
|
|
|
3133 |
|
|
Inspecting such established test suites may make the prospect of
|
3134 |
|
|
creating an entirely new test suite appear overwhelming. Nevertheless,
|
3135 |
|
|
it is quite straightforward to get a new test suite going.
|
3136 |
|
|
|
3137 |
|
|
@cindex Lupton, Robert
|
3138 |
|
|
There is one test suite that is guaranteed not to grow more elaborate
|
3139 |
|
|
over time: both it and the tool it tests were created expressly to
|
3140 |
|
|
illustrate what it takes to get started with DejaGnu. The
|
3141 |
|
|
@file{example/} directory of the DejaGnu distribution contains both an
|
3142 |
|
|
interactive tool called @code{calc}, and a test suite for it. Reading
|
3143 |
|
|
this test suite, and experimenting with it, is a good way to supplement
|
3144 |
|
|
the information in this section. (Thanks to Robert Lupton for creating
|
3145 |
|
|
@code{calc} and its test suite---and also the first version of this
|
3146 |
|
|
section of the manual!)
|
3147 |
|
|
|
3148 |
|
|
To help orient you further in this task, here is an outline of the steps
|
3149 |
|
|
to begin building a test suite for a program @var{example}.
|
3150 |
|
|
|
3151 |
|
|
@enumerate
|
3152 |
|
|
@item
|
3153 |
|
|
Create or select a directory to contain your new collection of tests.
|
3154 |
|
|
Change to that directory (shown here as @code{testsuite}):
|
3155 |
|
|
|
3156 |
|
|
@example
|
3157 |
|
|
eg$ cd testsuite/
|
3158 |
|
|
@end example
|
3159 |
|
|
|
3160 |
|
|
@item
|
3161 |
|
|
Create a @file{configure.in} file in this directory, to control
|
3162 |
|
|
configuration-dependent choices for your tests. So far as DejaGnu is
|
3163 |
|
|
concerned, the important thing is to set a value for the variable
|
3164 |
|
|
@code{target_abbrev}; this value is the link to the init file you will
|
3165 |
|
|
write soon. (For simplicity, we assume the environment is Unix, and use
|
3166 |
|
|
@samp{unix} as the value.)
|
3167 |
|
|
|
3168 |
|
|
What else is needed in @file{configure.in} depends on the requirements
|
3169 |
|
|
of your tool, your intended test environments, and which
|
3170 |
|
|
@code{configure} system you use. This example is a minimal
|
3171 |
|
|
@code{configure.in} for use with Cygnus Configure. (For an alternative
|
3172 |
|
|
based on the FSF @code{autoconf} system, see the @code{calc} example
|
3173 |
|
|
distributed with DejaGnu.) Replace @var{example} with the name of your
|
3174 |
|
|
program:
|
3175 |
|
|
|
3176 |
|
|
@cartouche
|
3177 |
|
|
@smallexample
|
3178 |
|
|
# This file is a shell script fragment
|
3179 |
|
|
# for use with Cygnus configure.
|
3180 |
|
|
|
3181 |
|
|
srctrigger="@var{example}.0"
|
3182 |
|
|
srcname="The DejaGnu @var{example} tests"
|
3183 |
|
|
|
3184 |
|
|
# per-host:
|
3185 |
|
|
|
3186 |
|
|
# per-target:
|
3187 |
|
|
|
3188 |
|
|
# everything defaults to unix for a target
|
3189 |
|
|
target_abbrev=unix
|
3190 |
|
|
|
3191 |
|
|
# post-target:
|
3192 |
|
|
|
3193 |
|
|
@end smallexample
|
3194 |
|
|
@end cartouche
|
3195 |
|
|
|
3196 |
|
|
@item
|
3197 |
|
|
Create @file{Makefile.in}, the source file used by @code{configure} to
|
3198 |
|
|
build your @file{Makefile}. Its leading section should as usual contain
|
3199 |
|
|
the values that @code{configure} may override:
|
3200 |
|
|
|
3201 |
|
|
@cartouche
|
3202 |
|
|
@smallexample
|
3203 |
|
|
srcdir = .
|
3204 |
|
|
prefix = /usr/local
|
3205 |
|
|
|
3206 |
|
|
exec_prefix = $(prefix)
|
3207 |
|
|
bindir = $(exec_prefix)/bin
|
3208 |
|
|
libdir = $(exec_prefix)/lib
|
3209 |
|
|
tooldir = $(libdir)/$(target_alias)
|
3210 |
|
|
|
3211 |
|
|
datadir = $(exec_prefix)/lib/dejagnu
|
3212 |
|
|
|
3213 |
|
|
RUNTEST = runtest
|
3214 |
|
|
RUNTESTFLAGS =
|
3215 |
|
|
FLAGS_TO_PASS =
|
3216 |
|
|
|
3217 |
|
|
#### host, target, site specific Makefile frags come in here.
|
3218 |
|
|
@end smallexample
|
3219 |
|
|
@end cartouche
|
3220 |
|
|
|
3221 |
|
|
This should be followed by the standard targets at your site. To begin
|
3222 |
|
|
with, they need not do anything---for example, these definitions will
|
3223 |
|
|
do:
|
3224 |
|
|
|
3225 |
|
|
@cartouche
|
3226 |
|
|
@smallexample
|
3227 |
|
|
|
3228 |
|
|
all:
|
3229 |
|
|
|
3230 |
|
|
info:
|
3231 |
|
|
|
3232 |
|
|
install-info:
|
3233 |
|
|
|
3234 |
|
|
install:
|
3235 |
|
|
uninstall:
|
3236 |
|
|
|
3237 |
|
|
clean:
|
3238 |
|
|
-rm -f *~ core *.info*
|
3239 |
|
|
|
3240 |
|
|
@end smallexample
|
3241 |
|
|
@end cartouche
|
3242 |
|
|
|
3243 |
|
|
It is also a good idea to make sure your @file{Makefile} can rebuild
|
3244 |
|
|
itself if @file{Makefile.in} changes, with a target like this (which
|
3245 |
|
|
works for either Cygnus or FSF Configure):
|
3246 |
|
|
|
3247 |
|
|
@cartouche
|
3248 |
|
|
@smallexample
|
3249 |
|
|
Makefile : $(srcdir)/Makefile.in $(host_makefile_frag) \
|
3250 |
|
|
$(target_makefile_frag)
|
3251 |
|
|
$(SHELL) ./config.status
|
3252 |
|
|
@end smallexample
|
3253 |
|
|
@end cartouche
|
3254 |
|
|
|
3255 |
|
|
You also need to include two targets important to DejaGnu: @code{check},
|
3256 |
|
|
to run the tests, and @code{site.exp}, to set up the Tcl copies of
|
3257 |
|
|
configuration-dependent values. The @code{check} target must run
|
3258 |
|
|
@samp{runtest --tool @var{example}}:
|
3259 |
|
|
|
3260 |
|
|
@cartouche
|
3261 |
|
|
@smallexample
|
3262 |
|
|
check: site.exp all
|
3263 |
|
|
$(RUNTEST) $(RUNTESTFLAGS) $(FLAGS_TO_PASS) \
|
3264 |
|
|
--tool @var{example} --srcdir $(srcdir)
|
3265 |
|
|
@end smallexample
|
3266 |
|
|
@end cartouche
|
3267 |
|
|
|
3268 |
|
|
The @code{site.exp} target should usually set up (among other things!) a
|
3269 |
|
|
Tcl variable for the name of your program:
|
3270 |
|
|
|
3271 |
|
|
@cartouche
|
3272 |
|
|
@smallexample
|
3273 |
|
|
site.exp: ./config.status Makefile
|
3274 |
|
|
@@echo "Making a new config file..."
|
3275 |
|
|
-@@rm -f ./tmp?
|
3276 |
|
|
@@touch site.exp
|
3277 |
|
|
|
3278 |
|
|
-@@mv site.exp site.bak
|
3279 |
|
|
@@echo "## these variables are automatically\
|
3280 |
|
|
generated by make ##" > ./tmp0
|
3281 |
|
|
@@echo "# Do not edit here. If you wish to\
|
3282 |
|
|
override these values" >> ./tmp0
|
3283 |
|
|
@@echo "# add them to the last section" >> ./tmp0
|
3284 |
|
|
@@echo "set host_os $@{host_os@}" >> ./tmp0
|
3285 |
|
|
@@echo "set host_alias $@{host_alias@}" >> ./tmp0
|
3286 |
|
|
@@echo "set host_cpu $@{host_cpu@}" >> ./tmp0
|
3287 |
|
|
@@echo "set host_vendor $@{host_vendor@}" >> ./tmp0
|
3288 |
|
|
@@echo "set target_os $@{target_os@}" >> ./tmp0
|
3289 |
|
|
@@echo "set target_alias $@{target_alias@}" >> ./tmp0
|
3290 |
|
|
@@echo "set target_cpu $@{target_cpu@}" >> ./tmp0
|
3291 |
|
|
@@echo "set target_vendor $@{target_vendor@}" >> ./tmp0
|
3292 |
|
|
@@echo "set host_triplet $@{host_canonical@}" >> ./tmp0
|
3293 |
|
|
@@echo "set target_triplet $@{target_canonical@}">>./tmp0
|
3294 |
|
|
@@echo "set tool binutils" >> ./tmp0
|
3295 |
|
|
@@echo "set srcdir $@{srcdir@}" >> ./tmp0
|
3296 |
|
|
@@echo "set objdir `pwd`" >> ./tmp0
|
3297 |
|
|
@@echo "set @var{examplename} @var{example}" >> ./tmp0
|
3298 |
|
|
@@echo "## All variables above are generated by\
|
3299 |
|
|
configure. Do Not Edit ##" >> ./tmp0
|
3300 |
|
|
@@cat ./tmp0 > site.exp
|
3301 |
|
|
@@sed < site.bak \
|
3302 |
|
|
-e '1,/^## All variables above are.*##/ d' \
|
3303 |
|
|
>> site.exp
|
3304 |
|
|
-@@rm -f ./tmp?
|
3305 |
|
|
@end smallexample
|
3306 |
|
|
@end cartouche
|
3307 |
|
|
|
3308 |
|
|
@item
|
3309 |
|
|
Create a directory (in @file{testsuite/}) called @file{config/}:
|
3310 |
|
|
|
3311 |
|
|
@example
|
3312 |
|
|
eg$ mkdir config
|
3313 |
|
|
@end example
|
3314 |
|
|
|
3315 |
|
|
@item
|
3316 |
|
|
Make an init file in this directory; its name must start with the
|
3317 |
|
|
@code{target_abbrev} value, so call it @file{config/unix.exp}.
|
3318 |
|
|
This is the file that contains the target-dependent procedures;
|
3319 |
|
|
fortunately, most of them do not have to do very much in order for
|
3320 |
|
|
@code{runtest} to run.
|
3321 |
|
|
|
3322 |
|
|
If @var{example} is not interactive, you can get away with this minimal
|
3323 |
|
|
@file{unix.exp} to begin with:
|
3324 |
|
|
|
3325 |
|
|
@cartouche
|
3326 |
|
|
@smallexample
|
3327 |
|
|
proc foo_exit @{@} @{@}
|
3328 |
|
|
proc foo_version @{@} @{@}
|
3329 |
|
|
@end smallexample
|
3330 |
|
|
@end cartouche
|
3331 |
|
|
|
3332 |
|
|
If @var{example} is interactive, however, you might as well define a
|
3333 |
|
|
start routine @emph{and invoke it} by using an init file like this:
|
3334 |
|
|
|
3335 |
|
|
@cartouche
|
3336 |
|
|
@smallexample
|
3337 |
|
|
proc foo_exit @{@} @{@}
|
3338 |
|
|
proc foo_version @{@} @{@}
|
3339 |
|
|
|
3340 |
|
|
proc foo_start @{@} @{
|
3341 |
|
|
global @var{examplename}
|
3342 |
|
|
spawn $@var{examplename}
|
3343 |
|
|
expect @{
|
3344 |
|
|
-re "" @{@}
|
3345 |
|
|
@}
|
3346 |
|
|
@}
|
3347 |
|
|
foo_start
|
3348 |
|
|
@end smallexample
|
3349 |
|
|
@end cartouche
|
3350 |
|
|
|
3351 |
|
|
@item
|
3352 |
|
|
Create a directory whose name begins with your tool's name, to contain
|
3353 |
|
|
tests:
|
3354 |
|
|
|
3355 |
|
|
@example
|
3356 |
|
|
eg$ mkdir @var{example}.0
|
3357 |
|
|
@end example
|
3358 |
|
|
|
3359 |
|
|
@item
|
3360 |
|
|
Create a sample test file in @file{@var{example}.0}. Its name must end
|
3361 |
|
|
with @samp{.exp}; you can use @samp{first-try.exp} To begin with, just
|
3362 |
|
|
write there a line of Tcl code to issue a message:
|
3363 |
|
|
|
3364 |
|
|
@cartouche
|
3365 |
|
|
@smallexample
|
3366 |
|
|
send_user "Testing: one, two...\n"
|
3367 |
|
|
@end smallexample
|
3368 |
|
|
@end cartouche
|
3369 |
|
|
|
3370 |
|
|
@item
|
3371 |
|
|
Back in the @file{testsuite/} (top level) directory, run
|
3372 |
|
|
|
3373 |
|
|
@example
|
3374 |
|
|
eg$ configure
|
3375 |
|
|
@end example
|
3376 |
|
|
|
3377 |
|
|
(You may have to specify more of a path, if a suitable @code{configure}
|
3378 |
|
|
is not available in your execution path.)
|
3379 |
|
|
|
3380 |
|
|
@item
|
3381 |
|
|
You are now ready to triumphantly type @samp{make check} or
|
3382 |
|
|
@samp{runtest --tool @var{example}}. You should see something like this:
|
3383 |
|
|
|
3384 |
|
|
@cartouche
|
3385 |
|
|
@smallexample
|
3386 |
|
|
Test Run By rhl on Fri Jan 29 16:25:44 EST 1993
|
3387 |
|
|
|
3388 |
|
|
=== @var{example} tests ===
|
3389 |
|
|
|
3390 |
|
|
Running ./@var{example}.0/first-try.exp ...
|
3391 |
|
|
Testing: one, two...
|
3392 |
|
|
|
3393 |
|
|
=== @var{example} Summary ===
|
3394 |
|
|
|
3395 |
|
|
@end smallexample
|
3396 |
|
|
@end cartouche
|
3397 |
|
|
|
3398 |
|
|
There is no output in the summary, because so far the example does not
|
3399 |
|
|
call any of the procedures that establish a test outcome.
|
3400 |
|
|
|
3401 |
|
|
@item
|
3402 |
|
|
Begin writing some real tests. For an interactive tool, you should
|
3403 |
|
|
probably write a real exit routine in fairly short order; in any case,
|
3404 |
|
|
you should also write a real version routine soon.
|
3405 |
|
|
@end enumerate
|
3406 |
|
|
|
3407 |
|
|
@node Adding Targets
|
3408 |
|
|
@section Adding a target
|
3409 |
|
|
@cindex adding a target
|
3410 |
|
|
|
3411 |
|
|
DejaGnu has some additional requirements for target support, beyond the
|
3412 |
|
|
general-purpose provisions of Cygnus @code{configure}. @code{runtest}
|
3413 |
|
|
must actively communicate with the target, rather than simply generating
|
3414 |
|
|
or managing code for the target architecture. Therefore, each tool
|
3415 |
|
|
requires an initialization module for each target. For new targets, you
|
3416 |
|
|
must supply a few Tcl procedures to adapt DejaGnu to the target. This
|
3417 |
|
|
permits DejaGnu itself to remain target independent. @xref{Init
|
3418 |
|
|
Module,,Initialization module}, for a discussion of the naming
|
3419 |
|
|
conventions that enable DejaGnu to locate and use init files.
|
3420 |
|
|
|
3421 |
|
|
Usually the best way to write a new initialization module is to edit an
|
3422 |
|
|
existing initialization module; some trial and error will be required.
|
3423 |
|
|
If necessary, you can use the @samp{--debug} option to see what
|
3424 |
|
|
is really going on.
|
3425 |
|
|
|
3426 |
|
|
When you code an initialization module, be generous in printing
|
3427 |
|
|
information controlled by the @code{verbose} procedure (@pxref{DejaGnu
|
3428 |
|
|
Builtins, DejaGnu procedures}).
|
3429 |
|
|
|
3430 |
|
|
Most of the work is in getting the communications right. Communications
|
3431 |
|
|
code (for several situations involving IP networks or serial lines) is
|
3432 |
|
|
available in a DejaGnu library file, @file{lib/remote.exp}.
|
3433 |
|
|
@xref{DejaGnu Builtins,,DejaGnu Builtins}.
|
3434 |
|
|
|
3435 |
|
|
@c FIXME! Say something about Tcl debugger here.
|
3436 |
|
|
If you suspect a communication problem, try running the connection
|
3437 |
|
|
interactively from @code{expect}. (There are three ways of running
|
3438 |
|
|
@code{expect} as an interactive interpreter. You can run @code{expect}
|
3439 |
|
|
with no arguments, and control it completely interactively; or you can
|
3440 |
|
|
use @samp{expect -i} together with other command-line options and
|
3441 |
|
|
arguments; or you can run the command @code{interpreter} from any
|
3442 |
|
|
@code{expect} procedure. Use @code{return} to get back to the calling
|
3443 |
|
|
procedure (if any), or @code{return -tcl} to make the calling procedure
|
3444 |
|
|
itself return to its caller; use @code{exit} or end-of-file to leave
|
3445 |
|
|
@code{expect} altogether.) Run the program whose name is recorded in
|
3446 |
|
|
@samp{$connectmode}, with the arguments in @samp{$targetname}, to
|
3447 |
|
|
establish a connection. You should at least be able to get a prompt
|
3448 |
|
|
from any target that is physically connected.
|
3449 |
|
|
|
3450 |
|
|
@node Porting
|
3451 |
|
|
@section Porting to a new host
|
3452 |
|
|
@cindex porting to a new host
|
3453 |
|
|
|
3454 |
|
|
The task of porting DejaGnu is basically that of porting Tcl and
|
3455 |
|
|
@code{expect}. Tcl and @code{expect}, as distributed with DejaGnu, both
|
3456 |
|
|
use @code{autoconf}; they should port automatically to most Unix
|
3457 |
|
|
systems.
|
3458 |
|
|
|
3459 |
|
|
Once Tcl and @code{expect} are ported, DejaGnu should run. Most system
|
3460 |
|
|
dependencies are taken care of by using @code{expect} as the main
|
3461 |
|
|
command shell.
|
3462 |
|
|
|
3463 |
|
|
@node Installation
|
3464 |
|
|
@appendix Installing DejaGnu
|
3465 |
|
|
|
3466 |
|
|
@cindex host, explained
|
3467 |
|
|
@cindex target, explained
|
3468 |
|
|
@cindex DejaGnu configuration
|
3469 |
|
|
@cindex configuring DejaGnu
|
3470 |
|
|
Once you have the DejaGnu source unpacked and available, you must first
|
3471 |
|
|
configure the software to specify where it is to run (and the associated
|
3472 |
|
|
defaults); then you can proceed to installing it.
|
3473 |
|
|
|
3474 |
|
|
@menu
|
3475 |
|
|
* Configuring DejaGnu::
|
3476 |
|
|
* Installing DejaGnu::
|
3477 |
|
|
@end menu
|
3478 |
|
|
|
3479 |
|
|
@node Configuring DejaGnu
|
3480 |
|
|
@section Configuring the DejaGnu test driver
|
3481 |
|
|
|
3482 |
|
|
It is usually best to configure in a directory separate
|
3483 |
|
|
from the source tree, specifying where to find the source with the
|
3484 |
|
|
optional @samp{--srcdir} option to @code{configure}. DejaGnu uses the
|
3485 |
|
|
GNU @code{autoconf} to configure itself. For more info on using
|
3486 |
|
|
autoconf, read the GNU autoconf manual. To configure, execute the
|
3487 |
|
|
@file{configure} program, no other options are required. For an example,
|
3488 |
|
|
to configure in a seperate tree for objects, execute the configure
|
3489 |
|
|
script from the source tree like this:
|
3490 |
|
|
|
3491 |
|
|
@smallexample
|
3492 |
|
|
../dejagnu-1.3/configure
|
3493 |
|
|
@end smallexample
|
3494 |
|
|
|
3495 |
|
|
DejaGnu doesn't care at config time if it's for testing a native system
|
3496 |
|
|
or a cross system. That is determined at runtime by using the config
|
3497 |
|
|
files.
|
3498 |
|
|
|
3499 |
|
|
@cindex @code{prefix}, configure options
|
3500 |
|
|
@cindex @code{exec_prefix}, configure options.
|
3501 |
|
|
You may also want to use the @code{configure} option @samp{--prefix} to
|
3502 |
|
|
specify where you want DejaGnu and its supporting code installed. By
|
3503 |
|
|
default, installation is in subdirectories of @file{/usr/local}, but you
|
3504 |
|
|
can select any alternate directory @var{altdir} by including
|
3505 |
|
|
@samp{--prefix=@var{altdir}} on the @code{configure} command line.
|
3506 |
|
|
(This value is captured in the Makefile variables @code{prefix}
|
3507 |
|
|
and @code{exec_prefix}.)
|
3508 |
|
|
|
3509 |
|
|
@cindex auxiliary programs
|
3510 |
|
|
@cindex test suite distributions
|
3511 |
|
|
@cindex @code{make} builds part of tests
|
3512 |
|
|
Save for a small number of example tests, the DejaGnu distribution
|
3513 |
|
|
itself does not include any test suites; these are available separately.
|
3514 |
|
|
Test suites for the @sc{gnu} compiler (testing both GCC and G++) and for
|
3515 |
|
|
the @sc{gnu} binary utilities are distributed in parallel with the
|
3516 |
|
|
DejaGnu distribution (but packaged as separate files). The test suite
|
3517 |
|
|
for the @sc{gnu} debugger is distributed in parallel with each release
|
3518 |
|
|
of GDB itself, starting with GDB 4.9. After configuring the top-level
|
3519 |
|
|
DejaGnu directory, unpack and configure the test directories for the
|
3520 |
|
|
tools you want to test; then, in each test directory, run @code{make} to
|
3521 |
|
|
build auxiliary programs required by some of the tests.
|
3522 |
|
|
|
3523 |
|
|
@node Installing DejaGnu
|
3524 |
|
|
@section Installing DejaGnu
|
3525 |
|
|
|
3526 |
|
|
@cindex installing DejaGnu
|
3527 |
|
|
To install DejaGnu in your filesystem (either in @file{/usr/local}, or
|
3528 |
|
|
as specified by your @samp{--prefix} option to @code{configure}), execute
|
3529 |
|
|
|
3530 |
|
|
@example
|
3531 |
|
|
eg$ make install
|
3532 |
|
|
@end example
|
3533 |
|
|
|
3534 |
|
|
@noindent
|
3535 |
|
|
@samp{make install} does these things for DejaGnu:
|
3536 |
|
|
|
3537 |
|
|
@enumerate
|
3538 |
|
|
@item
|
3539 |
|
|
Look in the path specified for executables (@file{$exec_prefix}) for
|
3540 |
|
|
directories called @file{lib} and @file{bin}. If these directories do
|
3541 |
|
|
not exist, @samp{make install} creates them.
|
3542 |
|
|
|
3543 |
|
|
@item
|
3544 |
|
|
Create another directory in the @file{lib} directory, called
|
3545 |
|
|
@file{dejagnu}.
|
3546 |
|
|
|
3547 |
|
|
@item
|
3548 |
|
|
Copy the @code{runtest} shell script into @file{$exec_prefix/bin}.
|
3549 |
|
|
|
3550 |
|
|
@item
|
3551 |
|
|
Copy all the library files (used to support the framework) into
|
3552 |
|
|
@file{$exec_prefix/lib/dejagnu}.
|
3553 |
|
|
|
3554 |
|
|
@item
|
3555 |
|
|
Copy @file{runtest.exp} into @file{$exec_prefix/lib/dejagnu}. This is
|
3556 |
|
|
the main Tcl code implementing DejaGnu.
|
3557 |
|
|
|
3558 |
|
|
@end enumerate
|
3559 |
|
|
|
3560 |
|
|
Each test suite collection comes with simple installation instructions
|
3561 |
|
|
in a @file{README} file; in general, the test suites are designed to be
|
3562 |
|
|
unpacked in the source directory for the corresponding tool, and extract
|
3563 |
|
|
into a directory called @file{testsuite}.
|
3564 |
|
|
|
3565 |
|
|
@node Index
|
3566 |
|
|
@unnumbered Index
|
3567 |
|
|
|
3568 |
|
|
@printindex cp
|
3569 |
|
|
|
3570 |
|
|
@contents
|
3571 |
|
|
|
3572 |
|
|
@bye
|