summaryrefslogtreecommitdiffstats
path: root/testsuite/lib/systemtap.exp
diff options
context:
space:
mode:
authorDave Brolley <brolley@redhat.com>2008-08-08 15:11:36 -0400
committerDave Brolley <brolley@redhat.com>2008-08-08 15:11:36 -0400
commitd5658775da9fa0ac792eb3f874df9f7c4d60de7e (patch)
treef20be52c08db77ff67bf3a448a76339aa5e4c98c /testsuite/lib/systemtap.exp
parenta4cc1d081ede55ed6c743147d62fcc3519f73a71 (diff)
downloadsystemtap-steved-d5658775da9fa0ac792eb3f874df9f7c4d60de7e.tar.gz
systemtap-steved-d5658775da9fa0ac792eb3f874df9f7c4d60de7e.tar.xz
systemtap-steved-d5658775da9fa0ac792eb3f874df9f7c4d60de7e.zip
Start/stop the systemtap server from systemtap.exp and not in the top level Makefile.
Diffstat (limited to 'testsuite/lib/systemtap.exp')
-rw-r--r--testsuite/lib/systemtap.exp50
1 files changed, 48 insertions, 2 deletions
diff --git a/testsuite/lib/systemtap.exp b/testsuite/lib/systemtap.exp
index db5c1587..8b533303 100644
--- a/testsuite/lib/systemtap.exp
+++ b/testsuite/lib/systemtap.exp
@@ -37,7 +37,7 @@ proc print_systemtap_version {} {
proc setup_systemtap_environment {} {
- global srcdir prefix env
+ global srcdir prefix env server_pid
# need an absolute SRCDIR for the top-level src/ tree
# XXX: or, we could change nearby uses of ${SRCDIR}/testsuite to ${SRCDIR}
@@ -51,6 +51,41 @@ proc setup_systemtap_environment {} {
# make check and sudo make check don't clobber each other.
set env(SYSTEMTAP_DIR) [exec pwd]/.systemtap-[exec whoami]
+ # Find or start a systemtap server, if requested.
+ if {[use_server_p]} then {
+ print "Testing using a systemtap server"
+
+ # Server management scripts are installed if this is an install test, otherwise
+ # in the source directory. Make sure they are on the $PATH.
+ if {! [installtest_p]} then {
+ set env(PATH) "$srcdir/..:$env(PATH)"
+ }
+
+ # Try to find or start the server.
+ set server_pid [exec stap-find-or-start-server]
+ if { $server_pid == -1 } then {
+ print "Cannot find or start a systemtap server"
+ set server_pid 0
+ # TODO: How do we abort here?
+ } elseif { $server_pid == 0 } then {
+ print "A compatible systemtap server is already available"
+ } else {
+ print "Started a systemtap server as PID==$server_pid"
+ }
+
+ # Make a copy of 'stap-client' as 'stap' and make sure it's at the
+ # beginning of the $PATH. Do this after starting the server so that
+ # The server does not call this instance of 'stap'
+ set client_path [exec pwd]/net
+ exec /bin/mkdir -p $client_path
+ if {[installtest_p]} then {
+ exec /bin/cp -p [exec which stap-client] $client_path/stap
+ } else {
+ exec /bin/cp -p $srcdir/../stap-client $client_path/stap
+ }
+ set env(PATH) "$client_path:$env(PATH)"
+ }
+
# PATH, SYSTEMTAP_TAPSET, SYSTEMTAP_RUNTIME, LD_LIBRARY_PATH are already set.
foreach var {PATH STAP SRCDIR SYSTEMTAP_TAPSET SYSTEMTAP_RUNTIME SYSTEMTAP_DIR LD_LIBRARY_PATH} {
if [info exists env($var)] {
@@ -84,7 +119,18 @@ get_system_info
proc systemtap_init {args} {}
proc systemtap_version {} {}
-proc systemtap_exit {} {}
+
+proc systemtap_exit {} {
+ global server_pid
+
+ # Stop the stap server, if we started it.
+ if {[use_server_p]} then {
+ if { $server_pid != 0 } then {
+ print "Stopping the systemtap server with PID==$server_pid"
+ exec stap-stop-server $server_pid
+ }
+ }
+}
proc stap_run_batch {args} {