[DRE-maint] Experimenting with autopkgtest

Antonio Terceiro terceiro at debian.org
Sun Sep 22 15:23:56 UTC 2013


On Fri, Sep 20, 2013 at 11:19:04AM +0200, Jérémy Bobbio wrote:
> Hi!
> 
> As a recreational break, I took a couple of hours to look at how we
> could add support for autopkgtest [1] in Ruby packages.
> 
> I've used ruby-backports as a playground. See the `pu/autopkgtest`
> branch in the Git repository [2].
> 
> [1] http://anonscm.debian.org/gitweb/?p=autopkgtest/autopkgtest.git;a=blob_plain;f=doc/README.package-tests;hb=HEAD
> [2] http://anonscm.debian.org/gitweb/?p=pkg-ruby-extras/ruby-backports.git;a=shortlog;h=refs/heads/pu/autopkgtest
> 
> Here's some highlihts on the patch:
> 
> diff --git a/debian/tests/control b/debian/tests/control
> new file mode 100644
> index 0000000..c684055
> --- /dev/null
> +++ b/debian/tests/control
> @@ -0,0 +1,2 @@
> +Tests: gem2deb
> +Depends: gem2deb rake
> 
> I decided to name the test `gem2deb` because my hope is that we can
> have the code starting the tests as part as gem2deb.
> 
> In the specific case of ruby-backports, `ruby-tests.rb` starts the test
> suite by using rake to launch a target in upstream Rakefile.
> 
> diff --git a/debian/tests/gem2deb b/debian/tests/gem2deb
> new file mode 100755
> index 0000000..d48b2ed
> --- /dev/null
> +++ b/debian/tests/gem2deb
> @@ -0,0 +1,55 @@
> +#!/usr/bin/ruby
> +
> +require 'gem2deb/metadata'
> +require 'gem2deb/dh_ruby'
> +require 'tmpdir'
> +require 'fileutils'
> +
> +class Tester < Gem2Deb::DhRuby
> +  def run
> +    run_tests
> +  end
> +end
> +
> +unless ENV['ADTTMP']
> +  $stderr.puts 'ADTTMP is not set. Exiting'
> +  exit 1
> +end
> +
> +dest = ENV['ADTTMP']
> +
> +unless Dir.entries(dest) == ['.', '..']
> +  $stderr.puts 'ADTTMP is not empty. Exiting'
> +  exit 1
> +end
> +
> +# Copy test files
> +metadata = Gem2Deb::Metadata.new('.')
> +metadata.test_files.each do |path|
> +  next if File.directory?(path)
> +  FileUtils.mkdir_p File.join(dest, File.dirname(path))
> +  FileUtils.install path, File.join(dest, path)
> +end
> +
> +# Copy Rakefile if there's one
> +# XXX: not sure if we need that
> +FileUtils.cp 'Rakefile', dest if File.exists?('Rakefile')
> +
> +# Dump gemspecs in static form (because upstream gemspec might use Git or
> +# other tools)
> +Dir.glob('*.gemspec').each do |path|
> +  spec = Gem::Specification.load(path)
> +  File.open(File.join(dest, path), 'w') { |f| f.write(spec.to_ruby) }
> +end
> +
> +
> +# Copy Debian directory
> +FileUtils.cp_r 'debian', dest
> +
> +# Copy metadata for DhRuby
> +FileUtils.cp 'metadata.yml', dest
> +
> +# Run the tests
> +Dir.chdir(dest) do
> +  Tester.new.run
> +end
> 
> So the idea here is that we use the empty directory that autopkgtest
> creates for us and populate it with the test files declared in the
> gemspec. We also copy/generate enough other files so DhRuby is happy to
> run the tests as dh_ruby usually does.
> 
> Pretty small, but not the nicest.
> 
> I also had to patch the upstream test suite because it assumed it was
> run in the same source tree as the library.
> 
> Anyone should feel free to take it up from here, I don't think I'll
> spend more time on this anytime soon.

This looks good, thanks for sharing.

I was thinking on something along these lines. But since I don't really
trust that test_files will be usually filled correctly, I imagined copying
everything *except* lib/ and ext/ to make sure it would run against the
installed code, instead of copying specific bits.

But then there's also the case where the package assumes other
directories alongside lib/ and ext and we have to patch it out to read
from /usr/share/$pkg or something like that, so not copying everything
will help us catch problems with that early.

-- 
Antonio Terceiro <terceiro at debian.org>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: Digital signature
URL: <http://lists.alioth.debian.org/pipermail/pkg-ruby-extras-maintainers/attachments/20130922/43df8578/attachment.sig>


More information about the Pkg-ruby-extras-maintainers mailing list