CI tests: Add more tests
- Separate the "stap-prep" phase out to a separate phase - Add tests/Sanity/byteman-java-methods-probing - Add tests/Sanity/kernel-modules - Add tests/Sanity/userspace-probes - Add tests/Sanity/stap-server-basic-sanity - Add tests/Regression/small-tests
This commit is contained in:
		
							parent
							
								
									7b59f81081
								
							
						
					
					
						commit
						107122a4e8
					
				
							
								
								
									
										5
									
								
								plans/ci/prepare/prepare.fmf
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								plans/ci/prepare/prepare.fmf
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,5 @@
 | 
				
			|||||||
 | 
					summary: Setup task
 | 
				
			||||||
 | 
					prepare:
 | 
				
			||||||
 | 
					    script: ./plans/ci/prepare/prepare.sh
 | 
				
			||||||
 | 
					recommend:
 | 
				
			||||||
 | 
					- koji
 | 
				
			||||||
							
								
								
									
										29
									
								
								plans/ci/prepare/prepare.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								plans/ci/prepare/prepare.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,29 @@
 | 
				
			|||||||
 | 
					#!/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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					rpm -qa | egrep '^(kernel|systemtap)' | sort
 | 
				
			||||||
 | 
					uname -r
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stap-prep || __install_deps
 | 
				
			||||||
 | 
					stap-prep
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					set +xe
 | 
				
			||||||
							
								
								
									
										14
									
								
								tests/Regression/small-tests/main.fmf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								tests/Regression/small-tests/main.fmf
									
									
									
									
									
										Normal 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
 | 
				
			||||||
							
								
								
									
										178
									
								
								tests/Regression/small-tests/runtest.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										178
									
								
								tests/Regression/small-tests/runtest.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,178 @@
 | 
				
			|||||||
 | 
					#!/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"
 | 
				
			||||||
 | 
					            rlRun "stap -vp4 -e 'probe vfs.read{println(\"hit\")}'"
 | 
				
			||||||
 | 
					            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
 | 
				
			||||||
@ -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();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -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()
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								tests/Sanity/byteman-java-methods-probing/main.fmf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								tests/Sanity/byteman-java-methods-probing/main.fmf
									
									
									
									
									
										Normal 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
 | 
				
			||||||
							
								
								
									
										83
									
								
								tests/Sanity/byteman-java-methods-probing/runtest.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										83
									
								
								tests/Sanity/byteman-java-methods-probing/runtest.sh
									
									
									
									
									
										Executable 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
 | 
				
			||||||
							
								
								
									
										3
									
								
								tests/Sanity/kernel-modules/Makefile.template
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								tests/Sanity/kernel-modules/Makefile.template
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
				
			|||||||
 | 
					obj-m := MODULENAME.o
 | 
				
			||||||
 | 
					module:
 | 
				
			||||||
 | 
						  make -C /lib/modules/$(shell uname -r)/build KBUILD_EXTMOD=DIRECTORY SUBDIRS=DIRECTORY modules
 | 
				
			||||||
							
								
								
									
										17
									
								
								tests/Sanity/kernel-modules/main.fmf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								tests/Sanity/kernel-modules/main.fmf
									
									
									
									
									
										Normal 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
 | 
				
			||||||
							
								
								
									
										20
									
								
								tests/Sanity/kernel-modules/module.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								tests/Sanity/kernel-modules/module.c
									
									
									
									
									
										Normal 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");
 | 
				
			||||||
							
								
								
									
										123
									
								
								tests/Sanity/kernel-modules/runtest.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										123
									
								
								tests/Sanity/kernel-modules/runtest.sh
									
									
									
									
									
										Executable 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
 | 
				
			||||||
@ -9,28 +9,10 @@ export DEBUGINFOD_TIMEOUT=300
 | 
				
			|||||||
