CI Gating: Introduce dist-git tests

Resolves: #2041526
This commit is contained in:
Martin Cermak 2022-01-17 17:48:17 +01:00
parent 6d84e663c4
commit 2b680506d8
23 changed files with 860 additions and 0 deletions

1
.fmf/version Normal file
View File

@ -0,0 +1 @@
1

11
plans/ci.fmf Normal file
View File

@ -0,0 +1,11 @@
summary: CI Gating Plan
discover:
how: fmf
directory: tests
prepare:
how: install
exclude:
- glibc-headers-x86
- glibc-headers-s390
execute:
how: beakerlib

7
plans/ci/prepare/prepare.fmf Executable file
View File

@ -0,0 +1,7 @@
summary: Setup task
prepare:
script: ./plans/ci/prepare/prepare.sh
recommend:
- koji
- bind-utils
- avahi-tools

35
plans/ci/prepare/prepare.sh Executable file
View File

@ -0,0 +1,35 @@
#!/bin/bash
export DEBUGINFOD_URLS="https://debuginfod.fedoraproject.org/ $DEBUGINFOD_URLS"
export DEBUGINFOD_TIMEOUT=300
# On Rawhide, the running kernel packages won't probably be avail in
# configured repos. Debuginfo isn't a problem, we access that using
# the debuginfod.
__install_deps ()
{
TMPD=$(mktemp -d)
pushd $TMPD
koji download-build --rpm kernel-`uname -r` --arch `uname -i`
koji download-build --rpm kernel-devel-`uname -r` --arch `uname -i`
koji download-build --rpm kernel-modules-`uname -r` --arch `uname -i`
dnf -y install kernel{,-devel,-modules}-`uname -r`.rpm
popd
rm -rf $TMPD
}
set -xe
# Install needed packages
stap-prep || __install_deps
stap-prep
# Report installed packages
stap-report
# Set up SELinux so that it allows for userspace probing
setsebool allow_execmod on
setsebool allow_execstack on
setsebool deny_ptrace off
set +xe

View File

@ -0,0 +1,14 @@
summary: suns small tests
description: ''
contact: Martin Cermak <mcermak@redhat.com>
component:
- systemtap
test: ./runtest.sh
framework: beakerlib
recommend:
- systemtap
- systemtap-testsuite
- perf
duration: 10m
extra-summary: /tools/systemtap/Regression/small-tests
extra-task: /tools/systemtap/Regression/small-tests

View File

