diff options
Diffstat (limited to 'qa/common.rpm')
-rw-r--r-- | qa/common.rpm | 212 |
1 files changed, 212 insertions, 0 deletions
diff --git a/qa/common.rpm b/qa/common.rpm new file mode 100644 index 0000000..22f3f58 --- /dev/null +++ b/qa/common.rpm @@ -0,0 +1,212 @@ +# +# Copyright (c) 2013-2014 Red Hat. +# +# Common pre-test checking and settings for pmdarpm QA. Handles +# setup for the basic environment needed for all RPM PMDA tests. +# + +# get standard environment, filters and checks +. ./common.product +. ./common.filter +. ./common.check + +_rpm_support_tests() +{ + which rpmbuild >/dev/null 2>&1 || _notrun "No rpmbuild binary found" + test -x "$PCP_PMDAS_DIR/rpm/pmdarpm" || _notrun "pmdarpm not installed" +} + +_rpm_pmda_prepare() +{ + _prepare_pmda_install rpm + cd $PCP_PMDAS_DIR/rpm + $sudo ./Install </dev/null >/dev/null 2>&1 + cd $here +} + +_rpm_pmda_restore() +{ + _restore_pmda_install rpm + cd $here +} + +_remove_rpm_pmda() +{ + cd $PCP_PMDAS_DIR/rpm + $sudo ./Remove < /dev/null > /dev/null 2>&1 + cd $here +} + +# +# Build a spec file and source tarball for a test RPM. +# Sample specfile based on the Maximum RPM book example +# cos I'm too lame to come up with my own lame example. +# +# If successful sets variables on return for later use: +# $rpm_{bin,dbg,src}_pkg $rpm_spec $rpm_name +# +_rpm_package_prepare() +{ + echo "Preparing RPM package" + dir=$tmp.build.dir + mkdir -p $dir + + tgz=qaplayer-1.0.tgz + tar=$dir/$tgz + usr=`id -u -n` + grp=`id -g -n` + + # prepare the spec file + cat >$dir/qaplayer.spec <<End-of-file +Summary: A QA player app that rocks! +Name: qaplayer +Version: 1.0 +Release: 1 +License: GPL +BuildArch: noarch +Group: Applications/Sound +Source: $tgz +URL: http://www.gnomovision.com/qaplayer/qaplayer.html +Distribution: WSS Linux +Vendor: White Socks Software, Inc. +Packager: Santa Claus <sclaus@northpole.com> +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-$usr + +%description +It slices! It dices! It's a QA player app that +can't be beat. By using the resonant frequency +of the QA itself, it is able to simulate 20X +oversampling. This leads to sound quality that +cannot be equaled with more mundane software... + +%prep +%setup + +%clean +rm -Rf \$RPM_BUILD_ROOT + +%build +%install +mkdir -p \$RPM_BUILD_ROOT/%{_localstatedir}/qaplayer + +%files +%defattr(-,$usr,$grp) +%dir %{_localstatedir}/qaplayer +End-of-file + + echo file: $dir/qaplayer.spec >> seq.full + cat $dir/qaplayer.spec >> $seq.full + + # prepare a source tarball + mkdir qaplayer-1.0 2>/dev/null + ln $seq qaplayer-1.0/$seq 2>/dev/null + tar czf $dir/qaplayer-1.0.tgz qaplayer-1.0/$seq + rm -fr qaplayer-1.0 + + # prepare an installable RPM + rpmbuild -ba \ + --define "_topdir $dir" \ + --define '_builddir %{_topdir}' \ + --define '_sourcedir %{_topdir}' \ + --define '_rpmdir %{_topdir}' \ + --define '_srcrpmdir %{_topdir}' \ + --define '_specdir %{_topdir}' \ + --define '_rpmfilename %%{NAME}-%%{VERSION}-%%{RELEASE}.noarch.rpm' \ + $dir/qaplayer.spec >> $seq.full 2>&1 + + rpm_dbg_pkg=$dir/qaplayer-debuginfo-1.0-1.noarch.rpm + rpm_bin_pkg=$dir/qaplayer-1.0-1.noarch.rpm + rpm_src_pkg=$dir/qaplayer-1.0-1.src.rpm + rpm_spec=$dir/qaplayer.spec + rpm_name=qaplayer + rpm_inst=qaplayer-1.0-1.noarch +} + +_rpm_prepare_check() +{ + if [ "X$rpm_name" = "X" -o "X$rpm_inst" = "X" ] + then + echo "QA test bug - _rpm_package_prepare not yet done?" + exit 1 + fi +} + +_rpm_package_install() +{ + if [ "X$rpm_name" != "X" ] + then + rpm -q $rpm_name >/dev/null 2>&1 + if [ $? -eq 0 ] + then + echo "$rpm_name already installed!?!" + else + echo "Installing $rpm_name" | tee -a $seq.full + echo "RPM pathname: $rpm_bin_pkg" >> $seq.full + $sudo rpm -i $rpm_bin_pkg >> $seq.full 2>&1 + $sudo rpm -qa >> $seq.full 2>&1 + fi + fi +} + +_rpm_package_install_await() +{ + countdown=150 # 15 seconds + + _rpm_prepare_check + while [ $countdown -gt 0 ] + do + pminfo -f rpm.arch | grep -q "or \"$rpm_inst\"]" && return 0 + pmsleep 0.1 + countdown=`expr $countdown - 1` + done + + echo "rpm_package_install_await gave up awaiting $rpm_inst install!" + exit 1 +} + +_rpm_package_remove() +{ + if [ "X$rpm_name" != "X" ] + then + if rpm -q $rpm_name >/dev/null 2>&1 + then + echo "Removing $rpm_name" | tee -a $seq.full + $sudo rpm -e $rpm_name >> $seq.full 2>&1 + fi + fi +} + +_rpm_package_remove_await() +{ + countdown=150 # 15 seconds + + _rpm_prepare_check + while [ $countdown -gt 0 ] + do + pminfo -f rpm.arch | grep -q "or \"$rpm_inst\"]" || return 0 + pmsleep 0.1 + countdown=`expr $countdown - 1` + done + + echo "rpm_package_remove_await gave up awaiting $rpm_name removal!" + exit 1 +} + + +_rpm_cleanup() +{ + $remove_on_cleanup && _remove_rpm_pmda + + # replace the pmcd setup with original + _rpm_pmda_restore + + # remove any newly installed RPM + _rpm_package_remove + + $sudo rm -fr $tmp.*.dir + $sudo rm -f $tmp.* + exit $status +} + +remove_on_cleanup=true +pminfo rpm >/dev/null 2>&1 && remove_on_cleanup=false |