diff options
Diffstat (limited to 'testsuite/systemtap.apps')
-rw-r--r-- | testsuite/systemtap.apps/mysql.exp | 344 | ||||
-rw-r--r-- | testsuite/systemtap.apps/postgres.exp | 166 | ||||
-rw-r--r-- | testsuite/systemtap.apps/stap-tcl.sh | 25 | ||||
-rw-r--r-- | testsuite/systemtap.apps/stap-tcl.stp | 30 | ||||
-rw-r--r-- | testsuite/systemtap.apps/tcl.exp | 67 | ||||
-rw-r--r-- | testsuite/systemtap.apps/xulrunner.exp | 133 |
6 files changed, 765 insertions, 0 deletions
diff --git a/testsuite/systemtap.apps/mysql.exp b/testsuite/systemtap.apps/mysql.exp new file mode 100644 index 00000000..efeffbae --- /dev/null +++ b/testsuite/systemtap.apps/mysql.exp @@ -0,0 +1,344 @@ +set test "mysql" + +# Test sdt support in mysql. + +global env + +if {! [info exists env(SYSTEMTAP_TEST_SDT)]} { + unsupported "mysql (\"SYSTEMTAP_TEST_SDT\" not in env)" + return +} + +########## Create /tmp/stap-mysql.stp ########## +set msdata "[pwd]/stap-mysql" +set mysqlrelease "mysql-5.4.1-beta" +set mysqldir "[pwd]/mysql/install/" +set testsuite "[pwd]" + +set fp [open "$testsuite/stap-mysql.stp" "w"] +puts $fp " +probe process(@1).mark(\"connection__start\") +{ + arg2 = user_string(\$arg2) + arg3 = user_string(\$arg3) + printf(\"%s %#x %s %s\\n\",\"connection__start\", \$arg1, arg2, arg3); +} +probe process(@1).mark(\"connection__done\") +{ + printf(\"%s %#x %#x \\n\",\"connection__done\", \$arg1, \$arg2); +} +probe process(@1).mark(\"command__start\") +{ + arg3 = user_string(\$arg3) + arg4 = user_string(\$arg4) + printf(\"%s %#x %#x %s %s\\n\",\"command__start\", \$arg1, \$arg2, arg3, arg4); +} +probe process(@1).mark(\"command__done\") +{ + printf(\"%s %#x\\n\",\"command__done\", \$arg1); +} +probe process(@1).mark(\"query__start\") +{ + arg1 = user_string(\$arg1) + arg3 = user_string(\$arg3) + arg4 = user_string(\$arg4) + arg5 = user_string(\$arg5) + printf(\"%s %s %#x %s %s %s\\n\",\"query__start\", arg1, \$arg2, + arg3, arg4, arg5); +} +probe process(@1).mark(\"query__done\") +{ + printf(\"%s %#x\\n\",\"query__done\", \$arg1); +} +probe process(@1).mark(\"query__parse__start\") +{ + arg1 = user_string(\$arg1) + printf(\"%s %s\\n\",\"query__parse__start\", arg1); +} +probe process(@1).mark(\"query__parse__done\") +{ + printf(\"%s %#x\\n\",\"query__parse__done\", \$arg1); +} +probe process(@1).mark(\"query__cache__hit\") +{ + arg1=user_string(\$arg1) + arg2=user_string(\$arg2) + printf(\"%s %s %s \\n\",\"query__cache__hit\", arg1, arg2); +} +probe process(@1).mark(\"query__cache__miss\") +{ + arg1=user_string(\$arg1) + printf(\"%s %s\\n\",\"query__cache__miss\", arg1); +} +probe process(@1).mark(\"query__exec__start\") +{ + arg1=user_string(\$arg1) + arg3=user_string(\$arg3) + arg4=user_string(\$arg4) + arg5=user_string(\$arg5) + printf(\"%s %s %#x %s %s %s\\n\",\"query__exec__start\", arg1, \$arg2, + arg3, arg4, arg5); +} +probe process(@1).mark(\"query__exec__done\") +{ + printf(\"%s %#x\\n\",\"query__exec__done\", \$arg1); +} +probe process(@1).mark(\"insert__row__start\") +{ + arg1=user_string(\$arg1) + arg2=user_string(\$arg2) + printf(\"%s %s %s \\n\",\"insert__row__start\", arg1, arg2); +} +probe process(@1).mark(\"insert__row__done\") +{ + printf(\"%s %#x\\n\",\"insert__row__done\", \$arg1); +} +probe process(@1).mark(\"update__row__start\") +{ + arg1=user_string(\$arg1) + arg2=user_string(\$arg2) + printf(\"%s %s %s \\n\",\"update__row__start\", arg1, arg2); +} +probe process(@1).mark(\"update__row__done\") +{ + printf(\"%s %#x\\n\",\"update__row__done\", \$arg1); +} +probe process(@1).mark(\"delete__row__start\") +{ + arg1=user_string(\$arg1) + arg2=user_string(\$arg2) + printf(\"%s %s %s \\n\",\"delete__row__start\", arg1, arg2); +} +probe process(@1).mark(\"delete__row__done\") +{ + printf(\"%s %#x\\n\",\"delete__row__done\", \$arg1); +} +probe process(@1).mark(\"handler__rdlock__start\") +{ + arg1=user_string(\$arg1) + arg2=user_string(\$arg2) + printf(\"%s %s %s \\n\",\"handler__rdlock__start\", arg1, arg2); +} +probe process(@1).mark(\"handler__wrlock__start\") +{ + arg1=user_string(\$arg1) + arg2=user_string(\$arg2) + printf(\"%s %s %s \\n\",\"handler__wrlock__start\", arg1, arg2); +} +probe process(@1).mark(\"handler__unlock__start\") +{ + arg1=user_string(\$arg1) + arg2=user_string(\$arg2) + printf(\"%s %s %s \\n\",\"handler__unlock__start\", arg1, arg2); +} +probe process(@1).mark(\"handler__rdlock__done\") +{ + printf(\"%s %#x\\n\",\"handler__rdlock__done\", \$arg1); +} +probe process(@1).mark(\"handler__wrlock__done\") +{ + printf(\"%s %#x\\n\",\"handler__wrlock__done\", \$arg1); +} +probe process(@1).mark(\"handler__unlock__done\") +{ + printf(\"%s %#x\\n\",\"handler__unlock__done\", \$arg1); +} +probe process(@1).mark(\"filesort__start\") +{ + printf(\"%s %#x %#x \\n\",\"filesort__start\", \$arg1, \$arg2); +} +probe process(@1).mark(\"filesort__done\") +{ + printf(\"%s %#x %#x \\n\",\"filesort__done\", \$arg1, \$arg2); +} +probe process(@1).mark(\"select__start\") +{ + arg1=user_string(\$arg1) + printf(\"%s %s\\n\",\"select__start\", arg1); +} +probe process(@1).mark(\"select__done\") +{ + printf(\"%s %#x %#x \\n\",\"select__done\", \$arg1, \$arg2); +} +probe process(@1).mark(\"insert__start\") +{ + arg1=user_string(\$arg1) + printf(\"%s %s\\n\",\"insert__start\", arg1); +} +probe process(@1).mark(\"insert__done\") +{ + printf(\"%s %#x %#x \\n\",\"insert__done\", \$arg1, \$arg2); +} +probe process(@1).mark(\"insert__select__start\") +{ + arg1=user_string(\$arg1) + printf(\"%s %s\\n\",\"insert__select__start\", arg1); +} +probe process(@1).mark(\"insert__select__done\") +{ + printf(\"%s %#x %#x \\n\",\"insert__select__done\", \$arg1, \$arg2); +} +probe process(@1).mark(\"update__start\") +{ + arg1=user_string(\$arg1) + printf(\"%s %s\\n\",\"update__start\", arg1); +} +probe process(@1).mark(\"update__done\") +{ + printf(\"%s %#x %#x %#x\\n\",\"update__done\", \$arg1, \$arg2, \$arg3); +} +probe process(@1).mark(\"multi__update__start\") +{ + arg1=user_string(\$arg1) + printf(\"%s %s\\n\",\"multi__update__start\", arg1); +} +probe process(@1).mark(\"multi__update__done\") +{ + printf(\"%s %#x %#x %#x\\n\",\"multi__update__done\", \$arg1, \$arg2, \$arg3); +} +probe process(@1).mark(\"delete__start\") +{ + arg1=user_string(\$arg1) + printf(\"%s %s\\n\",\"delete__start\", arg1); +} +probe process(@1).mark(\"delete__done\") +{ + printf(\"%s %#x %#x \\n\",\"delete__done\", \$arg1, \$arg2); +} +probe process(@1).mark(\"multi__delete__start\") +{ + arg1=user_string(\$arg1) + printf(\"%s %s\\n\",\"multi__delete__start\", arg1); +} +probe process(@1).mark(\"multi__delete__done\") +{ + printf(\"%s %#x %#x \\n\",\"multi__delete__done\", \$arg1, \$arg2); +} +probe process(@1).mark(\"net__read__start\") +{ + printf(\"%s \\n\",\"net__read__start\"); +} +probe process(@1).mark(\"net__read__done\") +{ + printf(\"%s %#x %#x \\n\",\"net__read__done\", \$arg1, \$arg2); +} +probe process(@1).mark(\"net__write__start\") +{ + printf(\"%s %#x\\n\",\"net__write__start\", \$arg1); +} +probe process(@1).mark(\"net__write__done\") +{ + printf(\"%s %#x\\n\",\"net__write__done\", \$arg1); +} +" +close $fp + +########## Begin /tmp/stap-mysql.sh ########## +set fp [open "$testsuite/stap-mysql.sh" "w"] +puts $fp " +##### begin run_tests ##### +function run_tests \{ +/bin/rm -rf $testsuite/stap-mysql +$mysqldir/bin/mysql_install_db --basedir=$mysqldir --datadir=$msdata + +(cd $mysqldir/mysql-test +# wait until mysql is running +MOD=stapsdt_\$(date +%j%k%M%N | sed 's/ //') +$env(SYSTEMTAP_PATH)/stap -m \$MOD -c \"$mysqldir/libexec/mysqld --basedir=$mysqldir --datadir=$msdata --log-error=$msdata/mysql.log --pid-file=$msdata/mysql.pid --socket=$msdata/mysql.sock\" $testsuite/stap-mysql.stp $mysqldir/libexec/mysqld >$testsuite/stap-mysql-markers.log 2>&1 & +STAPPID=\$! + +for i in \$(seq 0 10) ; do + if $mysqldir/bin/mysqladmin ping --socket=$msdata/mysql.sock + then break; + fi + sleep 5 +done + +for i in select join insert query +do + echo '##### ' \$i + ./mysql-test-run.pl --force --extern socket=$msdata/mysql.sock \ + --tmpdir=/tmp/,mysql --vardir=/tmp/,mysql --do-test=\$i +done > $testsuite/stap-mysql.log +) + +ACQUIRE=\$(grep 'handler__unlock__start' $testsuite/stap-mysql-markers.log | wc -l) +RELEASE=\$(grep 'handler__unlock__done' $testsuite/stap-mysql-markers.log | wc -l) +COMMAND=\$(grep 'command__start' $testsuite/stap-mysql-markers.log | wc -l) +QUERY=\$(grep 'query__start' $testsuite/stap-mysql-markers.log | wc -l) +RDLOCK=\$(grep 'handler__rdlock__start' $testsuite/stap-mysql-markers.log | wc -l) +SELECT=\$(grep 'select_start' $testsuite/stap-mysql-markers.log | wc -l) +OKAY=\$(grep 'All.*tests were successful' $testsuite/stap-mysql.log | wc -l) + +echo ACQUIRE=\$ACQUIRE RELEASE=\$RELEASE COMMAND=\$COMMAND QUERY=\$QUERY RDLOCK=\$RDLOCK SELECT=\$SELECT OKAY=\$OKAY +if \[ \$ACQUIRE -gt 10000 -a \$RELEASE -gt 1000 -a \$COMMAND -gt 12000 -a \$QUERY -gt 13000 -a \$RDLOCK -gt 3000 \] ; then + echo PASS: mysql markers \$1 +else + echo FAIL: mysql markers \$1 +fi + +if \[ \$OKAY -eq 4 \] ; then + echo PASS: mysql tests \$1 +else + echo FAIL: mysql tests \$1 +fi + +$mysqldir/bin/mysqladmin shutdown -u root --socket=stap-mysql/mysql.sock +kill \$STAPPID +\} +##### end run_tests ##### + +if \[ ! -r $mysqlrelease.tar.gz \] ; then +wget http://dev.mysql.com/get/Downloads/MySQL-5.4/$mysqlrelease.tar.gz/from/ftp://mirror.services.wisc.edu/mirrors/mysql/ +fi + +if \[ ! -d mysql/src \] ; then +tar -x -z -f $mysqlrelease.tar.gz +mkdir mysql +mv $mysqlrelease mysql/src +fi + +if \[ ! -f mysql/install/bin/mysql \] ; then +cd mysql +mkdir bld +cd bld +# Force the use of dtrace +sed -i -e 's/HAVE_DTRACE_DASH_G=\"no\"/HAVE_DTRACE_DASH_G=\"yes\"/' ../src/configure +../src/configure --enable-dtrace --prefix=$mysqldir +for i in \$(find . -name Makefile) ; do + sed -i -e 's/^CXXFLAGS =/& -g/' \$i +done + +make -j2 +cp ./abi_check.out ../../src/include/mysql.h.pp +make -j2 +make install +fi + +run_tests uprobe +" +########## End /tmp/stap-mysql.sh ########## +close $fp + +########## /tmp/stap-mysql.sh does most of the work ########## +verbose -log Running mysql testsuite +spawn sh stap-mysql.sh 2>&1 +expect { + -timeout 1000 + -re {FAIL: [a-z_ ]+} { regexp " .*$" $expect_out(0,string) s; + fail "$s"; exp_continue } + -re {PASS: [a-z_ ]+} { regexp " .*$" $expect_out(0,string) s; + pass "$s"; exp_continue } + -re {UNSUPPORTED: [a-zA-Z_/: ]+} { regexp " .*$" $expect_out(0,string) s; + verbose -log "$s" + unsupported "$s"; exp_continue } + timeout { fail "$test (timeout)" } + eof { } +} + +if { $verbose == 0 } { +catch {exec rm -rf $msdata} +catch {exec rm -rf $testsuite/stap-mysql.stp $testsuite/stap-mysql.log \ + $testsuite/stap-mysql-markers.log $testsuite/stap-mysql.sh $mysqlrelease.tar.gz} +catch {exec rm -rf mysql} +} diff --git a/testsuite/systemtap.apps/postgres.exp b/testsuite/systemtap.apps/postgres.exp new file mode 100644 index 00000000..2d58a54f --- /dev/null +++ b/testsuite/systemtap.apps/postgres.exp @@ -0,0 +1,166 @@ +set test "postgres" + +# Test sdt support in postgres. + +global env + +if {! [info exists env(SYSTEMTAP_TEST_SDT)]} { + unsupported "postgres (\"SYSTEMTAP_TEST_SDT\" not in env)" + return +} + +########## Create /tmp/stap-postgres.stp ########## +set postgresbuild "[pwd]/postgresql-8.3.6/bld" +set postgresdir "[pwd]/postgresql-8.3.6/install/" +set pgdata "/tmp/stap-postgres" + + +set fp [open "$pgdata.stp" "w"] +puts $fp " +probe process(\"$postgresdir/bin/postgres\").mark(\"transaction__start\") +{ + printf(\"%s %#x\\n\", \$\$name, \$arg1); +} +probe process(\"$postgresdir/bin/postgres\").mark(\"transaction__commit\") +{ + printf(\"%s %#x\\n\", \$\$name, \$arg1); +} +probe process(\"$postgresdir/bin/postgres\").mark(\"transaction__abort\") +{ + printf(\"%s %#x\\n\", \$\$name, \$arg1); +} +probe process(\"$postgresdir/bin/postgres\").mark(\"lock__startwait\") +{ + printf(\"%s %#x %#x\\n\", \$\$name, \$arg1, \$arg2); +} +probe process(\"$postgresdir/bin/postgres\").mark(\"lock__endwait\") +{ + printf(\"%s %#x %#x\\n\", \$\$name, \$arg1, \$arg2); +} +probe process(\"$postgresdir/bin/postgres\").mark(\"lwlock__endwait\") +{ + printf(\"%s %#x %#x\\n\", \$\$name, \$arg1, \$arg2); +} +probe process(\"$postgresdir/bin/postgres\").mark(\"lwlock__acquire\") +{ + printf(\"%s %#x %#x\\n\", \$\$name, \$arg1, \$arg2); +} +probe process(\"$postgresdir/bin/postgres\").mark(\"lwlock__condacquire__fail\") +{ + printf(\"%s %#x %#x\\n\", \$\$name, + \$arg1, \$arg2); +} +probe process(\"$postgresdir/bin/postgres\").mark(\"lwlock__condacquire\") +{ + printf(\"%s %#x %#x\\n\", \$\$name, \$arg1, \$arg2); +} +probe process(\"$postgresdir/bin/postgres\").mark(\"lwlock__release\") +{ + printf(\"%s %#x\\n\", \$\$name, \$arg1); +} +" +close $fp + +########## Begin /tmp/stap-postgres.sh ########## +set fp [open "$pgdata.sh" "w"] +puts $fp " +function run_tests \{ +/bin/rm -rf $pgdata +$postgresdir/bin/initdb $pgdata + +which stap +$env(SYSTEMTAP_PATH)/stap -m \$(date +stapsdt_%j%k%M%N | sed 's/ //') -c \"$postgresdir/bin/postgres -D $pgdata\" $pgdata.stp >$pgdata-markers.log 2>&1 & +STAPPID=\$! + +# wait until postgres is running +for i in \$(seq 0 10) ; do + if $postgresdir/bin/pg_ctl status -D $pgdata + then break; + fi + sleep 5 +done + +(cd $postgresbuild/src/test/regress/ + make installcheck > $pgdata.log 2>&1) + +ACQUIRE=\$(grep 'lwlock__acquire 0x\[0-9\]* 0x\[0-9\]*' $pgdata-markers.log | wc -l) +RELEASE=\$(grep 'lwlock__release 0x\[0-9\]*' $pgdata-markers.log | wc -l) +START=\$(grep 'transaction__start 0x\[0-9\]*' $pgdata-markers.log | wc -l) +COMMIT=\$(grep 'transaction__commit 0x\[0-9\]*' $pgdata-markers.log | wc -l) +OKAY=\$(grep 'test .*ok' $pgdata.log | wc -l) + +echo lwlock__acquire=\$ACQUIRE lwlock__release=\$RELEASE transaction__start=\$START transaction__commit=\$COMMIT test-ok=\$OKAY +: 44873 75325 591 489 0 + +if \[ \$ACQUIRE -gt 40000 -a \$RELEASE -gt 70000 -a \$START -gt 500 -a \$COMMIT -gt 400 \] ; then + echo PASS: postgres tests \$1 +else + echo FAIL: postgres tests \$1 +fi + +if \[ \$OKAY -gt 100 \] ; then + echo PASS: postgres markers \$1 +else + echo FAIL: postgres markers \$1 +fi + +/usr/local/pgsql/bin/pg_ctl stop -D $pgdata +kill \$STAPPID +\} + +if \[ ! -r postgresql-8.3.6.tar.bz2 \] ; then +wget http://wwwmaster.postgresql.org/redir/198/h/source/v8.3.6/postgresql-8.3.6.tar.bz2 +fi + +if \[ ! -d $postgresbuild/src/backend \] ; then +tar -x -f postgresql-8.3.6.tar.bz2 +fi + +cd postgresql-8.3.6/ +mkdir bld;cd bld +../configure --enable-dtrace --prefix=$postgresdir +# sed -i -e 's/ifeq (\$(PORTNAME), solaris)/ifeq (\$(enable_dtrace), yes)/' src/backend/Makefile +sed -i -e 's/^CFLAGS = -O2.*\$/& -g -DEXPERIMENTAL_UTRACE_SDT/' src/Makefile.global +make +make install +run_tests utrace + +sed -i -e 's/UTRACE/KPROBE/' src/Makefile.global +(cd src/backend/utils/ + make clean) +make +make install +run_tests kprobe + +sed -i -e 's/-DEXPERIMENTAL_KPROBE_SDT//' src/Makefile.global +(cd src/backend/utils/ + make clean) +make +make install +run_tests uprobe +" +########## End /tmp/stap-postgres.sh ########## +close $fp + +########## /tmp/stap-postgres.sh does most of the work ########## +verbose -log Running postgres testsuite +spawn sh $pgdata.sh 2>&1 +expect { + -timeout 1000 + -re {FAIL: [a-z_ ]+} { regexp " .*$" $expect_out(0,string) s; + fail "$s"; exp_continue } + -re {PASS: [a-z_ ]+} { regexp " .*$" $expect_out(0,string) s; + pass "$s"; exp_continue } + -re {UNSUPPORTED: [a-zA-Z_/: ]+} { regexp " .*$" $expect_out(0,string) s; + verbose -log "$s" + unsupported "$s"; exp_continue } + timeout { fail "$test (timeout)" } + eof { } +} + +if { $verbose == 0 } { +catch {exec rm -rf $pgdata} +catch {exec rm -rf $pgdata.stp $pgdata.log \ + $pgdata-markers.log $pgdata.sh postgresql-8.3.6.tar.bz2} +catch {exec rm -rf postgresql-8.3.6} +} diff --git a/testsuite/systemtap.apps/stap-tcl.sh b/testsuite/systemtap.apps/stap-tcl.sh new file mode 100644 index 00000000..919f632d --- /dev/null +++ b/testsuite/systemtap.apps/stap-tcl.sh @@ -0,0 +1,25 @@ +#! /bin/sh + +set -e + +tclreleasemajor="8.6" +tclrelease="8.6b1" +tcldir=`pwd`/tcl/install/ + +mkdir -p tcl + +if [ ! -r tcl$tclrelease-src.tar.gz ] ; then + wget http://sourceforge.net/projects/tcl/files/Tcl/$tclrelease/tcl$tclrelease-src.tar.gz/download +fi + +if [ ! -d tcl/src ] ; then + tar -x -z -f tcl$tclrelease-src.tar.gz + mv tcl$tclrelease tcl/src +fi + +cd tcl/src/unix +env CPPFLAGS="-I$SYSTEMTAP_INCLUDES" CFLAGS="-g -O2" ./configure --prefix=$tcldir --enable-dtrace +make -j2 +make install + +exit 0 diff --git a/testsuite/systemtap.apps/stap-tcl.stp b/testsuite/systemtap.apps/stap-tcl.stp new file mode 100644 index 00000000..d3293b09 --- /dev/null +++ b/testsuite/systemtap.apps/stap-tcl.stp @@ -0,0 +1,30 @@ +global counts + +probe process(@1).mark("*") { + counts[$$name]<<<1 # PR10878; check also $$parms length +} + +function judge(name, minvalue) { + value = @count(counts[name]) + printf("%s %s %d %d\n", ((value>=minvalue)?"OK":"KO"), name, value, minvalue) +} + +probe end,error { + /* foreach (name in counts-) { + printf("== %s %d\n", name, @count(counts[name])) + } */ + judge("proc__entry", 9000) + judge("proc__return", 9000) + judge("proc__result", 9000) + judge("proc__args", 9000) + judge("proc__info", 9000) + judge("cmd__entry", 37000) + judge("cmd__return", 37000) + judge("cmd__result", 37000) + judge("cmd__args", 3700 /* not 37000? */) + judge("cmd__info", 37000) + judge("inst__start", 542000) + judge("inst__done", 542000) + judge("obj__create", 723000) + judge("obj__free", 704000) +} diff --git a/testsuite/systemtap.apps/tcl.exp b/testsuite/systemtap.apps/tcl.exp new file mode 100644 index 00000000..bfcf2239 --- /dev/null +++ b/testsuite/systemtap.apps/tcl.exp @@ -0,0 +1,67 @@ +set test "tcl" + +# Test sdt support in tcl. + +global env + +if {! [info exists env(SYSTEMTAP_TESTAPPS)] || ( + ! [string match "tcl" $env(SYSTEMTAP_TESTAPPS)] && + ! [string match "all" $env(SYSTEMTAP_TESTAPPS)])} { + untested "$test sdt app" + return +} + +########## Create /tmp/stap-tcl.stp ########## +set tclreleasemajor "8.6" +set tclrelease "8.6b1" +set tcldir "[pwd]/tcl/install/" +set testsuite "[pwd]" + +verbose -log "Building tcl" +set test "tcl${tclreleasemajor} build" +set rc [catch {exec sh $srcdir/$subdir/stap-tcl.sh 2>@ stdout} out] +if {$rc != 0} { + clone_output $out + fail $test + return +} else { + pass $test +} + +set test "stap-tcl.stp compilation" +set rc [catch {exec stap -DMAXSKIPPED=8024 -t -p4 $srcdir/$subdir/stap-tcl.stp tcl/install/lib/libtcl${tclreleasemajor}.so} out] +clone_output $out +if {$rc != 0} { + fail $test + return +} else { + pass $test +} + +set test "stap-tcl.stp execution" +if {![installtest_p]} { + untested $test + return +} + +set ok 0 +set ko 0 +set lines 0 +spawn stap -DMAXSKIPPED=8024 -t -c "tcl/install/bin/tclsh${tclreleasemajor} tcl/src/tests/all.tcl > tcl-test.out" $srcdir/$subdir/stap-tcl.stp tcl/install/lib/libtcl${tclreleasemajor}.so +expect { + -timeout 1000 + -re {^OK [^\r\n]*[\r\n]} { incr ok; exp_continue } + -re {^KO [^\r\n]*[\r\n]} { incr ko; exp_continue } + -re {^ERROR[^\r\n]*[\r\n]} { incr ko; exp_continue } + -re {^[^\r\n]*[\r\n]} { incr lines; exp_continue } + timeout { fail "$test (timeout)" } + eof { } +} +catch {close}; catch {wait} + +if {$ok == 14 && $ko == 0} { + pass "$test ($ok $ko $lines)" +} else { + fail "$test ($ok $ko $lines)" +} + diff --git a/testsuite/systemtap.apps/xulrunner.exp b/testsuite/systemtap.apps/xulrunner.exp new file mode 100644 index 00000000..be2db0c7 --- /dev/null +++ b/testsuite/systemtap.apps/xulrunner.exp @@ -0,0 +1,133 @@ +set test "xulrunner" + +# Test sdt support in xulrunner. + +global env + +if {! [info exists env(SYSTEMTAP_TEST_SDT)]} { + unsupported "xulrunner (\"SYSTEMTAP_TEST_SDT\" not in env)" + return +} + +########## Create /tmp/stap-xul.stp ########## +set xulrelease "1.9.1.3" +set xuldir "[pwd]/xul/" +set testsuite "[pwd]" + +set fp [open "$testsuite/stap-xul.stp" "w"] +puts $fp " +global funcinfo +global objinfo + +probe process(@1).mark(\"function__info\") +{ + file = user_string (\$arg1) + func = user_string (\$arg3) + funcinfo\[file,func\] <<< 1 +} + +probe process(@1).mark(\"object__create\") +{ + file = user_string (\$arg1) + class = user_string (\$arg2) + objinfo\[file,class\] <<< 1 +} + +probe end +{ + foreach (\[i,j\] in funcinfo+) + { + printf (\"probes: %-20s %-25s %d\\n\", substr(i,strlen(i)-20,strlen(i)), j, @count(funcinfo\[i,j\])) + } + foreach (\[i,j\] in objinfo+) + { + printf (\"probes: %-20s %-25s %d\\n\", substr(i,strlen(i)-20,strlen(i)), j, @count(funcinfo\[i,j\])) + } +} +" +close $fp + +########## Begin /tmp/stap-xul.sh ########## +set fp [open "$testsuite/stap-xul.sh" "w"] +puts $fp " +##### begin run_tests ##### +function run_tests \{ +cd $testsuite/xul/bld/js/src +pwd +for i in call trace-test math-trace-tests ; do +$env(SYSTEMTAP_PATH)/stap -c \"./js $xuldir/src/js/src/\$i.js\" $testsuite/stap-xul.stp ./js +done | tee $testsuite/stap-xul-markers.log +PROBES=\$(grep 'probes: ' $testsuite/stap-xul-markers.log | wc -l) +TESTS=\$(grep '-FAIL' $testsuite/stap-xul-markers.log) +echo PROBES=\$PROBES TESTS=\$TESTS + +if \[ \$PROBES -gt 400 \] ; then + echo PASS: xulrunner javascript markers \$1 +else + echo FAIL: xulrunner javascript markers \$1 +fi + +if \[ -z \$TESTS \] ; then + echo PASS: xulrunner javascript testsuite \$1 +else + echo FAIL: xulrunner javascript testsuite \$1 +fi + +\} +##### end run_tests ##### + +if \[ ! -r xulrunner-$xulrelease-source.tar \] ; then +wget ftp://ftp.mozilla.org/pub/mozilla.org/xul/releases/$xulrelease/source/xulrunner-$xulrelease-source.tar.bz2 +bunzip2 xulrunner-$xulrelease-source.tar.bz2 +fi + +if \[ ! -d xul/src \] ; then +tar -x -f xulrunner-$xulrelease-source.tar +mkdir xul +xulrelease=$xulrelease +mv mozilla-\${xulrelease%.\[0-9\]} xul/src +fi + +if \[ ! -f xul/bld/js/src/js \] ; then +mkdir xul/bld +cd xul/bld +if rpm -q java-1.6.0-openjdk ; then : +else + echo FAIL: Need java-1.6.0-openjdk-devel + exit +fi +JAVA_HOME=/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0.x86_64 \ +CXXFLAGS='-g -I$env(SYSTEMTAP_INCLUDES)' \ +CFLAGS='-g -I$env(SYSTEMTAP_INCLUDES)' \ +PATH=$env(SYSTEMTAP_PATH)/:\$PATH \ +../src/configure --prefix=$xuldir --enable-dtrace --enable-application=xulrunner +J=\$(getconf _NPROCESSORS_CONF) +make -j \$J +fi + +run_tests uprobe +" +########## End /tmp/stap-xul.sh ########## +close $fp + +########## /tmp/stap-xul.sh does most of the work ########## +verbose -log Running xul testsuite +spawn sh stap-xul.sh 2>&1 +expect { + -timeout 10000 + -re {FAIL: [a-z_ ]+} { regexp " .*$" $expect_out(0,string) s; + fail "$s"; exp_continue } + -re {PASS: [a-z_ ]+} { regexp " .*$" $expect_out(0,string) s; + pass "$s"; exp_continue } + -re {UNSUPPORTED: [a-zA-Z_/: ]+} { regexp " .*$" $expect_out(0,string) s; + verbose -log "$s" + unsupported "$s"; exp_continue } + timeout { fail "$test (timeout)" } + eof { } +} + +if { $verbose == 0 } { +catch {exec rm -rf $testsuite/stap-xul.stp xulrunner-$xulrelease-source.tar \ + $testsuite/stap-xul-markers.log $testsuite/stap-xul.sh } +catch {exec rm -rf xul} +} |