@ -0,0 +1,183 @@
#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /tools/systemtap/Regression/small-tests
# Description: suns small tests
# Author: Martin Cermak <mcermak@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2014 Red Hat, Inc.
#
# This program is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 2 of
# the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see http://www.gnu.org/licenses/.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1
PACKAGE="systemtap"
export DEBUGINFOD_URLS="https://debuginfod.fedoraproject.org/ $DEBUGINFOD_URLS"
export DEBUGINFOD_TIMEOUT=300
_arch=$(arch)
function perf_probe_failed ()
{
probe=$1
perf probe -d $probe ||:
perf probe --add $probe
retval=$?
test $retval -eq 0 && \
rlLogInfo "Running perf probe --add $probe PASSED" || \
rlLogInfo "Running perf probe --add $probe FAILED"
perf probe -d $probe ||:
if test $retval -eq 0; then
return 1
else
return 0
fi
}
function perf_found_none_of ()
{
ret=0
for f in "$@"; do
perf_probe_failed $f || ret=1
done
return $ret
}
rlJournalStart
# Check the environment ---------------------------------------
rlPhaseStart WARN "Check the environment"
rlRun "rpm -qa | egrep '^(kernel|systemtap|perf)' | sort"
rlRun "uname -r"
rlRun "perf --version"
rlPhaseEnd
# bz1162939 ---------------------------------------------------
(
perf_probe_failed "vfs_read" && exit
rlPhaseStart FAIL "test 1 bz1162939"
# At this point a weird problem shows up: sometimes the first
# systemtap invocation fails for some reason, but subsequent
# invocations succeed. Can't reproduce this manually:
rlRun "stap -vvvp4 -e 'probe vfs.read{println(\"hit\")}'" 0,1
sleep 30
rlRun "stap -vvvp4 -e 'probe vfs.read{println(\"hit\")}'" 0,1
sleep 30
rlRun "stap -e 'probe vfs.read{println(\"hit\")}' -c 'head -1 /etc/hosts'"
rlPhaseEnd
)
# bz1119335 ---------------------------------------------------
rlPhaseStart FAIL "test 2 bz1119335"
rlRun "man 8 staprun | grep 'STAP_FIPS_OVERRIDE'"
rlPhaseEnd
# bz1153673 ---------------------------------------------------
rlPhaseStart FAIL "test 3 bz1153673"
_tested=0
for _pkg in $( rpm -qa | grep systemtap-testsuite ); do
for _tc in $( rpm -ql $_pkg | grep 'alias_suffixes.stp$' ); do
stap -p4 $_tc && p="" || p="-P"
rlRun "stap $p -p4 $_tc"
_tested=1
done
done
[[ $_tested -eq 0 ]] && rlFail "Not tested"
rlPhaseEnd
# bz1160837 ---------------------------------------------------
(
perf_probe_failed "sd_init_command" && exit
rlPhaseStart FAIL "test 4 bz1160837"
_tested=0
_prologue_search=''
for _pkg in $( rpm -qa | grep systemtap-testsuite ); do
for _tc in $( rpm -ql $_pkg | grep 'iostat-scsi.stp$' ); do
test $_arch = ppc64le && _prologue_search='-P'
rlRun "stap -g $_prologue_search $_tc 1 -c 'sleep 1'"
_tested=1
done
done
[[ $_tested -eq 0 ]] && rlFail "Not tested"
rlPhaseEnd
)
# bz1203808 ---------------------------------------------------
rlPhaseStart FAIL "test 5 bz1203808"
_tested=0
for _pkg in $( rpm -qa | grep systemtap-testsuite ); do
for _tc in $( rpm -ql $_pkg | grep 'vfs-all-probes.stp$' ); do
stap -wp4 $_tc && p="" || p="-P"
rlRun "stap $p -w -p4 $_tc"
_tested=1
done
done
[[ $_tested -eq 0 ]] && rlFail "Not tested"
rlPhaseEnd
# bz1269062 ---------------------------------------------------
rlPhaseStart FAIL "test 6 bz1269062"
rlRun "stap -c sync --suppress-handler-errors -e 'probe ioscheduler.elv_add_request{println(elevator_name) exit()}'"
rlPhaseEnd
# bz528792 ---------------------------------------------------
(
# Not relevant on rhel-9 because of kernel commit cad6967ac10843a70842cd39c7b53412901dd21f that removes
# _do_fork() and replaces it with new kernel_clone()
perf_found_none_of "_do_fork" "do_fork" "sys_clone" && exit
rlPhaseStart FAIL "test 7 bz528792"
if test $_arch = ppc64le; then
# https://bugzilla.redhat.com/show_bug.cgi?id=1652740#c4 - We can not reach any function parameters, namely $clone_flags
rlRun "stap -ve 'probe kernel.function(\"_do_fork\")!, kernel.function(\"do_fork\")!, kernel.function(\"sys_clone\") { println(pp()) exit() }' -c \"bash -c 'while sleep 1; do /bin/true; done'\""
else
rlRun "stap -ve 'probe kernel.function(\"_do_fork\")!, kernel.function(\"do_fork\")!, kernel.function(\"sys_clone\") { printf(\"%x\n\",\$clone_flags) exit() }' -c \"bash -c 'while sleep 1; do /bin/true; done'\""
fi
rlPhaseEnd
)
# bz1890702 ---------------------------------------------------
(
perf_probe_failed "vfs_open" && exit
rlPhaseStart FAIL "test 8 bz1890702"
rlRun "stap -g --suppress-time-limits -e 'probe kernel.function(\"vfs_open\") { printf(\"%s(path: %s)\", ppfunc(), \$path\$) ; exit() }' -c 'cat /etc/hosts'"
rlPhaseEnd
)
# bz1904216 ---------------------------------------------------
rlPhaseStart FAIL "test 9 bz1904216"
rlRun "stap -p4 -DSTP_NO_OVERLOAD -t -c 'sleep 0.25' -e 'probe kernel.trace(\"bcache:bcache_btree_set_root\") { if (pid() == 0) printf(\"probe hit\n\"); }'"
rlPhaseEnd
# bz1940804 ---------------------------------------------------
rlPhaseStart FAIL "test 10 bz1940804"
rlRun "stap -e 'probe process(\"/bin/bash\").function(\"main\") {println(pn()) }' -c '/bin/bash --help'"
rlPhaseEnd
# bz1940945 ---------------------------------------------------
rlPhaseStart FAIL "test 11 bz1940945"
rlRun "stap -c sync --suppress-handler-errors -e 'probe ioscheduler.elv_add_request{println(elevator_name) exit()}'"
rlPhaseEnd
# bz1940761 ---------------------------------------------------
rlPhaseStart FAIL "test 12 bz1940761"
rlRun "stap -v /usr/share/systemtap/examples/process/strace.stp -w -c \"echo hello world\""
rlPhaseEnd
rlJournalPrintText
rlJournalEnd

