From b0a743617b5c314a005c4645d95a7157c7337328 Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Sun, 19 Feb 2017 17:18:06 +0100 Subject: Add simple suite of system tests based on BATS --- test.bats | 39 ++++++++++++++++++++ test/data/date-r-output.txt | 1 + test/data/emerge-deep-update-pretend-output.txt | 14 ++++++++ test/data/expected-porticron-v-output-fresh.txt | 10 ++++++ .../data/expected-porticron-v-output-unchanged.txt | 9 +++++ test/data/expected-sendmail-input.txt | 41 ++++++++++++++++++++++ test/mocks/emerge | 14 ++++++++ 7 files changed, 128 insertions(+) create mode 100755 test.bats create mode 100644 test/data/date-r-output.txt create mode 100644 test/data/emerge-deep-update-pretend-output.txt create mode 100644 test/data/expected-porticron-v-output-fresh.txt create mode 100644 test/data/expected-porticron-v-output-unchanged.txt create mode 100644 test/data/expected-sendmail-input.txt create mode 100755 test/mocks/emerge diff --git a/test.bats b/test.bats new file mode 100755 index 0000000..240dddc --- /dev/null +++ b/test.bats @@ -0,0 +1,39 @@ +#! /usr/bin/env bats +# Copyright (C) 2017 Sebastian Pipping +# Licensed under the 3-Clause BSD license + +_clear_state() { + rm -f /var/tmp/porticron.UPGRADE_MSG + rm -f /var/tmp/porticron.DIFF_MSG +} + + +setup() { _clear_state ; } + +teardown() { _clear_state ; } + + +PORTICRON() { + DATE="$(cat test/data/date-r-output.txt)" \ + EMERGE=test/mocks/emerge \ + GLSA_CHECK=/bin/true \ + SENDMAIL=${SENDMAIL:-/bin/true} \ + bin/porticron \ + -c /dev/null \ + "$@" +} + + +@test "Test emerge output goes into e-mail" { + output="$(SENDMAIL=cat PORTICRON)" + diff -u <(echo "${output}") test/data/expected-sendmail-input.txt +} + + +@test "Test no mail on matching hashes" { + output="$(PORTICRON -v 2>&1)" + diff -u <(echo "${output}") test/data/expected-porticron-v-output-fresh.txt + + output="$(SENDMAIL=/bin/false PORTICRON -v 2>&1)" + diff -u <(echo "${output}") test/data/expected-porticron-v-output-unchanged.txt +} diff --git a/test/data/date-r-output.txt b/test/data/date-r-output.txt new file mode 100644 index 0000000..e4357ff --- /dev/null +++ b/test/data/date-r-output.txt @@ -0,0 +1 @@ +Sun, 19 Feb 2017 16:50:56 +0100 diff --git a/test/data/emerge-deep-update-pretend-output.txt b/test/data/emerge-deep-update-pretend-output.txt new file mode 100644 index 0000000..ceef1fd --- /dev/null +++ b/test/data/emerge-deep-update-pretend-output.txt @@ -0,0 +1,14 @@ +[ebuild U ] app-text/libpaper-1.1.24_p5 [1.1.24-r2] ABI_X86="(64) -32 (-x32)" +[ebuild U ] app-text/qpdf-6.0.0-r2 [6.0.0-r1] USE="static-libs -doc -examples -perl {-test}" +[ebuild NS ] sys-kernel/vanilla-sources-4.9.10 [4.6.4, 4.9.9] USE="-build -symlink" +[ebuild U ] dev-python/sip-4.19.1 [4.19] USE="-debug -doc" PYTHON_TARGETS="python2_7 python3_4 python3_5" +[ebuild U ] net-misc/stunnel-5.40 [5.39] USE="ssl tcpd -ipv6 -libressl (-selinux) -stunnel3" +[ebuild U ] net-print/cups-2.2.2-r3 [2.2.2-r2] USE="X acl dbus pam python ssl static-libs threads -debug -java -kerberos -lprng-compat (-selinux) -systemd -usb -xinetd -zeroconf" ABI_X86="32 (64) (-x32)" LINGUAS="-ca -cs -de -es -fr -it -ja -ru" PYTHON_TARGETS="python2_7" +[ebuild U ] x11-drivers/xf86-video-intel-2.99.917_p20170216 [2.99.917_p20161206] USE="dri sna udev uxa -debug -dri3 -xvmc" +[ebuild U ] net-print/cups-filters-1.13.4 [1.13.3-r2] USE="dbus foomatic jpeg pdf png postscript static-libs tiff -ldap -perl -zeroconf" +[ebuild U ] sys-fs/eudev-3.2.1-r1 [3.2.1] USE="hwdb introspection kmod static-libs -rule-generator (-selinux) {-test}" ABI_X86="32 (64) (-x32)" +[ebuild U ] sys-fs/lvm2-2.02.166-r2 [2.02.166-r1] USE="readline static-libs thin udev -clvm -cman -corosync -device-mapper-only -lvm1 -lvm2create_initrd -openais -sanlock (-selinux) -static -systemd" + + * IMPORTANT: 7 news items need reading for repository 'gentoo'. + * Use eselect news read to view new items. + diff --git a/test/data/expected-porticron-v-output-fresh.txt b/test/data/expected-porticron-v-output-fresh.txt new file mode 100644 index 0000000..40e090f --- /dev/null +++ b/test/data/expected-porticron-v-output-fresh.txt @@ -0,0 +1,10 @@ +using PORTICRON_CONF=/dev/null, NOMAIL=0, VERBOSE=1 +running SYNC_CMD: test/mocks/emerge --sync +running SYNC_OVERLAY_CMD: /bin/true +running GLSA_AFFECTED: /bin/true --test --nocolor --verbose affected +running GLSA_UPGRADES: /bin/true --nocolor --pretend affected +running UPGRADE_CMD: test/mocks/emerge --deep --update --quiet --pretend world +no previous hash file /var/tmp/porticron.UPGRADE_MSG exists +creating hash file /var/tmp/porticron.UPGRADE_MSG +no previous hash file /var/tmp/porticron.DIFF_MSG exists +creating hash file /var/tmp/porticron.DIFF_MSG diff --git a/test/data/expected-porticron-v-output-unchanged.txt b/test/data/expected-porticron-v-output-unchanged.txt new file mode 100644 index 0000000..6e291f6 --- /dev/null +++ b/test/data/expected-porticron-v-output-unchanged.txt @@ -0,0 +1,9 @@ +using PORTICRON_CONF=/dev/null, NOMAIL=0, VERBOSE=1 +running SYNC_CMD: test/mocks/emerge --sync +running SYNC_OVERLAY_CMD: /bin/true +running GLSA_AFFECTED: /bin/true --test --nocolor --verbose affected +running GLSA_UPGRADES: /bin/true --nocolor --pretend affected +running UPGRADE_CMD: test/mocks/emerge --deep --update --quiet --pretend world +hash matched for hash file /var/tmp/porticron.UPGRADE_MSG +hash matched for hash file /var/tmp/porticron.DIFF_MSG +no new upgrades found, exiting. diff --git a/test/data/expected-sendmail-input.txt b/test/data/expected-sendmail-input.txt new file mode 100644 index 0000000..0fac911 --- /dev/null +++ b/test/data/expected-sendmail-input.txt @@ -0,0 +1,41 @@ +To: root +From: root@sevendust +Subject: Gentoo package updates on sevendust [ ] +Date: Sun, 19 Feb 2017 16:50:56 +0100 + +porticron report [Sun, 19 Feb 2017 16:50:56 +0100] +======================================================================== + +porticron has detected that some packages need upgrading: + + [ebuild U ] app-text/libpaper-1.1.24_p5 [1.1.24-r2] ABI_X86="(64) -32 (-x32)" + [ebuild U ] app-text/qpdf-6.0.0-r2 [6.0.0-r1] USE="static-libs -doc -examples -perl {-test}" + [ebuild NS ] sys-kernel/vanilla-sources-4.9.10 [4.6.4, 4.9.9] USE="-build -symlink" + [ebuild U ] dev-python/sip-4.19.1 [4.19] USE="-debug -doc" PYTHON_TARGETS="python2_7 python3_4 python3_5" + [ebuild U ] net-misc/stunnel-5.40 [5.39] USE="ssl tcpd -ipv6 -libressl (-selinux) -stunnel3" + [ebuild U ] net-print/cups-2.2.2-r3 [2.2.2-r2] USE="X acl dbus pam python ssl static-libs threads -debug -java -kerberos -lprng-compat (-selinux) -systemd -usb -xinetd -zeroconf" ABI_X86="32 (64) (-x32)" LINGUAS="-ca -cs -de -es -fr -it -ja -ru" PYTHON_TARGETS="python2_7" + [ebuild U ] x11-drivers/xf86-video-intel-2.99.917_p20170216 [2.99.917_p20161206] USE="dri sna udev uxa -debug -dri3 -xvmc" + [ebuild U ] net-print/cups-filters-1.13.4 [1.13.3-r2] USE="dbus foomatic jpeg pdf png postscript static-libs tiff -ldap -perl -zeroconf" + [ebuild U ] sys-fs/eudev-3.2.1-r1 [3.2.1] USE="hwdb introspection kmod static-libs -rule-generator (-selinux) {-test}" ABI_X86="32 (64) (-x32)" + [ebuild U ] sys-fs/lvm2-2.02.166-r2 [2.02.166-r1] USE="readline static-libs thin udev -clvm -cman -corosync -device-mapper-only -lvm1 -lvm2create_initrd -openais -sanlock (-selinux) -static -systemd" + + * IMPORTANT: 7 news items need reading for repository 'gentoo'. + * Use eselect news read to view new items. + +======================================================================== + +You can perform the upgrade by issuing the command: + + emerge --deep --update world + +as root on sevendust + +It is recommended that you pretend the upgrade first to confirm that +the actions that would be taken are reasonable. The upgrade may be +pretended by issuing the command: + + emerge --deep --update --pretend world + + +-- +porticron diff --git a/test/mocks/emerge b/test/mocks/emerge new file mode 100755 index 0000000..ef1fc1b --- /dev/null +++ b/test/mocks/emerge @@ -0,0 +1,14 @@ +#! /bin/bash +# Copyright (C) 2017 Sebastian Pipping +# Licensed under the 3-Clause BSD license + +set -e + +if [[ "$*" == '--sync' ]]; then + : +elif [[ "$*" == '--deep --update --quiet --pretend world' ]]; then + cat test/data/emerge-deep-update-pretend-output.txt +else + echo "ERROR: Unsupported invocation: $0 $*" >&2 + exit 1 +fi -- cgit v1.2.3-65-gdbad