[Fedora-packaging] How to handle tests in %check

Toshio Kuratomi a.badger at gmail.com
Thu Sep 5 15:57:43 UTC 2013


On Thu, Sep 05, 2013 at 09:21:31AM +0200, Miroslav Suchy wrote:
> Hi,
> I would like to ask on your opinion on
> https://bugzilla.redhat.com/show_bug.cgi?id=912960#c25
> 
> Mamoru have in spec in %check section:
>   ruby -Ilib:test ./test/run-test.rb || echo "Please investigate this"
> 
> I'm saying that it should not be waived this way as it waive all failure.
> I'm saying that if there is no failure, it should be just:
>   ruby -Ilib:test ./test/run-test.rb
> and if there happened some problem which need upstream attention and
> could not be fixed immediatelly, it should be replaced with something
> like:
>   FILE=$(mktemp)
>   ruby -Ilib:test ./test/run-test.rb | tee $FILE || :
>   # test foo is failing, reported as http://foo/issue/1
>   cat $FILE | grep "4 tests, 4 assertions, 1 failures, 0 errors, 0
> pendings, 0 omissions, 0 notifications
> 
> Mamoru disagree. For me it is blocker.
> I would like to ask for your opinions. Which way is correct and
> should it be blocker for review?
> 
As mschwendt and scop have replied, at the moment there is nothing in the
guidelines to prevent disabling of the entire testsuite but reviewers are
able to exercise their best judgement here.

When I run across failures in testsuites in my own packages my order of
fixing is:

1) Try to fix the code and submit the patch upstream
1b) If I can't figure out the issue, submit the problem upstream and hope
    they'll come up with a solution quickly.