View File

@ -0,0 +1,60 @@
package foo.bar;
import java.lang.*;
import java.util.*;
class ThreadedExample
{
public static void printMessage(int message) {
System.out.println("message: " + message);
}
public static void printMessage(long message) {
System.out.println("message: " + message);
}
public static void main(String[] args) {
// sleep so that stap can start and byteman agent gets installed
try {
Thread.sleep(30000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
try {
String[] inputs = new String[] {"int", "foo", "long"};
for (String next : inputs) {
final String arg = next;
final int i = 42;
final long j = 987234864;
Thread thread = new Thread(arg) {
public void run() {
if(arg.equals("int"))
printMessage(i);
else if(arg.equals("long"))
printMessage(j);
else
System.out.println("Neither of the types");
}
};
thread.start();
try {
thread.join();
} catch (Exception e){}
}
} catch (Exception e){}
// sleep so that stap can finish still while probed java program still runs
try {
Thread.sleep(80000);
} catch(InterruptedException ex) {
Thread.currentThread().interrupt();
}
}
}

View File

@ -0,0 +1,18 @@
probe java("foo.bar.ThreadedExample").class("ThreadedExample").method("printMessage(int)")
{
printf("Hit printMessage(int): %s\n", arg1)
}
probe java("foo.bar.ThreadedExample").class("ThreadedExample").method("printMessage(long)")
{
printf("Hit printMessage(long): %s\n", arg1)
exit()
}
probe timer.ms(100000)
{
error("Exit on timeout")
exit()
}

View File

@ -0,0 +1,12 @@
summary: byteman-java-methods-probing
description: ''
contact: Martin Cermak <mcermak@redhat.com>
test: ./runtest.sh
framework: beakerlib
recommend:
- java-devel
- systemtap
- systemtap-runtime-java
duration: 15m
extra-summary: /tools/systemtap/Sanity/byteman-java-methods-probing
extra-task: /tools/systemtap/Sanity/byteman-java-methods-probing

View File

@ -0,0 +1,83 @@
#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /tools/systemtap/Sanity/byteman-java-methods-probing
# Description: byteman-java-methods-probing
# Author: Martin Cermak <mcermak@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2013 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing
# to use, modify, copy, or redistribute it subject to the terms
# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1
export DEBUGINFOD_URLS="https://debuginfod.fedoraproject.org/ $DEBUGINFOD_URLS"
export DEBUGINFOD_TIMEOUT=300
rlJournalStart
rlPhaseStartSetup
# At this point we simply rely on that the %triggerin scriptlet from
# systemtap-runtime-java did it's job well. There was a hack to force
# trigger it here, but commit respective to this comment removes it.
# https://bugzilla.redhat.com/show_bug.cgi?id=1732514#c11
rlRun "rpm -qa | fgrep -e systemtap-runtime-java -e byteman -e openjdk | sort"
rlRun "stap-prep"
for BINARY in java javac; do
rlRun "alternatives --display $BINARY | grep -v slave"
rlRun "$BINARY -version"
done
rlRun "TMPDIR=$( mktemp -d )"
rlRun "mkdir -p $TMPDIR/foo/bar"
rlRun "cp ThreadedExample.java $TMPDIR/foo/bar/"
rlRun "cp ThreadedExample.stp $TMPDIR/"
rlRun "pushd $TMPDIR"
rlPhaseEnd
rlPhaseStart FAIL 'Prepare bytecode class'
rlRun "javac foo/bar/ThreadedExample.java"
rlPhaseEnd
rlPhaseStart FAIL 'Prepare the LKML'
rlRun "stap -p4 -m ThreadedExample ThreadedExample.stp"
rlPhaseEnd
rlPhaseStart FAIL 'Check the Feature'
java foo.bar.ThreadedExample &
rlRun "jps -l | grep 'foo.bar.ThreadedExample'"
export STAPBM_VERBOSE=yes
# rlRun "stap --poison-cache -vv ThreadedExample.stp 2>&1 | tee testout.log"
# Speed the stap startup up by pre-compiling the module within separate
# phase 'Prepare the LKML' above.
rlRun "staprun -v -R ThreadedExample.ko 2>&1 | tee testout.log"
rlRun "grep -q 'Hit printMessage(int): 42' testout.log"
rlRun "grep -q 'Hit printMessage(long): 987234864' testout.log"
rlPhaseEnd
rlPhaseStartCleanup
rlRun "popd"
rlRun "rm -r $TMPDIR"
rlPhaseEnd
rlJournalPrintText
rlJournalEnd

View File

@ -0,0 +1,3 @@
obj-m := MODULENAME.o
module:
make -C /lib/modules/$(shell uname -r)/build KBUILD_EXTMOD=DIRECTORY SUBDIRS=DIRECTORY modules

View File

@ -0,0 +1,17 @@
summary: Tests systemtap working with kernel modules
description: ''
contact: Petr Muller <pmuller@redhat.com>
component:
- systemtap
test: ./runtest.sh
framework: beakerlib
recommend:
- systemtap
- kernel-devel
- bison
- flex
- openssl-devel
- elfutils-libelf-devel
duration: 10m
extra-summary: /tools/systemtap/Sanity/kernel-modules
extra-task: /tools/systemtap/Sanity/kernel-modules

View File

@ -0,0 +1,20 @@
#include <linux/module.h> /* Needed by all modules */
#include <linux/kernel.h> /* Needed for KERN_INFO */
int init_module(void)
{
printk(KERN_INFO "Hello world 1.\n");
return 0;
}
int some_method(void){
printk(KERN_INFO "Some method called\n");
return 0;
}
void cleanup_module(void)
{
printk(KERN_INFO "Goodbye world 1.\n");
}
MODULE_LICENSE("GPL");

View File

@ -0,0 +1,123 @@
#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /tools/systemtap/Sanity/kernel-modules
# Description: Tests systemtap working with kernel modules
# Author: Petr Muller <pmuller@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2012 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing
# to use, modify, copy, or redistribute it subject to the terms
# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh
PACKAGE="systemtap"
check_probes(){
FAIL=""
rlAssertGrep init_module $1 || FAIL='yes'
rlAssertGrep cleanup_module $1 || FAIL='yes'
rlAssertGrep some_method $1 || FAIL='yes'
if [ -n "$FAIL" ]
then
rlFileSubmit $1 $2.out
fi
}
rlJournalStart
rlPhaseStartSetup "Preparing modules"
rlRun "mkdir -p 'stap-underscore' 'stap-dash' 'stap-none'"
rlRun "cp module.c stap-underscore/test_module.c"
rlRun "cp module.c stap-dash/test-module.c"
rlRun "cp module.c stap-none/testmodule.c"
cat Makefile.template | sed -e 's/MODULENAME/test_module/g' \
| sed -e "s|DIRECTORY|$PWD/stap-underscore|g" > stap-underscore/Makefile
rlAssert0 "Creating Makefile for underscore variant" $?
cat Makefile.template | sed -e 's/MODULENAME/test-module/g' \
| sed -e "s|DIRECTORY|$PWD/stap-dash|g" > stap-dash/Makefile
rlAssert0 "Creating Makefile for dash variant" $?
cat Makefile.template | sed -e 's/MODULENAME/testmodule/g' \
| sed -e "s|DIRECTORY|$PWD/stap-none|g" > stap-none/Makefile
rlAssert0 "Creating Makefile for no character variant" $?
if [ -n "$ARCH" ]
then
rlLog "ARCH is set to: [$ARCH]"
rlLog "This interferes with 'make module', so it needs to be unset."
ARCHOLD="$ARCH"
unset ARCH
rlLog "ARCH is set to: [$ARCH]"
fi
rlRun "make -C stap-underscore module"
rlRun "make -C stap-dash module"
rlRun "make -C stap-none module"
if [ -n "$ARCHOLD" ]
then
rlLog "Restoring ARCH"
export ARCH="$ARCHOLD"
rlLog "ARCH is set to: [$ARCH]"
fi
rlPhaseEnd
rlPhaseStartTest "Testing underscore variant"
rlRun "cp stap-underscore/test_module.ko /lib/modules/$(uname -r)/"
rlRun "insmod stap-underscore/test_module.ko"
stap -L 'module("test_module").function("*")' -v > stap.out
check_probes stap.out "module-und-probe-und"
stap -L 'module("test-module").function("*")' -v > stap.out
check_probes stap.out "module-und-probe-dash"
sleep 1
rlRun "rmmod test_module"
rlRun "rm -f /lib/modules/$(uname -r)/test_module.ko"
rlPhaseEnd
rlPhaseStartTest "Testing dash variant"
rlRun "cp stap-dash/test-module.ko /lib/modules/$(uname -r)/"
rlRun "insmod stap-dash/test-module.ko"
stap -L 'module("test_module").function("*")' -v > stap.out
check_probes stap.out "module-dash-probe-und"
stap -L 'module("test-module").function("*")' -v > stap.out
check_probes stap.out "module-dash-probe-dash"
sleep 1
rlRun "rmmod test-module"
rlRun "rm -f /lib/modules/$(uname -r)/test-module.ko"
rlPhaseEnd
rlPhaseStartTest "Testing no separator variant"
rlRun "cp stap-none/testmodule.ko /lib/modules/$(uname -r)/"
rlRun "insmod stap-none/testmodule.ko"
stap -L 'module("testmodule").function("*")' -v > stap.out
check_probes stap.out "module-none-probe-none"
sleep 1
rlRun "rmmod testmodule"
rlRun "rm -f /lib/modules/$(uname -r)/testmodule.ko"
rlPhaseEnd
rlPhaseStartCleanup
rlRun "rm -rf stap-underscore stap-dash stap-none stap.out"
rlPhaseEnd
rlJournalPrintText
rlJournalEnd

View File

@ -0,0 +1,15 @@
summary: Quick test that systemtap generally works
description: ''
contact:
- Petr Muller <pmuller@redhat.com>
component:
- systemtap
test: ./runtest.sh
framework: beakerlib
recommend:
- koji
- systemtap
- kernel-devel
duration: 1h
extra-summary: /tools/systemtap/Sanity/quick-smoke-test
extra-task: /tools/systemtap/Sanity/quick-smoke-test

View File

@ -0,0 +1,23 @@
#!/bin/bash
# runtest.sh of /tools/systemtap/Sanity/quick-smoke-test
. /usr/share/beakerlib/beakerlib.sh || exit 1
export DEBUGINFOD_URLS="https://debuginfod.fedoraproject.org/ $DEBUGINFOD_URLS"
export DEBUGINFOD_TIMEOUT=300
# export DEBUGINFOD_PROGRESS=1
rlJournalStart
rlPhaseStartTest
rlRun "rpm -qa | egrep '^(kernel|systemtap)' | sort"
rlRun "uname -r"
rlRun "stap-prep"
rlRun "stap -L 'process(\"stap\").mark(\"*\")' | grep pass"
rlRun "stap -v --example helloworld.stp"
rlRun "stap -v -T 10 -p4 -e 'probe kernel.function(\"do_exit\") {println(\$\$vars)}'"
rlRun "stap -v -T 60 -e 'probe kernel.function(\"vfs_read\"){ println(\$\$vars); exit() }'"
rlPhaseEnd
rlJournalPrintText
rlJournalEnd

View File

@ -0,0 +1,17 @@
summary: stap-server-basic-sanity
description: ''
contact: Martin Cermak <mcermak@redhat.com>
component:
- systemtap
test: ./runtest.sh
framework: beakerlib
recommend:
- systemtap
- kernel-debuginfo
- avahi
- systemtap-server
- dbus
- net-tools
duration: 45m
extra-summary: /tools/systemtap/Sanity/stap-server-basic-sanity
extra-task: /tools/systemtap/Sanity/stap-server-basic-sanity

View File

@ -0,0 +1,98 @@
#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /tools/systemtap/Sanity/stap-server-basic-sanity
# Description: stap-server-basic-sanity
# Author: Martin Cermak <mcermak@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2013 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing
# to use, modify, copy, or redistribute it subject to the terms
# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1
CMD='stap'
BIN=$(which --skip-alias $CMD)
PACKAGE="${PACKAGE:-$(rpm -qf --qf='%{name}\n' $BIN | head -1)}"
export DEBUGINFOD_URLS="https://debuginfod.fedoraproject.org/ $DEBUGINFOD_URLS"
export DEBUGINFOD_TIMEOUT=300
function service_stap_server() {
action=$1
retval=${2:-0}
sleep 5
rlLogInfo "PACKAGE=$PACKAGE"
if echo $PACKAGE | grep -q devtoolset; then
__i=$(echo $PACKAGE | awk -F- '{print $2}')
rlRun "service devtoolset-$__i-stap-server $action" $retval
elif echo $PACKAGE | grep -q gcc-toolset; then
__i=$(echo $PACKAGE | awk -F- '{print $3}')
rlRun "service gcc-toolset-$__i-stap-server $action" $retval
else
rlRun "service stap-server $action" $retval
fi
sleep 5
}
_rhelmajor=$(rpm --eval '%{rhel}')
rlJournalStart
rlPhaseStartSetup
rlRun "TMPDIR=$(mktemp -d)"
rlRun "pushd $TMPDIR"
rlAssertRpm dbus
rlAssertRpm avahi
rlAssertRpm net-tools # because of netstat
rlPhaseEnd
rlPhaseStart FAIL "sanity check"
rlRun "stap -v -e 'probe begin { log(\"hello\"); exit() }'"
rlPhaseEnd
rlPhaseStartTest
rlRun "service iptables stop" 0-255
rlRun "service firewalld stop" 0-255
service_stap_server stop
test $_rhelmajor -le 8 && \
rlRun "service messagebus restart"
rlRun "service avahi-daemon restart"
service_stap_server start
rlRun "netstat -tlp | grep stap"
rlRun "SERVER_PORT=$( netstat -tlpn | awk '/stap/ {print $4}' | grep -o '[0-9]*$' )"
for SERVER_IP in '127.0.0.1' '[::1]'; do
rlLogInfo "Testing SERVER_IP=$SERVER_IP"
rlRun "stap --trust-servers=ssl,signer,all-users,no-prompt --use-server=$SERVER_IP:$SERVER_PORT"
rlRun "stap --use-server=$SERVER_IP:$SERVER_PORT -v -e 'probe begin { log(\"hello\"); exit() }' 2>&1 | tee output.log"
rlRun "grep 'Using a compile server' output.log"
rlRun "grep '^hello$' output.log"
done
rlPhaseEnd
rlPhaseStartCleanup
service_stap_server stop
rlRun "popd"
rlRun "rm -r $TMPDIR"
rlPhaseEnd
rlJournalPrintText
rlJournalEnd

View File

@ -0,0 +1,7 @@
#include <stdio.h>
int main(void) {
printf("Hello world!\n");
return 0;
}

View File

@ -0,0 +1,16 @@
summary: userspace-probes
description: ''
contact: Martin Cermak <mcermak@redhat.com>
component:
- systemtap
test: ./runtest.sh
framework: beakerlib
recommend:
- systemtap
- dyninst-devel
- gawk
duration: 5m
link:
- relates: https://bugzilla.redhat.com/show_bug.cgi?id=855981
extra-summary: /CoreOS/systemtap/Sanity/userspace-probes
extra-task: /CoreOS/systemtap/Sanity/userspace-probes

View File

@ -0,0 +1,90 @@
#!/bin/bash
# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# runtest.sh of /CoreOS/systemtap/Sanity/userspace-probes
# Description: userspace-probes
# Author: Martin Cermak <mcermak@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
# Copyright (c) 2013 Red Hat, Inc. All rights reserved.
#
# This copyrighted material is made available to anyone wishing
# to use, modify, copy, or redistribute it subject to the terms
# and conditions of the GNU General Public License version 2.
#
# This program is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied
# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
# PURPOSE. See the GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public
# License along with this program; if not, write to the Free
# Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# Include Beaker environment
. /usr/share/beakerlib/beakerlib.sh || exit 1
export DEBUGINFOD_URLS="https://debuginfod.fedoraproject.org/ $DEBUGINFOD_URLS"
export DEBUGINFOD_TIMEOUT=300
PACKAGE="$(rpm -qf $( which stap ) | head -n 1 )"
WORKDIR=$( mktemp -d )
TESTUSER=mytestuser
rlJournalStart
rlPhaseStart WARN "Check the environment"
if ! stap -V 2>&1 | grep -q 'enabled features:.*DYNINST'; then
rlLogWarning "No dyninst available in $PACKAGE"
rlPhaseEnd
rlJournalPrintText
rlJournalEnd
exit 0
fi
rlRun "useradd $TESTUSER" 0,9
rlRun "su $TESTUSER -c 'which stap'"
rlRun "rpm -qa | fgrep -e dyninst -e systemtap | sort"
rlPhaseEnd
rlPhaseStartSetup
rlRun "cp hello.c testcase*.sh $WORKDIR"
rlRun "chown -R $TESTUSER:$TESTUSER $WORKDIR"
rlPhaseEnd
rlPhaseStart FAIL "Testcase 1"
rlRun "which gcc"
rlRun "su $TESTUSER -c 'gcc -g -o $WORKDIR/hello $WORKDIR/hello.c'"
rlRun "su $TESTUSER -c '$WORKDIR/hello'"
rlRun "chmod a+x $WORKDIR/testcase1.sh"
rlRun "su $TESTUSER -c '$WORKDIR/testcase1.sh $WORKDIR'"
LOG="$WORKDIR/stapout.log"
rlRun "cat $LOG"
rlRun "grep '^process(\"$WORKDIR/hello\").function(\"main@$WORKDIR/hello.c:3\")$' $LOG"
rlRun "grep -i error $LOG" 1
rlPhaseEnd
rlPhaseStart FAIL "Testcase 2"
rlRun "chmod a+x $WORKDIR/testcase2.sh"
rlRun "su $TESTUSER -c '$WORKDIR/testcase2.sh $WORKDIR'"
LOG="$WORKDIR/stapout.log"
rlRun "cat $LOG"
rlRun "grep '^\*\*\*\ exiting\ \*\*\*$' $LOG"
rlRun "egrep -i 'error|warning' $LOG" 1
rlPhaseEnd
rlPhaseStartCleanup
rlRun "userdel $TESTUSER" 0-255
rlRun "rm -rf /home/$TESTUSER $WORKDIR"
rlPhaseEnd
rlJournalPrintText
rlJournalEnd

View File

@ -0,0 +1,3 @@
#!/bin/bash
stap -e "probe process(\"$1/hello\").function(\"main\") { println(pn()) }" --runtime=dyninst -c "$1/hello" -o "$1/stapout.log"

View File

@ -0,0 +1,4 @@
#!/bin/bash
stap --runtime=dyninst -e 'probe end { printf("*** exiting ***\n"); exit() }' -c "$1/hello" -o "$1/stapout.log"