diff --git a/.gitignore b/.gitignore index 702599e..1442bfe 100644 --- a/.gitignore +++ b/.gitignore @@ -78,38 +78,3 @@ /systemtap-4.7~pre16433134g7d871ab5.tar.gz /systemtap-4.7~pre16468670g9f253544.tar.gz /systemtap-4.7.tar.gz -/systemtap-4.8~pre16557277g2882dcc9.tar.gz -/systemtap-4.8~pre16578235g069e109c.tar.gz -/systemtap-4.8~pre16594727g09f1b7bb.tar.gz -/systemtap-4.8~pre16594741g5bdc37b9.tar.gz -/systemtap-4.8~pre16650659g6a096a7d.tar.gz -/systemtap-4.8.tar.gz -/systemtap-4.9.tar.gz -/systemtap-5.0~pre16885197g6b17715f.tar.gz -/systemtap-5.0~pre16885234gd98d6c2d.tar.gz -/systemtap-5.0~pre16890184ge891a37e.tar.gz -/systemtap-5.0~pre16891249ge891a37e.tar.gz -/systemtap-5.0~pre16958465gca71442b.tar.gz -/systemtap-5.0.tar.gz -/systemtap-5.1~pre17056120g2ccc0c4c.tar.gz -/systemtap-5.1~pre17056139g6c0b92b3.tar.gz -/systemtap-5.1~pre17059382g67086c54.tar.gz -/systemtap-5.1~pre17060399gb6abf4bd.tar.gz -/systemtap-5.1~pre17062114g2604d135.tar.gz -/systemtap-5.1~pre17062192g5fd8daba.tar.gz -/systemtap-5.1.tar.gz -/systemtap-5.1~pre17206206ge48abca5.tar.gz -/systemtap-5.2~pre17206355g1a07290a.tar.gz -/systemtap-5.2~pre17224323g98d1ea34.tar.gz -/systemtap-5.2~pre17250223gd07e4284.tar.gz -/systemtap-5.2~pre17277956g0b7f6722.tar.gz -/systemtap-5.2~pre17283218gc5774e18.tar.gz -/systemtap-5.2.tar.gz -/systemtap-5.2~pre17373420g1e894ff0.tar.gz -/systemtap-5.3~pre17373422g9a48fbea.tar.gz -/systemtap-5.3~pre17373794g3efe129d.tar.gz -/systemtap-5.3~pre17373816g7a71d34b.tar.gz -/systemtap-5.3.tar.gz -/systemtap-5.4~pre17585473g1fe4178d.tar.gz -/systemtap-5.4~pre17585496g86ab88eb.tar.gz -/systemtap-5.4.tar.gz diff --git a/gating.yaml b/gating.yaml index a2c8282..ff1fcc6 100644 --- a/gating.yaml +++ b/gating.yaml @@ -1,15 +1,7 @@ --- !Policy product_versions: - fedora-* -decision_contexts: [bodhi_update_push_testing] -subject_type: koji_build -rules: - - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} - - !PassingTestCaseRule {test_case_name: baseos-qe.koji-build.scratch-build.validation} ---- !Policy -product_versions: - - fedora-* -decision_contexts: [bodhi_update_push_stable] +decision_context: bodhi_update_push_stable subject_type: koji_build rules: - !PassingTestCaseRule {test_case_name: fedora-ci.koji-build.tier0.functional} diff --git a/plans/ci.fmf b/plans/ci.fmf index 7009e4e..e1aad9b 100644 --- a/plans/ci.fmf +++ b/plans/ci.fmf @@ -1,12 +1,11 @@ summary: CI Gating Plan discover: - how: fmf - url: https://src.fedoraproject.org/tests/systemtap-gating.git - ref: main - directory: tests + how: fmf + directory: tests prepare: - - name: prepare - how: shell - script: ./plans/prepare.sh + how: install + exclude: + - glibc-headers-x86 + - glibc-headers-s390 execute: - how: tmt + how: beakerlib diff --git a/plans/ci/prepare/prepare.fmf b/plans/ci/prepare/prepare.fmf new file mode 100755 index 0000000..23e61d1 --- /dev/null +++ b/plans/ci/prepare/prepare.fmf @@ -0,0 +1,7 @@ +summary: Setup task +prepare: + script: ./plans/ci/prepare/prepare.sh +recommend: +- koji +- bind-utils +- avahi-tools diff --git a/plans/prepare.sh b/plans/ci/prepare/prepare.sh similarity index 82% rename from plans/prepare.sh rename to plans/ci/prepare/prepare.sh index dfce543..368ea84 100755 --- a/plans/prepare.sh +++ b/plans/ci/prepare/prepare.sh @@ -1,9 +1,12 @@ #!/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. -__fedora_install_deps () +__install_deps () { TMPD=$(mktemp -d) pushd $TMPD @@ -17,12 +20,8 @@ __fedora_install_deps () set -xe -source /etc/os-release - # Install needed packages -if [ "$ID" == "fedora" ]; then - stap-prep || __fedora_install_deps -fi +stap-prep || __install_deps stap-prep # Report installed packages diff --git a/sources b/sources index a210820..b708a2e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (systemtap-5.4.tar.gz) = 5869fe3735e44be65ba7895a46b4ea66fcdcc21ed2ab0673c62d822730553837f816d82fd78eeca4bfe6f17fdeaa12eb2f94c0b0b7ebb8c495c961f0b6935785 +SHA512 (systemtap-4.7.tar.gz) = 7d7c213dc4f7c5430f81763668da21403fbc351d1701b1096eb1ad233e3f0325e35f01dfd0a33e75f277b26fdde88c46d42dd32e32e4d4f27a45d53e2dd0f831 diff --git a/systemtap-gcc16.patch b/systemtap-gcc16.patch deleted file mode 100644 index c336ce6..0000000 --- a/systemtap-gcc16.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- systemtap-5.4/configure~ 2025-10-30 14:47:35.000000000 +0000 -+++ systemtap-5.4/configure 2026-01-13 18:53:20.466037572 +0000 -@@ -3121,8 +3121,8 @@ - } - { - // Unicode literals -- char const *utf8 = u8"UTF-8 string \u2500"; -- char16_t const *utf16 = u"UTF-8 string \u2500"; -+ auto const *utf8 = u8"UTF-8 string \u2500"; -+ char16_t const *utf16 = u"UTF-16 string \u2500"; - char32_t const *utf32 = U"UTF-32 string \u2500"; - } - ' diff --git a/systemtap.spec b/systemtap.spec index 577dc67..63ff7cc 100644 --- a/systemtap.spec +++ b/systemtap.spec @@ -1,5 +1,3 @@ -# work around flakey gcc warnings -%{!?with_Werror: %global with_Werror 0} %{!?with_sqlite: %global with_sqlite 0%{?fedora} >= 17 || 0%{?rhel} >= 7} # prefer prebuilt docs %{!?with_docs: %global with_docs 0} @@ -13,8 +11,8 @@ %endif %{!?with_rpm: %global with_rpm 1} %{!?elfutils_version: %global elfutils_version 0.179} -%{!?with_boost: %global with_boost 1} -%ifarch x86_64 ppc ppc64 ppc64le aarch64 +%{!?with_boost: %global with_boost 0} +%ifarch %{ix86} x86_64 ppc ppc64 ppc64le aarch64 %{!?with_dyninst: %global with_dyninst 0%{?fedora} >= 18 || 0%{?rhel} >= 7} %else %{!?with_dyninst: %global with_dyninst 0} @@ -22,11 +20,7 @@ %{!?with_bpf: %global with_bpf 0%{?fedora} >= 22 || 0%{?rhel} >= 8} %{!?with_systemd: %global with_systemd 0%{?fedora} >= 19 || 0%{?rhel} >= 7} %{!?with_emacsvim: %global with_emacsvim 0%{?fedora} >= 19 || 0%{?rhel} >= 7} -%ifarch %{ix86} -%{!?with_java: %global with_java 0} -%else %{!?with_java: %global with_java 0%{?fedora} >= 19 || 0%{?rhel} >= 7} -%endif %{!?with_debuginfod: %global with_debuginfod 0%{?fedora} >= 25 || 0%{?rhel} >= 7} %{!?with_virthost: %global with_virthost 0%{?fedora} >= 19 || 0%{?rhel} >= 7} %{!?with_virtguest: %global with_virtguest 1} @@ -45,13 +39,9 @@ %{!?with_httpd: %global with_httpd 0} %{!?with_specific_python: %global with_specific_python 0%{?fedora} >= 31} %{!?with_sysusers: %global with_sysusers 0%{?fedora} >= 32 || 0%{?rhel} >= 9} -# NB: can't turn this on by default on any distro version whose builder system -# may run kernels different than the distro version itself. -%{!?with_check: %global with_check 0} - # Virt is supported on these arches, even on el7, but it's not in core EL7 -%if 0%{?rhel} && 0%{?rhel} <= 7 +%if 0%{?rhel} <= 7 %ifarch ppc64le aarch64 %global with_virthost 0 %endif @@ -70,6 +60,9 @@ %else %if 0%{?rhel} >= 6 %define udevrulesdir /lib/udev/rules.d + %else + # RHEL5 + %define udevrulesdir /etc/udev/rules.d %endif %endif %endif @@ -86,7 +79,11 @@ %define dracutbindir %{_bindir} %endif -%{!?_rpmmacrodir: %define _rpmmacrodir %{_rpmconfigdir}/macros.d} +%if 0%{?rhel} == 6 + %{!?_rpmmacrodir: %define _rpmmacrodir /etc/rpm/} +%else + %{!?_rpmmacrodir: %define _rpmmacrodir %{_rpmconfigdir}/macros.d} +%endif # To avoid testsuite/*/*.stp has shebang which doesn't start with '/' %define __brp_mangle_shebangs_exclude_from .stp$ @@ -96,10 +93,7 @@ \ g stapusr 156\ g stapsys 157\ -g stapdev 158\ -g stapunpriv 159\ -u stapunpriv 159 "systemtap unprivileged user" /var/lib/stapunpriv /sbin/nologin\ -m stapunpriv stapunpriv +g stapdev 158 %define _systemtap_server_preinstall \ # See systemd-sysusers(8) sysusers.d(5)\ @@ -121,17 +115,10 @@ m stapsys stapsys\ m stapdev stapusr\ m stapdev stapdev -%define _systemtap_server_preinstall_tmpfiles \ -# See systemd-tmpfiles(8) tmpfiles.d(5)\ -d /var/lib/stap-server 0750 stap-server stap-server -\ -d /var/lib/stap-server/.systemtap 0700 stap-server stap-server -\ -d /var/log/stap-server 0755 stap-server stap-server -\ -f /var/log/stap-server/log 0644 stap-server stap-server - Name: systemtap -# PRERELEASE -Version: 5.4 -Release: 2%{?release_override}%{?dist} +Version: 4.7 +Release: 1%{?release_override}%{?dist} # for version, see also configure.ac @@ -143,15 +130,13 @@ Release: 2%{?release_override}%{?dist} # systemtap-runtime /usr/bin/staprun, /usr/bin/stapsh, /usr/bin/stapdyn # systemtap-client /usr/bin/stap, samples, docs, tapset(bonus), req:-runtime # systemtap-initscript /etc/init.d/systemtap, dracut module, req:systemtap -# systemtap-sdt-devel /usr/include/sys/sdt.h -# systemtap-sdt-dtrace /usr/bin/dtrace +# systemtap-sdt-devel /usr/include/sys/sdt.h /usr/bin/dtrace # systemtap-testsuite /usr/share/systemtap/testsuite*, req:systemtap, req:sdt-devel # systemtap-runtime-java libHelperSDT.so, HelperSDT.jar, stapbm, req:-runtime # systemtap-runtime-virthost /usr/bin/stapvirt, req:libvirt req:libxml2 # systemtap-runtime-virtguest udev rules, init scripts/systemd service, req:-runtime # systemtap-runtime-python2 HelperSDT python2 module, req:-runtime # systemtap-runtime-python3 HelperSDT python3 module, req:-runtime -# systemtap-jupyter /usr/bin/stap-jupyter-* interactive-notebook req:systemtap # # Typical scenarios: # @@ -165,10 +150,9 @@ Release: 2%{?release_override}%{?dist} # intermediary stap-server for --use-server: systemtap-server (-devel unused) Summary: Programmable system-wide instrumentation system -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Source: ftp://sourceware.org/pub/systemtap/releases/systemtap-%{version}.tar.gz -Patch0: systemtap-gcc16.patch # Build* BuildRequires: make @@ -179,7 +163,6 @@ BuildRequires: pkgconfig(nss) BuildRequires: pkgconfig(avahi-client) %if %{with_debuginfod} BuildRequires: pkgconfig(libdebuginfod) -BuildRequires: pkgconfig(json-c) %endif %if %{with_dyninst} BuildRequires: dyninst-devel >= 10.0 @@ -196,7 +179,9 @@ BuildRequires: pkgconfig(ncurses) BuildRequires: systemd %endif # Needed for libstd++ < 4.0, without +%if %{with_boost} BuildRequires: boost-devel +%endif %if %{with_crash} BuildRequires: crash-devel zlib-devel %endif @@ -218,7 +203,7 @@ BuildRequires: xmlto /usr/share/xmlto/format/fo/pdf %endif %if %{with_emacsvim} # for _emacs_sitelispdir macros etc. -BuildRequires: emacs-common +BuildRequires: emacs %endif %if %{with_java} BuildRequires: java-devel @@ -229,6 +214,9 @@ BuildRequires: pkgconfig(libvirt) BuildRequires: pkgconfig(libxml-2.0) %endif BuildRequires: readline-devel +%if 0%{?rhel} <= 5 +BuildRequires: pkgconfig(ncurses) +%endif %if %{with_python2_probes} BuildRequires: python2-devel %if 0%{?fedora} >= 1 @@ -244,20 +232,17 @@ BuildRequires: python3 BuildRequires: python3-devel BuildRequires: python3-setuptools %endif +%if %{with_specific_python} +BuildRequires: /usr/bin/pathfix.py +%endif %if %{with_httpd} BuildRequires: libmicrohttpd-devel BuildRequires: libuuid-devel %endif %if %{with_sysusers} -BuildRequires: systemd-rpm-macros +BuildRequires: systemd-rpm-macros %endif -%if %{with_check} -BuildRequires: kernel-devel -# and some of the same Requires: as below -BuildRequires: dejagnu gcc make -%endif - # Install requirements @@ -274,8 +259,8 @@ the components needed to locally develop and execute systemtap scripts. %package server Summary: Instrumentation System Server -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires: systemtap-devel = %{version}-%{release} Conflicts: systemtap-devel < %{version}-%{release} Conflicts: systemtap-runtime < %{version}-%{release} @@ -304,8 +289,8 @@ compiles systemtap scripts to kernel objects on their demand. %package devel Summary: Programmable system-wide instrumentation system - development headers, tools -License: GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND BSD-2-Clause -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ %if 0%{?rhel} >= 8 || 0%{?fedora} >= 20 Recommends: (kernel-debug-devel if kernel-debug) @@ -334,8 +319,8 @@ a copy of the standard tapset library and the runtime library C files. %package runtime Summary: Programmable system-wide instrumentation system - runtime -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires(pre): shadow-utils Conflicts: systemtap-devel < %{version}-%{release} Conflicts: systemtap-server < %{version}-%{release} @@ -349,8 +334,8 @@ using a local or remote systemtap-devel installation. %package client Summary: Programmable system-wide instrumentation system - client -License: GPL-2.0-or-later AND GPL-2.0-only AND BSD-3-Clause AND LGPL-2.1-only AND GFDL-1.2-or-later AND BSD-2-Clause -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires: zip unzip Requires: systemtap-runtime = %{version}-%{release} Requires: coreutils grep sed unzip zip @@ -363,19 +348,17 @@ Requires: mokutil %endif %description client -This package contains/requires only the components needed to -use systemtap scripts by compiling them using a local or a remote -systemtap-server service, then run them using a local or -remote systemtap-runtime. It includes script samples and +This package contains/requires the components needed to develop +systemtap scripts, and compile them using a local systemtap-devel +or a remote systemtap-server installation, then run them using a +local or remote systemtap-runtime. It includes script samples and documentation, and a copy of the tapset library for reference. -It does NOT include all the components for running a systemtap -script in a self-contained fashion; for that, use the -devel -subpackage instead. + %package initscript Summary: Systemtap Initscripts -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires: systemtap = %{version}-%{release} %if %{with_systemd} Requires: systemd @@ -393,24 +376,9 @@ boot-time probing if supported. %package sdt-devel -Summary: Static probe support header files -License: GPL-2.0-or-later AND CC0-1.0 -URL: https://sourceware.org/systemtap/ -%if 0%{?rhel} && 0%{?rhel} <= 10 -# for RHEL buildability compatibility, pull in sdt-dtrace at all times -Requires: systemtap-sdt-dtrace = %{version}-%{release} -%endif - -%description sdt-devel -This package includes the header file used for static -instrumentation compiled into userspace programs. - - -%package sdt-dtrace -Summary: Static probe support dtrace tool -License: GPL-2.0-or-later AND CC0-1.0 -URL: https://sourceware.org/systemtap/ -Provides: dtrace = %{version}-%{release} +Summary: Static probe support tools +License: GPLv2+ and Public Domain +URL: http://sourceware.org/systemtap/ %if %{with_pyparsing} %if %{with_python3} Requires: python3-pyparsing @@ -423,19 +391,21 @@ Requires: python2-pyparsing %endif %endif -%description sdt-dtrace -This package includes the dtrace-compatibility preprocessor -to process related .d files into tracing-macro-laden .h headers. +%description sdt-devel +This package includes the header file used for static +instrumentation compiled into userspace programs and libraries, along +with the optional dtrace-compatibility preprocessor to process related +.d files into tracing-macro-laden .h headers. %package testsuite Summary: Instrumentation System Testsuite -License: GPL-2.0-or-later AND GPL-2.0-only AND GPL-3.0-or-later AND MIT -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires: systemtap = %{version}-%{release} Requires: systemtap-sdt-devel = %{version}-%{release} Requires: systemtap-server = %{version}-%{release} -Requires: dejagnu which elfutils grep nc wget +Requires: dejagnu which elfutils grep nc %if %{with_debuginfod} Requires: elfutils-debuginfod %endif @@ -502,8 +472,8 @@ systemtap on the current system. %if %{with_java} %package runtime-java Summary: Systemtap Java Runtime Support -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires: systemtap-runtime = %{version}-%{release} # work around fedora ci gating kvetching about i686<->x86-64 conflicts %ifarch x86_64 @@ -524,8 +494,8 @@ that probe Java processes running on the OpenJDK runtimes using Byteman. %if %{with_python2_probes} %package runtime-python2 Summary: Systemtap Python 2 Runtime Support -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires: systemtap-runtime = %{version}-%{release} %description runtime-python2 @@ -536,8 +506,8 @@ that probe python 2 processes. %if %{with_python3_probes} %package runtime-python3 Summary: Systemtap Python 3 Runtime Support -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires: systemtap-runtime = %{version}-%{release} %if ! (%{with_python2_probes}) @@ -553,8 +523,8 @@ that probe python 3 processes. %if %{with_python3_probes} %package exporter Summary: Systemtap-prometheus interoperation mechanism -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires: systemtap-runtime = %{version}-%{release} %description exporter @@ -566,8 +536,8 @@ to remote requesters on demand. %if %{with_virthost} %package runtime-virthost Summary: Systemtap Cross-VM Instrumentation - host -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ # only require libvirt-libs really #Requires: libvirt >= 1.0.2 Requires: libxml2 @@ -581,8 +551,8 @@ connection. %if %{with_virtguest} %package runtime-virtguest Summary: Systemtap Cross-VM Instrumentation - guest -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ +License: GPLv2+ +URL: http://sourceware.org/systemtap/ Requires: systemtap-runtime = %{version}-%{release} %if %{with_systemd} Requires(post): findutils coreutils @@ -599,22 +569,10 @@ This package installs the services necessary on a virtual machine for a systemtap-runtime-virthost machine to execute systemtap scripts. %endif -%package jupyter -Summary: ISystemtap jupyter kernel and examples -License: GPL-2.0-or-later -URL: https://sourceware.org/systemtap/ -Requires: systemtap = %{version}-%{release} - -%description jupyter -This package includes files needed to build and run -the interactive systemtap Jupyter kernel, either locally -or within a container. - # ------------------------------------------------------------------------ %prep %setup -q -%patch 0 -p1 %build @@ -625,13 +583,6 @@ or within a container. %global dyninst_config --without-dyninst %endif -# Enable/disable the dyninst pure-userspace backend -%if %{with_Werror} -%global Werror_config --enable-Werror -%else -%global Werror_config --disable-Werror -%endif - # Enable/disable the sqlite coverage testing support %if %{with_sqlite} %global sqlite_config --enable-sqlite @@ -719,17 +670,12 @@ or within a container. # We don't ship compileworthy python code, just oddball samples %global py_auto_byte_compile 0 -%configure %{Werror_config} %{dyninst_config} %{sqlite_config} %{crash_config} %{docs_config} %{rpm_config} %{java_config} %{virt_config} %{dracut_config} %{python3_config} %{python2_probes_config} %{python3_probes_config} %{httpd_config} %{bpf_config} %{debuginfod_config} --disable-silent-rules --with-extra-version="rpm %{version}-%{release}" +%configure %{dyninst_config} %{sqlite_config} %{crash_config} %{docs_config} %{rpm_config} %{java_config} %{virt_config} %{dracut_config} %{python3_config} %{python2_probes_config} %{python3_probes_config} %{httpd_config} %{bpf_config} %{debuginfod_config} --disable-silent-rules --with-extra-version="rpm %{version}-%{release}" make %{?_smp_mflags} V=1 %install make DESTDIR=$RPM_BUILD_ROOT install - -%if ! (%{with_python3}) -rm -v $RPM_BUILD_ROOT%{_bindir}/stap-profile-annotate -%endif - %find_lang %{name} for dir in $(ls -1d $RPM_BUILD_ROOT%{_mandir}/{??,??_??}) ; do dir=$(echo $dir | sed -e "s|^$RPM_BUILD_ROOT||") @@ -742,8 +688,6 @@ mkdir -p %{buildroot}%{_sysusersdir} echo '%_systemtap_runtime_preinstall' > %{buildroot}%{_sysusersdir}/systemtap-runtime.conf echo '%_systemtap_server_preinstall' > %{buildroot}%{_sysusersdir}/systemtap-server.conf echo '%_systemtap_testsuite_preinstall' > %{buildroot}%{_sysusersdir}/systemtap-testsuite.conf -mkdir -p %{buildroot}%{_tmpfilesdir} -echo '%_systemtap_server_preinstall_tmpfiles' > %{buildroot}%{_tmpfilesdir}/systemtap-server.conf %endif @@ -761,6 +705,9 @@ find testsuite -type f -name '.gitignore' -print0 | xargs -0 rm -f # permissions back to 04110 in the %files section below. chmod 755 $RPM_BUILD_ROOT%{_bindir}/staprun +#install the useful stap-prep script +install -c -m 755 stap-prep $RPM_BUILD_ROOT%{_bindir}/stap-prep + # Copy over the testsuite cp -rp testsuite $RPM_BUILD_ROOT%{_datadir}/systemtap @@ -866,52 +813,33 @@ done %if %{with_specific_python} # Some files got ambiguous python shebangs, we fix them after everything else is done -%py3_shebang_fix %{buildroot}%{python3_sitearch} %{buildroot}%{_bindir}/* +pathfix.py -pni "%{__python3} %{py3_shbang_opts}" %{buildroot}%{python3_sitearch} %{buildroot}%{_bindir}/* %endif -%check -%if %{with_check} -make check RUNTESTFLAGS=environment_sanity.exp -%endif - - %pre runtime %if %{with_sysusers} -%if (0%{?fedora} && 0%{?fedora} < 42) || (0%{?rhel} && 0%{?rhel} < 11) echo '%_systemtap_runtime_preinstall' | systemd-sysusers --replace=%{_sysusersdir}/systemtap-runtime.conf - -exit 0 -%endif %else getent group stapusr >/dev/null || groupadd -f -g 156 -r stapusr getent group stapsys >/dev/null || groupadd -f -g 157 -r stapsys getent group stapdev >/dev/null || groupadd -f -g 158 -r stapdev -getent passwd stapunpriv >/dev/null || \ - useradd -c "Systemtap Unprivileged User" -u 159 -g stapunpriv -d %{_localstatedir}/lib/stapunpriv -r -s /sbin/nologin stapunpriv 2>/dev/null || \ - useradd -c "Systemtap Unprivileged User" -g stapunpriv -d %{_localstatedir}/lib/stapunpriv -r -s /sbin/nologin stapunpriv -exit 0 %endif +exit 0 %pre server %if %{with_sysusers} -%if (0%{?fedora} && 0%{?fedora} < 42) || (0%{?rhel} && 0%{?rhel} < 11) echo '%_systemtap_server_preinstall' | systemd-sysusers --replace=%{_sysusersdir}/systemtap-server.conf - -echo '%_systemtap_server_preinstall_tmpfiles' | systemd-tmpfiles --replace=%{_tmpfilesdir}/systemtap-server.conf - -exit 0 -%endif %else getent group stap-server >/dev/null || groupadd -f -g 155 -r stap-server getent passwd stap-server >/dev/null || \ useradd -c "Systemtap Compile Server" -u 155 -g stap-server -d %{_localstatedir}/lib/stap-server -r -s /sbin/nologin stap-server 2>/dev/null || \ useradd -c "Systemtap Compile Server" -g stap-server -d %{_localstatedir}/lib/stap-server -r -s /sbin/nologin stap-server -exit 0 %endif +exit 0 %pre testsuite %if %{with_sysusers} -%if (0%{?fedora} && 0%{?fedora} < 42) || (0%{?rhel} && 0%{?rhel} < 11) echo '%_systemtap_testsuite_preinstall' | systemd-sysusers --replace=%{_sysusersdir}/systemtap-testsuite.conf - -exit 0 -%endif %else getent passwd stapusr >/dev/null || \ useradd -c "Systemtap 'stapusr' User" -g stapusr -r -s /sbin/nologin stapusr @@ -919,8 +847,8 @@ getent passwd stapsys >/dev/null || \ useradd -c "Systemtap 'stapsys' User" -g stapsys -G stapusr -r -s /sbin/nologin stapsys getent passwd stapdev >/dev/null || \ useradd -c "Systemtap 'stapdev' User" -g stapdev -G stapusr -r -s /sbin/nologin stapdev -exit 0 %endif +exit 0 %post server @@ -940,8 +868,7 @@ if [ ! -f ~stap-server/.systemtap/rc ]; then numcpu=`/usr/bin/getconf _NPROCESSORS_ONLN` if [ -z "$numcpu" -o "$numcpu" -lt 1 ]; then numcpu=1; fi nproc=`expr $numcpu \* 30` - # PR29661 -> 4G - echo "--rlimit-as=4294967296 --rlimit-cpu=60 --rlimit-nproc=$nproc --rlimit-stack=1024000 --rlimit-fsize=51200000" > ~stap-server/.systemtap/rc + echo "--rlimit-as=614400000 --rlimit-cpu=60 --rlimit-nproc=$nproc --rlimit-stack=1024000 --rlimit-fsize=51200000" > ~stap-server/.systemtap/rc chown stap-server:stap-server ~stap-server/.systemtap/rc fi @@ -1128,7 +1055,6 @@ exit 0 %if %{with_systemd} %{_unitdir}/stap-server.service %{_tmpfilesdir}/stap-server.conf -%{_tmpfilesdir}/systemtap-server.conf %else %{initdir}/stap-server %dir %{_sysconfdir}/stap-server/conf.d @@ -1152,9 +1078,7 @@ exit 0 %files devel -f systemtap.lang %{_bindir}/stap %{_bindir}/stap-prep -%if %{with_python3} %{_bindir}/stap-profile-annotate -%endif %{_bindir}/stap-report %dir %{_datadir}/systemtap %{_datadir}/systemtap/runtime @@ -1175,14 +1099,13 @@ exit 0 %if %{with_emacsvim} %{_emacs_sitelispdir}/*.el* %{_emacs_sitestartdir}/systemtap-init.el -%{_datadir}/vim/vimfiles +%{_datadir}/vim/vimfiles/*/*.vim %endif # Notice that the stap-resolve-module-function.py file is used by # *both* the python2 and python3 subrpms. Both subrpms use that same # python script to help list python probes. %if %{with_python3_probes} || %{with_python2_probes} %{_libexecdir}/systemtap/python/stap-resolve-module-function.py -%dir %{_libexecdir}/systemtap/python %exclude %{_libexecdir}/systemtap/python/stap-resolve-module-function.py? %endif @@ -1277,22 +1200,16 @@ exit 0 %files sdt-devel +%{_bindir}/dtrace %{_includedir}/sys/sdt.h %{_includedir}/sys/sdt-config.h +%{_mandir}/man1/dtrace.1* %{_rpmmacrodir}/macros.systemtap %doc README AUTHORS NEWS %{!?_licensedir:%global license %%doc} %license COPYING -%files sdt-dtrace -%{_bindir}/dtrace -%doc README AUTHORS NEWS -%{!?_licensedir:%global license %%doc} -%license COPYING -%{_mandir}/man1/dtrace.1* - - %files testsuite %dir %{_datadir}/systemtap %{_datadir}/systemtap/testsuite @@ -1349,119 +1266,29 @@ exit 0 %{_sbindir}/stap-exporter %endif -%files jupyter -%{_bindir}/stap-jupyter-container -%{_bindir}/stap-jupyter-install -%{_mandir}/man1/stap-jupyter.1* -%dir %{_datadir}/systemtap -%{_datadir}/systemtap/interactive-notebook - # ------------------------------------------------------------------------ # Future new-release entries should be of the form # * DDD MMM DD YYYY YOURNAME - V-R # - Upstream release, see wiki page below for detailed notes. -# https://sourceware.org/systemtap/wiki/SystemTapReleases +# http://sourceware.org/systemtap/wiki/SystemTapReleases # PRERELEASE %changelog -* Tue Jan 13 2026 Jonathan Wakely - 5.4-2 -- Patched to workaround Autoconf 2.72 incompatiblity with GCC 16 - -* Fri Oct 31 2025 Frank Ch. Eigler - 5.4-1 -- Upstream release, see wiki page below for detailed notes. - https://sourceware.org/systemtap/wiki/SystemTapReleases - -* Mon Sep 22 2025 Frank Ch. Eigler - 5.4-17585496g86ab88eb -- Automated weekly rawhide release -- Applied spec changes from upstream git - -* Mon Sep 22 2025 Frank Ch. Eigler - 5.4-17585473g1fe4178d -- Automated weekly rawhide release -- Applied spec changes from upstream git - -* Fri Sep 19 2025 Python Maint - 5.3-5 -- Rebuilt for Python 3.14.0rc3 bytecode - -* Fri Aug 15 2025 Python Maint - 5.3-4 -- Rebuilt for Python 3.14.0rc2 bytecode - -* Fri Jul 25 2025 Fedora Release Engineering - 5.3-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild - -* Tue Jun 03 2025 Python Maint - 5.3-2 -- Rebuilt for Python 3.14 - -* Fri May 02 2025 Frank Ch. Eigler - 5.3-1 -- Upstream release, see wiki page below for detailed notes. - https://sourceware.org/systemtap/wiki/SystemTapReleases - -* Thu Feb 06 2025 Frank Ch. Eigler - 5.3~pre17373816g7a71d34b.5 -- Respin against dyninst 13 redux - -* Fri Jan 24 2025 Frank Ch. Eigler - 5.3~pre17373816g7a71d34b.3 -- Respin against dyninst 13, sans dyninst on i686. - -* Mon Jan 20 2025 Frank Ch. Eigler - 5.3-17373816g7a71d34b -- Automated weekly rawhide release -- Applied spec changes from upstream git - -* Mon Jan 20 2025 Frank Ch. Eigler - 5.3-17373794g3efe129d -- Automated weekly rawhide release -- Applied spec changes from upstream git - -* Sun Jan 19 2025 Frank Ch. Eigler - 5.3-17373422g9a48fbea -- Automated weekly rawhide release -- Applied spec changes from upstream git - -* Sun Jan 19 2025 Frank Ch. Eigler - 5.2-17373420g1e894ff0 -- Automated weekly rawhide release -- Applied spec changes from upstream git - -* Sun Jan 19 2025 Fedora Release Engineering - 5.2-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild - -* Fri Nov 08 2024 Frank Ch. Eigler - 5.2-1 -- Upstream release, see wiki page below for detailed notes. - https://sourceware.org/systemtap/wiki/SystemTapReleases - -* Mon Oct 07 2024 William Cohen - 5.2-17283218gc5774e18 -- Automated weekly rawhide release -- Applied spec changes from upstream git - -* Tue Oct 01 2024 William Cohen - 5.2-17277956g0b7f6722 -- Automated weekly rawhide release -- Applied spec changes from upstream git - -* Fri Aug 30 2024 Frank Ch. Eigler - 5.2-17250223gd07e4284 -- Automated weekly rawhide release -- Applied spec changes from upstream git - -* Thu Aug 08 2024 Lumír Balhar - 5.2-pre -- Final split of sdt-dtrace and sdt-devel (rhbz#2296275) - https://fedoraproject.org/wiki/Changes/Separate_dtrace_package - -* Fri Apr 26 2024 Frank Ch. Eigler - 5.1-1 -- Upstream release, see wiki page below for detailed notes. - https://sourceware.org/systemtap/wiki/SystemTapReleases - -* Sat Nov 04 2023 Frank Ch. Eigler - 5.0-1 -- Upstream release, see wiki page below for detailed notes. - https://sourceware.org/systemtap/wiki/SystemTapReleases -- migrated to SPDX license - -* Fri Apr 28 2023 Frank Ch. Eigler - 4.9-1 -- Upstream release, see wiki page below for detailed notes. - https://sourceware.org/systemtap/wiki/SystemTapReleases - -* Thu Nov 03 2022 Serhei Makarov - 4.8-1 -- Upstream release, see wiki page below for detailed notes. - https://sourceware.org/systemtap/wiki/SystemTapReleases - * Mon May 02 2022 Frank Ch. Eigler - 4.7-1 - Upstream release, see wiki page below for detailed notes. https://sourceware.org/systemtap/wiki/SystemTapReleases +* Tue Dec 07 2021 Frank Ch. Eigler - 4.6-4 +- rhbz2029929 - reset sys/sdt.h asm operand constraints + +* Thu Dec 02 2021 Frank Ch. Eigler - 4.6-3 +- rhbz2026858 - arm32 sdt fixes +- sdt.h fixes for glibc s390 ftbfs + +* Thu Nov 25 2021 Martin Cermak - 4.6-2 +- rhbz2012907: Use sysuser.d/* for user/group management + * Mon Nov 15 2021 Serhei Makarov - 4.6-1 - Upstream release, see wiki page below for detailed notes. https://sourceware.org/systemtap/wiki/SystemTapReleases diff --git a/tests/Regression/python-probing/list.stp b/tests/Regression/python-probing/list.stp new file mode 100755 index 0000000..357fef6 --- /dev/null +++ b/tests/Regression/python-probing/list.stp @@ -0,0 +1,20 @@ +#!/usr/bin/stap -v +/* + Example usage of the Python systemtap tapset to show a nested view of all + Python function calls (and returns) across the whole system. + + Run this using + stap systemtap-example.stp + to instrument all Python processes on the system, or (for example) using + stap systemtap-example.stp -c COMMAND + to instrument a specific program (implemented in Python) +*/ +probe python.function.entry +{ + printf("%s => %s in %s:%d\n", thread_indent(1), funcname, filename, lineno); +} + +probe python.function.return +{ + printf("%s <= %s in %s:%d\n", thread_indent(-1), funcname, filename, lineno); +} diff --git a/tests/Regression/python-probing/main.fmf b/tests/Regression/python-probing/main.fmf new file mode 100644 index 0000000..1a5ec22 --- /dev/null +++ b/tests/Regression/python-probing/main.fmf @@ -0,0 +1,23 @@ +summary: Systemtap static probes test +description: | + This test checks basic functionality of Python's systemtap static + probes. It runs list & top systemtap scripts (examples from the + python rpm) and then a python script using the "random" module. + Finally it checks that the "random" module is correctly listed in + the output of both systemtap scripts. +contact: Petr Splichal +component: +- python +- systemtap +test: ./runtest.sh +framework: beakerlib +recommend: +- python +- python-debuginfo +- systemtap +- python2 +- python3 +- elfutils +duration: 15m +extra-summary: /CoreOS/python/Sanity/systemtap +extra-task: /CoreOS/python/Sanity/systemtap diff --git a/tests/Regression/python-probing/runtest.sh b/tests/Regression/python-probing/runtest.sh new file mode 100755 index 0000000..52c7091 --- /dev/null +++ b/tests/Regression/python-probing/runtest.sh @@ -0,0 +1,81 @@ +#!/bin/bash +# vim: dict=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# runtest.sh of /CoreOS/python/Sanity/systemtap +# Description: Systemtap static probes test +# Author: Petr Splichal +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Copyright (c) 2011 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 rhts environment +. /usr/share/beakerlib/beakerlib.sh || exit 1 + +# Packages to be tested +PACKAGES="${PACKAGES:-python3}" +# Other required packages +REQUIRES=${REQUIRES:-} +# Binary name parametrized +PYTHON="${PYTHON:-python3}" + +package=$(rpm -qf --queryformat '%{name}\n' $(which $PYTHON)) +collection_path=$(which python | sed 's/\/usr\/bin\/python//') + +rlJournalStart + rlPhaseStartSetup + rlAssertRpm --all + rlAssertRpm "systemtap" + rlLogInfo "Running on kernel: $(uname -r)" + rlRun "rpm -qa 'systemtap*'" 0 "Checking systemtap packages" + rlRun "TmpDir=\`mktemp -d\`" 0 "Creating tmp directory" + rlRun "cp list.stp top.stp test.py $TmpDir" 0 "Copying scripts" + rlRun "pushd $TmpDir" + rlPhaseEnd + + rlPhaseStartTest "Verifying ELF file for presence of .probes section" + for lib in ${collection_path}/usr/lib*/libpython*.so.* ; do + rlRun "eu-readelf -x .probes $lib" \ + 0 "Checking for .probes section within $lib" + done + rlPhaseEnd + + # Note that typically you need to be root to run "stap" (or be within + # an appropriate group) + for script in list top; do + rlPhaseStartTest "Test $script" + rlRun "rm -rf ~/.systemtap/cache" 0 "Cleaning cache" + rlRun "stap $script.stp -v -c \"$PYTHON test.py\" > $script" \ + 0 "Testing with $script.stp" + rlRun "tail -100 $script | col -b" 0 "Inspecting output" + if ! rlRun "grep '/usr/lib.*python.*random.py' '$script'" \ + 0 "Checking for random in the $script output"; then + rlRun "stap $script.stp -vvv -c \"$PYTHON test.py\" > $script" \ + 0 "Running $script.stp once more in verbose mode" + fi + rlPhaseEnd + done + + rlPhaseStartCleanup + rlRun "popd" + rlRun "rm -r $TmpDir" 0 "Removing tmp directory" + rlPhaseEnd +rlJournalPrintText +rlJournalEnd diff --git a/tests/Regression/python-probing/test.py b/tests/Regression/python-probing/test.py new file mode 100755 index 0000000..65cc0b7 --- /dev/null +++ b/tests/Regression/python-probing/test.py @@ -0,0 +1,3 @@ +import random, time +print(random.random()) +time.sleep(3) diff --git a/tests/Regression/python-probing/top.stp b/tests/Regression/python-probing/top.stp new file mode 100755 index 0000000..b5645b2 --- /dev/null +++ b/tests/Regression/python-probing/top.stp @@ -0,0 +1,21 @@ +#!/usr/bin/stap -v + +global fn_calls; + +probe python.function.entry +{ + fn_calls[pid(), filename, funcname, lineno] += 1; +} + +probe timer.ms(1000) { + printf("\033[2J\033[1;1H") /* clear screen */ + printf("%6s %80s %6s %30s %6s\n", + "PID", "FILENAME", "LINE", "FUNCTION", "CALLS") + foreach ([pid, filename, funcname, lineno] in fn_calls- limit 1000) { + printf("%6d %80s %6d %30s %6d\n", + pid, filename, lineno, funcname, + fn_calls[pid, filename, funcname, lineno]); + } + + delete fn_calls; +} diff --git a/tests/Regression/small-tests/main.fmf b/tests/Regression/small-tests/main.fmf new file mode 100644 index 0000000..d659ce8 --- /dev/null +++ b/tests/Regression/small-tests/main.fmf @@ -0,0 +1,14 @@ +summary: suns small tests +description: '' +contact: Martin Cermak +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 diff --git a/tests/Regression/small-tests/runtest.sh b/tests/Regression/small-tests/runtest.sh new file mode 100755 index 0000000..6f3e1c2 --- /dev/null +++ b/tests/Regression/small-tests/runtest.sh @@ -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 +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# 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 diff --git a/tests/Sanity/byteman-java-methods-probing/ThreadedExample.java b/tests/Sanity/byteman-java-methods-probing/ThreadedExample.java new file mode 100644 index 0000000..8aa0f83 --- /dev/null +++ b/tests/Sanity/byteman-java-methods-probing/ThreadedExample.java @@ -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(); + } + } +} + diff --git a/tests/Sanity/byteman-java-methods-probing/ThreadedExample.stp b/tests/Sanity/byteman-java-methods-probing/ThreadedExample.stp new file mode 100644 index 0000000..2aaa08c --- /dev/null +++ b/tests/Sanity/byteman-java-methods-probing/ThreadedExample.stp @@ -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() +} + + diff --git a/tests/Sanity/byteman-java-methods-probing/main.fmf b/tests/Sanity/byteman-java-methods-probing/main.fmf new file mode 100644 index 0000000..607b883 --- /dev/null +++ b/tests/Sanity/byteman-java-methods-probing/main.fmf @@ -0,0 +1,12 @@ +summary: byteman-java-methods-probing +description: '' +contact: Martin Cermak +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 diff --git a/tests/Sanity/byteman-java-methods-probing/runtest.sh b/tests/Sanity/byteman-java-methods-probing/runtest.sh new file mode 100755 index 0000000..f60f287 --- /dev/null +++ b/tests/Sanity/byteman-java-methods-probing/runtest.sh @@ -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 +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# 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 diff --git a/tests/Sanity/kernel-modules/Makefile.template b/tests/Sanity/kernel-modules/Makefile.template new file mode 100644 index 0000000..a8bfffb --- /dev/null +++ b/tests/Sanity/kernel-modules/Makefile.template @@ -0,0 +1,3 @@ +obj-m := MODULENAME.o +module: + make -C /lib/modules/$(shell uname -r)/build KBUILD_EXTMOD=DIRECTORY SUBDIRS=DIRECTORY modules diff --git a/tests/Sanity/kernel-modules/main.fmf b/tests/Sanity/kernel-modules/main.fmf new file mode 100644 index 0000000..88e2d17 --- /dev/null +++ b/tests/Sanity/kernel-modules/main.fmf @@ -0,0 +1,17 @@ +summary: Tests systemtap working with kernel modules +description: '' +contact: Petr Muller +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 diff --git a/tests/Sanity/kernel-modules/module.c b/tests/Sanity/kernel-modules/module.c new file mode 100644 index 0000000..427ddbc --- /dev/null +++ b/tests/Sanity/kernel-modules/module.c @@ -0,0 +1,20 @@ +#include /* Needed by all modules */ +#include /* 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"); diff --git a/tests/Sanity/kernel-modules/runtest.sh b/tests/Sanity/kernel-modules/runtest.sh new file mode 100755 index 0000000..b8d32d8 --- /dev/null +++ b/tests/Sanity/kernel-modules/runtest.sh @@ -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 +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# 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 diff --git a/tests/Sanity/quick-smoke-test/main.fmf b/tests/Sanity/quick-smoke-test/main.fmf new file mode 100644 index 0000000..0c8a945 --- /dev/null +++ b/tests/Sanity/quick-smoke-test/main.fmf @@ -0,0 +1,15 @@ +summary: Quick test that systemtap generally works +description: '' +contact: +- Petr Muller +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 diff --git a/tests/Sanity/quick-smoke-test/runtest.sh b/tests/Sanity/quick-smoke-test/runtest.sh new file mode 100755 index 0000000..f04c2f1 --- /dev/null +++ b/tests/Sanity/quick-smoke-test/runtest.sh @@ -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 diff --git a/tests/Sanity/stap-server-basic-sanity/main.fmf b/tests/Sanity/stap-server-basic-sanity/main.fmf new file mode 100644 index 0000000..248ecde --- /dev/null +++ b/tests/Sanity/stap-server-basic-sanity/main.fmf @@ -0,0 +1,17 @@ +summary: stap-server-basic-sanity +description: '' +contact: Martin Cermak +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 diff --git a/tests/Sanity/stap-server-basic-sanity/runtest.sh b/tests/Sanity/stap-server-basic-sanity/runtest.sh new file mode 100755 index 0000000..e121a51 --- /dev/null +++ b/tests/Sanity/stap-server-basic-sanity/runtest.sh @@ -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 +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# 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 diff --git a/tests/Sanity/userspace-probes/hello.c b/tests/Sanity/userspace-probes/hello.c new file mode 100644 index 0000000..60dac5b --- /dev/null +++ b/tests/Sanity/userspace-probes/hello.c @@ -0,0 +1,7 @@ +#include + +int main(void) { + printf("Hello world!\n"); + return 0; +} + diff --git a/tests/Sanity/userspace-probes/main.fmf b/tests/Sanity/userspace-probes/main.fmf new file mode 100644 index 0000000..b509a17 --- /dev/null +++ b/tests/Sanity/userspace-probes/main.fmf @@ -0,0 +1,16 @@ +summary: userspace-probes +description: '' +contact: Martin Cermak +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 diff --git a/tests/Sanity/userspace-probes/runtest.sh b/tests/Sanity/userspace-probes/runtest.sh new file mode 100755 index 0000000..a25899b --- /dev/null +++ b/tests/Sanity/userspace-probes/runtest.sh @@ -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 +# +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# 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 diff --git a/tests/Sanity/userspace-probes/testcase1.sh b/tests/Sanity/userspace-probes/testcase1.sh new file mode 100755 index 0000000..818d2cd --- /dev/null +++ b/tests/Sanity/userspace-probes/testcase1.sh @@ -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" diff --git a/tests/Sanity/userspace-probes/testcase2.sh b/tests/Sanity/userspace-probes/testcase2.sh new file mode 100755 index 0000000..d270d09 --- /dev/null +++ b/tests/Sanity/userspace-probes/testcase2.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +stap --runtime=dyninst -e 'probe end { printf("*** exiting ***\n"); exit() }' -c "$1/hello" -o "$1/stapout.log" +