Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
The code driving the parallel smoker
Perl Other
branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
archive
cgi-bin
etc
lib/CPAN/Testers
utils
.gitignore
Makefile.PL
README
SlayMakefile
nosmoke_5159_2.yml
smoke_5124RC2.yml
smoke_5140RC0.yml
smoke_5140RC0_2.yml
smoke_5140RC0_3.yml
smoke_5140RC0_4.yml
smoke_5140RC0_5.yml
smoke_5140RC1_1.yml
smoke_5140RC2_1.yml
smoke_5140RC3_1.yml
smoke_5140_1.yml
smoke_5141RC1.yml
smoke_5159.yml
smoke_5159linux.yml
smoke_5160RC0.yml
smoke_51911.yml
smoke_pre_5.14.0.yml
smoke_testsimple005.yml

README

Smoke the CPAN in parallel
--------------------------

The idea is to find regressions between e.g. two perl versions or two
versions of a basic perl module. The CPAN::Testers::ParallelSmoker
framework helps to setup such a system with small effort, i.e. writing
a small configuration file should be enough.

Documentation is not there yet, unfortunately, and initial efforts to
get the smoker running is still high. But after this step it is quite
easy to create new smokers.

Installation
------------

Currently it's not proposed to install this distribution the usual
way. Just fetch all the prerequisites mentioned in the Makefile.PL.
Note that not all prerequisites are strictly needed for the parallel
smoker; some are just for analyzing utilities.

Make sure that CPAN.pm is configured and the indexes are loaded (at
least call once "reload index" in the CPAN shell).

Writing the configuration file
------------------------------

Create a YAML file which looks like the existing smoke*.yml files in
the distribution (in the toplevel directory or "archive" directory).

The most important fields are:

* testlabel: a unique, short label which is used to create unique
  subdirectories per smoke run. Do not use exotic characters.

* perl1, perl2: If comparing two perls, then specify either the url to
  fetch the perl distribution from, or a commit id, if building a
  specific bleadperl version is needed.

* git_repository: The filesystem path to a git clone of perl's source.
  This is needed if any of perl1 or perl2 is specified by "commit".

* modlist: a list of modules to smoke. Best is to use the utility
  "utils/create_modlist_by_years.pl" for this. Note that the first run
  of this utility is usually quite slow, as many files from CPAN need
  to be fetched (a local copy could help here).

Starting the smoker
-------------------

    slaymake CONFIG_FILE=smoke_something.yml

This will fetch, extract, build the perls, install the toolchain
needed for distroprefs and sending reports, and finally starting two
xterms where the modules are smoked.

The reports are stored in the directory

    ~/var/ctps/$testlabel/reports/$perl

A comparison can be created using

    ./utils/cmp_ct_history.pl -config smoke_....yml

This list is usually too large. You can add to the commandline up to
four "-min" to minimize the list.

Known problems
--------------

* Interactive distributions

  Some distributions ask interactive questions while configuration.
  Usually this can be solved by creating a CPAN.pm distropref entry
  for such distribution. Existing sample distroprefs exist here:

    http://github.com/eserte/srezic-cpan-distroprefs

  or 

    http://github.com/andk/cpanpm
  
  Unfortunately distroprefs are usually not universally applicable,
  and often depend on a particular system configuration (OS, installed
  package set).

* Hanging tests

  There's no fix yet for this. Hanging tests are not automatically
  recognized, so you have to kill it yourself, and probably protect
  the smoker by disabling such distribution (e.g. using distroprefs).

* Tests using fixed named resources

  Some tests use e.g. a fixed port for daemons or a fixed file path
  and cause unnecessary failures.
Something went wrong with that request. Please try again.