Some of Transilience actions, like apt or systemd, need a containerized system to be tested.
To run the tests, I built a simple and very fast system of ephemeral containers based on systemd-nspawn and btrfs snapshots, based on my work on nspawn-runner.
apt install systemd-container btrfs-progs eatmydata debootstrap
The test_chroots/ directory needs to be on a btrfs filesystem. If you are
using another filesystem, you can create one of about 1.5Gb, and mount it on
test_chroots.
You can even create one on a file:
$ fallocate -l 1.5G testfile
$ /usr/sbin/mkfs.btrfs testfile
$ sudo mount -o loop testfile test_chroots/
Once you have test_chroots/ on btrfs, you can use make-test-chroot to
create the master chroot for the container:
sudo ./make-test-chroot buster
Note: this uses eatmydata to speed up debootstrap: you'll need the packages
btrfs-progs and eatmydata installed, or you can remove the 'eatmydata' call
from make-test-chroot.
To start and stop the nspawn containers, the unit tests need to be run as root
with sudo. The test suite drops root as soon as possible (see
unittest.ProcessPrivs) and changes to $SUDO_UID and $SUDO_GID.
They will temporarily regain root for as short as possible to start the
container, stop it, and open a Mitogen connection to it. Look for privs.root
in the code to see where this happens.
To run the test, once test_chroots is set up, use sudo
nose2:
sudo nose2-3