2) If upstream's "quickly" isn't quick enough, I may disable just that one
   test.  Sometimes this can be done with a command line switch to exclude
   a named test.  Other times I have to resort to a temporary patch to
   remove this.  Comment why the test is disabled.  This depends on me
   feeling that the test isn't instrumental to the package's functionality
   (for me, this falls under: "SHOULD: The reviewer should test that the
   package functions as described.  A package should not segfault instead of
   running, for example." from
   https://fedoraproject.org/wiki/Packaging:ReviewGuidelines )

For my own packages, I have rejected build fixes that disable the entire
testsuite for a few failing tests.

When reviewing packages, I do require people to follow a variation of what
I mention above.  I provide patches to disable specific tests if that is
necessary.  I've never encountered a situation where the packager actively
wants to disable the whole suite, however, so I don't know whether I would
continue the review in that situation or not.

For https://bugzilla.redhat.com/show_bug.cgi?id=912960#c25 I do agree with
Mamoru that grep is not a good solution.  I would propose a patch in this
case.  This particular test failure looks like it's a difference in rounding
the results which the GDK docs appear to allow:
https://developer.gnome.org/gdk3/stable/gdk3-RGBA-Colors.html#gdk-rgba-to-string

So I'm thinking this is a test case that's too-strict.  I'm neither a ruby
nor a gtk guy but I think I have a patch that you could submit upstream
based on this.  I'll attach it here.

Also, not disabling the tests en masse seems to be a good idea -- I just
tried to scratch build this on f20 and found that there's been changes that
cause a different error to be thrown.  I'll attach a patch for that as well
(note -- you may have to conditionalize which Fedora releases that gets
applied on.  I'm not certain when the API changed.)

And just for good measure, I'll attach the spec file I used as well

Successful build: http://koji.fedoraproject.org/koji/taskinfo?taskID=5900043

-Toshio
-------------- next part --------------
diff -up gdk3/gdk3-1.2.6/lib/gdk3/base.rb.new-gnome gdk3/gdk3-1.2.6/lib/gdk3/base.rb
--- gdk3/gdk3-1.2.6/lib/gdk3/base.rb.new-gnome	2013-09-05 08:11:27.703032716 -0700
+++ gdk3/gdk3-1.2.6/lib/gdk3/base.rb	2013-09-05 08:11:42.487891416 -0700
@@ -10,7 +10,7 @@ require 'gdk_pixbuf2'
 base_dir = Pathname.new(__FILE__).dirname.dirname.dirname.expand_path
 vendor_dir = base_dir + "vendor" + "local"
 vendor_bin_dir = vendor_dir + "bin"
-GLib.prepend_environment_path(vendor_bin_dir)
+GLib.prepend_dll_path(vendor_bin_dir)
 begin
   major, minor, _ = RUBY_VERSION.split(/\./)
   require "#{major}.#{minor}/gdk3.so"
-------------- next part --------------
diff -up gdk3/gdk3-1.2.6/test/test-gdk-rgba.rb.precision gdk3/gdk3-1.2.6/test/test-gdk-rgba.rb
--- gdk3/gdk3-1.2.6/test/test-gdk-rgba.rb.precision	2013-09-05 08:38:41.735194176 -0700
+++ gdk3/gdk3-1.2.6/test/test-gdk-rgba.rb	2013-09-05 08:46:10.125305290 -0700
@@ -19,6 +19,6 @@
 class TestGdkRGBA < Test::Unit::TestCase
   def test_to_s
     rgba = Gdk::RGBA.new(0.1, 0.2, 0.3, 0.5)
-    assert_equal("rgba(26,51,77,0.5)", rgba.to_s)
+    assert_match(/rgba\((26|25),51,(77|76),0.5\)/, rgba.to_s)
   end
 end
-------------- next part --------------
%global	header_dir	%{ruby_vendorarchdir}
%global	gem_name	gdk3
%global	glib_min_ver	1.2.1

%if 0%{?fedora} < 19
%global	rubyabi	1.9.1
%endif

Summary:	Ruby binding of GDK-3.x
Name:		rubygem-%{gem_name}
Version:	1.2.6
Release:	1%{?dist}

Group:		Development/Languages
# Various files in gem
License:	LGPLv2+
URL:		http://ruby-gnome2.sourceforge.jp/
Source0:	http://rubygems.org/gems/%{gem_name}-%{version}.gem
# https://raw.github.com/ruby-gnome2/ruby-gnome2/master/gdk3/COPYING.LIB
# Renamed to avoid overwrite on SOURCE dir
Source1:	COPYING.LIB.gdk3

Patch0: rubygem-gdk3-new-glib.patch
Patch1: rubygem-gdk3-precision.patch

%if 0%{?fedora} >= 19
Requires:	ruby(release)
BuildRequires:	ruby(release)
%else
Requires:	ruby(abi) = %{rubyabi}
Requires:	ruby
BuildRequires:	ruby(abi) = %{rubyabi}
BuildRequires:	ruby
%endif

Requires:	ruby(rubygems) 
Requires:	rubygem(glib2) >= %{glib_min_ver}
Requires:	rubygem(atk)
Requires:	rubygem(pango)
Requires:	rubygem(gdk_pixbuf2)
BuildRequires:	ruby-devel
BuildRequires:	rubygems-devel
BuildRequires:	rubygem-glib2-devel >= %{glib_min_ver}
BuildRequires:	rubygem-pango-devel
BuildRequires:	gtk3-devel
# %%check
BuildRequires:	rubygem(gdk_pixbuf2)
BuildRequires:	rubygem(test-unit)
BuildRequires:	rubygem(test-unit-notify)
Provides:	rubygem(%{gem_name}) = %{version}-%{release}

%description
Ruby/GDK3 is a Ruby binding of GDK-3.x.

%package	devel
Summary:	Ruby/GLib development environment
Group:		Development/Languages
Requires:	%{name}%{?isa} = %{version}-%{release}
Requires:	gtk3-devel%{?isa}
Requires:	ruby-devel%{?isa}

%description devel
Header files and libraries for building a extension library for the
rubygem-%{gem_name}

%package	doc
Summary:	Documentation for %{name}
Group:		Documentation
Requires:	%{name} = %{version}-%{release}
BuildArch:	noarch

%description doc
Documentation for %{name}

%prep
%setup -q -c -T

TOPDIR=$(pwd)
mkdir tmpunpackdir
pushd tmpunpackdir

gem unpack %{SOURCE0}
cd %{gem_name}-%{version}

# Needed on at least f20
%patch0 -p2 -b .new-glib

# Different precision/rounding on different systems
%patch1 -p2 -b .precision

# Permission
find . -name \*.rb -print0 | xargs --null chmod 0644

gem specification -l --ruby %{SOURCE0} > %{gem_name}.gemspec

# Add license text
install -cpm 644 %{SOURCE1} ./COPYING.LIB
sed -i -e '/files =/s|\("Rakefile",\)|\1 "COPYING.LIB", |' \
	%{gem_name}.gemspec

gem build %{gem_name}.gemspec
mv %{gem_name}-%{version}.gem $TOPDIR

popd
rm -rf tmpunpackdir

%build
mkdir -p .%{gem_dir}

export CONFIGURE_ARGS="--with-cflags='%{optflags} -Werror-implicit-function-declaration'"
export CONFIGURE_ARGS="$CONFIGURE_ARGS --with-pkg-config-dir=$(pwd)%{_libdir}/pkgconfig"
%gem_install

%install
mkdir -p %{buildroot}%{gem_dir}
cp -a .%{gem_dir}/* \
	%{buildroot}%{gem_dir}/

# move header files, C extension files to the correct directory
pushd %{buildroot}

mkdir -p .%{header_dir}
mv .%{gem_instdir}/lib/*.h .%{header_dir}/

mkdir -p .%{gem_extdir_mri}/lib
mv .%{gem_instdir}/lib/%{gem_name}.so .%{gem_extdir_mri}/lib/
popd

# move pkgconfig file
mkdir %{buildroot}%{_libdir}/pkgconfig
install -cpm 644 ./%{_libdir}/pkgconfig/*.pc \
	%{buildroot}%{_libdir}/pkgconfig/

# Cleanups
pushd %{buildroot}
rm -rf .%{gem_instdir}/ext/
rm -f .%{gem_instdir}/extconf.rb
popd

%check
pushd .%{gem_instdir}

# kill unneeded make process
rm -rf ./TMPBINDIR
mkdir ./TMPBINDIR
pushd ./TMPBINDIR
ln -sf /bin/true make
export PATH=$(pwd):$PATH
popd

%if 0%{?fedora} <= 18
sed -i.utest \
	-e '\@^require at s|^.*test-unit.*$|gem "test-unit"\nrequire "test/unit"|' \
	test/gdk-test-utils.rb
%endif
ruby -Ilib:test ./test/run-test.rb

popd


%files
%doc	%{gem_instdir}/[A-Z]*
%exclude	%{gem_instdir}/Rakefile
%dir	%{gem_instdir}/
%dir	%{gem_instdir}/lib/
%{gem_instdir}/lib/%{gem_name}.rb
%dir	%{gem_instdir}/lib/%{gem_name}/
%{gem_instdir}/lib/%{gem_name}/*.rb

%dir	%{gem_extdir_mri}/
%dir	%{gem_extdir_mri}/lib/
%{gem_extdir_mri}/lib/%{gem_name}.so

%exclude %{gem_cache}
%{gem_spec}

%files	devel
%{_libdir}/pkgconfig/ruby-%{gem_name}.pc
%{header_dir}/rbgdk3.h
%{header_dir}/rbgdk3conversions.h

%files	doc
%doc	%{gem_docdir}/
%exclude	%{gem_instdir}/test/

%changelog
* Mon Apr 29 2013 Mamoru TASAKA <mtasaka at fedoraproject.org> - 1.2.6-1
- 1.2.6

* Fri Mar 22 2013 Mamoru TASAKA <mtasaka at fedoraproject.org> - 1.2.3-1
- 1.2.3

* Mon Feb 18 2013 Mamoru TASAKA <mtasaka at fedoraproject.org> - 1.2.1-1
- Initial package
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 198 bytes
Desc: not available
URL: <http://lists.fedoraproject.org/pipermail/packaging/attachments/20130905/e9b42068/attachment.sig>


More information about the packaging mailing list