# export DEBUGINFOD_PROGRESS=1
 | 
					# export DEBUGINFOD_PROGRESS=1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# 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 ()
 | 
					 | 
				
			||||||
{
 | 
					 | 
				
			||||||
    set -xe
 | 
					 | 
				
			||||||
    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
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
rlJournalStart
 | 
					rlJournalStart
 | 
				
			||||||
rlPhaseStartTest
 | 
					rlPhaseStartTest
 | 
				
			||||||
    rlRun "rpm -qa | egrep '^(kernel|systemtap)' | sort"
 | 
					    rlRun "rpm -qa | egrep '^(kernel|systemtap)' | sort"
 | 
				
			||||||
    rlRun "uname -r"
 | 
					    rlRun "uname -r"
 | 
				
			||||||
    rlRun "stap-prep || __install_deps"
 | 
					 | 
				
			||||||
    rlRun "stap-prep"
 | 
					    rlRun "stap-prep"
 | 
				
			||||||
    rlRun "stap -L 'process(\"stap\").mark(\"*\")' | grep pass"
 | 
					    rlRun "stap -L 'process(\"stap\").mark(\"*\")' | grep pass"
 | 
				
			||||||
    rlRun "stap -v --example helloworld.stp"
 | 
					    rlRun "stap -v --example helloworld.stp"
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										17
									
								
								tests/Sanity/stap-server-basic-sanity/main.fmf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								tests/Sanity/stap-server-basic-sanity/main.fmf
									
									
									
									
									
										Normal 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
 | 
				
			||||||
							
								
								
									
										98
									
								
								tests/Sanity/stap-server-basic-sanity/runtest.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										98
									
								
								tests/Sanity/stap-server-basic-sanity/runtest.sh
									
									
									
									
									
										Executable 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
 | 
				
			||||||
							
								
								
									
										7
									
								
								tests/Sanity/userspace-probes/hello.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								tests/Sanity/userspace-probes/hello.c
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,7 @@
 | 
				
			|||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(void) {
 | 
				
			||||||
 | 
					    printf("Hello world!\n");
 | 
				
			||||||
 | 
					    return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										16
									
								
								tests/Sanity/userspace-probes/main.fmf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								tests/Sanity/userspace-probes/main.fmf
									
									
									
									
									
										Normal 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
 | 
				
			||||||
							
								
								
									
										102
									
								
								tests/Sanity/userspace-probes/runtest.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										102
									
								
								tests/Sanity/userspace-probes/runtest.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,102 @@
 | 
				
			|||||||
 | 
					#!/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
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    rlPhaseStart FAIL "Set up SELinux"
 | 
				
			||||||
 | 
					        rlRun "SEBOOL_ALLOW_EXECMOD=`getsebool allow_execmod | awk '{print $NF}'`"
 | 
				
			||||||
 | 
					        rlRun "SEBOOL_ALLOW_EXECSTACK=`getsebool allow_execstack | awk '{print $NF}'`"
 | 
				
			||||||
 | 
					        rlRun "SEBOOL_DENY_PTRACE=`getsebool deny_ptrace | awk '{print $NF}'`"
 | 
				
			||||||
 | 
					        rlRun "setsebool allow_execmod on"
 | 
				
			||||||
 | 
					        rlRun "setsebool allow_execstack on"
 | 
				
			||||||
 | 
					        rlRun "setsebool deny_ptrace off"
 | 
				
			||||||
 | 
					    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"
 | 
				
			||||||
 | 
					        rlRun "setsebool allow_execmod $SEBOOL_ALLOW_EXECMOD"
 | 
				
			||||||
 | 
					        rlRun "setsebool allow_execstack $SEBOOL_ALLOW_EXECSTACK"
 | 
				
			||||||
 | 
					        rlRun "setsebool deny_ptrace $SEBOOL_DENY_PTRACE"
 | 
				
			||||||
 | 
					    rlPhaseEnd
 | 
				
			||||||
 | 
					rlJournalPrintText
 | 
				
			||||||
 | 
					rlJournalEnd
 | 
				
			||||||
							
								
								
									
										3
									
								
								tests/Sanity/userspace-probes/testcase1.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								tests/Sanity/userspace-probes/testcase1.sh
									
									
									
									
									
										Executable 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"
 | 
				
			||||||
							
								
								
									
										4
									
								
								tests/Sanity/userspace-probes/testcase2.sh
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										4
									
								
								tests/Sanity/userspace-probes/testcase2.sh
									
									
									
									
									
										Executable file
									
								
							@ -0,0 +1,4 @@
 | 
				
			|||||||
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stap --runtime=dyninst -e 'probe end { printf("*** exiting ***\n"); exit() }' -c "$1/hello" -o "$1/stapout.log"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user