#!/bin/sh
# run upstream system integration tests
# Author: Martin Pitt <martin.pitt@ubuntu.com>
set -e

DPKGARCH=$(dpkg --print-architecture)

# passes on baremetal, fails in nested qemu
# https://github.com/systemd/systemd/issues/11612
if [ $(dpkg --print-architecture) = "ppc64el" ]; then
BLACKLIST="$BLACKLIST
TEST-24-UNIT-TESTS
"
fi

# quiesce Makefile.guess; not really relevant as systemd/nspawn run from
# installed packages
export BUILD_DIR=.

# modify the image build scripts to install systemd from the debs instead of
# from a "make/ninja install" as we don't have a built tree here. Also call
# systemd-nspawn from the system.
sed -i '/DESTDIR.* install/ s%^.*$%    for p in `grep ^Package: '`pwd`'/debian/control | cut -f2 -d\\  |grep -Ev -- "-(udeb|dev)"`; do (cd /tmp; apt-get download $p \&\& dpkg-deb --fsys-tarfile ${p}[._]*deb | tar -C $initdir --dereference -x); done%; s_[^" ]*/systemd-nspawn_systemd-nspawn_g; s/\(_ninja_bin=\).*/\1dummy-ninja/' test/test-functions

# adjust path
sed -i 's_/usr/libexec/selinux/hll/pp_/usr/lib/selinux/hll/pp_' test/TEST-06-SELINUX/test.sh

FAILED=""

# Because this test is used both by upstream and by Debian, we use different blacklist filenames.
# For more details see https://salsa.debian.org/systemd-team/systemd/merge_requests/52
if [ -n "$TEST_UPSTREAM" ]; then
    BLACKLIST="blacklist-ubuntu-ci"
else
    BLACKLIST="blacklist-upstream-ci"
fi

for t in test/TEST*; do
    testname=$(basename $t)
    if [ -f "$t/$BLACKLIST" ]; then
        echo "========== BLACKLISTED: $testname =========="
        continue
    elif [ -f "$t/$BLACKLIST-$DPKGARCH" ]; then
        echo "========== BLACKLISTED (for arch $DPKGARCH): $testname =========="
        continue
    fi
    echo "========== START: $testname =========="
    rm -rf /var/tmp/systemd-test.*
    if ! make -C $t clean setup run; then
        for j in /var/tmp/systemd-test.*/journal/*; do
            [ -e "$j" ] || continue
            # keep the entire journal in artifacts, in case one needs the debug messages
            cp -r "$j" "$AUTOPKGTEST_ARTIFACTS/${testname}-$(basename $j)"
            echo "---- $j ----"
            journalctl --priority=warning --directory=$j
        done
        FAILED="$FAILED $testname"
    fi
    echo
    # always cleanup each test run
    make -C $t clean-again
    echo "========== END: $testname =========="
done

if [ -n "$FAILED" ]; then
        echo FAILED TESTS: "$FAILED"
        exit 1
fi
