Pifpaf is a suite of fixtures and a command-line tool that allows to start and stop daemons for a quick throw-away usage. This is typically useful when needing these daemons to run integration testing. It originaly evolved from its precussor overtest.
Pifpaf currently supports:
To use Pifpaf, simply call the pifpaf run $daemon <command> program that you need. It will setup the temporary environment and export a few environment variable for you to access it:
$ pifpaf run postgresql psql template1 Expanded display is used automatically. Line style is unicode. SET psql (9.4.5) Type "help" for help. template1=# \l List of databases Name Owner Encoding Collate Ctype Access privileges postgres jd UTF8 en_US.UTF-8 en_US.UTF-8 template0 jd UTF8 en_US.UTF-8 en_US.UTF-8 =c/jd jd=CTc/jd template1 jd UTF8 en_US.UTF-8 en_US.UTF-8 =c/jd jd=CTc/jd (3 rows) template1=# \q $
You can also run it with no command line provided:
$ eval `pifpaf run memcached` $ env | grep PIFPAF PIFPAF_PID=13387 PIFPAF_DAEMON=memcached PIFPAF_URL=memcached://localhost:11212 PIFPAF_MEMCACHED_URL=memcached://localhost:11212 $ pifpaf_stop
Killing the daemon whose PID is contained in $PIFPAF_PID will stop the launched daemon and clean the test environment. You can kill it yourself or use the defined function pifpaf_stop.
Pifpaf exports a few environment variable:
Pifpaf provides the ability to change the prefix of its environment variable, allowing you to nest several Pifpaf instances and therefore running several daemons at once:
$ pifpaf --env-prefix STORAGE run memcached -- pifpaf --env-prefix INDEX run postgresql $SHELL $ env | grep STORAGE STORAGE_DATA=/var/folders/7k/pwdhb_mj2cv4zyr0kyrlzjx40000gq/T/tmpVreJ0J STORAGE_MEMCACHED_PORT=11212 STORAGE_URL=memcached://localhost:11212 STORAGE_PID=71019 STORAGE_DAEMON=memcached STORAGE_MEMCACHED_URL=memcached://localhost:11212 $ env | grep INDEX INDEX_DATA=/var/folders/7k/pwdhb_mj2cv4zyr0kyrlzjx40000gq/T/tmphAG7tf INDEX_URL=postgresql://localhost/postgres?host=/var/folders/7k/pwdhb_mj2cv4zyr0kyrlzjx40000gq/T/tmphAG7tf&port=9824 INDEX_PID=71021 INDEX_DAEMON=postgresql INDEX_POSTGRESQL_URL=postgresql://localhost/postgres?host=/var/folders/7k/pwdhb_mj2cv4zyr0kyrlzjx40000gq/T/tmphAG7tf&port=9824 $ echo $PIFPAF_URLS memcached://localhost:11212;postgresql://localhost/postgres?host=/var/folders/7k/pwdhb_mj2cv4zyr0kyrlzjx40000gq/T/tmpQ2BWFH&port=9824
The PIFPAF_URLS environment variable will contain the list of all URLs detected and set-up by Pifpaf. You can override this variable name with the --global-urls-variable option.
Pifpaf will start the asked daemon using the current Posix user. The data file of the daemon will be placed in a temporary directory. The system-wide configured daemon that might exists is not touched at all.
Pifpaf expected to find daemon binaries on your system (like mysql, mysqld, pg_config, pg_ctl, rabbitmq-server, etc).
When the Python fixture is cleaned or when Pifpaf is terminated, the daemon is stopped and the temporary directory removed.